2014-12-13 1 views
1

Чтобы быть ясным, меня интересует только использование heist, а не привязка. Я читаю учебник очарлов (https://ocharles.org.uk/blog/posts/2013-12-11-24-days-of-hackage-heist.html) и пытаюсь приспособить его первый пример. Это простой тег связывания. Мой код выглядит следующим образом:Получение heist 0.14.0.1 для работы

-- 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>&#10; 
Merry Christmas, <kiddo></kiddo>! 

Я не могу понять, почему связать тег Безразлично Не работай. Я действительно обновил его код, чтобы использовать новую конфигурацию heist-конфигурации в стиле объектива, и я знаю об обмане пространства имен, который был представлен несколько недавно в heist, но я не вижу, что еще нужно изменить, чтобы этот пример работал.

+0

Можете ли вы показать весь свой импорт? – ErikR

ответ

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 это время нагрузки сращивание, не интерпретируемый сплайсинг.

Смежные вопросы