在Haskell中创建Show数据类型的Show实例

时间:2015-09-29 05:30:09

标签: haskell tree

我无法以显示树的层次结构的方式打印出以下树数据类型:

data Tree a b = Branch b (Tree a b) (Tree a b)
              | Leaf a

instance (Show a, Show b) => Show (Tree a b) where
         show t = 

我可以让树以正确的顺序从上到下打印出它的节点,但是我无法弄清楚如何使show函数跟踪要添加到一个级别的空间来制作它很明显,有一个实际的结构被打印出来。我知道我对实例定义没有多大帮助,但我真的不知道从哪里开始,因为递归对我来说是一件令人困惑的事情。

1 个答案:

答案 0 :(得分:3)

如果你必须使用Show,那么只需使用一个需要额外arg的内部函数:

instance Show Tree where
  show x = show' 0 x
    where show' indent x = a ++ show' (indent+1) ++ b   -- or something
          a = ...
          b = ...

但我怀疑你可以用一个额外的参数绘制一个漂亮的树 - 使用ASCII输出打印任意树似乎是一项非常重要的任务。我认为需要更多详细说明。

你可能更好地按照Daniel Wagner的建议重用drawTree,或类似的东西。