Browse thread
Private types
[
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: | 2008-11-01 (20:19) |
From: | David Allsopp <dra-news@m...> |
Subject: | RE: [Caml-list] Private types |
Edgar Friendly wrote: > David Allsopp wrote: > > > Without the full coercion for x you'll get a type error because the type > > checker infers that the type of the [if] expression is [t] from the > > [then] branch and then fails to unify [> `B of int ] with [t] unless the > > type of [x] is first coerced to [> t ]. If the compiler were to try (x : > > t : [> t ]) in all those instances I think that would render polymorphic > > variants pretty unusable ... the type checker needs to know that you > > meant to do that or everything will unify! > > Okay, you claim we shouldn't automatically open polymorphic variants. I > don't see why auto->ing polymorphic types is really a problem. If the > later code (receiving the returned value) can't handle the [> ] type, > that type error will stop things (although it won't point out where the > [> ] came from). This seems one case where the compiler can easily DWIM > the correct result. I agree that the error will still show up somewhere if there is an error - but remember that a closed polymorphic variant type required an annotation in the first place (in this case, the type [t] and the explicit type annotation to use it)... so having made the explicit choice to declare the type closed (which you either do to declare module interfaces or to try to trap errors) the last thing (I'd say!) you want is the compiler trying to open them back up on every unification failure! David