Приятно печатать / показывать двоичное дерево в Haskell

У меня есть тип данных дерева:

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

... и мне нужно сделать это экземпляромShow, без использованияderiving, Я обнаружил, что красиво отобразить небольшую ветвь с двумя листьями очень просто:

instance (Show a, Show b) => Show (Tree a b) where
   show (Leaf x) = show x
   show (Branch val l r) = " " ++ show val ++ "\n" ++ show l ++ "  " ++ show r

Но как я могу расширить красивую структуру на дерево произвольного размера? Похоже, что для определения промежутка потребуется, чтобы я знал, сколько листьев будет в самом низу (или, может быть, сколько всего там листьев), чтобы я мог выделить все необходимое мне пространство и просто работать ». . & APOS; Я, вероятно, должен был бы вызвать функцию размера. Я могу видеть, что это выполнимо, но делает ли это это более трудным, чем это?

Ответы на вопрос(2)

Ваш ответ на вопрос