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 |