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因为这是下一节,我还没有读过那一节。