Advertisement
Guest User

Untitled

a guest
Sep 13th, 2014
70
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
OCaml 0.84 KB | None | 0 0
  1. module type Sign = sig
  2.   module type S
  3. end
  4.  
  5. module type Nat =
  6.   functor (S : Sign) -> functor (X : S.S) ->
  7.     functor (F : (functor (M : S.S) -> S.S)) -> S.S
  8.  
  9. module Zero : Nat =
  10.   functor (S : Sign) -> functor (X : S.S) ->
  11.     functor (F : (functor (M : S.S) -> S.S)) -> X
  12.  
  13. module Succ (N : Nat) : Nat =
  14.   functor (S : Sign) -> functor (X : S.S) ->
  15.     functor (F : (functor (M : S.S) -> S.S)) -> N(S)(F(X))(F)
  16.  
  17. module One : Nat = Succ(Zero)
  18.  
  19. module type Fun = functor (N : Nat ) -> Nat
  20.  
  21. module NatS = struct
  22.   module type S = Nat
  23. end
  24.  
  25. module Aux (F : Fun) (N : Nat) : Nat = N(NatS)(F(One))(F)
  26.  
  27. module FunS = struct
  28.   module type S = Fun
  29. end
  30.  
  31. module A (N : Nat) = N(FunS)(Succ)(Aux)
  32.  
  33. module Ack (N : Nat) : Nat = A(N)(N)
  34.  
  35. module Four : Nat = Succ(Succ(Succ(One)))
  36.  
  37. let () = print_endline "Hello"
  38.  
  39. module M = Ack(Four)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement