0
我是一个Haskell的新手,我想用一个名为Reflex.Dom和层叠样式表(CSS)的库构建一个简单的网站,它被表示为Map Text Text
对象,这很好,但Haskell区分了三个,相同的物体:如何构建一个Map Text文本对象?
String
Text
[Char]
当然,在Python或JavaScript这些都是一个对象和另一个对象之间可以交换使用相同或几乎相同的功能。在Haskell中并非如此。
"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
将'{ - #LANGUAGE OverloadedStrings# - }'添加到文件顶部,并观察这些错误消失。 – Alec
更一般地说,'[Char]'和'String'是相同的,但是'Text'是不同的。 – Alec
@Alec它已经在那里 –