我在为newtype导出Eq和Show时遇到问题。
newtype Comp a = Comp {unComp :: a -> a } deriving (Eq, Show)
当我试图将这个文件加载到我的堆栈ghci时,它告诉我"没有(Show(a->a))的实例"
但完全相同的定义在另一个文件中加载良好。事实上,以前的文件也有问题,但后来因为一些奇怪的原因停止了。
newtype
/data
声明不能派生Show
或Eq
,除非它所包含的类型具有它们的实例。
默认情况下,函数类型没有Show
或Eq
的实例,因为在没有参数传递的情况下,这些函数类型几乎没有可用的信息
然而,可以给它们提供伪实例,有些模块也会这样做。你的声明在另一个文件中起作用的原因几乎可以肯定是,它正在导入一些导出(直接或间接)此类实例的模块。