表达式中的模式语法
Pattern syntax in expression
我想知道为什么我会收到此错误,因为我没有使用任何 pattern.In 我的案例 我没有在 filterM
的 lambda
.[=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 表达式,使用 flip
和 notElem
可能更简洁:
filterFiles = filter (flip notElem [".",".."])
我想知道为什么我会收到此错误,因为我没有使用任何 pattern.In 我的案例 我没有在 filterM
的 lambda
.[=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 表达式,使用 flip
和 notElem
可能更简洁:
filterFiles = filter (flip notElem [".",".."])