From a83d29995d096cca1ceff7042b73080db69219cf Mon Sep 17 00:00:00 2001 From: Krzysztof Gogolewski Date: Thu, 10 Jun 2021 16:54:10 +0200 Subject: Fix error message for record updates, #19972 Fix found by Adam Gundry. --- compiler/GHC/Tc/Types/Origin.hs | 2 +- .../tests/parser/should_fail/RecordDotSyntaxFail13.stderr | 10 ++++------ 2 files changed, 5 insertions(+), 7 deletions(-) diff --git a/compiler/GHC/Tc/Types/Origin.hs b/compiler/GHC/Tc/Types/Origin.hs index e35f5ba385..cb15e962f6 100644 --- a/compiler/GHC/Tc/Types/Origin.hs +++ b/compiler/GHC/Tc/Types/Origin.hs @@ -526,7 +526,7 @@ exprCtOrigin (HsMultiIf _ rhs) = lGRHSCtOrigin rhs exprCtOrigin (HsLet _ _ e) = lexprCtOrigin e exprCtOrigin (HsDo {}) = DoOrigin exprCtOrigin (RecordCon {}) = Shouldn'tHappenOrigin "record construction" -exprCtOrigin (RecordUpd {}) = Shouldn'tHappenOrigin "record update" +exprCtOrigin (RecordUpd {}) = RecordUpdOrigin exprCtOrigin (ExprWithTySig {}) = ExprSigOrigin exprCtOrigin (ArithSeq {}) = Shouldn'tHappenOrigin "arithmetic sequence" exprCtOrigin (HsPragE _ _ e) = lexprCtOrigin e diff --git a/testsuite/tests/parser/should_fail/RecordDotSyntaxFail13.stderr b/testsuite/tests/parser/should_fail/RecordDotSyntaxFail13.stderr index 8b5369731f..24c3f2a59b 100644 --- a/testsuite/tests/parser/should_fail/RecordDotSyntaxFail13.stderr +++ b/testsuite/tests/parser/should_fail/RecordDotSyntaxFail13.stderr @@ -1,14 +1,12 @@ -RecordDotSyntaxFail13.hs:26:11: - Couldn't match type ‘Int’ with ‘Foo -> Int’ +RecordDotSyntaxFail13.hs:26:11: error: + • Couldn't match type ‘Int’ with ‘Foo -> Int’ arising from a functional dependency between: constraint ‘HasField "foo" Foo (Foo -> Int)’ - << This should not appear in error messages. If you see this - in an error message, please report a bug mentioning ‘record update’ at - https://gitlab.haskell.org/ghc/ghc/wikis/report-a-bug >> + arising from a record update instance ‘HasField "foo" Foo Int’ at RecordDotSyntaxFail13.hs:21:10-31 - In the second argument of ‘($)’, namely ‘a {foo}’ + • In the second argument of ‘($)’, namely ‘a {foo}’ In a stmt of a 'do' block: print $ a {foo} In the expression: do let a = ... -- cgit v1.2.1