为什么随机monad函数需要一个额外的参数?
问题描述:
在tutorial的单子,在部分一个更复杂的副作用:随机数,笔者提供的随机函数的签名如下所示:为什么随机monad函数需要一个额外的参数?
random :: StdGen -> (a,StdGen)
但随后接着说:
这样一个功能,在概念上是随机函数
a → b
可以 写成函数a -> StdGen -> (b,StdGen)
其中StdGen
是种子的 类型。
签名开头的额外a
是从哪里来的?为什么这种类型不像以前那样简单StdGen -> (a, StdGen)
???
感谢
答
这不一样,因为这是他描述的两种不同的功能。 :)
第一个需要StdGen
并返回随机生成器的结果以及新状态。
然后他说:“所以如果我们有一个随机变化a
的函数(到b
),你会得到......”然后是第二个签名。
答
我想这意味着a
是a -> b
参数和随机b
是StdGen -> (b, StdGen)
。 StdGen -> (a, StdGen)
只会给你一个随机a
。
这些是两个不同的功能。一个需要'StdGen'并返回随机生成器的结果以及新的状态。然后他说,“如果我们有一个随机变异a'的函数,你会得到......”,然后是第二个签名。 – GManNickG 2012-07-26 17:01:55
哦,好吧!随机变异的解释清楚地表明了这一点。谢谢。 – drozzy 2012-07-26 17:12:26
@GManNickG你可以把这个答案,我可以接受吗? – drozzy 2012-07-31 12:35:36