【发布时间】:2011-07-18 22:16:37
【问题描述】:
我想用来自System.Random.MWC.Monad 的 Rand monad 生成无限的数字流。如果这个 monad 有一个 MonadFix 实例,或者像这样的实例:
instance (PrimMonad m) => MonadFix m where
...
然后可以写:
runWithSystemRandom (mfix (\ xs -> uniform >>= \x -> return (x:xs)))
虽然没有。
我正在经历MonadFix docs,但我没有看到实现此实例的明显方法。
【问题讨论】:
-
你为什么不用
mapM (repeat uniform)? -
我认为你的意思是
sequence (repeat uniform)。好吧,问题是像runWithSystemRandom (asRandST $ sequence (repeat uniform))这样的代码在输出中并不懒惰,即在完成计算之前永远不会产生单个数字,这是无限的。 -
是的,你是对的。而这确实是个问题。
标签: haskell random monads monadfix