On Oct 21, 2010, at 9:58 PM, Simon Peyton-Jones wrote:

 A "implicit quantification point" is
   a) the type in a type signature f :: type, or
   b) a type of form (context => type), that is not
        enclosed by an explicit 'forall'

not quite:

    foo :: forall a . a -> (Ord b => b) -> ()

According to your explanation, there is one implicit quantification point: the whole type of `foo`. The type `Ord b => b` is no implicit quantification point because it is "enclosed by" an explicit 'forall' (for a certain definition of "enclosed by"). The new explanation implies that the type should be

    foo :: forall b . forall a . a -> (Ord b => b) -> ()

but it is

    foo :: forall a . a -> (forall b . Ord b => b) -> ()

instead.

Apparently, if there is an explicit 'forall' (that does not mention `b`) then the implicit 'forall' is inserted at the context. If there is no explicit 'forall' then it is inserted at the top level.

My impression is the following:

    An implicit quantification point is
      a) the type in a type signature f :: type or
      b) a type of the form (context => type)
    if it does not start with an explicit 'forall'

Then the only implicit quantification point in the type of `foo` is the type `Ord b => b` which matches the behaviour of GHC.

Is this what you meant?

Sebastian
_______________________________________________
Glasgow-haskell-users mailing list
[email protected]
http://www.haskell.org/mailman/listinfo/glasgow-haskell-users

Reply via email to