[Haskell-cafe] [] vs [()]

Simon Richard Clarkstone simon.clarkstone at gmail.com
Sat Oct 11 22:10:16 EDT 2008


Sam Danielson wrote:
> The [] constructor takes no arguments and is like Nothing in the Maybe
> type. The list ":" (cons) infix constructor takes two arguments, an
> element of type a and a list of type a, to construct a new list. Compare
> to Maybe.
> 
> 	data []    a = []      | a : [a]
> 	data Maybe a = Nothing | Just a
> 
> Another way of saying [()] is
> 
> 	():[]
> 
> which, comparing with the Maybe type, is similar to saying
> 
> 	Just ()
> 
> but Just only takes one argument where (:) takes two.
> 
> Both List and Maybe are containers that have a null constructor, namely
> [] and Nothing. "():[]" contains () similar to how "Just ()" contains
> (). You can make your own list type and put () in it as follows.

Or, in Monad terms:

"[()]" and "Just ()" are both "return ()" in their respective Monads.
"[]" and "Nothing" are both "mzero" in their respective MonadsPluses. 
(Both are also "fail" in their respective Monads, but I find "fail"'s 
presence in Monad a bit inelegant, though handy.)

-- 
src/


More information about the Haskell-Cafe mailing list