English version
Accueil     À propos     Téléchargement     Ressources     Contactez-nous    

Ce site est rarement mis à jour. Pour les informations les plus récentes, rendez-vous sur le nouveau site OCaml à l'adresse ocaml.org.

Browse thread
A (Silly?) Question About Universal Type Quantification
[ Home ] [ Index: by date | by threads ]
[ Search: ]

[ Message by date: previous | next ] [ Message in thread: previous | next ] [ Thread: previous | next ]
Date: 2009-09-10 (15:01)
From: Will M Farr <farr@M...>
Subject: A (Silly?) Question About Universal Type Quantification

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

   type t = 'a record
   let compare = compare

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

   type t = forall 'a : 'a record
   let compare = compare

(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.