代码之家  ›  专栏  ›  技术社区  ›  Zazaeil

blaze html,haskell,正确的html用法?

  •  -1
  • Zazaeil  · 技术社区  · 6 年前

    有两件事我想不通: 1)没有 {-# LANGUAGE OverloadedStrings #-} 在典型的代码中,纯字符串作为属性的参数传递,没有一个是有效的;然而,只要指令存在,一切都是正常的。在这种特殊情况下它做什么?在生产代码中使用它有多安全?

    2)以下代码: (toHtml $ "<script ... ></script>") 因为一些我不太明白的事情而失败:

    不明确的类型变量a0来自文本… 防止解决约束(data.string.isstring a0)。 可能的修复:使用类型注释来指定a0应该是什么。 这些潜在实例存在: 实例data.string.isstring h.attributeValue——在blaze-markup-0.8.2.1中定义:text.blaze.internal instance data.string.isstring h.tag——在blaze-markup-0.8.2.1中定义:text.blaze.internal 实例a~char=>data.string.isstring[a]——在“data.string”中定义 …外加10个涉及范围外类型的实例

    1 回复  |  直到 6 年前
        1
  •  1
  •   Lucy Maya Menon    6 年前
    1. 在标准haskell中,一个字符串 "foo" 总是被解析为类型的值 String = [Char] .blaze不使用实际的 String 大多数地方的值,而是使用自己的类型,如 AttributeValue 对于每一个语义不同的事物。这意味着在标准的haskell中,没有 OverloadedStrings ,不可能将字符串文本传递给许多blaze函数 属性值 S, Tag 等你准备好 -XOverloadedStrings ,ghc将允许字符串文本具有 Data.String.IsString p => p 而不是 字符串 ,因此您可以在任何具有 IsString 是预期的。这被所有的“标准”blaze代码使用。 重载字符串 是一个相当简单的扩展——它基本上是为字符串文本做什么 Num 对整型文字来说是这样的——我不知道有什么大的争议。我认为在生产代码中使用它应该是安全的,一些生产代码库使用它。

    2. 此错误消息是由于 toHtml 在第一个参数的类型上被普遍量化,有一些限制: toHtml :: ToMarkup a => a -> Html ,和--- 重载字符串 ---字符串的类型也是类型变量。基本上,ghc知道字符串文本的类型,它将被传递到 目标HTML 需要是某种类型,并且该类型需要有 ToMarkup 伊斯特林 ,但它没有任何方法可以确定该类型是什么!在本例中,看起来您可能正在寻找字符串文本实际上具有类型 字符串 这里,您可以通过手动注释文字来获得: toHtml ("foo" :: String) ,或使用 -XTypeApplications 以下内容: toHtml @String "foo" 是的。