无法为新类型派生Eq或Show

mac*_*688 1 haskell

我无法为newtype派生Eq和Show.

newtype Comp a = Comp {unComp :: a -> a } deriving (Eq, Show)
Run Code Online (Sandbox Code Playgroud)

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

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

Ørj*_*sen 7

newtype/ data声明不能导出ShowEq除非类型它是由含有具有实例他们.

默认情况下,功能类型不具有任何实例ShowEq,因为那些可以用很少的有用信息,而不必在参数传递.

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