I'm not sure the use case being discussed here is really what I'm after. This 
use case has a type family application appearing within a forall

> Maybe (forall a. F [a]) ...

This actually seems to work OK when I test it, though I haven't looked closely 
at the internal machinery.

I'm more concerned with using a forall within a type family application, 
something like

> Maybe (F (forall a. ...)) ...

And, responding to earlier comments, yes, this is wandering towards 
impredicative types, but that, by itself, doesn't seem to cause a problem. Is 
there a problem if there is a "hidden" forall? For example:

> type instance F Int = (forall a. a -> a)
> type instance F Bool = Double
> foo :: b -> F b

Here, foo has what I'm calling a "hidden" forall -- it may have a forall or it 
may not, depending on the choice of b. I don't immediately see a problem with 
this (the type seems well-formed even if we don't float the forall to the top), 
but type inference isn't my strong point.

Richard

On Apr 3, 2013, at 9:55 PM, Manuel M T Chakravarty <c...@cse.unsw.edu.au> wrote:

> Gabriel Dos Reis <g...@integrable-solutions.net>:
>> On Wed, Apr 3, 2013 at 8:01 PM, Manuel M T Chakravarty
>> <c...@cse.unsw.edu.au> wrote:
>>> E.g., given
>>> 
>>> type family F a :: *
>>> 
>>> the equality
>>> 
>>> Maybe (forall a. F [a]) ~ G b
>>> 
>>> would need to be broken down to
>>> 
>>> x ~  F [a], Maybe (forall a. x) ~ G b
>>> 
>>> but you cannot do that, because you just moved 'a' out of its scope. Maybe
>>> you can move the forall out as well?
>> 
>> yes, why wouldn't you pull it out as well:
>> 
>>  x ~ forall a. F [a], Maybe x ~ G b
>> 
>> where you systematically introduce fresh  type
>> variables for an quantified type expressions?
> 
> One universally quantified variable may appear as the argument to two type 
> family applications (or more generally, have two occurrences, of which only 
> one is under the type family).
> 
> Moreover, the whole equality solution mechanism quite fundamentally depends 
> on producing equalities of the form
> 
>  x ~ F b1 ... bn
> 
> for type family applications. Sticking a forall in there may lead to trouble 
> with the proof theory. In particular, it would compromise the analogy to CHRs 
> (constraint handling rules) which inspired our solution.
> 
> Manuel
> 
> 
> _______________________________________________
> ghc-devs mailing list
> ghc-devs@haskell.org
> http://www.haskell.org/mailman/listinfo/ghc-devs


_______________________________________________
ghc-devs mailing list
ghc-devs@haskell.org
http://www.haskell.org/mailman/listinfo/ghc-devs

Reply via email to