我正在編寫一個報告,其中我使用STM包實現了一個併發多核分支和綁定算法,並且出現了一個我已經提出的問題反對。使用Par monad與STM和確定性IO
使用STM的實現顯然是在IO monad中,因爲它使用STM的'原子'和Concurrent的'forkIO',但它是確定性的。儘管使用了共享內存變量,但函數的最終結果對於相同的輸入始終是相同的。
我的問題是,除了'unsafePerformIO'之外,我還有什麼選擇擺脫IO呢?我甚至應該嘗試將它從IO monad中解放出來,因爲使用多個內核可能會影響其他併發代碼,這些代碼不具有確定性的相同保證。我已經聽說過Par monad包(雖然沒有用過),但是STM存在於IO monad中,爲了獲得線程安全的全局變量,我唯一的選擇是STM是MVars(我知道),這也存在於IO monad中。
在'Par'單子線程安全的全局變量['IVar's](http://hackage.haskell.org/packages/archive/monad-par /0.1.0.1/doc/html/Control-Monad-Par.html#t:IVar)。 –