
hi,
My problem is I cannot figure out how to define one "runner" for my Effect that can deal with operations with different result types.
afaict you have two possibilities. * `OpenFile` is essentially a `Reader Handle` and `readFrom :: (SetMember Lift IO r, Member OpenFile r) => Eff r Char` asks for the handle and works with that (in `IO`). * if you don't want to impose `SetMember Lift IO`, you will have to live with a sum type in your `OpenFile`, but not with `Result`. just use data OpenFile v = Read (Char -> v) | EOF (Bool -> v) deriving Typeable btw: i find working with `ScopedTypeVariables` easier than using your `asTypeOf`. but even then, you should maybe define your own prj' :: Union (OpenFile :> r) (VE (OpenFile :> r) result) -> Maybe (OpenFile (VE (OpenFile :> r) result)) prj' = prj iff you really need it, which you don't in this example. have fun with extensible effects, tob