Haskell,没有(应用程序M)的实例
看看我的代码。ghci告诉我 没有(应用程序M)的实例 源于实例声明的超类 在“Monad 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
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