[
Home
]
[ Index:
by date
|
by threads
]
[ Message by date: previous | next ] [ Message in thread: previous | next ] [ Thread: previous | next ]
[ Message by date: previous | next ] [ Message in thread: previous | next ] [ Thread: previous | next ]
Date: | 2001-10-16 (21:14) |
From: | Lauri Alanko <la@i...> |
Subject: | [Caml-list] Module equivalence across definitions |
[Pardon for possible duplicates] Hello. Given: module type T = sig type t end module A : T = struct type t = A end module B(X:T) = struct type t = B let v = B end module type CT = sig val a : B(A).t end module C : CT = struct module Aalias = A module BA = B(Aalias) let a = BA.v end I get an error: Signature mismatch: Modules do not match: sig module Aalias : sig type t = A.t end module BA : sig type t = B(Aalias).t = B val v : t end val a : BA.t end is not included in CT Values do not match: val a : BA.t is not included in val a : B(A).t But changing "module BA = B(Aalias)" to "module BA = B(A)" makes everything work. What gives? I'm used to seeing structural equivalence being used everywhere in O'Caml's type system, but here simply renaming a module seems to give it a distinct new identity. Is this a bug or a feature? Lauri Alanko la@iki.fi ------------------- Bug reports: http://caml.inria.fr/bin/caml-bugs FAQ: http://caml.inria.fr/FAQ/ To unsubscribe, mail caml-list-request@inria.fr Archives: http://caml.inria.fr