On Sep 1, 2006, at 3:29 PM, skaller wrote:
let string_of_term dfns term = match term with
| #qualified_name_t as x -> string_of_qualified_name x
This is, indeed, a practical reason why PM are so nice. In the same line of ideas, I wish I could do something like the following :
module type S = sig
type t
val f : t -> int
end
module A (B : S with type t = [> ]) (C : S with type t = [> ]) : S with type t = [B.t | C.t] = struct
type t = [ B.t | C.t ]
let f x =
match x with
| #A.t as x -> A.f x
| #B.t as x -> B.f x
end
Of course the example won't even compile, but I think it reflects the spirit of what I would like to do. I know this is just not possible due to a practical reason (#A.t is expanded to the constructors that it includes, and therefore, A.t has to be fully known at compile time, correct?). Is there a theoretical reason to have this constraint though?
Andres