Haskell,没有(应用程序M)的实例

Haskell,没有(应用程序M)的实例,haskell,compiler-errors,monads,Haskell,Compiler Errors,Monads,看看我的代码。ghci告诉我 没有(应用程序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

看看我的代码。ghci告诉我

没有(应用程序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))
的签出定义。长话短说-要成为
Monad
M
。而这反过来又要求
M

这就是错误所说的

的签出定义。长话短说-要成为
Monad
M
。而这反过来又要求
M


这就是错误所说的

错误正是它所说的:您忽略了给
M
一个应用程序实例


每个单子都是一个应用函子。由于历史的偶然性,过去不要求明确这一事实,但这导致了编写泛型代码时的各种不便,因此,现在要定义一个
Monad
实例,您必须首先定义和实例。

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


每个单子都是一个应用函子。由于历史的偶然性,过去不要求明确这一事实,但这导致了编写泛型代码时的各种不便,所以现在要定义一个
Monad
实例,你必须首先定义和实例。

基本上,GHC 7.10中的规则改变了,GHC 7.10中的规则改变了,你能给出更多细节吗?你的意思是,解释如何为
M
定义
Functor
Applicative
实例?我可以,但这是一个很好的锻炼自己。看看这些类型
fmap
通常很容易实现(事实上,
-XDeriveFunctor
扩展可以为您实现),
pure
return
相同。唯一棘手的是
,但这也是可行的。(如果您不想自己定义:如果monad实例已经完成,您可以随时使用。)您能提供更多详细信息吗?您的意思是,解释如何为
M
定义
Functor
Applicative
实例?我可以,但这是一个很好的锻炼自己。看看这些类型
fmap
通常很容易实现(事实上,
-XDeriveFunctor
扩展可以为您实现),
pure
return
相同。唯一棘手的是
,但这也是可行的。(如果您不想自己定义它:如果monad实例已经完成,您可以随时使用它。)
class Applicative m => Monad m where
class Functor f => Applicative f where
class Functor f where