哈斯克尔.带有OverloadedStrings的TagSoup库

Dfr*_*Dfr 5 haskell

美好的一天,问题是相当noobish,但我坚持下去.

我决定从普通字符串迁移在我的项目,以文字和面临的问题,在源中的所有字符串产生编译错误添加后{ - #语言OverloadedStrings# - },例如网页摘要:

dropWhile (~/= "<li>") tags
Run Code Online (Sandbox Code Playgroud)

现在导致

由于使用`〜==' t' in the constraints: 而产生的文字"<li>"' at ParserOx.hs:93:42-47 TagRep t'的模糊类型变量Data.String.IsString t '

这可能有什么问题?

UPD:

是的,我的所有功能都有签名,例如:

getContainer :: [Tag Text] -> [Tag Text]
getContainer tags = 
  h
    where 
      (h:t) = sections (~== "<div id=\"itemscontainer\">") tags
Run Code Online (Sandbox Code Playgroud)

scl*_*clv 8

问题是你有一个带有两个约束的模糊类型- 由重载字符串给出的isstring约束,以及tagsoup用来允许你交替使用标签或字符串的tagrep约束.因此,两种"重载"字符串的方法(一般是一种,一种只是用于tagoup的匹配器)相互碰撞并引起混淆.要么关闭违规文件中的重载字符串,要么将字符串指定为代码中的实际字符串(即(~/= ("<li>"::String))).您可以执行以下操作以更安静地强制类型,而不是内联类型签名:

s :: String -> String
s = id
.... (~/= s "<li>") ...
Run Code Online (Sandbox Code Playgroud)