Skip to content

Type variable capture in InstanceSigs message

If I load this file in GHCi:

{-# LANGUAGE RankNTypes, InstanceSigs #-}

class C a where
  f :: a -> b

instance C (a -> b) where
  f :: x
  f = undefined

I get the message

    Method signature does not match class; it should be
      f :: forall b. (a -> b) -> b
    In the instance declaration for `C (a -> b)'

However, this is not the correct type (and if I copy-paste it, GHCi would still complain). The b from the instance head got captured. The correct type would be forall b1. (a -> b) -> b1.

Trac metadata
Trac field Value
Version 7.6.1
Type Bug
TypeOfFailure OtherFailure
Priority normal
Resolution Unresolved
Component Compiler
Test case
Differential revisions
BlockedBy
Related
Blocking
CC roma@ro-che.info
Operating system
Architecture
To upload designs, you'll need to enable LFS and have an admin enable hashed storage. More information