#4917: ghc7 does not equate type synonyms under RankNTypes
----------------------------------------+-----------------------------------
    Reporter:  kyagrd                   |        Owner:                         
       
        Type:  bug                      |       Status:  merge                  
       
    Priority:  normal                   |    Milestone:                         
       
   Component:  Compiler (Type checker)  |      Version:  7.0.1                  
       
    Keywords:                           |     Testcase:  
typecheck/should_compile/T4917
   Blockedby:                           |   Difficulty:                         
       
          Os:  Linux                    |     Blocking:                         
       
Architecture:  x86_64 (amd64)           |      Failure:  GHC rejects valid 
program     
----------------------------------------+-----------------------------------
Changes (by simonpj):

  * status:  new => merge
  * testcase:  => typecheck/should_compile/T4917


Old description:

> See the source at
>
> http://hpaste.org/43297/ghc7_problem_with_rankntypes_a
>
> It works on ghc6 but not on ghc 7
>
> The type error message is
>
> ghc7rankn.hs:23:20:
>     Couldn't match expected type `forall a'1.
>                                   x a'1 -> Const (Const b a') a'1'
>                 with actual type `forall a'1. x1 a'1 -> Const b a'1'
>     Expected type: (forall a'1. x a'1 -> Const (Const b a') a'1)
>                    -> f x a
>                    -> Const (Const b a') a
>       Actual type: (forall a'1. x1 a'1 -> Const b a'1)
>                    -> f1 x1 a1
>                    -> Const b a1
>     In the first argument of `mcata', namely `f'
>     In the first argument of `f', namely `(mcata f)'

New description:

 See the source at

 http://hpaste.org/43297/ghc7_problem_with_rankntypes_a

 It works on ghc6 but not on ghc 7

 The type error message is
 {{{
 ghc7rankn.hs:23:20:
     Couldn't match expected type `forall a'1.
                                   x a'1 -> Const (Const b a') a'1'
                 with actual type `forall a'1. x1 a'1 -> Const b a'1'
     Expected type: (forall a'1. x a'1 -> Const (Const b a') a'1)
                    -> f x a
                    -> Const (Const b a') a
       Actual type: (forall a'1. x1 a'1 -> Const b a'1)
                    -> f1 x1 a1
                    -> Const b a1
     In the first argument of `mcata', namely `f'
     In the first argument of `f', namely `(mcata f)'
 }}}

--

Comment:

 Very good point, thank you.  Fixed by
 {{{
 Tue Jan 25 11:01:12 GMT 2011  simo...@microsoft.com
   * Fix Trac #4917: try a bit harder to unify on-the-fly

   This is generally a modest improvement but, more important,
   it fixes a "unify-under-forall" problem.  See Note [Avoid deferring].

   There's still a lurking unsatisfactory-ness in that we can't
   defer arbitrary constraints that are trapped under a forall.

     M ./compiler/typecheck/TcUnify.lhs -8 +28
 }}}
 Ian, please merge.

 Simon

-- 
Ticket URL: <http://hackage.haskell.org/trac/ghc/ticket/4917#comment:2>
GHC <http://www.haskell.org/ghc/>
The Glasgow Haskell Compiler

_______________________________________________
Glasgow-haskell-bugs mailing list
Glasgow-haskell-bugs@haskell.org
http://www.haskell.org/mailman/listinfo/glasgow-haskell-bugs

Reply via email to