▁from ▁The ▁Ep ig ram ▁T utorial : ▁ ▁Ex amples ▁ ▁The ▁natural ▁numbers ▁ ▁The ▁following ▁declaration ▁defines ▁the ▁natural ▁numbers : ▁▁▁▁▁ ▁( ▁▁▁▁▁▁▁▁ ▁! ▁▁▁▁▁▁ ▁( ▁▁▁▁▁▁▁▁▁ ▁! ▁▁ ▁( ▁ ▁n ▁: ▁Nat ▁ ▁! ▁data ▁! -------- - ! ▁where ▁! ---------- ! ▁; ▁! -------- --- ! ▁▁▁▁▁ ▁! ▁Nat ▁: ▁* ▁) ▁▁▁▁▁▁ ▁! zero ▁: ▁Nat ) ▁▁ ▁! s uc ▁n ▁: ▁Nat ) ▁The ▁declaration ▁says ▁that ▁Nat ▁is ▁a ▁type ▁with ▁kind ▁* ▁( i . e ., ▁it ▁is ▁a ▁simple ▁type ) ▁and ▁two ▁construct ors : ▁zero ▁and ▁suc . ▁The ▁constructor ▁suc ▁takes ▁a ▁single ▁Nat ▁argument ▁and ▁returns ▁a ▁Nat . ▁This ▁is ▁equivalent ▁to ▁the ▁H askell ▁declaration ▁" data ▁Nat ▁= ▁Zero ▁| ▁S uc ▁Nat ". ▁ ▁In ▁LaTeX , ▁the ▁code ▁is ▁displayed ▁as : ▁ ▁The ▁horizontal - line ▁notation ▁can ▁be ▁read ▁as ▁" ass uming ▁( what ▁is ▁on ▁the ▁top ) ▁is ▁true , ▁we ▁can ▁infer ▁that ▁( what ▁is ▁on ▁the ▁bottom ) ▁is ▁true ." ▁For ▁example , ▁" ass uming ▁n ▁is ▁of ▁type ▁Nat , ▁then ▁suc ▁n ▁is ▁of ▁type ▁Nat ." ▁If ▁nothing ▁is ▁on ▁the ▁top , ▁then ▁the ▁bottom ▁statement ▁is ▁always ▁true : ▁" zero ▁is ▁of ▁type ▁Nat ▁( in ▁all ▁cases ). " ▁ ▁Rec urs ion ▁on ▁natur als ▁▁ ▁... And ▁in ▁ASCII : ▁ ▁Nat Ind ▁: ▁all ▁P ▁: ▁Nat ▁-> ▁*