module type PT = sig end
module P = struct end
let ( ) =
module Make( Hash: OrigHashtbl. HashedType) = struct
type ' a t
= { t_list
: ( Hash
. t
* ' a
) list }
let create _ =
Format . printf
"Random %d@." random
; { t_list = [ ] }
let mem ht v =
Format . printf
"Random %d@." random
; List . mem_assoc v ht
. t_list
end
end
module Wrap( P: PT) = struct
module Hash = struct
let equal x1 x2 = x1 = x2
let hash x = x
end
end
module Wrap1 = Wrap( P)
module Wrap2 = Wrap( P)
module H1 = Wrap1. H
module H2 = Wrap2. H
let ( ) =
let ht = H1. create 16 in
Format . printf
"%b@." ( H2
. mem ht
0 )
ICAgIG1vZHVsZSB0eXBlIFBUID0gc2lnIGVuZAogICAgbW9kdWxlIFAgPSBzdHJ1Y3QgZW5kCgogICAgbGV0ICgpID0KICAgICAgUmFuZG9tLnNlbGZfaW5pdCAoKQoKICAgIG1vZHVsZSBPcmlnSGFzaHRibCA9IEhhc2h0YmwKICAgIG1vZHVsZSBIYXNodGJsID0gc3RydWN0CiAgICAgIG1vZHVsZSBNYWtlKEhhc2g6IE9yaWdIYXNodGJsLkhhc2hlZFR5cGUpID0gc3RydWN0CiAgICAgICAgbGV0IHJhbmRvbSA9IFJhbmRvbS5pbnQgMTAwMDAwMAoKICAgICAgICB0eXBlICdhIHQgPSB7IHRfbGlzdDogKEhhc2gudCAqICdhKSBsaXN0IH0KCiAgICAgICAgbGV0IGNyZWF0ZSBfID0KICAgICAgICAgIEZvcm1hdC5wcmludGYgIlJhbmRvbSAlZEAuIiByYW5kb207CiAgICAgICAgICB7IHRfbGlzdCA9IFtdIH0gICAgICAgICAgCgogICAgICAgIGxldCBtZW0gaHQgdiA9CiAgICAgICAgICBGb3JtYXQucHJpbnRmICJSYW5kb20gJWRALiIgcmFuZG9tOwogICAgICAgICAgTGlzdC5tZW1fYXNzb2MgdiBodC50X2xpc3QgICAgICAgICAgCiAgICAgIGVuZAogICAgZW5kICAgIAoKICAgIG1vZHVsZSBXcmFwKFA6IFBUKSA9IHN0cnVjdAogICAgICBtb2R1bGUgSGFzaCA9IHN0cnVjdAogICAgICAgIHR5cGUgdCA9IGludAogICAgICAgIGxldCBlcXVhbCB4MSB4MiA9IHgxID0geDIKICAgICAgICBsZXQgaGFzaCB4ID0geAogICAgICBlbmQKICAgICAgCiAgICAgIG1vZHVsZSBIID0gSGFzaHRibC5NYWtlKEhhc2gpCiAgICBlbmQKCiAgICBtb2R1bGUgV3JhcDEgPSBXcmFwKFApCiAgICBtb2R1bGUgV3JhcDIgPSBXcmFwKFApCiAgICBtb2R1bGUgSDEgPSBXcmFwMS5ICiAgICBtb2R1bGUgSDIgPSBXcmFwMi5ICgogICAgbGV0ICgpID0KICAgICAgbGV0IGh0ID0gSDEuY3JlYXRlIDE2IGluCiAgICAgIEZvcm1hdC5wcmludGYgIiViQC4iIChIMi5tZW0gaHQgMCk=
compilation info
File "prog.ml", line 41, characters 35-37:
Error: This expression has type 'a H1.t = 'a Hashtbl.Make(Wrap1.Hash).t
but an expression was expected of type
'b H2.t = 'b Hashtbl.Make(Wrap2.Hash).t
stdout