On Fri, Apr 3, 2009 at 11:49 AM, Michael Roth <mr...@nessie.de> wrote: > Hello list, > > maybe I'm just stupid, I'm trying to do something like this: > > > import Control.Monad > import Control.Monad.Trans > import Control.Monad.List > > foobar = do > a <- [1,2,3] > b <- [4,5,6] > liftIO $ putStrLn $ (show a) ++ " " ++ (show b) > return (a+b) > > main = do > sums <- foobar > print sums > > > But this apparently doesn't work... I'm total clueless how > to achieve the correct solution. Maybe my mental image > on the monad transformer thing is totally wrong?
Okay, so I think what you want is import Control.Monad import Control.Monad.Trans import Control.Monad.List foobar :: ListT IO Int foobar = do a <- msum . map return $ [1,2,3] b <- msum . map return $ [4,5,6] liftIO $ putStrLn $ (show a) ++ " " ++ (show b) return (a+b) main = do sums <- runListT foobar print sums There were a couple of things going on here: first, that you tried to use literal list syntax in do notation which I believe only works in the actual [] monad. Second, you didn't have the runListT acting on the foobar, which is how you go from a ListT IO Int to a IO [Int]. _______________________________________________ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe