Opened 16 months ago

Closed 4 months ago

#13777 closed bug (fixed)

Poor error message around CUSKs

Reported by: goldfire Owned by:
Priority: normal Milestone: 8.6.1
Component: Compiler Version: 8.2.1-rc2
Keywords: TypeInType, CUSKs Cc:
Operating System: Unknown/Multiple Architecture: Unknown/Multiple
Type of failure: None/Unknown Test Case:
Blocked By: Blocking:
Related Tickets: Differential Rev(s): Phab:D4771
Wiki Page:

Description

While typing up comment:7:ticket:13761, I came across a poor error message around CUSKs.

data Proxy (a :: k) = P
data S :: forall k. Proxy k -> Type where
  MkS :: S (P :: Proxy Maybe)

produces

    You have written a *complete user-suppled kind signature*,
    but the following variable is undetermined: k0 :: *
    Perhaps add a kind signature.
    Inferred kinds of user-written variables:

That promised list of the kinds of user-written variables is empty. Either GHC should find something to print (like k :: k0, perhaps) or omit the header.

Change History (3)

comment:1 Changed 4 months ago by RyanGlScott

Differential Rev(s): Phab:D4771
Status: newpatch

comment:2 Changed 4 months ago by Ben Gamari <ben@…>

In ac91d073/ghc:

Fix #13777 by improving the underdetermined CUSK error message

The error message that GHC emits from underdetermined CUSKs
is rather poor, since:

1. It may print an empty list of user-written variables if there
    are none in the declaration.
2. It may not mention any `forall`-bound, underdetermined
    variables in the result kind.

To resolve these issues, this patch:

1. Doesn't bother printing a herald about user-written
    variables if there are none.
2. Prints the result kind to advertise any
    underdetermination it may exhibit.

Test Plan: make test TEST=T13777

Reviewers: goldfire, bgamari

Reviewed By: goldfire

Subscribers: rwbarton, thomie, carter

GHC Trac Issues: #13777

Differential Revision: https://phabricator.haskell.org/D4771

comment:3 Changed 4 months ago by bgamari

Milestone: 8.6.1
Resolution: fixed
Status: patchclosed
Note: See TracTickets for help on using tickets.