On Tue, Aug 13, 2013 at 10:45 PM, <bri...@aracnet.com> wrote:

> fooBar =
>     do putStrLn "foo"
>        return True
>
> so then I thought, aha!, all I need to do is understand the type of
> "return True" and all will be revealed to me.  Well, it's this:
>
>  Control.Monad.Trans.Reader.ReaderT
>        (GHC.Ptr.Ptr Gtk.EExpose) IO Bool
>
> just like the error message says.
>
> Still don't know what that's supposed to be.  I'm having trouble tracking
> down
>
> Control.Monad.Trans.Reader.ReaderT
>

In this case, all you need to know is the Control.Monad.Trans part and the
IO underneath; this tells you that you can use `lift` and possibly `liftIO`
to get at the IO.

    fooBar = do
        liftIO $ putStrLn "foo"
        return True

If `liftIO` complains about a missing MonadIO instance, file a bug :) but
you can also get there by using `lift` to reach it; in this case you only
need it once, but for more deeply nested transformers you may need it
multiple times (e.g. `lift . lift . lift $ putStrLn "foo"` for a stack of 3
transformers over IO).

-- 
brandon s allbery kf8nh                               sine nomine associates
allber...@gmail.com                                  ballb...@sinenomine.net
unix, openafs, kerberos, infrastructure, xmonad        http://sinenomine.net
_______________________________________________
Haskell-Cafe mailing list
Haskell-Cafe@haskell.org
http://www.haskell.org/mailman/listinfo/haskell-cafe

Reply via email to