| Safe Haskell | None |
|---|---|
| Language | Haskell2010 |
Stg.Parser.QuasiQuoter
Description
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
Quasiquoter for Programs.
>>>[program| id = \x -> x |]Program (Binds [(Var "id",LambdaForm [] NoUpdate [Var "x"] (AppF (Var "x") []))])
Quasiquoter for Binds.
>>>[binds| id = \x -> x |](Binds [(Var "id",LambdaForm [] NoUpdate [Var "x"] (AppF (Var "x") []))])
lambdaForm :: QuasiQuoter Source
Quasiquoter for LambdaForms.
>>>[lambdaForm| \x -> x |]LambdaForm [] NoUpdate [Var "x"] (AppF (Var "x") [])
Quasiquoter for Expressions.
>>>[expr| f x y z |]AppF (Var "f") [AtomVar (Var "x"),AtomVar (Var "y"),AtomVar (Var "z")]
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 AlgebraicAlts.
>>>[algebraicAlt| Just x -> x; |]AlgebraicAlt (Constr "Just") [Var "x"] (AppF (Var "x") [])
primitiveAlt :: QuasiQuoter Source
Quasiquoter for PrimitiveAlts.
>>>[primitiveAlt| 1# -> x; |]PrimitiveAlt (Literal 1) (AppF (Var "x") [])
defaultAlt :: QuasiQuoter Source
Quasiquoter for DefaultAlts.
>>>[defaultAlt| default -> x |]DefaultNotBound (AppF (Var "x") [])
>>>[defaultAlt| x -> x |]DefaultBound (Var "x") (AppF (Var "x") [])
Quasiquoter for Literals.
>>>[literal| 1# |]Literal 1
Quasiquoter for PrimOps.
>>>[primOp| +# |]Add
Quasiquoter for Atoms.
>>>[atom| x |]AtomVar (Var "x")