packages feed

hermit-0.1.1.0: examples/fib-stream/Nat.hs

module Nat where

import Prelude hiding ((+))

data Nat = Zero | Succ Nat deriving (Eq,Show)

(+) :: Nat -> Nat -> Nat
Zero     + n = n
(Succ m) + n = Succ (m + n)

toNat :: Integer -> Nat
toNat 0 = Zero
toNat n = Succ (toNat (pred n))

fromNat :: Nat -> Integer
fromNat Zero = 0
fromNat (Succ n) = succ (fromNat n)