data
这个 Haskell语句的等效语句是什么type
:
type CWIO a = CWorld -> (a, CWorld)
...这将允许我写:
instance Monad CWIO where
(action1 >>= action2) w0 =
let (x1, w1) = action1 w0
(x2, w2) = action2 x1 w1
in (x2, w2)
return a = \world -> (a, world)
其中CWorld:
data CWorld = CWorld {
cin :: String,
cout :: String
}
我正在通过实际构建一个实际工作的“虚拟 IO 单子”(在其“虚拟宇宙”中)来寻求“真正了解”单子。对 monads 的概念进行某种“通过构建/工程来理解/解释”,因为我是那种需要自己从头开始构建一些东西才能真正理解“某物”的人,所以我要去这里的路线相同。整个代码上下文在这里https://gist.github.com/NeuronQ/11119444/adbf0a9d6d17d4231d7ec68f565203f8dd75f702,但对于任何有经验的 Haskell 程序员来说,它可能看起来毫无意义和“残暴”。