在LYAH 的 y-taka-23 改编中,我发现第 13 章的大部分片段必须处理缺少State
构造函数的问题,例如原始的 Haskell 代码:
randomSt = State random
改写为:
randomSt = do
gen <- State.get
let (x, newGen) = random gen
State.put newGen
return x
这当然有它自己的教学优点!但我想知道是否有另一种创建State
. 我知道 Frege 和 Haskell 之间的这种差异来自这样一个事实,即State s a
在 Frege 的Control.monad.State
模块中是一种抽象数据类型。是否可以定义派生自它的新具体数据类型并改用其构造函数?