[
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: | 2005-01-27 (00:00) |
From: | Daniel_Bünzli <daniel.buenzli@e...> |
Subject: | Phantom types and polymorphic variants |
Hello, Suppose I have the following (well-typed) definitions > type tool = [`Spoon | `Fork] > > type 'a t = unit constraint 'a = [< tool] > > type 'a toolspec = unit constraint 'a = [< tool] > > let spoon : [< tool > `Spoon ] toolspec = () > let fork : [< tool > `Fork ] toolspec = () > > let create : ([< tool ] as 'a) -> 'a t = fun t -> () > let create' : ([< tool ] as 'a) toolspec -> 'a t = fun t -> () I don't really understand why the type of the value returned by create and create' differ : > # create `Spoon;; > - : [< Test.tool > `Spoon ] Test.t = () > # create' spoon;; > - : [< Test.tool ] Test.t = () I expected the second value to have the same type as the first. Thanks for your explanations, Daniel