module Hakyll.Alias ( aliasCtxt , personCtxt , licenseCtxt , journalCtxt ) where import Prolog import Hakyll import Data.Alias import Data.Name import Data.Person import Data.Journal import Data.License import Text.Blaze import Hakyll.Web.Template.Util (functionField1) aliasCtxt :: (Ord a, FromAlias a x) => String -> (String -> Compiler a) -> (x -> Compiler String) -> AliasMap a x -> Context c aliasCtxt name toa fromx amap = functionField1 name $ toa >=> flip resolveAlias amap >=> fromx aliasCtxtFrom :: (Ord a, FromAlias a x) => String -> (String -> Compiler a) -> (x -> Compiler String) -> Identifier -> Context c aliasCtxtFrom name toa fromx ident = functionField1 name $ \s -> do amap <- loadBody ident toa s >>= flip resolveAlias amap >>= fromx -- personCtxt :: (StringConv StrictText s, Ord (Name s), ToMarkup s) => AliasMap (Name s) (Person s) -> Context a personCtxt :: Identifier -> Context a personCtxt = aliasCtxtFrom @StrictText "personA" (ffmap toSL . parseName . toSL) (pure . toSL . personHtml) -- personCtxtFrom :: Identifier -> Context a -- personCtxtFrom = functionField1 -- licenseCtxt :: (StringConv String s, Ord s, ToMarkup s) => AliasMap s (License s) -> Context a licenseCtxt :: Identifier -> Context a licenseCtxt = aliasCtxtFrom @StrictText "licenseA" (pure . toSL) (pure . toSL . licenseHtml) -- journalCtxt :: (StringConv String s, Ord s, ToMarkup s) => AliasMap s (Journal s) -> Context a journalCtxt :: Identifier -> Context a journalCtxt = aliasCtxtFrom @StrictText "journalA" (pure . toSL) (pure . toSL . journalHtml)