data NestedList a = Elem a | List [NestedList a] flatten :: NestedList a -> [a] flatten x = case x of Elem e -> [e] List l -> concatMap flatten l