[Haskell-beginners] Help! Trapped in the IO Monad!

Erik de Castro Lopo mle+cl at mega-nerd.com
Wed Jan 28 20:18:23 EST 2009


Alexander Dunlap wrote:

> You can do (something like; this is untested)
> 
> splitDirFile :: [FilePath] -> IO ([FilePath],[FilePath])
> splitDirFile [] = return ([],[])
> splitDirFile (f:fs) = do
>   (yess,nos) <- splitDirFile fs
>   exists <- doesDirectoryExist f
>   return $ if exists
>     then (f:yess,nos)
>     else (yess,f:nos)

Untested, but seems to work perfectly :-). Thanks.

However, that brings me to the next stage where again I'm trapped.
I would like to do a foldl' on a function that returns IO [FilePath].

I tried using Control.Monad.foldM, but then I end up with a function
taht return :

   IO (IO ([FilePath]))

which doesn't work :-).

It seems pretty obvious that I could implement a recursion like
Alexander did above for splitDirFile but I was wondering if there
was a more general solution.

Cheers,
Erik
-- 
-----------------------------------------------------------------
Erik de Castro Lopo
-----------------------------------------------------------------
Heisenbugs - The bugs that go away when you turn on debugging.


More information about the Beginners mailing list