我是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包含了反射反射入门的入门指南,并解释了示例。该教程仍在进行中。

09-30 16:50
查看更多