Что такое AttrSplices по умолчанию для Heist-0.13?
Я работаю над проектом, использующим Heist, и, поскольку он недавно обновился до версии 0.13, я попробовал его и обнаружил, что оригинальный HeistConfig сильно изменился.
data HeistConfig m = HeistConfig
{ hcInterpretedSplices :: Splices (I.Splice m)
-- ^ Interpreted splices are the splices that Heist has always had. They
-- return a list of nodes and are processed at runtime.
, hcLoadTimeSplices :: Splices (I.Splice IO)
-- ^ Load time splices are like interpreted splices because they return a
-- list of nodes. But they are like compiled splices because they are
-- processed once at load time. All of Heist's built-in splices should be
-- used as load time splices.
, hcCompiledSplices :: Splices (C.Splice m)
-- ^ Compiled splices return a DList of Chunks and are processed at load
-- time to generate a runtime monad action that will be used to render the
-- template.
, hcAttributeSplices :: Splices (AttrSplice m)
-- ^ Attribute splices are bound to attribute names and return a list of
-- attributes.
, hcTemplateLocations :: [TemplateLocation]
-- ^ A list of all the locations that Heist should get its templates
}
Так что теперь я больше не мог использовать [] в качестве Сплайсов по умолчанию, так как есть defaultInterpretedSplices и defaultLoadTimeSplices, я нахожу, что DefaultAttrSplices просто пропущен, так как же мне его определить?
1 ответ
Я думаю, что нет встроенных AttrSplices. Вы должны быть в состоянии не связывать никакие соединения, используя один из mempty
, return ()
или же noSplices
от Heist.SpliceAPI
,
Splices s
это псевдоним типа для SplicesM s ()
, который просто State
завернутый в новый тип.Slices s
также является экземпляром класса Monoid, так что вы можете использовать mempty здесь.
newtype SplicesM s a = SplicesM { unSplices :: State (Map Text s) a }
deriving (Monad, MonadState (Map Text s))
type Splices s = SplicesM s ()
instance Monoid (Splices s) where
mempty = noSplices
mappend = unionWithS (\_ b -> b)