Browse thread
[Caml-list] Odd Type Checking Problem
[
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: | Tom Hirschowitz <Tom.Hirschowitz@i...> |
| Subject: | Re: [Caml-list] Odd Type Checking Problem |
What about these ones : # let mAny = fun succ0 input -> succ0 in let x = mAny (mAny true) in mAny;; - : '_a -> '_b -> '_a = <fun> # let mAny = fun succ0 input -> succ0 in mAny;; - : 'a -> 'b -> 'a = <fun> Alain Frisch writes: > On Wed, 6 Feb 2002, Jonathan D Eddy wrote: > > > (* type checks *) > > let mAny = fun succ0 input -> succ0 in > > let ans0 = true in > > let x = mAny (mAny ans0) in > > x 1 2 > > > > (* does not type check *) > > let mAny: 'a -> int -> 'a = fun succ0 input -> succ0 in > > let ans0 = true in > > let x = mAny (mAny ans0) in > > x 1 2 > > I guess this is a problem of understanding type variable scoping rules. > The scope of the 'a variable above is all the phrase, including > the (mAny (mAny ans0)). So the type annotation makes mAny monomorphic, > but you want to use it with two different types. > > It seems that explicitly introduced type variables are generalized only > at the (syntactic) level above their introduction; this together with > unclear scoping rules may be confusing ... > > > -- Alain > > ------------------- > Bug reports: http://caml.inria.fr/bin/caml-bugs FAQ: http://caml.inria.fr/FAQ/ > 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/ To unsubscribe, mail caml-list-request@inria.fr Archives: http://caml.inria.fr