Haskell随机生成器......如何使用更容易?

Ill*_*iax 7 random haskell

我遇到了与Haskell Random generator相关的问题.在大学里,我必须一直处理Java,所以现在我已经腐败了.我正在Haskell开发一款游戏,现在我面临的是"有机会做某事",这种机会需要像Int -> Bool.在Java中,我会做到的

new Random().nextInt(100) 
Run Code Online (Sandbox Code Playgroud)

问题解决了!在Haskell中,我必须在monad IO中选择一些东西或者使用种子.这些都不是我想要的.我真的不想在我的纯模型中使用IO monad,种子很难用,因为我每次都需要记住我的新种子......

有没有简单的像Java的随机?

Dan*_*ner 12

信不信由你,你必须在Haskell中使用不同于Java的方法.有几个包可以帮助你,但你必须有一个不同的态度在你的头脑中成功使用它们.以下是一些指示:

Hackage的软件包列表中搜索"random"这个词会出现更多,更具体的软件包,以满足更具体的需求.

  • 你没有"必须".您可以像在Java中一样使用IO. (2认同)
  • @delnan,我同意它的丑陋和毫无意义(与Java编程相同),但是看不出`ST`是如何必要的.`IO`可以做一切`ST`可以做更多. (2认同)
  • @augustss:啊,但是封装效果不是"IO"不能做的事情!相反,它是关于"IO"不能*做什么的.不是以非常精确的方式做事比单纯做任何喜欢的事情更困难,但往往更有效. (2认同)

Car*_*ten 7

对不起,但你将不得不忍受.如何在纯函数式语言中使用函数,在每次调用时为您提供不同的值?答案是:它不能 - 只能在IO-Monad或类似于状态monad的东西,你可以传递你的种子(并且每次没有相同的输入)可以存在这样的事情.

您也可以看一下这个问题" 功能编程中如何存在时间函数? ",因为它与您的方向相同.

  • @Carsten,当然它要好得多,因为它不允许任意IO. (5认同)
  • 我拒绝投票给你,因为你没有真正给出解决方案.显而易见的解决方案是使用MonadRandom (3认同)