Haskell通常被引用为纯函数式语言的典范。鉴于存在System.IO.Unsafe.unsafePerformIO,这该如何证明? 编辑:我原以为“纯函数式”意味着不可能将不纯的代码引入程序的函数式部分。
为了熟悉 unsafePerformIO(如何使用以及何时使用它),我已经实现了一个用于生成唯一值的模块。 这是我所拥有的:module Unique (newUnique) where import Data.IORef import System.IO.Unsafe (unsafePe...
我在 Haskell 图书馆的受限区域里徘徊,发现了这两个邪恶的咒语:{- System.IO.Unsafe -} unsafeDupablePerformIO :: IO a -> a unsafeDupablePerformIO (IO m) = case runRW# m of ...
我经常在 Haskell 代码中看到这种模式:options :: MVar OptionRecord options = unsafePerformIO $ newEmptyMVar ... doSomething :: Foo -> Bar doSomething = unsaf...
我正在创建一个FFI模块,连接到一个在C中的库,该库要求调用一个一次性、不可重入的函数,在任何其他操作之前。这个调用是幂等的,但具有状态,因此我可以在每个Haskell调用中都调用它。但是这样做很慢,并且由于不可重入性可能会导致冲突。 那么现在是使用unsafePerformIO的正确时间吗?...
什么是最好的方法来做到这一点?使用unsafePerformIO?模板Haskell?还是其他什么?我从未使用过其中任何一个,所以不了解它们的详细信息。 请注意,每次运行程序时都将编译该程序,因此在编译时或运行时生成字符串并无影响。我还需要在代码的许多地方使用此字符串,因此我不能按照“正常”...
我在Haskell中编写了一个函数,它接受一些参数,如Word32、String(忽略柯里化),并输出IO Word32。现在,这是一个真正意义上的函数:对于相同的输入,输出将始终相同。没有副作用。该函数返回IO Word32而不是Word32的原因是,在循环中,该函数更新许多32位线性反馈移...
我最近一直在阅读关于unsafePerformIO的内容,想问你一些问题。我知道一个真正的语言应该能够与外部环境交互,所以unsafePerformIO有一定合理性。 然而,据我所知,除了检查代码以寻找对unsafePerformIO的调用(文档可能省略提及),我不知道是否有任何快速的方法可...