packages feed

pandoc-crossref-0.1.5.1: src/Text/Pandoc/CrossRef/Util/Settings/Template.hs

{-# LANGUAGE QuasiQuotes, TemplateHaskell, RankNTypes, FlexibleInstances #-}
module Text.Pandoc.CrossRef.Util.Settings.Template where

import Language.Haskell.TH
import Text.Pandoc
import Text.Pandoc.Builder

genSetting :: String -> Q [Dec]
genSetting name = do
  sig <- [t| forall a. ToMetaValue a => a -> Meta |]
  return
    [ SigD func sig
    , FunD func [Clause [VarP value] (NormalB
        (AppE (ConE $ mkName "Meta")
          (AppE (AppE (VarE (mkName "M.singleton")) (LitE (StringL name)))
            (AppE (VarE (mkName "toMetaValue")) (VarE value))))
      ) []]]
  where
    func = mkName name
    value = mkName "value"