如何构建Map Text Text对象?

时间:2017-02-21 23:23:33

标签: css string haskell

我是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

1 个答案:

答案 0 :(得分:0)

您可以查看存储库https://github.com/hansroland/reflex-dom-inbits

要回答您的问题,请参阅 src 目录中的示例 dom03.hs dom04.hs

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