#4347: Asymmetry of (impredicative) instantiation/higher rank types
----------------------------------------+-----------------------------------
    Reporter:  dolio                    |        Owner:                         
  
        Type:  bug                      |       Status:  new                    
  
    Priority:  normal                   |    Milestone:  7.4.1                  
  
   Component:  Compiler (Type checker)  |      Version:  7.1                    
  
    Keywords:                           |     Testcase:                         
  
   Blockedby:                           |   Difficulty:                         
  
          Os:  Linux                    |     Blocking:                         
  
Architecture:  x86_64 (amd64)           |      Failure:  GHC rejects valid 
program
----------------------------------------+-----------------------------------

Comment(by carlhowells):

 The thing that gets to me is this:

 {{{
 DumbTrick.hs:11:12:
     Couldn't match expected type `forall a.
                                   Random a =>
                                   (forall g. RandomGen g => g -> (a, g))
 -> IO a'
                 with actual type `(forall g'. RandomGen g' => g' -> (b0,
 g'))
                                   -> IO b0'
     In the first argument of `return', namely `apply'
     In the expression: return apply
     In the expression:
       do { gen <- newMVar =<< newStdGen;
            let apply ::
                  forall b. Random b =>
                  (forall g'. RandomGen g' => g' -> (b, g')) -> IO b
                apply f = modifyMVar gen $ (\ (a, b) -> ...) . f;
            return apply }
 }}}

 It's telling me that it can't unify two types, there the only difference
 between the reported types is whether the rank-1 polymorphism is implicit
 or explicit.  (I'm ignoring the lack of reporting on the class constraint
 because I'm pretty sure that's not relevant.)

 Furthermore, it does that even when I explicitly quantify the value it's
 telling me is implicitly quantified.

 Between those two factors, this feels like a bug, rather a decision to
 remove a little-used (if awesome) feature.

-- 
Ticket URL: <http://hackage.haskell.org/trac/ghc/ticket/4347#comment:7>
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