我经常在 Haskell 代码中找到这种模式:
options :: MVar OptionRecord
options = unsafePerformIO $ newEmptyMVar
...
doSomething :: Foo -> Bar
doSomething = unsafePerformIO $ do
opt <- readMVar options
doSomething' where ...
基本上,一个人有一个选项记录或类似的东西,最初是在程序开始时设置的。由于程序员比较懒惰,他不想options
在整个程序中携带记录。他定义了一个MVar
来保持它——通过一个丑陋的使用来定义unsafePerformIO
. 程序员确保状态只设置一次,并且在任何操作发生之前。现在程序的每个部分都必须unsafePerformIO
再次使用,只是为了提取选项。
在我看来,这样的变量被认为是务实的纯粹(不要打败我)。是否有一个库可以抽象出这个概念并确保变量只设置一次,即在初始化之前不进行任何调用并且不必编写unsafeFireZeMissilesAndMakeYourCodeUglyAnd
DisgustingBecauseOfThisLongFunctionName