packages feed

witness-0.5: src/Data/Nat.hs

module Data.Nat where

import Prelude

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