type IM = StateT (EnvFun, EnvEval) (ReaderT EnvEval (ErrorT String IO))
i :: Stmts -> IM
i Statements s (Statements e) = interpeteStmt s >>= \m ...
我的理解有问题。什么是m
。是的,就是那个,{mon}返回的bind
。但是哪个monad"很重要"。我不能理解,因为这个monad堆栈让我很麻烦。
答案 0 :(得分:1)
m
是一个选择不当的变量名称。 >>=
的类型为m a -> (a -> m b) -> m b
,因此m
正文中的变量i
绑定到a
类型的值。 a
的类型取决于interpeteStmt
返回的内容。