2017-02-21 25 views
0

Я новичок в Haskell, и я пытаюсь создать простой сайт с библиотекой Reflex.Dom, а каскадные таблицы стилей (CSS) представлены как объект Map Text Text, это приятно, но Haskell проводит различие между тремя, идентичные объекты:Как создать текстовый объект Map Text?

  • String
  • Text
  • [Char]

Конечно, в Python или JavaScript они являются одни и те же или почти одинаковые и функции могут быть взаимозаменяемы между одним объектом и другим. Не в Хаскелле.

"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.hs и dom04.hs в Src каталог.

Файл tutorial.md содержит новаторское введение в reflex-dom и объясняет примеры. Учебник по-прежнему Незавершенное производство.