我有以下内容newtype
:
{-# LANGUAGE GeneralizedNewtypeDeriving #-} newtype Wrap m a = Wrap {runWrap :: m a} deriving (Functor, Applicative, Monad, MonadTrans)
我试图MonadTrans
自动导出,但我收到以下错误:
• Can't make a derived instance of ‘MonadTrans Wrap’ (even with cunning GeneralizedNewtypeDeriving): cannot eta-reduce the representation type enough • In the newtype declaration for ‘Wrap’
但是,为MonadTrans
工作编写简单的实例就好了:
instance MonadTrans Wrap where lift = Wrap
出现此类错误消息的原因是什么?
GeneralizedNewtypeDeriving
使用底层实例为类实现类的newtype
.然而,在这种情况下没有任何意义,因为m
甚至不是一个正确的实例MonadTrans
(回想一下m :: * -> *
,但MonadTrans
想要(* -> *) -> * -> *
).