小编use*_*438的帖子

Haskell - 在Rand monad中计算出计算结果

我想用Haskell评估随机计算,并使用Control.Monad.Random库超时.以下工作正常:

ghci> import System.Timeout
ghci> import Control.Monad.Random
ghci> timeout 1000 . evalRandIO $ getRandomR (True, False)
Just True
Run Code Online (Sandbox Code Playgroud)

但是,如果我们有一个Rand StdGen a永不终止的类型计算(即评估到底部),这种方法似乎不起作用.例如:

ghci> let f = f :: Rand StdGen Bool
ghci> timeout 1000 $ evalRandIO f
Just
Run Code Online (Sandbox Code Playgroud)

在这里GHCI打印"Just",然后无限期地挂起试图评估f.能否了解Haskell运行时的人比我更能解释为什么会这样,以及如何解决它?我的猜测是表达式evalRandIO f被评估为WHNF,因此timeout 10认为计算将终止,但我真的不知道.

random monads haskell timeout lazy-evaluation

6
推荐指数
1
解决办法
115
查看次数

标签 统计

haskell ×1

lazy-evaluation ×1

monads ×1

random ×1

timeout ×1