On 5 March 2011 10:45, Yves Parès <limestr...@gmail.com> wrote: > Hello, > > For testing purposes, I am trying to make an overlay to IO which carries a > phantom type to ensure a context. > I define contexts using empty type classes : > > class CtxFoo c > class CtxBar c > > The overlay : > > newtype MyIO c a = MyIO (IO a) > > Then I define some methods that run only a specific context : > > runFoo :: (CtxFoo c) => MyIO c a -> IO a > runFoo (MyIO x) = x > > runBar :: (CtxBar c) => MyIO c a -> IO a > runBar (MyIO x) = x > > And then an action that runs in context 'Foo' : > > someAction :: (CtxFoo c) => MyIO c () > someAction = putStrLn "FOO" > > Then I run it : > > main = runFoo someAction > > But obiously, GHC complains that my type 'c' remains uninstantiated : > > Ambiguous type variable `c' in the constraint: > (CtxFoo c) arising from a use of `runFoo' > Probable fix: add a type signature that fixes these type variable(s) > In the expression: runFoo someAction > In an equation for `main': main = runFoo someAction > > > Is there a way to deal with this ?
Provide an explicit type signature for either runFoo or someAction; this is the same problem as doing "show . read" in that GHC can't tell which instance to use. -- Ivan Lazar Miljenovic ivan.miljeno...@gmail.com IvanMiljenovic.wordpress.com _______________________________________________ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe