module Data.Nat where
{
    data Nat = Zero | Succ Nat;

    addNat :: Nat -> Nat -> Nat;
    addNat Zero b = b;
    addNat (Succ a) b = Succ $ addNat a b;

    -- | subtractFromNat a b = b - a
    ;
    subtractFromNat :: Nat -> Nat -> Maybe Nat;
    subtractFromNat Zero b = Just b;
    subtractFromNat (Succ a) (Succ b) = subtractFromNat a b;
    subtractFromNat (Succ _) Zero = Nothing;

    multiplyNat :: Nat -> Nat -> Nat;
    multiplyNat Zero _ = Zero;
    multiplyNat (Succ a) b = addNat (multiplyNat a b) b;
}