Я использовал QuasiQuotations в Yesod, и все сработало нормально. НО мой файл стал очень большим и не приятно смотреть. Кроме того, мой TextEditor не выделяет этот синтаксис правильно. Вот почему разделены мои файлы следующим образом:Как импортировать Шекспировские шаблоны в Йесод?
getHomeR :: Handler Html
getHomeR = do
webSockets chatApp
defaultLayout $ do
$(luciusFile "templates/chat.lucius")
$(juliusFile "templates/chat.julius")
$(hamletFile "templates/chat.hamlet")
Если это не так, сообщите об этом. Выполнение runghc myFile.hs
бросает много ошибок, как это:
chat_new.hs:115:9:
Couldn't match expected type ‘t0 -> Css’
with actual type ‘WidgetT App IO a0’
The lambda expression ‘\ _render_ajFK
-> (shakespeare-2.0.7:Text.Css.CssNoWhitespace . (foldr ($) ...))
...’
has one argument,
but its type ‘WidgetT App IO a0’ has none
In a stmt of a 'do' block:
\ _render_ajFK
...
И это.
chat_new.hs:116:9:
Couldn't match type ‘(url0 -> [(Text, Text)] -> Text)
-> Javascript’
with ‘WidgetT App IO a1’
Expected type: WidgetT App IO a1
Actual type: JavascriptUrl url0
Probable cause: ‘asJavascriptUrl’ is applied to too few arguments
...
А также один для HTML (Гамлета).
Таким образом, по одному на каждый шаблон.
Попробуйте выполнить компиляцию или интерпретацию с помощью флага '-ddump-splices' - он напечатает код, сгенерированный TH (кажется, что ошибки находятся в сгенерированном коде). Потенциально 'do' нарушает его? Попробуйте без него. – user2407038
Ваш код выглядит нормально. Попробуйте использовать '$ (widgetFile« chat »)' вместо трех отдельных вызовов. – arrowd
@arrowd Я попытался сделать это сначала. Это дает ошибку «не в объеме:». Нужно ли мне импортировать виджет-файл? И где именно я должен это назвать? – Spacemoose