Source file Nat.ml

1
2
3
4
5
6
7
8
9
10
11
12
13
open Functional

let zero = 0
let succ n = n + 1

let fold n zero_case succ_case =
  if n <= 0 then zero_case else
  let rec _visit n return =
    match n with
    | 0 -> return zero_case
    | _ -> _visit (n - 1) (return <== succ_case)
  in
  _visit n identity