Browse thread
A (Silly?) Question About Universal Type Quantification
- Will M Farr
[
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: | -- (:) |
| From: | Will M Farr <farr@M...> |
| Subject: | A (Silly?) Question About Universal Type Quantification |
Hello,
I recently encountered a situation where I had (effectively) the
following polymorphic type:
type 'a record = { id : int; data : 'a }
and the following compare function
let compare {id = id1} {id = id2} = Pervasives.compare id1 id2
and wanted to put such records into a set. However, I could not
figure out how to make the polymorphic 'a in the type definition
"disappear" in the module argument to the Set.Make functor. For
example, the obvious
Set.Make(struct
type t = 'a record
let compare = compare
end)
fails because the 'a in the type definition for t is unbound. Is
there no way to do this? I'm thinking of some sort of "forall"
designation, which universally quantifies the type parameter, like
Set.Make(struct
type t = forall 'a : 'a record
let compare = compare
end)
(I'm sure that there is better terminology for this---please pardon my
ignorance about types and type theory.)
I ended up solving my problem by placing the record type into a
functor, whose argument specified the concrete type for data, but I'm
curious if other solutions exist.
Thanks,
Will