Skip to content

confusing language in error message

Late last night I was finding myself very confused by the following (in retrospect obvious error message)

src/Numerical/OpenBLAS/BLAS.hs:41:44:
    A pattern match on a GADT requires GADTs or TypeFamilies
    In the pattern: SRow
    In the pattern: DenseMatrix SRow _ _ _ _
    In an equation for ‛encodeNiceOrderHelper’:
        encodeNiceOrderHelper (DenseMatrix SRow _ _ _ _)
          = encodeOrder BLASRowMajor

the error is correct per se, but reading (at least late at night) made me think "wait, how is my type not a GADT or TypeFamily?!!?!"

I'm thinking (perhaps ) that

``` A pattern match on a GADT requires GADTs or TypeFamilies `` `

could perhaps be more clearly communicated as

A pattern match on a GADT requires that GADTs or TypeFamilies Language extensions be enabled in the use site module (or something similar)

relatedly: whats the current reasoning for why GADT related matching logic isn't enabled in client modules that use GADTs? (i'm not questioning it, just wondering why)

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