
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.
How about 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 combinators http://conal.net/blog/posts/semantic-editor-combinators/ can help. Regards, apfelmus -- http://apfelmus.nfshost.com