<div dir="ltr">I'm following <a href="https://wiki.haskell.org/99_questions/Solutions/7">this</a> and yet I see this solution<div><br></div><div>data NestedList a = Elem a | List [NestedList a] deriving (Show)<br></div><div><br></div><div>flatten1 :: NestedList a -> [a]<br>flatten1 (Elem a   )   = [a]<br>flatten1 (List (x:xs)) = flatten1 x ++ flatten1 (List xs)<br>flatten1 (List [])     = []<br></div><div><br></div><div>What I find puzzling is this line</div><div><br></div><div>flatten1 (List (x:xs)) = flatten1 x ++ flatten1 (List xs)<br></div><div><br></div><div>where I see </div><div><br></div><div>(List (x:xs)) as an argument. How is the NestedList type also able to be expressed as a normal consed list with x:xs argument? How is (:) interacting with NestedList?</div><div><br></div><div>LB</div></div>