Haskell的新功能,但在F#中,可以模式匹配以下内容:
splitStr :: String -> String -> States -> String
splitStr ('\"':xs) acc (SentenceStart | SentenceMiddle) =
splitStr xs acc Quoting
Atom编辑器告诉我在顶部添加{-# LANGUAGE RegularPatterns #-}
pragma以完成上述工作。当我这样做时它告诉我它找不到扩展名。查看known扩展程序列表,最近似乎没有添加RegularPatterns
。我正在使用GHC的7.10.3
版本。我也尝试过编译,它不会工作,所以Atom编辑器在这里没有错。
任何想法如何使这项工作?
答案 0 :(得分:3)
据我所知,你有这些选择。
拆分模式。这是最简单和最常见的选择,除非右侧非常大。 (当它很大时,我仍然会考虑为此定义辅助功能。)
splitStr ('\"':xs) acc SentenceStart = splitStr xs acc Quoting
splitStr ('\"':xs) acc SentenceMiddle = splitStr xs acc Quoting
使用图案防护和where
。
splitStr ('\"':xs) acc s
| SentenceStart <- s = result
| SentenceMiddle <- s = result
where result = splitStr xs acc Quoting
使用视图模式
startOrMiddle SentenceStart = True
startOrMiddle SentenceMiddle = True
startOrMiddle _ = False
splitStr ('\"':xs) acc (True <- startOrMiddle) =
splitStr xs acc Quoting
使用模式同义词和视图模式
-- startOrMiddle as above
pattern StartOrMiddle = (True <- startOrMiddle)
splitStr ('\"':xs) acc StartOrMiddle = splitStr xs acc Quoting
答案 1 :(得分:0)
对于任何想知道的人,RegularPatterns
是HaRP预处理器提供的扩展。 https://hackage.haskell.org/package/harp
我认为,项目在2010年左右被遗弃了,但它仍然保持不变。
至于消息本身,它似乎是由hlint使用的haskell-src-exts生成的解析错误。