core quasiquoter

This commit is contained in:
crumbtoo
2023-11-15 17:38:08 -07:00
parent 5559f66576
commit c39a843660
5 changed files with 59 additions and 8 deletions

39
src/Core/TH.hs Normal file
View File

@@ -0,0 +1,39 @@
module Core.TH
( coreExpr
, core
)
where
----------------------------------------------------------------------------------
import Language.Haskell.TH
import Language.Haskell.TH.Syntax
import Language.Haskell.TH.Quote
import Core.Parse
import Core.Lex
----------------------------------------------------------------------------------
core :: QuasiQuoter
core = QuasiQuoter
{ quoteExp = qCore
, quotePat = error "core quasiquotes may only be used in expressions"
, quoteType = error "core quasiquotes may only be used in expressions"
, quoteDec = error "core quasiquotes may only be used in expressions"
}
coreExpr :: QuasiQuoter
coreExpr = QuasiQuoter
{ quoteExp = qCoreExpr
, quotePat = error "core quasiquotes may only be used in expressions"
, quoteType = error "core quasiquotes may only be used in expressions"
, quoteDec = error "core quasiquotes may only be used in expressions"
}
qCore :: String -> Q Exp
qCore s = case lexCore s >>= parseCore of
Success a -> lift a
Error e _ _ -> error e
qCoreExpr :: String -> Q Exp
qCoreExpr s = case lexCore s >>= parseCoreExpr of
Success a -> lift a
Error e _ _ -> error e