表达式中的模式语法

Pattern syntax in expression

我想知道为什么我会收到此错误,因为我没有使用任何 pattern.In 我的案例 我没有在 filterMlambda.[=14 上进行模式匹配=]

错误

 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` [".",".."]))

您忘记包含 lambda。

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

函数filterFiles不涉及IO,使用filter可能适合:

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

否则,不使用 lambda 表达式,使用 flipnotElem 可能更简洁:

filterFiles = filter (flip notElem [".",".."])