Guest User

Untitled

a guest
Sep 29th, 2012
108
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. module type MOperDriver = sig
  2.     type value
  3.  
  4.     val oper : value -> value
  5. end
  6.  
  7. module MSuccessor (MOD : MOperDriver) = struct
  8.  
  9.     let soper x = MOD.oper (MOD.oper x)
  10.  
  11. end
  12.  
  13. module type MJoinDriver = sig
  14.  
  15.     type value
  16.  
  17.     val join : value -> value -> value
  18.  
  19. end
  20.  
  21. module MWeird (MOD:MOperDriver) (MJD : MJoinDriver with type value = MOD.value)
  22.     : MOperDriver
  23.     = struct
  24.  
  25.     module M = MSuccessor(MOD)
  26.  
  27.     type value = MOD.value
  28.  
  29.  
  30.     let oper a  =
  31.         let a' = M.soper a in
  32.         MJD.join a' (MJD.join a' a')
  33.  
  34. end
  35.  
  36.  
  37.  
  38. type number = Value of int
  39.  
  40. let nsucc (Value v) = Value (succ v)
  41. let nadd  (Value v) (Value v') = Value (v+v')
  42.  
  43. module NOperDriver : MOperDriver = struct
  44.  
  45.     type value = number
  46.  
  47.     let oper = nsucc
  48.  
  49. end
  50.  
  51. module NJoinDriver : MJoinDriver = struct
  52.  
  53.     type value = number
  54.  
  55.     let join = nadd
  56. end
  57.  
  58.  
  59. module M = MWeird(NOperDriver)(NJoinDriver)
  60. ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  61. File "test.ml", line 62, characters 31-42:
  62. Error: Signature mismatch:
  63.        Modules do not match:
  64.          sig
  65.            type value = NJoinDriver.value
  66.            val join : value -> value -> value
  67.          end
  68.        is not included in
  69.          sig
  70.            type value = NOperDriver.value
  71.            val join : value -> value -> value
  72.          end
  73.        Type declarations do not match:
  74.          type value = NJoinDriver.value
  75.        is not included in
  76.          type value = NOperDriver.value
Advertisement
Add Comment
Please, Sign In to add comment