id,summary,reporter,owner,description,type,status,priority,milestone,component,version,resolution,keywords,cc,os,architecture,failure,difficulty,testcase,blockedby,blocking,related
4310,Deferred equalities and forall types,simonpj,simonpj,"In the new typechecker we occasionally find we want an equality
{{{
(forall a. F a beta) ~ (forall a. F a gamma)
}}}
where beta, gamma are unification variables that are (later) fixed from outside. As things stand we can't solve this, because our coercion form is too weak.  Once Brent is done, however, I think we will.  This ticket records the problem.

It shows up in package `vector`:
 * `Data.Vector`, `Data.Vector.Unboxed`, `Data.Vector.Storable`, `Data.Vector.Primitive`: need to eta expand defn of `modify`.
 * `Data.Vector.Generic.New`: eta expand `create`

A small example:
{{{
type function Mutable a :: * -> * -> *

data New v a = New (forall s. ST s (Mutable v s a))

create :: (forall s. ST s (Mutable v s a)) -> New v a
create = New
}}}",bug,closed,normal,7.4.1,Compiler,6.12.3,fixed,,stefan@… dimitris@… coreyoconnor@… jwlato@… v.dijk.bas@…,Unknown/Multiple,Unknown/Multiple,None/Unknown,Unknown,typecheck/should_compile/T4310,,,
