以下是 Haskell 中的一种多态数据类型,由 Hugs 解释。我正在尝试创建一个 Show for Equality 的实例。
实例声明说如果类型“a”在 Show 中,那么 Equality a 在 Show 中。它应该以“a = b”的形式将两个参数打印到构造函数 Equals ab。
data Equality a = Equals a a
instance (Show a) => Show (Equality a) where
show (Equals a b) = a ++ " = " ++ b
然而,在 Hugs 中输入诸如“(Equality 9 9)”之类的内容会产生:
错误 - C 堆栈溢出
所以,我尝试用几个空格缩进“show (Equals ab)...”行。我不确定会有什么区别,但只是在玩,然后得到了这个:
Inferred type is not general enough
*** Expression : show
*** Expected type : Show (Equality a) => Equality a -> String
*** Inferred type : Show (Equality [Char]) => Equality [Char] -> String
谁能解释为什么会发生这些错误,或者提出更好的方法来实现这个展示实例?
谢谢!