I'm a beginner as well, and I explored how to use the maybeT transformer and wrote it up on my blog across a few posts. Mostly they were just for my own learning purposes, but maybe you can find something in them too?

http://watchchrislearn.com/blog/2013/11/28/playing-with-the-either-monad/
http://watchchrislearn.com/blog/2013/11/30/using-the-either-monad-inside-another-monad/
http://watchchrislearn.com/blog/2013/11/30/eithert-inside-of-io/
http://watchchrislearn.com/blog/2013/12/01/working-entirely-in-eithert/




On Mon, Mar 3, 2014 at 8:21 AM, David McBride <toad3k@gmail.com> wrote:
cabal install maybet

import Control.Monad.Maybe

f1 :: IO (Maybe Int)
f1 = return . Just $ 1

d2 :: Int -> IO (Maybe String)
d2 = return . Just . show

blah :: IO (Maybe (Int, String))
blah = do
  runMaybeT $ do
  a <- MaybeT f1
  b <- MaybeT $ d2 a
  return (a,b)

Or slightly rewritten:

f1 :: MaybeT IO Int
f1 = return 1
-- f1 = fail "why oh why?!?"

d2 :: Int -> MaybeT IO String
d2 = return . show

blah = do
  runMaybeT $ do

  a <- f1
  b <- d2 a
  return (a,b)



On Mon, Mar 3, 2014 at 10:10 AM, Nathan Hüsken <nathan.huesken@posteo.de> wrote:

Hey,

I want to write a function, which is basically a concatenation of functions of type “IO (Maybe a)”.
When they all where of type “Maybe a”, no Problem I would simple use the Maybe monad.

func :: Maybe c
func = do
  a <- f1
  b <- d2 a
  ...

but now they are of type “IO (Maybe a)”. Is there some way of combing these in a similar smart way?

Thanks!
Nathan


_______________________________________________
Beginners mailing list
Beginners@haskell.org
http://www.haskell.org/mailman/listinfo/beginners



_______________________________________________
Beginners mailing list
Beginners@haskell.org
http://www.haskell.org/mailman/listinfo/beginners