@@ -168,6 +168,11 @@ data EffM : (m : Type -> Type) -> (x : Type)
168168 liftP : (prf : SubList ys xs) ->
169169 EffM m t ys ys' -> EffM m t xs (\v => updateWith (ys' v) xs prf)
170170
171+ new : Handler e' m => (e : EFFECT) -> resTy ->
172+ {auto prf : e = MkEff resTy e'} ->
173+ EffM m t (e :: es) (\v => e :: es) ->
174+ EffM m t es (\v => es)
175+
171176 (:-) : (l : ty) ->
172177 EffM m t [x] xs' -> -- [x] (\v => xs) ->
173178 EffM m t [l ::: x] (\v => map (l :::) (xs' v))
@@ -263,6 +268,8 @@ eff env (callP prf effP) k = execEff env prf effP k
263268eff env (liftP prf effP) k
264269 = let env' = dropEnv env prf in
265270 eff env' effP (\p', envk => k p' (rebuildEnv envk prf env))
271+eff env (new (MkEff resTy newEff) res {prf=Refl} effP) k
272+ = eff (res :: env) effP (\p', (val :: envk) => k p' envk)
266273-- FIXME:
267274-- xs is needed explicitly because otherwise the pattern binding for
268275-- 'l' appears too late. Solution seems to be to reorder patterns at the