Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- module type EqSig =
- sig
- type t;;
- val equal : t -> t -> bool
- end;;
- module EqInt : EqSig with type t = int =
- struct
- type t = int;;
- let equal = (=);;
- end;;
- module BigFunctor(E : EqSig) =
- struct
- let eqall x y z = E.equal x y && E.equal y z;;
- let alldiff x y z = not (E.equal x y) &&
- not (E.equal x z) &&
- not (E.equal y z);;
- end;;
- module FactoredFunctorPart1(E : EqSig) =
- struct
- module E = E
- let eqall x y z = E.equal x y && E.equal y z;;
- end;;
- module FactoredFunctorPart2(E : EqSig) =
- struct
- module E = E
- let alldiff x y z = not (E.equal x y) &&
- not (E.equal x z) &&
- not (E.equal y z);;
- end;;
- module FactoredFunctor(E : EqSig) =
- struct
- module FactoredPart1 = FactoredFunctorPart1(E);;
- include (FactoredPart1 : module type of FactoredPart1 with module E := E);;
- module FactoredPart2 = FactoredFunctorPart2(E);;
- include (FactoredPart2 : module type of FactoredPart2 with module E := E);;
- end;;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement