unsafe-perform-io

    7热度

    2回答

    最近我一直在阅读约unsafePerformIO,我想问你一些问题。我确定一个真正的语言应该能够与外部环境进行交互,因此unsafePerformIO有些合理。 然而,据我所知,我不知道有没有快速的方法来知道,如果没有检查代码来寻找unsafePerformIO的调用,看起来纯粹的(从类型判断的)接口/库是否真的很纯(文件可以省略提及它)。 我知道它应该只在确定参照透明度得到保证时才使用,但我想知

    0热度

    2回答

    下面是一个示例程序的源: 当我从ghci中运行它都PRINTJOB和printJob2运行正常,写十行到一个文本文件中。 但是,当使用-threaded标志编译时,程序只写入一行。 我有ArchLinux的 以下是编译命令GHC 7.0.3: ghc -threaded -Wall -O2 -rtsopts -with-rtsopts=-N -o testmvar testmvar.hs 什么

    5热度

    2回答

    我开始在项目定义一个细胞自动机作为本地转移函数工作: newtype Cellular g a = Cellular { delta :: (g -> a) -> a } 每当g是Monoid,可以通过申请前将重心转移到定义一个全局转变当地的过渡。这给了我们以下step功能: step :: Monoid g => Cellular g a -> (g -> a) -> (g -> a) s

    4热度

    2回答

    我想获得一个Haskell函数来显示被添加调用“putStrLn”时,它被应用于: isPrime2 1 = False isPrime2 n = do putStrLn n null (filter (==0) (map (mod n) (filter isPrime2 [2..(floor (sqrt(fromIntegral (n-1))))]))) (最终目标是

    4热度

    3回答

    我发现了一些示例代码,并改变它一点 counter = unsafePerform $ newIORef 0 newNode _ = unsafePerformIO $ do i <- readIORef counter writeIORef counter (i+1) return i 它返回1然后2然后3然后3等每次它的运

    11热度

    2回答

    我正在创建一个FFI模块到C库中,它希望在其他任何事情之前调用一次性的非重入函数。这个调用是幂等的,但是有状态的,所以我可以在每个Haskell调用中调用它。但速度很慢,由于非重入可能会导致冲突。 那么这是使用unsafePerformIO的正确时机吗?我可以将Bool包装在不安全的IORef或MVar中,通过忽略后续调用(全局隐藏的IORef状态为False的调用)来使这些初始化调用为幂等。 如

    7热度

    3回答

    我在haskell中编写了一个函数,它需要一些参数,如Word32,String(忽略压缩)和输出IO Word32。现在,这是一个函数真正意义上的:对于相同的输入,输出始终是相同的。没有副作用。函数返回IO Word32而不是Word32的原因是函数为了计算最终的Word32输出而在一个循环中多次更新多个32位线性反馈移位寄存器(lfsr)和其他寄存器。 我的问题是:由于此功能实际上有没有副作用

    0热度

    2回答

    我在Haskell中练习一些练习,探索一些我不熟悉的地方,但我一直无法理解我在混合System.Timeout和System.IO.Unsafe时得到的行为。 我懒读一个流,getContents,用纯函数过滤它,并输出结果。一个典型的过滤器会是这样: import Data.List(break) import System.Timeout(timeout) import System.IO