(+.+) (C f) (C g) = C \rw c.g Rd (f Rd c)
fresh :: (Int -> (Code a p)) -> (Code a p)
-fresh f = C \rw c.unC (f c.fresh) rw {c & fresh = c.fresh + 1}
+fresh f = C \rw c.unC (f c.fresh) rw {CODE | c & fresh = c.fresh + 1}
freshMTask :: (Int -> (Code a p)) -> (Code a p)
-freshMTask f = C \rw c.unC (f c.freshMTask) rw {c & freshMTask = c.freshMTask + 1}
+freshMTask f = C \rw c.unC (f c.freshMTask) rw {CODE | c & freshMTask = c.freshMTask + 1}
setCode :: Def -> (Code a p)
setCode d = C \rw c.{c & def = d}