在monad的tutorial中,在更复杂的副作用:随机数部分,作者提供了随机函数的签名,如下所示:
random :: StdGen -> (a,StdGen)
然后接着说:
因此,概念上是一个随机函数
a → b
的函数可以 写成一个功能
a -> StdGen -> (b,StdGen)
其中StdGen
种子的类型。
签名开头的额外a
来自哪里?为什么不仅仅是StdGen -> (a, StdGen)
之类的那种???
由于
答案 0 :(得分:3)
我认为这意味着a
是a -> b
中的参数,随机b
是StdGen -> (b, StdGen)
。 StdGen -> (a, StdGen)
只会随机提供a
。
答案 1 :(得分:0)
它不一样,因为这是他描述的两个不同的功能。 :)
第一个采用StdGen
并返回该随机生成器的结果以及新状态。
然后他说,“所以,如果我们有一个随机变异a
的函数(进入b
),你就会......”然后是第二个签名。