2017-02-21 22 views
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 
+1

將'{ - #LANGUAGE OverloadedStrings# - }'添加到文件頂部,並觀察這些錯誤消失。 – Alec

+1

更一般地說,'[Char]'和'String'是相同的,但是'Text'是不同的。 – Alec

+0

@Alec它已經在那裏 –

回答

0

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

對於一個回答你的問題看例子dom03.hsdom04.hsSRC目錄。

該文件tutorial.md包含一個初學者友好的反射dom介紹和解釋的例子。本教程仍在工作進行中