quasiquoters
This commit is contained in:
@@ -27,6 +27,8 @@ library
|
|||||||
, Core.TH
|
, Core.TH
|
||||||
, Core.Examples
|
, Core.Examples
|
||||||
, Core.Lex
|
, Core.Lex
|
||||||
|
, Compiler.RLPC
|
||||||
|
, Control.Monad.Errorful
|
||||||
|
|
||||||
build-tool-depends: happy:happy, alex:alex
|
build-tool-depends: happy:happy, alex:alex
|
||||||
|
|
||||||
|
|||||||
@@ -4,6 +4,9 @@ module Core.Parse
|
|||||||
, parseCoreExpr
|
, parseCoreExpr
|
||||||
, module Core.Lex -- temp convenience
|
, module Core.Lex -- temp convenience
|
||||||
, parseTmp
|
, parseTmp
|
||||||
|
, SrcError
|
||||||
|
, ParseError
|
||||||
|
, Module
|
||||||
)
|
)
|
||||||
where
|
where
|
||||||
|
|
||||||
@@ -15,7 +18,7 @@ import Compiler.RLPC
|
|||||||
}
|
}
|
||||||
|
|
||||||
%name parseCore Module
|
%name parseCore Module
|
||||||
%name parseCoreExpr Expr
|
%name parseCoreExpr StandaloneExpr
|
||||||
%tokentype { Located CoreToken }
|
%tokentype { Located CoreToken }
|
||||||
%error { parseError }
|
%error { parseError }
|
||||||
%monad { RLPC ParseError }
|
%monad { RLPC ParseError }
|
||||||
@@ -75,6 +78,9 @@ ParList :: { [Name] }
|
|||||||
ParList : Var ParList { $1 : $2 }
|
ParList : Var ParList { $1 : $2 }
|
||||||
| {- epsilon -} { [] }
|
| {- epsilon -} { [] }
|
||||||
|
|
||||||
|
StandaloneExpr :: { Expr }
|
||||||
|
StandaloneExpr : Expr eof { $1 }
|
||||||
|
|
||||||
Expr :: { Expr }
|
Expr :: { Expr }
|
||||||
Expr : LetExpr { $1 }
|
Expr : LetExpr { $1 }
|
||||||
| 'λ' Binders '->' Expr { Lam $2 $4 }
|
| 'λ' Binders '->' Expr { Lam $2 $4 }
|
||||||
@@ -141,5 +147,6 @@ parseTmp = do
|
|||||||
Right (ts,_) -> pure ts
|
Right (ts,_) -> pure ts
|
||||||
where
|
where
|
||||||
parse = evalRLPC RLPCOptions . (lexCore >=> parseCore)
|
parse = evalRLPC RLPCOptions . (lexCore >=> parseCore)
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -5,8 +5,10 @@ module Core.TH
|
|||||||
where
|
where
|
||||||
----------------------------------------------------------------------------------
|
----------------------------------------------------------------------------------
|
||||||
import Language.Haskell.TH
|
import Language.Haskell.TH
|
||||||
import Language.Haskell.TH.Syntax
|
import Language.Haskell.TH.Syntax hiding (Module)
|
||||||
import Language.Haskell.TH.Quote
|
import Language.Haskell.TH.Quote
|
||||||
|
import Control.Monad ((>=>))
|
||||||
|
import Compiler.RLPC
|
||||||
import Core.Parse
|
import Core.Parse
|
||||||
import Core.Lex
|
import Core.Lex
|
||||||
----------------------------------------------------------------------------------
|
----------------------------------------------------------------------------------
|
||||||
@@ -27,16 +29,17 @@ coreExpr = QuasiQuoter
|
|||||||
, quoteDec = error "core quasiquotes may only be used in expressions"
|
, quoteDec = error "core quasiquotes may only be used in expressions"
|
||||||
}
|
}
|
||||||
|
|
||||||
qCore = undefined
|
qCore :: String -> Q Exp
|
||||||
qCoreExpr = undefined
|
qCore s = case parse s of
|
||||||
|
Left e -> error (show e)
|
||||||
|
Right (m,ts) -> lift m
|
||||||
|
where
|
||||||
|
parse = evalRLPC RLPCOptions . (lexCore >=> parseCore)
|
||||||
|
|
||||||
-- qCore :: String -> Q Exp
|
qCoreExpr :: String -> Q Exp
|
||||||
-- qCore s = case lexCore s >>= parseCore of
|
qCoreExpr s = case parseExpr s of
|
||||||
-- Success a -> lift a
|
Left e -> error (show e)
|
||||||
-- Error e _ _ -> error e
|
Right (m,ts) -> lift m
|
||||||
|
where
|
||||||
-- qCoreExpr :: String -> Q Exp
|
parseExpr = evalRLPC RLPCOptions . (lexCore >=> parseCoreExpr)
|
||||||
-- qCoreExpr s = case lexCore s >>= parseCoreExpr of
|
|
||||||
-- Success a -> lift a
|
|
||||||
-- Error e _ _ -> error e
|
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user