data Tree a = Empty | Branch a (Tree a) (Tree a) deriving (Show, Eq) layout :: Tree Char -> Tree (Char, (Int, Int)) layout t = fst $ draw t 1 1 where draw Empty x _ = (Empty, x) draw (Branch v l r) x y = (Branch (v, (x', y)) lt rt, x'') where (lt, x') = draw l x (y + 1) (rt, x'') = draw r (x' + 1) (y + 1)