我有一个使用 Text.Regex.PCRE 的正则表达式,效果很好:
[[_,_id,_name]] = "199mercury" =~ "(\\d+)(\\w+) :: [[String]]
但是,我在 {-# LANGUAGE OverloadedStrings #-} 中添加了使用 aeson(json 库)并在 =~ 上得到一个实例错误:
<interactive>:33:14:
No instances for (RegexMaker Regex CompOption ExecOption source0,
RegexContext Regex source10 target0)
arising from a use of `=~'
Possible fix:
add instance declarations for
(RegexMaker Regex CompOption ExecOption source0,
RegexContext Regex source10 target0)
In the expression: "199mercury" =~ "(\\d+(\\w+)"
In an equation for `it': it = "199mercury" =~ "(\\d+(\\w+)"
搜索修复似乎是将正则表达式更改为:
getAllTextSubmatches ("199mercury" =~ "(\\d+(\\w+)" :: AllTextSubmatches [] String)
但这似乎只是给了我另一个实例错误:
No instances for (RegexMaker Regex CompOption ExecOption source0,
RegexContext Regex source10 (AllTextSubmatches [] String))
放在这里的正确类型是什么?我尝试的任何方法似乎都不起作用。似乎 OverloadedStrings 是问题所在,但除了仅将 Data.Text.pack 与 aeson 一起使用之外,我找不到任何解决方案,但我想弄清楚我在使用正则表达式时做错了什么。我很好奇 Text.Regex 不能与 OverloadedStrings 一起使用是否存在问题,但我找不到任何证据。