Operators not allowed as fields in Record Pattern Synonyms
I want to write the following record pattern synonym
pattern MkOp :: Op -> Exp -> Exp -> Exp
pattern MkOp {(·), a, b} <- (splitOp -> Just ((·), a, b))
where MkOp (·) a b = a · b
given this code
data Exp = Val Int | Add Exp Exp | Mul Exp Exp deriving Show
type Op = Exp -> Exp -> Exp
splitOp :: Exp -> Maybe (Op, Exp, Exp)
splitOp (Add a b) = Just (Add, a, b)
splitOp (Mul a b) = Just (Mul, a, b)
splitOp _ = Nothing
It works fine if (·) is replaced by operator. Fields of regular data types works just fine:
data F a = F {
(·) :: a -> a -> a,
x :: a,
y :: a
}
f F{(·), x, y} = x·y
g F{..} = x·y
Trac metadata
| Trac field | Value |
|---|---|
| Version | 8.0.1 |
| Type | Bug |
| TypeOfFailure | OtherFailure |
| Priority | normal |
| Resolution | Unresolved |
| Component | Compiler |
| Test case | |
| Differential revisions | |
| BlockedBy | |
| Related | |
| Blocking | |
| CC | |
| Operating system | |
| Architecture |