
5 Mar
2011
5 Mar
'11
11:46 a.m.
On Sat, 2011-03-05 at 00:51 +0100, Yves Parès wrote:
But I don't have an explicit type to put. I cound do:
data CtxFooInst instance CtxFoo CtxFooInst
and declare runFoo as this:
runFoo :: MyIO CtxFooInst a -> IO a
But I loose the ability to make functions that can run several contexts.
He meant: newtype MyIO c a = MyIO (IO a) data CtxFooInst instance CtxFoo CtxFooInst runMyIO :: CtxFoo c => MyIO c a -> IO a runMyIO (MyIO x) = x someAction :: CtxFoo c => MyIO c () someAction = MyIO (PutStrLn "Foo") main = runMyIO (someAction :: MyIO CtxFooInst ()) In such way you push the abstraction down to main but actions are contex-independent. Regards