创建状态的情况下在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) –