Йесод: странная ошибка при работе с Люциусом

Привет, я новичок в yesod и пытаюсь следовать этому руководству, но когда я попытался разработать приложение, он выдает такую ​​ошибку:

Строительный мини-пар-0.0.0 ...

Обработчик / AuthTut.hs: 81: 0: ошибка: недопустимая директива предварительной обработки # сообщение

cabal-dev: ошибка пользователя (Предупреждение: невозможно определить версию /home/nock/.cabal/bin/fake-ghc-cabal-dev: "== Аргументы GHC: Start == \ n - numeric-version \ n = = Аргументы GHC: End == \ n "/ usr / bin / ar: dist / build / Handler / AuthTut.o: нет такого файла или каталога) yesod: readProcess: cabal-dev" buildopts "(выход 1): не удалось

Кажется, эта часть кода неправильная (см. Ниже). На самом деле я не понимаю, как он использует эту функцию «toWidget» в этой части кода. Я думал, что отсутствует импорт модуля Lucius, и добавил его в список импорта, который имелся в руководстве, но ошибка не исчезла.

defaultLayout inside = do
    mmsg <- getMessage
    pc <- widgetToPageContent $ do
                toWidget [lucius|
body {
    width: 760px;
    margin: 1em auto;
    font-family: sans-serif;
}
#message{
    color: #900;
}
|]      

            inside

hamletToRepHtml [hamlet|
$doctype 5
<html>
    <head>
        <title>#{pageTitle pc}
        ^{pageHead pc}
    <body>
        $maybe msg <- mmsg
            <div #message>#{msg}
        ^{pageBody pc}
|]

Заранее благодарим за внимание!


person Nocturn    schedule 15.07.2012    source источник


Ответы (2)


Я предполагаю, что у вас включено языковое расширение CPP (препроцессор C). В этом случае любая строка в ваших файлах Haskell, которая начинается с хеша, будет интерпретироваться как директива CPP. А поскольку #message является недопустимой директивой, вы получите сообщение об ошибке.

Я бы рекомендовал перейти на внешний шаблон Lucius и использовать widgetFile. Это будет иметь дополнительное преимущество, заключающееся в возможности автоматической регенерации CSS во время разработки.

person Michael Snoyman    schedule 16.07.2012
comment
Спасибо за ответ, но я обнаружил, что моя проблема связана с ошибкой идентификации. Спасибо, в любом случае! - person Nocturn; 04.08.2012
comment
Есть ли способ отключить расширение языка CPP в определенных файлах? - person jp.rider63; 26.06.2013
comment
Я думаю, вы можете использовать {- # LANGUAGE NoCPP # -}, но я не пробовал. - person Michael Snoyman; 26.06.2013

Я обнаружил, что когда я скопировал код из учебника, я забыл сделать отступ в некоторых строках! Спасибо, в любом случае!

person Nocturn    schedule 03.08.2012