-- Peano natural numbers and arithmetic in rFun (reversible functional language) data Nat = Z | S Nat plus :: Nat -> Nat <-> Nat plus Z x = x plus (S y) x = let x' = plus y x in (S x') minus :: Nat -> Nat <-> Nat minus y x = plus! y x -- The classical Fibonacci function (embedded to result in a pair) -- fib n gives the (n+1)-th and n-th Fibonacci numbers fib :: Nat <-> (Nat, Nat) fib Z = ((S Z),Z) fib (S m) = let (x,y) = fib m y' = plus x y in (y', x)