package metaquot
Install
Dune Dependency
Authors
Maintainers
Sources
sha512=2d923233faa36cb38f26a421ee85d58dfc748003ce03dec3621f9ed9d9df828069da40437033269fd52f2ab9e044770290e904fddbc0d21df7e845222a8364a0
Description
metaquot allows to quote OCaml code.
Published: 29 Feb 2020
README
metaquot
: OCaml syntax extension for quoting code
metaquot
is a PPX rewriter that provides several extensions for quoting OCaml code in expressions, à la ppxtools.ppx_metaquot
and ppxlib.metaquot
. In comparison to these libraries, metaquot
is built by meta-programmation over the Parsetree
module (thanks to metapp
) and is meant to be trivial to update for future versions of OCaml (on the other hand, metaquot
only builds AST for the current version of OCaml: you may use helpers provided by Ast_helper
or Metapp
to manipulate the AST in a version-independent manner).
metaquot
can be used with dune
by using the preprocess
field.
(executable
...
(preprocess (pps metaquot.ppx))
...)
The following extensions are provided.
Quotation | Type |
---|---|
[%expr ...] |
Parsetree.expression |
[%pat? ...] |
Parsetree.pattern |
[%type: ...] |
Parsetree.core_type |
[%sig: ...] |
Parsetree.signature |
[%sigi: ...] |
Parsetree.signature_item |
[%str ...] |
Parsetree.structure |
[%stri ...] |
Parsetree.structure_item |
The produced AST uses !Ast_helper.default_loc
as location: you may change the location with Ast_helper.with_default_loc
.
Moreover, in quoted code, the following extensions allow to evaluate and insert expressions or patterns (anti-quotations).
Anti-quotation | Type |
---|---|
[%e ...] |
Parsetree.expression |
[%p ...] |
Parsetree.pattern |
[%t ...] |
Parsetree.core_type |
[%m ...] |
Parsetree.module_type or Parsetree.module_expr |
[%i ...] |
Parsetree.signature_item or Parsetree.structure_item |
In addition to the syntax extension, the metaquot
package provides the Metaquot
module, which contains lifters: the Metaquot.Exp
module lifts to expressions and Metaquot.Pat
lifts to patterns. For instance, Metaquot.Exp.pattern : Parsetree.pattern -> Parsetree.expression
is a function that returns an OCaml expression that builds the AST corresponding to the given pattern.