blob: 970759ba713708d8840e37568b899b10349c4549 (
plain) (
tree)
|
|
{-# LANGUAGE TemplateHaskell #-}
-- Used by QuasiQuote. Example taken from the GHC documentation.
module QuasiExpr where
import Language.Haskell.TH
import Language.Haskell.TH.Quote
data Expr = IntExpr Integer
| AntiIntExpr String
| BinopExpr BinOp Expr Expr
| AntiExpr String
deriving Show
data BinOp = AddOp
| SubOp
| MulOp
| DivOp
deriving Show
eval :: Expr -> Integer
eval (IntExpr n) = n
eval (BinopExpr op x y) = (opToFun op) (eval x) (eval y)
where
opToFun AddOp = (+)
opToFun SubOp = (-)
opToFun MulOp = (*)
opToFun DivOp = div
expr = QuasiQuoter parseExprExp undefined undefined undefined
-- cheating...
parseExprExp :: String -> Q Exp
parseExprExp _ = [| BinopExpr AddOp (IntExpr 1) (IntExpr 2) |]
|