-- | Peano numbers without any extra fluff
module Data.Peano
    ( Peano(..)
    , plus
    , times
    , infinity
    ) where

data Peano
    = Zero
    | Succ Peano
    deriving (Show, Read, Eq, Ord)

plus :: Peano -> Peano -> Peano
plus Zero     m = m
plus (Succ n) m = Succ (plus n m)

times :: Peano -> Peano -> Peano
times _ Zero = Zero
times n (Succ m) = plus n (times n m)

infinity :: Peano
infinity = Succ infinity