module LText.Internal.Expr.TH where

import LText.Internal.Expr
import qualified Data.Text.Lazy as LT
import Language.Haskell.TH


exprToHs :: Expr -> Q Exp
exprToHs (EVar n) =
  return $ VarE $ mkName n
exprToHs (EApp e1 e2) = do
  e1' <- exprToHs e1
  e2' <- exprToHs e2
  return $ AppE e1' e2'
exprToHs (EAbs n e) = do
  e' <- exprToHs e
  return $ LamE [VarP $ mkName n] e'
exprToHs (EText ts) = let content = LT.unpack $ LT.unlines $ map snd ts in
  return $ LitE $ StringL content
exprToHs (EConc e1 e2) = do
  e1' <- exprToHs e1
  e2' <- exprToHs e2
  return $ AppE (AppE (ParensE (VarE $ mkName "++")) e1') e2'