【发布时间】:2015-05-07 10:16:29
【问题描述】:
我想提供一个函数,用不同的随机数替换字符串中每次出现的#。在非纯语言中,这是微不足道的。但是,应该如何用纯语言设计呢?我不想使用 unsafePerformIO,因为它看起来像是一个 hack 而不是一个合适的设计。
这个函数是否需要一个随机生成器作为它的参数之一?如果是这样,该生成器是否必须通过整个调用堆栈?还有其他可能的方法吗?我应该在这里使用State monad 吗?我将不胜感激一个展示可行方法的玩具示例...
【问题讨论】:
-
因为你的第一个想法是跳转到一个monad,你会喜欢MonadRandom。
-
“那个生成器必须通过整个调用堆栈”——这是一件好事。我想知道哪些函数是不纯的。使用随机性的函数不是纯粹的; Haskell 通过显式传递一个随机数生成器来处理这个问题。
标签: haskell functional-programming monads purely-functional