aboutsummaryrefslogblamecommitdiff
path: root/html-test/src/QuasiExpr.hs
blob: 970759ba713708d8840e37568b899b10349c4549 (plain) (tree)
1
2
3
4
5
6
7





                                                                



                                       
                 



                    
                 








                                                        
                                                             


                                                              
{-# 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) |]