Синтаксис шаблона в выражении - PullRequest
0 голосов
/ 04 января 2019

Мне интересно, почему я получаю эту ошибку, поскольку я не использовал ни одного шаблона. В моем случае я не сопоставил шаблон с filterM lambda.

Ошибка

 Pattern syntax in expression context: x -> not (x `elem` [".", ".."])
   |
20 |     filterFiles =filterM (x->not (x `elem` [".",".."]))
   |                           ^^^^^^^^^^^^^^^^^^^^^^^

Я просто хочу отфильтровать файлы в данном каталоге

Код

  module Fil where

    import System.Directory
    import Control.Monad(filterM)

    getFiles::FilePath->IO [String]
    getFiles  = getDirectoryContents

    filterFiles::[String]->IO [String]
    filterFiles =filterM (x-> not ( x `elem` [".",".."]))

Ответы [ 2 ]

0 голосов
/ 04 января 2019

Функция filterFiles не включает IO, использование filter может подходить как:

filterFiles::[String]->[String]
filterFiles = filter (\x-> not ( x `elem` [".",".."]))

В противном случае, вместо использования лямбда-выражения, использование flip и notElem можетбыть более кратким, как:

filterFiles = filter (flip notElem [".",".."])
0 голосов
/ 04 января 2019

Вы забыли включить лямбду.

filterFiles =filterM (\x-> not ( x `elem` [".",".."]))
                      ^ here
...