0

在关于 monads的教程中,在A more complex side effect: Random Numbers一节中,作者提供了 random 函数的签名,如下所示:

random :: StdGen -> (a,StdGen)

但接着说:

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

签名开头的多余a部分来自哪里?为什么那种类型StdGen -> (a, StdGen)不像以前那么简单???

谢谢

4

2 回答 2

3

我认为这意味着a是参数,a -> b随机bStdGen -> (b, StdGen)StdGen -> (a, StdGen)只会给你一个随机的a.

于 2012-07-26T17:01:30.633 回答
0

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

第一个接受 aStdGen并返回该随机生成器的结果以及新状态。

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

于 2012-07-31T16:44:52.263 回答