【发布时间】:2011-12-16 22:37:28
【问题描述】:
我正在尝试使自定义类型成为 Show 的实例。
这里是 theType,它只是一个基本的 Set 类型。
data Set a = Insert a (Set a) | EmptySet
我想要类似的东西
Insert 1 (Insert 2 (Insert 3 EmptySet))
显示类似
{1, 2, 3}
我该怎么做?我尝试用字符串连接来做,但似乎做字符串插值被认为是不好的形式(Haskell 似乎本身并不支持这个?)另外,我如何在列表中获得花括号?到目前为止,我能做的就是这个,它基本上什么都不做......
instance (Show a) => Show (Set a) where
show EmptySet = ""
show (Insert a as) = show a ++ show as
另外,我尝试使用 Hoogle 和 Hayoo 来查找 List 实现,这样我就可以看到它是如何在 List 上实现的。我找不到它。有人对此有任何指示吗?我尝试搜索“show::[a]->String”、“Data.Lists”、“Lists”等......
【问题讨论】:
-
顺便说一句,这可能是个坏主意。
show的结果应该是有效的 Haskell 代码,它产生的值等于传递给show的值。我建议定义一个fromList函数并在集合 {1, 2, 3} 上制作show产生例如fromList [1, 2, 3];这是标准 Data.Map 和 Data.Set 库所采用的方法。或者,您可以定义自己的函数来执行此操作,而不是调用show来查看此表示法中的集合。