@@ -350,10 +350,16 @@ toPats reflect tc f = reverse (toPat reflect tc (getArgs f)) where
350toPat :: Bool -> Bool -> [Term] -> [Pat]
350toPat :: Bool -> Bool -> [Term] -> [Pat]
351toPat reflect tc = map $ toPat' []
351toPat reflect tc = map $ toPat' []
353− toPat' [_,_,arg](P (DCon t a uniq) nm@(UN n) _)
353+ toPat' [_,_,arg] (P (DCon t a uniq) nm@(UN n) _)
354 | n == txt "Delay"
354 | n == txt "Delay"
355 = PCon uniq nm t [PAny, PAny, toPat' [] arg]
355 = PCon uniq nm t [PAny, PAny, toPat' [] arg]
357+ toPat' args (P (DCon t a uniq) nm@(NS (UN n) [own]) _)
358+ | n == txt "Read" && own == txt "Ownership"
359+ = PCon False nm t (map shareCons (map (toPat' []) args))
360+ where shareCons (PCon _ n i ps) = PCon False n i (map shareCons ps)
357 toPat' args (P (DCon t a uniq) n _)
363 toPat' args (P (DCon t a uniq) n _)
358 = PCon uniq n t $ map (toPat' []) args
364 = PCon uniq n t $ map (toPat' []) args