Re: [Camllist] Polymorphic Variants and Number Parameterized Typ es
[
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:  Francois Pottier <francois.pottier@i...> 
Subject:  Re: [Camllist] Polymorphic Variants and Number Parameterized Types 
Hi Andreas, On Mon, Apr 29, 2002 at 06:48:11PM +0200, Andreas Rossberg wrote: > > Well, if you have a functor like > > F : functor(X : sig module type S module Y:S end) > ... > > then it would be polymorphic in an unknown number of types. Perhaps our views differ. What I gathered from Jones' and Russo's papers was that modules do not contain types. So, the module type S cannot be a component of X; rather, the type of the functor F will be universally quantified over S. This leads me to something like: F : forall S. functor (X : S) > ... where the distinction between X and Y is eliminated, because it becomes superfluous. In fact, the `functor' syntax and the name X are just sugar, since a functor is a function. So I would really write F : forall S. S > ... > The application > > F (struct module type S = sig type t type u val x : t end > module Y = struct type t = int > type u = bool > val x = 7 end > end) > > corresponds to something like > > F {t:*,u:*} {x:int} {t=int,u=bool} {Y={x=7}} I would simply apply F { x : int } { x = 7 } or, perhaps (if abstraction is desired) F (exists t,u.{ x : t }) (pack { x = 7 } as exists t,u.{ x : t }) So, in this example, we seem to need neither higher kinds nor kind polymorphism. But perhaps my encoding doesn't have the features you'd wish?  François Pottier Francois.Pottier@inria.fr http://pauillac.inria.fr/~fpottier/  To unsubscribe, mail camllistrequest@inria.fr Archives: http://caml.inria.fr Bug reports: http://caml.inria.fr/bin/camlbugs FAQ: http://caml.inria.fr/FAQ/ Beginner's list: http://groups.yahoo.com/group/ocaml_beginners