n重に入れ子になったリストにn-1回concatをかけるような処理はどう書けばいいですか?
再帰的な型を使うと

data Tree a = Leaf a | Branch [Tree a]

型チェックが甘いと感じます。
例えば [Leaf 1, Branch [Leaf 2, Leaf 3]] のように
ネストする深さが揃っていないものを禁止したいときはどうすればいいでしょうか?