我是Haskell的新手,我正在尝试建立一个名为Reflex.Dom的简单网站,Dom和Cascading Style Sheets(CSS)表示为Map Text Text
对象,这很好,但是Haskell区分了三个,几乎-相同的对象: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的一些内容,但我不太了解。
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
最佳答案
您可以查看存储库https://github.com/hansroland/reflex-dom-inbits。
有关您的问题的答案,请参见src目录中的示例dom03.hs和dom04.hs。
文件tutorial.md包含了反射反射入门的入门指南,并解释了示例。该教程仍在进行中。