[Haskell-beginners] Re: Help! Trapped in the IO Monad!
apfelmus at quantentunnel.de
Thu Jan 29 05:58:51 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)
> You might also look at Control.Monad.filterM. I often define a
> function "partitionM" which is like partition except it uses a monadic
> test, just like you have.
splitDirFile ps =
((map fst *** map fst) . partition snd . zip ps)
`liftM` mapM doesDirectoryExist ps
There is no need to rewrite partition , you can reuse it.
Hm, the plumbing seems slightly cumbersome to me, maybe Conal's editor
More information about the Beginners