創建狀態的情況下在y-taka-23 adaptation of LYAH我發現,大部分片斷的第13章必須處理缺乏State
構造,例如原來的Haskell代碼:弗雷格
randomSt = State random
被改寫爲:
randomSt = do
gen <- State.get
let (x, newGen) = random gen
State.put newGen
return x
這當然有它自己的說教優點!但是我想知道是否有另一種方法來創建State
的實例。我知道Frege和Haskell之間的這種差異來自於Frege的Control.monad.State
模塊中的State s a
是一種抽象數據類型。是否可以定義從它派生的新的具體數據類型,並使用它的構造函數?
是的,這個解決方案似乎像Haskell Control.Monad.Trans.State一樣模仿'state'函數,如Wikibook [here。](https:/ /en.wikibooks.org/wiki/Haskell/Understanding_monads/State) –