0 monads haskell compiler-errors
看看我的代码.ghci说
没有实例声明的超类引起的(Applicative M)实例在'Monad M'的实例声明中
我不明白这个错误,我不知道如何修复它.你可以帮帮我吗 ?
newtype M a = StOut (Stack -> (a, Stack, String))
unStOut (StOut f) = f
--unStout is used to extract the emeded function from monadic capsule
instance Monad M where
return x = StOut (\n -> (x, n, ""))
e >>= f = StOut (\n -> let (a, n1, s1) = (unStOut e) n
(b, n2, s2) = (unStOut (f a)) n1
in (b, n2, s1++s2))
Run Code Online (Sandbox Code Playgroud)
错误正是它所说的:你忽略了给出M一个应用实例.
每个monad都是一个应用程序.通过历史事故,过去不需要明确这一事实,但这在编写通用代码时会带来各种不便.遗漏已被固定,所以现在来定义一个Monad情况下,你必须先还定义Functor和Applicative实例.