Haskell随机数生成

zoo*_*zoo 5 random monads haskell

在Haskell中处理随机数生成的最佳方法是什么(或者什么是权衡)?

我还没有真正看到权威的答案.

考虑:最小化对其他纯功能的影响,如何/何时播种,性能,线程安全

fuz*_*fuz 3

恕我直言,最好的想法是对生成器进行严格的状态记录。然后您可以使用普通的do-Syntax 来使用生成器。播种仅完成一次 - 在主程序开始时(或在每个线程开始时)。您可以通过使用split从一个随机生成器生成两个随机生成器的操作来避免 IO。(当然不同)。

由于状态仍然是纯粹的,因此可以保证线程安全。此外,您始终可以通过为函数提供随机生成器来转义状态。例如,这在自动单元测试的情况下很有用。