Skip to content

Instantly share code, notes, and snippets.

@isqad
Last active March 1, 2018 13:07
Show Gist options
  • Save isqad/b198058619f31f9f706dec1d27bb357c to your computer and use it in GitHub Desktop.
Save isqad/b198058619f31f9f706dec1d27bb357c to your computer and use it in GitHub Desktop.
data Nat = Zero | Suc Nat
fromNat :: Nat -> Integer
fromNat Zero = 0
fromNat (Suc n) = fromNat n + 1
add :: Nat -> Nat -> Nat
add Zero Zero = Zero
add Zero n = n
add n Zero = n
add a (Suc n) = Suc (add a n)
mul :: Nat -> Nat -> Nat
mul Zero n = Zero
mul n Zero = Zero
mul a (Suc Zero) = a
mul (Suc Zero) a = a
mul a (Suc n) = add a (mul a n)
fac :: Nat -> Nat
fac Zero = Zero
fac (Suc Zero) = Suc Zero
fac k = facTimes k (Suc Zero) where
facTimes Zero acc = acc
facTimes x@(Suc n) acc = facTimes n (mul acc x)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment