class - Haskell 声明 Show 类的实例

标签 class haskell instance show

我试图将我的注意力集中在 Haskell 中的类和数据结构上,特别声明它的类型实例。我可以让它与某些类和数据类型一起工作,但不是全部,所以我一定错过了一些东西。具体来说,我有以下数据声明:

data LinkedList a = End | Link a (LinkedList a)

我想为该类型声明一个 Show 实例,以便输出看起来接近于“el1, el2, el3, el4, ...”

instance Show LinkedList where
    show (End) = "."
    show (Link a b) = show a ++ "," ++ show b

正如预期的那样,这不起作用...知道为什么吗?我想我理解“数据”和“类型”的含义,但我不确定我是否对类和实例感到满意。谢谢

最佳答案

instance Show LinkedList where

LinkedList 不是类型,LinkedList a 是类型。纠正这一点,我们得到

instance Show (LinkedList a) where

然后,我们收到另一个错误,因为我们对 a 类型的值调用了 show。我们需要要求 a 也属于 Show 类。

instance Show a => Show (LinkedList a) where

现在应该可以了。

关于class - Haskell 声明 Show 类的实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52237378/

相关文章:

c# - 强制将静态类常量作为数据类型

java - 子类对象的创建是否也会创建其父类(super class)的对象?

haskell - 你能在 Haskell 中为整个类而不是类型创建一个类的实例吗?

Haskell cabal 安装 : missing C library iw

php - 在这个例子中如何正确返回类值? PHP

function - 在 typescript 中的其他类的函数中创建类实例

java - 为什么 Boolean 包装类实现 Serialized 接口(interface)和 Comparable 接口(interface)?它有什么用呢?

matlab - 对多个属性使用一个 set 方法 MATLAB

Haskell:withCurrentDirectory 和 runConcurrently 之间的交互

javascript - 获取当前 function() 作用域的所有变量