无法创建 monad 转换器的派生实例
Cannot make a derived instance of monad transformer
我有以下 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
使用 class 的基础实例来实现 newtype
的 class。然而,在这种情况下,这没有任何意义,因为 m
甚至不是 MonadTrans
的实例(回想一下 m :: * -> *
,但 MonadTrans
想要 (* -> *) -> * -> *
).
我有以下 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
使用 class 的基础实例来实现 newtype
的 class。然而,在这种情况下,这没有任何意义,因为 m
甚至不是 MonadTrans
的实例(回想一下 m :: * -> *
,但 MonadTrans
想要 (* -> *) -> * -> *
).