Skip to content

GHC complains about applying a function to one argument

When this function is compiled:

let f = (\x -> f x) :: [a] -> b

GHC gives this error message:

Foo.hs:1:12:
    Couldn't match type `b' with `b1'
      `b' is a rigid type variable bound by
          the inferred type of f :: [a] -> b at Foo.hs:1:1
      `b1' is a rigid type variable bound by
           an expression type signature: [a1] -> b1 at Foo.hs:1:5
    Expected type: [a1] -> b1
      Actual type: [a] -> b
    The function `f' is applied to one argument,
    but its type `[a] -> b' has only one
    In the expression: f x
    In the expression: (\ x -> f x) :: [a] -> b

Foo.hs:1:12:
    Couldn't match type `a' with `a1'
      `a' is a rigid type variable bound by
          the inferred type of f :: [a] -> b at Foo.hs:1:1
      `a1' is a rigid type variable bound by
           an expression type signature: [a1] -> b1 at Foo.hs:1:5
    Expected type: [a1] -> b1
      Actual type: [a] -> b
    The function `f' is applied to one argument,
    but its type `[a] -> b' has only one
    In the expression: f x
    In the expression: (\ x -> f x) :: [a] -> b

The erroneous part is:

The function `f' is applied to one argument,
but its type `[a] -> b' has only one
In the expression: f x
In the expression: (\ x -> f x) :: [a] -> b

This error message should not be present, as applying a function to one argument is not a problem.

This happens in GHCi as well.

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