无法为新类型派生Eq或Show

时间:2015-11-13 02:29:29

标签: haskell

我无法为新类型派生Eq和Show。

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

当我尝试将此文件加载到我的堆栈ghci中时,它告诉我“没有实例(显示(a - > a))”

但完全相同的定义在另一个文件中加载正常。实际上以前的文件也存在问题但是它因为一些奇怪的原因而停止了。

1 个答案:

答案 0 :(得分:7)

newtype / data声明无法导出ShowEq,除非它包含的类型包含实例。

默认情况下,函数类型没有ShowEq的实例,因为可以使用的信息很少,而且没有传入参数。

但是,可以为它们提供虚拟实例,而某些模块也可以这样做。您的声明在另一个文件中工作的原因几乎可以肯定是它导入了一些导出(直接或间接)此类实例的模块。