Skip to content

Ungrammatical error message involving a pattern binding

Take a look at this error message from GHC's Typeable1 test case:

Typeable1.hs:22:5: error: [-Winaccessible-code (in -Wdefault), -Werror=inaccessible-code]
    • Couldn't match type ‘ComposeK’ with ‘a3 b3’
      Inaccessible code in
        a pattern with pattern synonym:
          App :: forall k2 (t :: k2).
                 () =>
                 forall k1 (a :: k1 -> k2) (b :: k1).
                 (t ~ a b) =>
                 TypeRep a -> TypeRep b -> TypeRep t,
        in a pattern binding in
             'do' block

In particular, note the "in a pattern binding in 'do' block" part. I think that should be "in **a** 'do' block".

I believe fixing this is a simple matter of applying this patch:

diff --git a/compiler/hsSyn/HsExpr.hs b/compiler/hsSyn/HsExpr.hs
index 96d86c8..a5c65fb 100644
--- a/compiler/hsSyn/HsExpr.hs
+++ b/compiler/hsSyn/HsExpr.hs
@@ -2804,7 +2804,7 @@ pprMatchContextNoun PatBindGuards   = text "pattern binding guards"
 pprMatchContextNoun LambdaExpr      = text "lambda abstraction"
 pprMatchContextNoun ProcExpr        = text "arrow abstraction"
 pprMatchContextNoun (StmtCtxt ctxt) = text "pattern binding in"
-                                      $$ pprStmtContext ctxt
+                                      $$ pprAStmtContext ctxt
 pprMatchContextNoun PatSyn          = text "pattern synonym declaration"
 
 -----------------

Patch incoming.

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