我學習狀態單子和維基無法理解一個例子(http://en.wikibooks.org/wiki/Haskell/Understanding_monads/State)Stucked在國家單子在Haskell維基的例子
rollDie :: GeneratorState Int
rollDie = do generator <- get
let (value, newGenerator) = randomR (1,6) generator
put newGenerator
return value
的put
有定義
put newState = State $ \_ -> ((), newState)
看來put
只需創建一個新的State
,這條線的真實用途是什麼?如果想要使用的值可能應該使用<-
來提取,如果想再次使用state
應該使用get
。如果刪除這一行(或者我錯過了什麼?),這沒什麼區別,那麼,這一行真的意味着什麼?
您可以將'State state a'視爲一個函數,因爲'state'返回一個_new_狀態和一個值。 'put'只是忽略之前的狀態,返回單位,但將給定的'newState'設置爲下一次計算的狀態。 – Zeta 2015-03-19 09:52:02
@Zeta感謝您的回覆!我明白'put'的作用,但是'newGenerator'的用法是什麼?如果我刪除這一行,是否有任何改變? – hliu 2015-03-19 09:56:11