Haskell 带WriterT的自定义幺半群

Haskell 带WriterT的自定义幺半群,haskell,monads,monad-transformers,monoids,Haskell,Monads,Monad Transformers,Monoids,我正在尝试用自定义数据类型实现WriterT。我已经按照runWriterT的要求实现了monoid。但是我无法编译代码。我犯了一个错误 无法推导半群Env a 源于实例声明的超类 从上下文:numa 在最近的GHCs中,半群是幺半群的一个超类,所以要正确创建幺半群的实例,还必须创建半群的实例。幸运的是,它通常很短: instance Num a => Semigroup (Env a) where (<>) = mappend 在最近的GHCs中,半群是幺半群的一个超类,所

我正在尝试用自定义数据类型实现WriterT。我已经按照runWriterT的要求实现了monoid。但是我无法编译代码。我犯了一个错误

无法推导半群Env a 源于实例声明的超类 从上下文:numa

在最近的GHCs中,半群是幺半群的一个超类,所以要正确创建幺半群的实例,还必须创建半群的实例。幸运的是,它通常很短:

instance Num a => Semigroup (Env a) where (<>) = mappend
在最近的GHCs中,半群是幺半群的一个超类,所以要正确创建幺半群的实例,还必须创建半群的实例。幸运的是,它通常很短:

instance Num a => Semigroup (Env a) where (<>) = mappend

Env看起来就像Data.Monoid.Sum.Yes。但是我想写一个定制的monoid.Env看起来就像Data.monoid.Sum.Yes。但我想写一个自定义的幺半群。是的,但更好的是定义Env x Env y=Env x+y,而不要谈论mappend。是的,但更好的是定义Env x Env y=Env x+y,而不要谈论mappend。