我是Haskell的新手,我正在尝试使用名为Reflex.Dom的库构建一个简单的网站,层叠样式表(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
答案 0 :(得分:0)
您可以查看存储库https://github.com/hansroland/reflex-dom-inbits。
要回答您的问题,请参阅 src 目录中的示例 dom03.hs 和 dom04.hs 。
文件 tutorial.md 包含对reflex-dom的初学者友好介绍,并解释了这些示例。该教程仍在正在进行中。