Css 如何构造地图文本对象?

Css 如何构造地图文本对象?,css,string,haskell,Css,String,Haskell,我是Haskell的新手,我正在尝试用一个名为Reflect的库构建一个简单的网站。Dom和层叠样式表(CSS)表示为一个映射文本对象,这很好,但Haskell区分了三个几乎相同的对象: String Text [Char] 当然,在Python或JavaScript中,它们是相同或几乎相同的,并且函数可以在一个对象和另一个对象之间互换使用。哈斯克尔的情况并非如此 "style" =: pack("color:red") 怎么样 "style" =: pack("color:red;

我是Haskell的新手,我正在尝试用一个名为Reflect的库构建一个简单的网站。Dom和层叠样式表(CSS)表示为一个
映射文本对象,这很好,但Haskell区分了三个几乎相同的对象:

  • String
  • Text
  • [Char]
当然,在Python或JavaScript中,它们是相同或几乎相同的,并且函数可以在一个对象和另一个对象之间互换使用。哈斯克尔的情况并非如此

 "style" =: pack("color:red")
怎么样

 "style" =: pack("color:red; font-family: Helvetica;")
如果添加另一个样式元素,则会收到一条错误消息:

square-01.hs:6:47:
    Couldn't match type ‘Text’ with ‘[Char]’
    Expected type: String
      Actual type: Text
    In the second argument of ‘(=:)’, namely ‘pack ("color:red")’
    In the second argument of ‘elAttr’, namely
      ‘("style" =: pack ("color:red"))’
这是《序曲》的一小部分,但我真的不明白

Prelude Reflex.Dom Data.Text Data.Map> "a" =: pack("b")
fromList [("a","b")]

Prelude Reflex.Dom Data.Text Data.Map> :t "a" =: pack("b")
"a" =: pack("b") :: Map [Char] Text

Prelude Reflex.Dom Data.Text Data.Map> "a" =: "b"
fromList [("a","b")]

Prelude Reflex.Dom Data.Text Data.Map> :t "a" =: "b"
"a" =: "b" :: Map [Char] [Char]

Prelude Reflex.Dom Data.Text Data.Map> :t (=:)
(=:) :: k -> a -> Map k a

您可以查看存储库

有关问题的答案,请参阅src目录中的示例dom03.hs和dom04.hs


文件tutorial.md包含对Reflection dom的初学者友好的介绍,并解释了示例。本教程仍在进行中。

{-#语言重载字符串{-}
添加到文件顶部,然后看着这些错误消失。更一般地说,
[Char]
字符串
是相同的,但
文本
是不同的。@Alec已经道歉了。我的第一句话放错地方了。我的第二点意见仍然有效。若要构造
映射文本
,需要添加类型注释<代码>“a”=:“b”::地图文本
。基本上,如果启用了
OverloadedStrings
,所有字符串的类型都是
IsString a=>a
。除非另有限制,否则GHC有一些默认魔法来选择
a~String
。但是显然
elatr
需要一个
Map String
,所以您只需要去掉
。(
pack
String
转换为
Text