Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- module type MOperDriver = sig
- type value
- val oper : value -> value
- end
- module MSuccessor (MOD : MOperDriver) = struct
- let soper x = MOD.oper (MOD.oper x)
- end
- module type MJoinDriver = sig
- type value
- val join : value -> value -> value
- end
- module MWeird (MOD:MOperDriver) (MJD : MJoinDriver with type value = MOD.value)
- : MOperDriver
- = struct
- module M = MSuccessor(MOD)
- type value = MOD.value
- let oper a =
- let a' = M.soper a in
- MJD.join a' (MJD.join a' a')
- end
- type number = Value of int
- let nsucc (Value v) = Value (succ v)
- let nadd (Value v) (Value v') = Value (v+v')
- module NOperDriver : MOperDriver = struct
- type value = number
- let oper = nsucc
- end
- module NJoinDriver : MJoinDriver = struct
- type value = number
- let join = nadd
- end
- module M = MWeird(NOperDriver)(NJoinDriver)
- ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
- File "test.ml", line 62, characters 31-42:
- Error: Signature mismatch:
- Modules do not match:
- sig
- type value = NJoinDriver.value
- val join : value -> value -> value
- end
- is not included in
- sig
- type value = NOperDriver.value
- val join : value -> value -> value
- end
- Type declarations do not match:
- type value = NJoinDriver.value
- is not included in
- type value = NOperDriver.value
Advertisement
Add Comment
Please, Sign In to add comment