Opened 7 months ago

Closed 7 months ago

#16401 closed bug (duplicate)

Bad error message if we use TypeApplications with an identifier that doesn't exist

Reported by: Fuuzetsu Owned by:
Priority: normal Milestone:
Component: Compiler Version: 8.6.3
Keywords: Cc:
Operating System: Unknown/Multiple Architecture: Unknown/Multiple
Type of failure: None/Unknown Test Case:
Blocked By: Blocking:
Related Tickets: #13834 Differential Rev(s):
Wiki Page:

Description

{-# LANGUAGE TypeApplications #-}
{-# LANGUAGE DataKinds #-}
module BadError where

foo :: Int
foo = doesNotExist @123

{-
[1 of 1] Compiling BadError         ( BadError.hs, BadError.o )

BadError.hs:6:7: error:
    • Cannot apply expression of type ‘t1’
      to a visible type argument ‘123’
    • In the expression: doesNotExist @123
      In an equation for ‘foo’: foo = doesNotExist @123
  |
6 | foo = doesNotExist @123
-}

What I would expect is for it to say that doesNotExist is not bound as one might reasonably expect. This is very, very confusing and easy to hit in real life. If you are exposing a function f, using it somewhere with f @123 but then later decide to remove or rename f, the error message doesn't suggest at all that f has disappeared and leaves the user scratching their head.

Change History (1)

comment:1 Changed 7 months ago by RyanGlScott

Resolution: duplicate
Status: newclosed

Thanks for the bug report. This is "fixed" in GHC 8.8 in the sense that it will at least report that doesNotExist is not in scope:

[1 of 1] Compiling BadError         ( Bug.hs, interpreted )

Bug.hs:6:7: error: Variable not in scope: doesNotExist
  |
6 | foo = doesNotExist @123
  |       ^^^^^^^^^^^^

Bug.hs:6:7: error:
    • Cannot apply expression of type ‘t1’
      to a visible type argument ‘123’
    • In the expression: doesNotExist @123
      In an equation for ‘foo’: foo = doesNotExist @123
  |
6 | foo = doesNotExist @123
  |       ^^^^^^^^^^^^^^^^^

Of course, there's still the confusing "Cannot apply expression" part. That has previously been reported as #13834, so to avoid ticket duplication, I'll close this ticket in favor of that one.

Note: See TracTickets for help on using tickets.