我已经设法用这个Haskell代码打印目录列表:
import Control.Monad
import Control.Applicative
import System.Directory
main :: IO()
main = do
all <- listDirectory "x:/n"
mapM_ print all
Run Code Online (Sandbox Code Playgroud)
但是现在我想用System.Direcorty模块中的didFileExist函数过滤所有函数,并且无法理解如何正确使用它:
import Control.Monad
import Control.Applicative
import System.Directory
main :: IO()
main = do
all <- listDirectory "x:/n"
mapM_ print (filterM doesFileExist all)
Run Code Online (Sandbox Code Playgroud)
上面的代码没有编译错误:
* No instance for (Foldable IO) arising from a use of `mapM_'
* In a stmt of a 'do' block:
mapM_ print (filterM doesFileExist all)
In the expression:
do all <- listDirectory "x:/n"
mapM_ print (filterM doesFileExist all)
In an equation for `main':
main
= do all <- listDirectory "x:/n"
mapM_ print (filterM doesFileExist all)
mapM_ print (filterM doesFileExist all)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Run Code Online (Sandbox Code Playgroud)
我想我已经错过了一些基本的东西,所以,请帮我找到理解我所缺少的方法.谢谢
使用另一个<-:
main = do
all <- listDirectory "x:/n"
filtered <- filterM doesFileExist all
mapM_ print filtered
Run Code Online (Sandbox Code Playgroud)