Mam następujący kod:Czy partycję można zastosować do `a -> IO Bool`?
import System.Directory
import System.FilePath
import Control.Monad (filterM)
filesAndDirs dir = do
entries <- getDirectoryContents dir
let filtered = [dir </> e | e <- entries, e `notElem` [".", ".."]]
files <- filterM doesFileExist filtered
dirs <- filterM doesDirectoryExist filtered
return (files, dirs)
Chciałbym napisać coś takiego jak return $ partitionM doesFileExist filtered
. Czy istnieje sposób na ponowne użycie lub podniesienie numeru partition
lub podwójne użycie numeru filterM
w najlepszy sposób?
Zakładasz każdy element 'filtered' jest albo plikiem lub katalogiem. To niekoniecznie jest prawdą. – melpomene
http://www.haskell.org/pipermail/beginners/2009-December/002882.html. To może pomóc. –
@melpomene, tak, to mi się nie przydarzyło (mam tylko pliki i katalogi w lokalizacjach, na które patrzę). W porządku, ale jestem bardziej ciekawy ogólnego przypadku, niekoniecznie dla funkcji System.Directory. @Dave, nie jestem jedynym, który się wtedy zastanawia :). Nie mogę uwierzyć, że wyszukiwarka google nie zwróciła tego podczas wyszukiwania na 'partitionM'. Wygląda na to, że w bibliotece nie ma czegoś łatwego ... – huynhjl