无法派生 Eq 或 Show for newtype



我在为newtype导出Eq和Show时遇到问题。

newtype Comp a = Comp {unComp :: a -> a } deriving (Eq, Show)

当我试图将这个文件加载到我的堆栈ghci时,它告诉我"没有(Show(a->a))的实例"

但完全相同的定义在另一个文件中加载良好。事实上,以前的文件也有问题,但后来因为一些奇怪的原因停止了。

newtype/data声明不能派生ShowEq,除非它所包含的类型具有它们的实例。

默认情况下,函数类型没有ShowEq的实例,因为在没有参数传递的情况下,这些函数类型几乎没有可用的信息

然而,可以给它们提供伪实例,有些模块也会这样做。你的声明在另一个文件中起作用的原因几乎可以肯定是,它正在导入一些导出(直接或间接)此类实例的模块。

最新更新