Opened 8 days ago

Last modified 3 days ago

## #13454 patch bug

# Operators not allowed as fields in Record Pattern Synonyms

Reported by: | Iceland_jack | Owned by: | |
---|---|---|---|

Priority: | normal | Milestone: | |

Component: | Compiler | Version: | 8.0.1 |

Keywords: | PatternSynonyms | Cc: | |

Operating System: | Unknown/Multiple | Architecture: | Unknown/Multiple |

Type of failure: | None/Unknown | Test Case: | |

Blocked By: | Blocking: | ||

Related Tickets: | Differential Rev(s): | Phab:D3379 | |

Wiki Page: |

### Description

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

### Change History (1)

### comment:1 Changed 3 days ago by

Differential Rev(s): | → Phab:D3379 |
---|---|

Status: | new → patch |

**Note:**See TracTickets for help on using tickets.