[Haskell-cafe] IO (Either a Error) question

Ryan Ingram ryani.spam at gmail.com
Sat May 1 17:42:26 EDT 2010


Check out ErrorT in Control.Monad.Error

> :t ErrorT
ErrorT :: m (Either e a) -> ErrorT e m a

> :info ErrorT
instance (Monad m, Error e) => Monad (ErrorT e m)

> :info Error
class Error e where
    noMsg :: e
    strMsg :: String -> e

So, if you can make your Error type an instance of this class, you can do this:

runCalc = runErrorT (ErrorT (func1 p) >>= ErrorT . func2)

The restriction to the typeclass Error is to allow implementation of
the "fail" method in Monad.

  -- ryan


2010/5/1 Eugeny N Dzhurinsky <bofh at redwerk.com>:
> Hello!
>
> I have some sort of strange question:
>
> assume that there are 2 functions
>
> func1 :: Int -> IO (Either Error String)
> func2 :: String -> IO (Either Error [String])
>
> in case if there will be no IO involved, I could use
> Control.Monad.Either and write something like
>
> runCalc :: Int -> IO (Either Error [String])
> runCalc param = func1 param >>= func2
>
> but with that IO stuff I can't simply do in this way. Can somebody please
> suggest, how to combine IO and Either monads, if that's even possible?
>
> Thank you in advance!
>
> --
> Eugene Dzhurinsky
>
> _______________________________________________
> Haskell-Cafe mailing list
> Haskell-Cafe at haskell.org
> http://www.haskell.org/mailman/listinfo/haskell-cafe
>
>


More information about the Haskell-Cafe mailing list