Safe Haskell | None |
---|---|
Language | Haskell2010 |
Quasiquoters for easier generation of STG syntax trees.
The stg
quoter is most convenient, I suggest you use it unless you have a
reason not to.
Heuristic quasiquoter
stg :: QuasiQuoter Source #
Heuristic quasiquoter for STG language elements. Tries a number of parsers, and will use the first successful one.
To gain more fine-grained control over what the input should be parsed to,
use one of the non-heuristic quoters, such as stgProgram
or
stgLambdaForm
. These will also give you much better error messages than
merely "doesn't work".
>>>
[stg| id = \x -> x |]
Program (Binds [(Var "id",LambdaForm [] NoUpdate [Var "x"] (AppF (Var "x") []))])
>>>
[stg| \x -> x |]
LambdaForm [] NoUpdate [Var "x"] (AppF (Var "x") [])
>>>
[stg| x |]
AppF (Var "x") []
Specific syntax element quasiquoters
program :: QuasiQuoter Source #
Quasiquoter for Program
s.
>>>
[program| id = \x -> x |]
Program (Binds [(Var "id",LambdaForm [] NoUpdate [Var "x"] (AppF (Var "x") []))])
binds :: QuasiQuoter Source #
Quasiquoter for Binds
.
>>>
[binds| id = \x -> x |]
(Binds [(Var "id",LambdaForm [] NoUpdate [Var "x"] (AppF (Var "x") []))])
lambdaForm :: QuasiQuoter Source #
Quasiquoter for LambdaForm
s.
>>>
[lambdaForm| \x -> x |]
LambdaForm [] NoUpdate [Var "x"] (AppF (Var "x") [])
expr :: QuasiQuoter Source #
Quasiquoter for Expr
essions.
>>>
[expr| f x y z |]
AppF (Var "f") [AtomVar (Var "x"),AtomVar (Var "y"),AtomVar (Var "z")]
alts :: QuasiQuoter Source #
Quasiquoter for Alts
.
>>>
[alts| Just x -> True; default -> False |]
Alts (AlgebraicAlts (AlgebraicAlt (Constr "Just") [Var "x"] (AppC (Constr "True") []) :| [])) (DefaultNotBound (AppC (Constr "False") []))
>>>
[alts| 0# -> True; default -> False |]
Alts (PrimitiveAlts (PrimitiveAlt (Literal 0) (AppC (Constr "True") []) :| [])) (DefaultNotBound (AppC (Constr "False") []))
nonDefaultAlts :: QuasiQuoter Source #
Quasiquoter for Alt
.
>>>
[nonDefaultAlts| Just x -> True; Nothing -> False; |]
AlgebraicAlts (AlgebraicAlt (Constr "Just") [Var "x"] (AppC (Constr "True") []) :| [AlgebraicAlt (Constr "Nothing") [] (AppC (Constr "False") [])])
>>>
[nonDefaultAlts| 0# -> False; 1# -> True; |]
PrimitiveAlts (PrimitiveAlt (Literal 0) (AppC (Constr "False") []) :| [PrimitiveAlt (Literal 1) (AppC (Constr "True") [])])
algebraicAlt :: QuasiQuoter Source #
Quasiquoter for AlgebraicAlt
s.
>>>
[algebraicAlt| Just x -> x; |]
AlgebraicAlt (Constr "Just") [Var "x"] (AppF (Var "x") [])
primitiveAlt :: QuasiQuoter Source #
Quasiquoter for PrimitiveAlt
s.
>>>
[primitiveAlt| 1# -> x; |]
PrimitiveAlt (Literal 1) (AppF (Var "x") [])
defaultAlt :: QuasiQuoter Source #
Quasiquoter for DefaultAlt
s.
>>>
[defaultAlt| default -> x |]
DefaultNotBound (AppF (Var "x") [])
>>>
[defaultAlt| x -> x |]
DefaultBound (Var "x") (AppF (Var "x") [])
literal :: QuasiQuoter Source #
Quasiquoter for Literal
s.
>>>
[literal| 1# |]
Literal 1
primOp :: QuasiQuoter Source #
Quasiquoter for PrimOp
s.
>>>
[primOp| +# |]
Add
atom :: QuasiQuoter Source #
Quasiquoter for Atom
s.
>>>
[atom| x |]
AtomVar (Var "x")