@@ -350,10 +350,16 @@ toPats reflect tc f = reverse (toPat reflect tc (getArgs f)) where
350350toPat :: Bool -> Bool -> [Term] -> [Pat]
351351toPat reflect tc = map $ toPat' []
352352 where
353− toPat' [_,_,arg](P (DCon t a uniq) nm@(UN n) _)
353+ toPat' [_,_,arg] (P (DCon t a uniq) nm@(UN n) _)
354354 | n == txt "Delay"
355355 = PCon uniq nm t [PAny, PAny, toPat' [] arg]
356356
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)
361+ shareCons p = p
362+
357363 toPat' args (P (DCon t a uniq) n _)
358364 = PCon uniq n t $ map (toPat' []) args
359365