## 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 |

To upload designs, you'll need to enable LFS and have an admin enable hashed storage. More information