Version française
Home     About     Download     Resources     Contact us    
Browse thread
[Caml-list] Polymorphic variants as type parameters
[ Home ] [ Index: by date | by threads ]
[ Search: ]

[ Message by date: previous | next ] [ Message in thread: previous | next ] [ Thread: previous | next ]
Date: -- (:)
From: John Prevost <j.prevost@c...>
Subject: Re: [Caml-list] Polymorphic variants as type parameters
>>>>> "tf" == Tim Freeman <tim@fungible.com> writes:

    tf> Here's some code that I'd like to be able to compile:

           type eventtype = [`VECTOR | `SCALAR | `UNIT]
           type +'a eventid
           constraint 'a = [> eventtype ]
           type scalar_eventid = [`SCALAR] eventid

    tf> Unfortunately it gives me an error:


The problem is that when you say [> `X | `Y | `Z] you describe a type
that contains at *least* `X, `Y, and `Z, and possibly others.  This
type is typical for an argument type to a function.  Think of this as
"greater or equal to the type [`X|`Y|`Z]".

When you want a type that may contain possibly `X or `Y or `Z but
nothing besides those, you should write [< `X | `Y | `Z].  This is
like "less than or equal to the type [`X|`Y|`Z]".

Using this I get:

# type eventtype = [`VECTOR | `SCALAR | `UNIT]
  type +'a eventid constraint 'a = [< eventtype ]
  type scalar_eventid = [`SCALAR] eventid;;
type eventtype = [ `VECTOR | `SCALAR | `UNIT]
type +'a eventid constraint 'a = [< eventtype]
type scalar_eventid = [ `SCALAR] eventid

John.
-------------------
To unsubscribe, mail caml-list-request@inria.fr Archives: http://caml.inria.fr
Bug reports: http://caml.inria.fr/bin/caml-bugs FAQ: http://caml.inria.fr/FAQ/
Beginner's list: http://groups.yahoo.com/group/ocaml_beginners