我正在尝试创建自己的数据类型,这将是Monad类的一部分,但是...
newtype Container a = Container a deriving Monad
出现了这个错误:
* Can't make a derived instance of `Monad Container'
(even with cunning GeneralizedNewtypeDeriving):
cannot eta-reduce the representation type enough
* In the newtype declaration for `Container'
|
30 | newtype Container a = Container a deriving Monad
对于其他类(例如Show),它能很好地工作,但是对于Monad类却不行,那么我该如何让ghci将我的Container实例化为Monad类呢?
谢谢。
a
不是一个 monad 实例,因此它没有太多意义。例如,如果您使用newtype Container a = Container [a] deriving (Functor, Applicative, Monad)
,它将起作用,因为[]
是Monad
的一个实例。 - Willem Van OnsemGenerlizedNewtypeDeriving
是专门用于将包装类型的实例提升到新类型的。如何(或是否)可以自动为Container
派生一个Monad
实例仍然是有趣的问题。(base
定义了Identity
的Monad
实例,这表明您不能这样做。) - chepner