Advertisement
Guest User

Untitled

a guest
Mar 30th, 2013
94
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
OCaml 1.33 KB | None | 0 0
  1. module Nat : sig
  2.  
  3.       type 'n z
  4.       type 'n s
  5.  
  6.       type ('a, 'n) nat =
  7.               Zero : ('a, 'n) nat
  8.             | Succ : ('a, 'n) nat -> ('a, 'n s) nat
  9.  
  10.       val add : ('a, 'n) nat -> ('a, 'n s) nat
  11.  
  12.       val plus : ('a, 'n) nat -> ('a, 'n) nat -> ('a, 'n) nat
  13.  
  14.       (*
  15.       val one : ('n s z) nat
  16.       val two : ('n s s z) nat
  17.       val three : ('n s s s z) nat
  18.       val four : ('n s s s s z) nat
  19.       val five : ('n s s s s s z) nat
  20.       val six : ('n s s s s s s z) nat
  21.       val seven : ('n s s s s s s s z) nat
  22.       val eight : ('n s s s s s s s s z) nat
  23.       val nine :  ('n s s s s s s s s s z) nat
  24.       val ten : ('n s s s s s s s s s s z) nat
  25.       *)
  26. end = struct
  27.  
  28.       type 'n z
  29.       type 'n s
  30.  
  31.       type ('a, 'n) nat =
  32.               Zero : ('a, 'n) nat
  33.             | Succ : ('a, 'n) nat -> ('a, 'n s) nat
  34.  
  35.       let add n = Succ n
  36.  
  37.       let rec plus a b = match a with
  38.             | Succ a -> Succ (plus a b)
  39.             | Zero -> b
  40.  
  41.       (*
  42.       let one = Succ Zero
  43.       let two = plus one one
  44.       let three = plus two one
  45.       let four = plus two two
  46.       let five = plus three two
  47.       let six = plus three three
  48.       let seven = plus five two
  49.       let eight = plus five three
  50.       let nine = plus five four
  51.       let ten = plus five five
  52.       *)
  53. end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement