为什么随机monad的函数需要额外的参数?

时间:2012-07-26 16:53:10

标签: haskell monads

在monad的tutorial中,在更复杂的副作用:随机数部分,作者提供了随机函数的签名,如下所示:

random :: StdGen -> (a,StdGen)

然后接着说:

  

因此,概念上是一个随机函数a → b的函数可以   写成一个功能
  a -> StdGen -> (b,StdGen)
其中StdGen   种子的类型。

签名开头的额外a来自哪里?为什么不仅仅是StdGen -> (a, StdGen)之类的那种???

由于

2 个答案:

答案 0 :(得分:3)

我认为这意味着aa -> b中的参数,随机bStdGen -> (b, StdGen)StdGen -> (a, StdGen)只会随机提供a

答案 1 :(得分:0)

它不一样,因为这是他描述的两个不同的功能。 :)

第一个采用StdGen并返回该随机生成器的结果以及新状态。

然后他说,“所以,如果我们有一个随机变异a的函数(进入b),你就会......”然后是第二个签名。