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 type FactoredFunctorPart1Sig =
- sig
- module E : EqSig
- val eqall : E.t -> E.t -> E.t -> bool
- end;;
- module FactoredFunctorPart1(E : EqSig) :
- FactoredFunctorPart1Sig with module E = E
- =
- struct
- module E = E
- let eqall x y z = E.equal x y && E.equal y z;;
- end;;
- module type FactoredFunctorPart2Sig =
- sig
- module E : EqSig
- val alldiff : E.t -> E.t -> E.t -> bool
- end;;
- module FactoredFunctorPart2(E : EqSig) :
- FactoredFunctorPart2Sig with module E = E
- =
- 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
- include (FactoredFunctorPart1(E) : FactoredFunctorPart1Sig with module E := E);;
- include (FactoredFunctorPart2(E) : FactoredFunctorPart2Sig with module E := E);;
- end;;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement