Получение ограбления 0.14.0.1 для работы
Чтобы быть ясным, я заинтересован только в использовании ограбления, а не оснастки. Я читаю учебник ocharles ( https://ocharles.org.uk/blog/posts/2013-12-11-24-days-of-hackage-heist.html) и пытаюсь адаптировать его первый пример. Это простой тег привязки. Мой код выглядит следующим образом:
-- main.hs
main :: IO ()
main = billy
billy :: IO ()
billy = do
heistState <- either (error . concat) id <$>
(runEitherT $ initHeist myConfig)
builder <- maybe (error "oops2") fst $
renderTemplate heistState "billy"
toByteStringIO BS.putStr builder
BS.putStr "\n"
myConfig = (set hcNamespace "") $
(set hcInterpretedSplices defaultInterpretedSplices) $
(set hcTemplateLocations [loadTemplates "templates"]) $
emptyHeistConfig
И шаблон, который я использую:
<bind tag="kiddo">Billy</bind>
Merry Christmas, <kiddo/>!
Вывод, который я получаю это:
<bind tag='kiddo'>Billy</bind>
Merry Christmas, <kiddo></kiddo>!
Я не могу понять, почему тег привязки не работает. Я фактически обновил его код, чтобы использовать новую конфигурацию ограбления в стиле линз, и я знаю об обмане пространства имен, который был введен в последнее время в heist, но я не вижу, что еще нужно изменить, чтобы этот пример работал.
1 ответ
Вот что мне удалось получить на работу:
{-# LANGUAGE OverloadedStrings #-}
import qualified Data.ByteString as B
import Blaze.ByteString.Builder (toByteStringIO)
import Control.Applicative
import Control.Monad.Trans.Either (runEitherT)
import Heist
import Heist.Compiled (renderTemplate)
import Control.Lens
heistConfig =
(set hcNamespace "") $
-- (set hcInterpretedSplices defaultInterpretedSplices) $
(set hcLoadTimeSplices defaultLoadTimeSplices) $
(set hcTemplateLocations [loadTemplates "."]) $
emptyHeistConfig
main = do
heistState <- either (error "oops") id <$>
(runEitherT $ initHeist heistConfig)
builder <- maybe (error "oops") fst $
renderTemplate heistState "billy"
toByteStringIO B.putStr builder
По-видимому bind
является сплайсингом загрузки, а не интерпретированным сплайсингом.