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:


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 mpickering

Differential Rev(s): Phab:D3379
Status: newpatch
Note: See TracTickets for help on using tickets.