Opened 4 years ago

Closed 19 months ago

#12093 closed bug (duplicate)

Wrong argument count in error message with TypeApplications

Reported by: kwf Owned by:
Priority: normal Milestone:
Component: Compiler (Type checker) Version: 8.0.1
Keywords: TypeApplications Cc: goldfire
Operating System: Unknown/Multiple Architecture: Unknown/Multiple
Type of failure: Incorrect warning at compile-time Test Case:
Blocked By: Blocking:
Related Tickets: #13902 Differential Rev(s):
Wiki Page:

Description

When I write:

{-# language TypeApplications #-}

module Bug where

wrong = id @Bool True False

I get the error:

    • Couldn't match expected type ‘Bool -> t’ with actual type ‘Bool’
    • The function ‘id’ is applied to three arguments,
      but its type ‘Bool -> Bool’ has only one
      In the expression: id @Bool True False
      In an equation for ‘bad’: bad = id @Bool True False
    • Relevant bindings include bad :: t (bound at Bug.hs:8:1)

This seems to tell me that I ought to get rid of two of the arguments given to id, when in fact I only ought to remove one. In particular, the issue seems to be that GHC includes visibly applied type parameters in the count of "how many arguments is it applied to?" but does not include them in the count of "how many arguments does it have?"

Suggested fix: in cases of this error with visible type application, report something akin to, "The function ‘id’ is applied to two type arguments and two value arguments, but its type has only one value argument."

Change History (2)

comment:1 Changed 4 years ago by goldfire

Keywords: TypeApplications added

comment:2 Changed 19 months ago by RyanGlScott

Resolution: duplicate
Status: newclosed

This was fixed in #13902. The error message now reads:

Bug.hs:5:9: error:
    • Couldn't match expected type ‘Bool -> t’ with actual type ‘Bool’
    • The expression ‘id @Bool’ is applied to two arguments,
      but its type ‘Bool -> Bool’ has only one
      In the expression: id @Bool True False
      In an equation for ‘wrong’: wrong = id @Bool True False
    • Relevant bindings include wrong :: t (bound at Bug.hs:5:1)
  |
5 | wrong = id @Bool True False
  |         ^^^^^^^^^^^^^^^^^^^
Note: See TracTickets for help on using tickets.