Как отфильтровать список каталогов с помощью функции hasFileExist в Haskell? - PullRequest
0 голосов
/ 11 февраля 2019

Мне удалось напечатать список каталогов с этим кодом на Haskell:

import Control.Monad
import Control.Applicative
import System.Directory

main :: IO()
main = do
  all <- listDirectory "x:/n"
  mapM_ print all

Но теперь я хочу отфильтровать все с помощью функции doFileExist из модуля System.Direcorty и не могу понять, как это сделать.используйте его правильно:

import Control.Monad
import Control.Applicative
import System.Directory

main :: IO()
main = do
  all <- listDirectory "x:/n"
  mapM_ print (filterM doesFileExist all) 

приведенный выше код не компилируется с ошибкой:

  * 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)
   ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

Полагаю, я что-то упустил, так что, пожалуйста, дайте мнерукой найти способ понять, чего мне не хватает.Спасибо

1 Ответ

0 голосов
/ 11 февраля 2019

Используйте другое <-:

main = do
  all <- listDirectory "x:/n"
  filtered <- filterM doesFileExist all
  mapM_ print filtered
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...