表达式中的模式语法

时间:2019-01-04 06:41:07

标签: haskell monads

我想知道为什么由于没有使用任何模式而出现此错误。在我的情况下,我在filterM的{​​{1}}上没有匹配模式。

错误

lambda

我只想过滤给定目录中的文件

代码

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

2 个答案:

答案 0 :(得分:6)

您忘了包含lambda。

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

答案 1 :(得分:4)

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

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

否则,使用flipnotElem可能会更简洁一些,而不是使用lambda表达式:

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