Haskell,没有实例(Applicative M)

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)

lef*_*out 5

错误正是它所说的:你忽略了给出M一个应用实例.

每个monad都是一个应用程序.通过历史事故,过去不需要明确这一事实,但这在编写通用代码时会带来各种不便.遗漏已被固定,所以现在来定义一个Monad情况下,你必须先还定义FunctorApplicative实例.