Advertisement
Guest User

Untitled

a guest
Dec 1st, 2016
136
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
OCaml 1.25 KB | None | 0 0
  1. module type EqSig =
  2. sig
  3.   type t;;
  4.   val equal : t -> t -> bool
  5. end;;
  6.  
  7. module EqInt : EqSig with type t = int =
  8. struct
  9.   type t = int;;
  10.   let equal = (=);;
  11. end;;
  12.  
  13. module BigFunctor(E : EqSig) =
  14. struct
  15.   let eqall x y z = E.equal x y && E.equal y z;;
  16.   let alldiff x y z = not (E.equal x y) &&
  17.                       not (E.equal x z) &&
  18.                       not (E.equal y z);;
  19. end;;
  20.  
  21. module type FactoredFunctorPart1Sig =
  22. sig
  23.   module E : EqSig
  24.   val eqall : E.t -> E.t -> E.t -> bool
  25. end;;
  26.  
  27. module FactoredFunctorPart1(E : EqSig) :
  28.   FactoredFunctorPart1Sig with module E = E
  29. =
  30. struct
  31.   module E = E
  32.   let eqall x y z = E.equal x y && E.equal y z;;
  33. end;;
  34.  
  35. module type FactoredFunctorPart2Sig =
  36. sig
  37.   module E : EqSig
  38.   val alldiff : E.t -> E.t -> E.t -> bool
  39. end;;
  40.  
  41. module FactoredFunctorPart2(E : EqSig) :
  42.   FactoredFunctorPart2Sig with module E = E
  43. =
  44. struct
  45.   module E = E
  46.   let alldiff x y z = not (E.equal x y) &&
  47.                       not (E.equal x z) &&
  48.                       not (E.equal y z);;
  49. end;;
  50.  
  51. module FactoredFunctor(E : EqSig) =
  52. struct
  53.   include (FactoredFunctorPart1(E) : FactoredFunctorPart1Sig with module E := E);;
  54.   include (FactoredFunctorPart2(E) : FactoredFunctorPart2Sig with module E := E);;
  55. end;;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement