[Haskell-beginners] Defined list data type compared to Haskell List

Lawrence Bottorff borgauf at gmail.com
Tue Jan 26 21:31:22 UTC 2021


I'm following this <https://wiki.haskell.org/99_questions/Solutions/7> and
yet I see this solution

data NestedList a = Elem a | List [NestedList a] deriving (Show)

flatten1 :: NestedList a -> [a]
flatten1 (Elem a   )   = [a]
flatten1 (List (x:xs)) = flatten1 x ++ flatten1 (List xs)
flatten1 (List [])     = []

What I find puzzling is this line

flatten1 (List (x:xs)) = flatten1 x ++ flatten1 (List xs)

where I see

(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?

LB
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.haskell.org/pipermail/beginners/attachments/20210126/72b1f9af/attachment.html>


More information about the Beginners mailing list