У меня есть тип данных дерева:
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
Но как я могу передать красивую структуру дереву произвольного размера? Похоже, что определение интервала потребует от меня знать, сколько листьев будет на самом дне (или, может быть, только на том, сколько листьев есть в целом), чтобы я мог выделить все пространство, в котором я нуждаюсь, и просто работать. ' Мне, вероятно, нужно будет вызвать функцию размера. Я вижу, что это работоспособно, но это делает его сложнее, чем оно есть?