Look at this:
data List a data Maybe a
= List a (List a) = Just a
| Nil | Nothing
When you write it this way, the parallel looks pretty clear -- we just need to put some extra data in the Just
side! To put "extra" data, we can use a tuple. The only other wrinkle is that we must name a constructor.
data List' a = List' (Maybe (a, List' a {- here's the extra bit -}))