I found
this interesting page at Wiki Haskell. Confusing, however, is how it first establishes
data Peano = Zero | Succ Peano
It says
Here Zero and Succ are values (constructors). Zero has type Peano,
and Succ has type Peano -> Peano.
but then it breaks down each member further a few lines later
data Zero
data Succ a
and then says
Zero has kind *, and Succ has kind * -> *. The natural numbers are represented by types (of kind *) Zero, Succ Zero, Succ (Succ Zero) etc.
Why is it giving two separate treatments and what is meant by the * and * -> * ? There's something fundamental I'm missing.
If anyone knows of a really thorough and definitive and understandable treatment of Haskell types, I'd appreciate it.
LB
_______________________________________________