[Haskell-cafe] Use of uninstantiated type class
Yves Parès
limestrael at gmail.com
Sat Mar 5 00:51:20 CET 2011
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.
2011/3/5 Ivan Lazar Miljenovic <ivan.miljenovic at gmail.com>
> On 5 March 2011 10:45, Yves Parès <limestrael at 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.Miljenovic at gmail.com
> IvanMiljenovic.wordpress.com
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://www.haskell.org/pipermail/haskell-cafe/attachments/20110305/3b2d624a/attachment.htm>
More information about the Haskell-Cafe
mailing list