在tutorial的單子,在部分一個更復雜的副作用:隨機數,筆者提供的隨機函數的簽名如下所示:爲什麼隨機monad函數需要一個額外的參數?
random :: StdGen -> (a,StdGen)
但隨後接着說:
這樣一個功能,在概念上是隨機函數
a → b
可以 寫成函數
a -> StdGen -> (b,StdGen)
其中StdGen
是種子的 類型。
簽名開頭的額外a
是從哪裏來的?爲什麼這種類型不像以前那樣簡單StdGen -> (a, StdGen)
???
感謝
這些是兩個不同的功能。一個需要'StdGen'並返回隨機生成器的結果以及新的狀態。然後他說,「如果我們有一個隨機變異a'的函數,你會得到......」,然後是第二個簽名。 – GManNickG 2012-07-26 17:01:55
哦,好吧!隨機變異的解釋清楚地表明瞭這一點。謝謝。 – drozzy 2012-07-26 17:12:26
@GManNickG你可以把這個答案,我可以接受嗎? – drozzy 2012-07-31 12:35:36