module Heist.Extra.Splices.List where
import Data.Map.Syntax ((##))
import Heist qualified as H
import Heist.Interpreted qualified as HI
listSplice :: [a] -> Text -> (a -> H.Splices (HI.Splice Identity)) -> HI.Splice Identity
listSplice :: forall a.
[a] -> Text -> (a -> Splices (Splice Identity)) -> Splice Identity
listSplice [a]
xs Text
childTag a -> Splices (Splice Identity)
childSplice = do
if [a] -> Bool
forall a. [a] -> Bool
forall (t :: Type -> Type) a. Foldable t => t a -> Bool
null [a]
xs
then Template -> Splice Identity
forall a. a -> HeistT Identity Identity a
forall (f :: Type -> Type) a. Applicative f => a -> f a
pure Template
forall a. Monoid a => a
mempty
else Splices (Splice Identity) -> Splice Identity
forall (n :: Type -> Type).
Monad n =>
Splices (Splice n) -> Splice n
HI.runChildrenWith (Splices (Splice Identity) -> Splice Identity)
-> Splices (Splice Identity) -> Splice Identity
forall a b. (a -> b) -> a -> b
$ do
Text
childTag Text -> Splice Identity -> Splices (Splice Identity)
forall k v. k -> v -> MapSyntax k v
##
(Splices (Splice Identity) -> Splice Identity
forall (n :: Type -> Type).
Monad n =>
Splices (Splice n) -> Splice n
HI.runChildrenWith (Splices (Splice Identity) -> Splice Identity)
-> (a -> Splices (Splice Identity)) -> a -> Splice Identity
forall b c a. (b -> c) -> (a -> b) -> a -> c
. a -> Splices (Splice Identity)
childSplice)
(a -> Splice Identity) -> [a] -> Splice Identity
forall b (m :: Type -> Type) (f :: Type -> Type) a.
(Monoid b, Monad m, Foldable f) =>
(a -> m b) -> f a -> m b
`foldMapM` [a]
xs