Haskell 作为show的实例列出

Haskell 作为show的实例列出,haskell,Haskell,是否仍然可以检查列表如何作为Show类的实例。我有这样一个数据类型: data Graph a=Graph[a]我想让它成为Show的一个实例,这样 当我可以调用show函数时,我只会得到列表,而不会得到单词图 我试过了,但我知道这不起作用,因为show返回一个字符串,x是一个列表。我在向你学习haskell是为了一件好事。没有例子,我在网上也找不到 instance Show (Graph a) where show (Graph x) = x 我怎样才能得到这个结果 instanc

是否仍然可以检查列表如何作为
Show
类的实例。我有这样一个数据类型:

data Graph a=Graph[a]
我想让它成为
Show
的一个实例,这样 当我可以调用
show
函数时,我只会得到列表,而不会得到单词图

我试过了,但我知道这不起作用,因为
show
返回一个字符串,
x
是一个列表。我在向你学习haskell是为了一件好事。没有例子,我在网上也找不到

instance Show (Graph a) where
    show (Graph x) = x
我怎样才能得到这个结果

instance Show a => Show (Graph a) where
    show (Graph x) = show x
我们必须显示包含的列表,因此不能返回
x
,但必须返回
show x
。这反过来要求类型为
[a]
的列表
x
是可显示的,因此我们需要要求使用
Show a=>…
上下文

我们必须显示包含的列表,因此不能返回
x
,但必须返回
show x
。这反过来要求类型为
[a]
的列表
x
是可显示的,因此我们需要要求使用
Show a=>…
上下文来显示列表。

只需显示列表:

show (Graph x) = show x
只需显示以下列表:

show (Graph x) = show x

值得注意的是,尽管这看起来像是一个递归函数,但事实并非如此。您调用的
show
与您声明的
show
完全不同(但是您应该实现
showsPrec
而不是
show
),值得注意的是,尽管这看起来像一个递归函数,但它不是。您调用的
show
与您声明的
show
完全不同。(但是您应该实现
showsPrec
而不是
show
)您使用
data Graph a=Graph[a]
而不是
newtype Graph a=Graph[a]
有什么原因吗?单构造函数、单字段类型的默认值通常为
newtype
;只有当我们出于特殊目的需要额外的惰性时,我们才会使用
数据
。@d因为这是下一节,我还没有读过那一节。你使用
数据图a=Graph[a]
而不是
新类型图a=Graph[a]
有什么原因吗?单构造函数、单字段类型的默认值通常为
newtype
;只有当我们出于特殊目的需要额外的懒惰时,我们才会使用
数据
。@d因为这是下一节,我还没有读过那一节。