<div dir="ltr">I found <a href="https://wiki.haskell.org/Peano_numbers">this interesting page</a> at Wiki Haskell. Confusing, however, is how it first establishes <div><br></div><div><font face="monospace">data Peano = Zero | Succ Peano<br></font></div><div><font face="monospace"><br></font></div><div><font face="arial, sans-serif">It says</font></div><div><font face="arial, sans-serif"><br></font></div><div>Here <font face="monospace">Zero</font> and <font face="monospace">Succ</font> are values (constructors). <font face="monospace">Zero </font>has type <font face="monospace">Peano</font>, </div><div>     and <font face="monospace">Succ</font> has type <font face="monospace">Peano -> Peano</font>. <font face="arial, sans-serif"><br></font></div><div><br></div><div>but then it breaks down each member further a few lines later</div><div><br></div><div><font face="monospace">data Zero<br>data Succ a<br></font></div><div><br></div><div>and then says </div><div><br></div><div><font face="monospace">Zero </font>has kind <font face="monospace">*</font>, and <font face="monospace">Succ </font>has kind <font face="monospace">* -> *</font>. The natural numbers are represented by types (of kind <font face="monospace">*</font>) <font face="monospace">Zero, Succ Zero, Succ (Succ Zero)</font> etc.<br></div><div><br></div><div>Why is it giving two separate treatments and what is meant by the <font face="monospace">*</font> and <font face="monospace">* -> * </font>? There's something fundamental I'm missing.</div><div><br></div><div>If anyone knows of a really thorough and definitive <i>and </i>understandable treatment of Haskell types, I'd appreciate it.</div><div><br></div><div>LB</div></div>