Newtype派生Monad错误

时间:2017-06-20 08:16:33

标签: haskell monads applicative newtype

我正在尝试安装应用Termite - Util但我在第14行中遇到此错误

newtype CE m a = CE {unCE :: m a} deriving (Monad)

错误说:

  

ContextError.hs:14:45:      没有实例(Applicative(CE m))        源自“衍生”数据类型声明的子句      可能的修复:        使用独立的派生实例'宣言,          所以你可以自己指定实例上下文      为(Monad(CE m))

派生实例时

我已尝试使用CIS 194: Homework 7

中提出的解决方案

添加:

  

实例Applicative(CE m)where      纯=回归      (< *>)= ap

但我再次收到此错误

  

ContextError.hs:14:45:      没有实例(Functor(CE m))        源自“衍生”数据类型声明的子句      可能的修复:       使用独立的派生实例'宣言,          所以你可以自己指定实例上下文      为(Monad(CE m))

派生实例时

我真的不知道如何继续,我是Haskell的新手

提前致谢。

1 个答案:

答案 0 :(得分:1)

在ghc 7.10.1 AMP提案中。在此之前,您可以在没有Monad实例的情况下定义Applicative实例,在7.10.1之后,如果要定义Functor,则必须定义ApplicativeMonad }。

https://wiki.haskell.org/Functor-Applicative-Monad_Proposal