gpt4 book ai didi

haskell - 一种避免常见使用 unsafePerformIO 的方法

转载 作者:行者123 更新时间:2023-12-03 14:35:52 26 4
gpt4 key购买 nike

我经常在 Haskell 代码中找到这种模式:

options :: MVar OptionRecord
options = unsafePerformIO $ newEmptyMVar

...

doSomething :: Foo -> Bar
doSomething = unsafePerformIO $ do
opt <- readMVar options
doSomething' where ...

基本上,一个人有一个选项记录或类似的东西,最初是在程序开始时设置的。由于程序员很懒,他不想携带 options全程记录节目。他定义了 MVar保留它 - 由对 unsafePerformIO 的丑陋使用定义.程序员确保状态只设置一次,并且在任何操作发生之前。现在程序的每个部分都必须使用 unsafePerformIO再次,只是为了提取选项。

在我看来,这样的变量被认为是务实的纯粹(不要打败我)。是否有一个库可以抽象出这个概念并确保变量只设置一次,即在初始化之前不进行任何调用,并且不必编写 unsafeFireZeMissilesAndMakeYourCodeUglyAnd DisgustingBecauseOfThisLongFunctionName

最佳答案

Those who would trade essential referential transparency for a little temporary convenience deserve neither purity nor convenience.



这是一个坏主意。您在其中找到的代码是错误的代码。*

没有办法安全地完全包装这个模式,因为它不是一个安全的模式。不要在你的代码中这样做。不要寻找安全的方法来执行此操作。没有一种安全的方法可以做到这一点。把 unsafePerformIO慢慢地倒在地板上,然后远离控制台……

*人们确实使用顶级 MVar 是有正当理由的,但这些原因在很大程度上与绑定(bind)到外部代码有关,或者与其他一些替代方案非常困惑的事情有关。然而,据我所知,在这些情况下,无法从 unsafePerformIO 后面访问顶级 MVar。 .

关于haskell - 一种避免常见使用 unsafePerformIO 的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6076129/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com