可以将分区应用于`a - > IO Bool`吗?

huy*_*hjl 5 monads haskell

我有以下代码:

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)
Run Code Online (Sandbox Code Playgroud)

我想写的是类似的东西return $ partitionM doesFileExist filtered.有没有办法重用或提升partition或是filterM最佳方式的双重用途?