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