{-# LANGUAGE TemplateHaskell #-}
-- | provides TH helpers
module EmacsKeys.TH
  (mkEmacsKeys)
  where
import EmacsKeys.Parser
import Language.Haskell.TH
import Language.Haskell.TH.Lift
import Text.XkbCommon

-- | TH helper, to turn parse errors into compile time errors
mkEmacsKeys :: String -> Q Exp
mkEmacsKeys s =
  case parseEmacsKeys s of
    Left err -> error (show err)
    Right (mods,keysyms) ->
      [|($(lift mods)
        ,$(ListE <$>
           traverse (\(Keysym x) ->
                       AppE (ConE (mkName "Keysym")) <$>
                       lift x)
                    keysyms))|]