如何在haskell中将数组显示为新数据类型中的字符串?

如何在haskell中将数组显示为新数据类型中的字符串?,haskell,Haskell,在Haskell中,当您进行模式匹配时,您必须像下面的示例代码那样解包 data Mlist a = Mlist [a] instance Show a => Show (Mlist a) where show (Mlist xs) = show xs m = Mlist [1, 2, 3] 然后,当我在解释器中键入m时,我期望“{1,2,3}”,但我得到[1,2,3]。 这里怎么了?我认为这会起作用,因为我在xs上使用show函数。列表上的show总是给你一个字符串,它以'

在Haskell中,当您进行模式匹配时,您必须像下面的示例代码那样解包

data Mlist a = Mlist [a]
instance Show a => Show (Mlist a) where
    show (Mlist xs) = show xs


m = Mlist [1, 2, 3]
然后,当我在解释器中键入
m
时,我期望“{1,2,3}”,但我得到[1,2,3]。
这里怎么了?我认为这会起作用,因为我在xs上使用show函数。

列表上的show
总是给你一个
字符串,它以
'['
开头,以
']'结尾。
。如果您想要
{'
}
,只需更换它们

instance Show a => Show (Mlist a) where
    show (Mlist xs) = concat ["{", init . tail $ show xs, "}"]

列表上的
show
始终提供一个
字符串
,该字符串以
'['
开头,以
']'
结尾。如果您想要
{'
}
,只需更换它们

instance Show a => Show (Mlist a) where
    show (Mlist xs) = concat ["{", init . tail $ show xs, "}"]

你为什么期望
{1,2,3}
?您告诉它使用普通的列表表示法:
[1,2,3]
。如何让它以字符串形式打印(而不是以数组形式打印)?(只是重复前面说过的内容)<代码>显示[1,2,3]
是字符串
“[1,2,3]”
。通过将
show
应用于基础列表,可以为
Mlist
s定义
show
。花括号应该从哪里来?哦,我还想指出,
[1,2,3]
是一个链表,而不是数组。@omega你是非英语母语人士,当你说“expect”时,你是指“want”而不是“expect”?你为什么期望
{1,2,3}
?您告诉它使用普通的列表表示法:
[1,2,3]
。如何让它打印为字符串(而不是数组表示法)?(只是对已经说过的内容进行重新整理)。
显示[1,2,3]
是字符串
“[1,2,3]”
。通过将
show
应用于基础列表,您可以为
Mlist
定义
show
。大括号应该从哪里来?哦,我还想指出,
[1,2,3]
是一个链接列表,而不是数组。@omega您是非英语母语人士,当您说“expect”时,您的意思是“想要”而不是“预期”?