检查路径是否与任何正则表达式匹配而不通过完整列表

时间:2018-05-19 04:44:56

标签: arrays haskell

您好我正在尝试将正则表达式与FilePath匹配来过滤我的文件列表

import Text.Regex.Posix
import System.FilePath

escapePath path = foldr (&&) True $ map (\pat -> not $  (path =~ pat :: Bool)) patterns
                   where
                       patterns = ["\\.",  "\\.\\.", {-- So on --}]

我相信mapfolds会在返回值之前遍历整个列表。

我可以通过做这样的事情来避免使用折叠

escapePath path = not $ elem True (map (\pat -> (path =~ pat :: Bool)) patterns)
                    where
                       patterns = ["\\.",  "\\.\\.", {-- continued --}]

但是在搜索值

之前,我仍会匹配所有模式的路径

如何通过在第一场比赛中返回值来提高效率?

1 个答案:

答案 0 :(得分:5)

  

我相信mapfold会在返回值之前遍历整个列表。

嘿,太好了,一个可证伪的假设,科学的基石!让我们做一个试验来伪造它的实验。对于任何值foo,遍历列表foo:undefined将完全抛出异常。

> head (map id (True:undefined))
True
> foldr (&&) True (False:undefined)
False

enter image description here