Skip to content

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

{-# 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.

Trac metadata
Trac field Value
Version 8.6.3
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