Accueil     À propos     Téléchargement     Ressources     Contactez-nous

Ce site est rarement mis à jour. Pour les informations les plus récentes, rendez-vous sur le nouveau site OCaml à l'adresse ocaml.org.

[Caml-list] Odd Type Checking Problem
[ Home ] [ Index: by date | by threads ]
[ Search: ]

[ Message by date: previous | next ] [ Message in thread: previous | next ] [ Thread: previous | next ]
 Date: 2002-02-07 (09:50) From: Tom Hirschowitz Subject: Re: [Caml-list] Odd Type Checking Problem
```

# 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

```