Module Ppxlib.Deriving

Deriving code from type declarations

module Args : sig ... end

Specification of generator arguments

Generator registration
type t

Type of registered derivers

module Generator : sig ... end with type deriver := t
val add : ?⁠str_type_decl:(Ppxlib__.Import.structurePpxlib__.Import.rec_flag * Ppxlib__.Import.type_declaration Ppxlib__.Import.listGenerator.t ‑> ?⁠str_type_ext:(Ppxlib__.Import.structurePpxlib__.Import.type_extensionGenerator.t ‑> ?⁠str_exception:(Ppxlib__.Import.structurePpxlib__.Import.extension_constructorGenerator.t ‑> ?⁠sig_type_decl:(Ppxlib__.Import.signaturePpxlib__.Import.rec_flag * Ppxlib__.Import.type_declaration Ppxlib__.Import.listGenerator.t ‑> ?⁠sig_type_ext:(Ppxlib__.Import.signaturePpxlib__.Import.type_extensionGenerator.t ‑> ?⁠sig_exception:(Ppxlib__.Import.signaturePpxlib__.Import.extension_constructorGenerator.t ‑> ?⁠extension:(loc:Location.t ‑> path:Ppxlib__.Import.string ‑> Ppxlib__.Import.core_type ‑> Ppxlib__.Import.expression) ‑> Ppxlib__.Import.string ‑> t

Register a new deriving generator.

The various arguments are for the various items on which derivers can be attached in structure and signatures.

We distinguish exception from type_extension as exception E is not exactly the same as type exn += E. Indeed if the type exn is redefined, then type exn += E will add E to the new exn type while exception E will add E to the predefined exn type.

extension register an expander for extension with the name of the deriver. This is here mostly to support the ppx_deriving backend.

val add_alias : Ppxlib__.Import.string ‑> ?⁠str_type_decl:t Ppxlib__.Import.list ‑> ?⁠str_type_ext:t Ppxlib__.Import.list ‑> ?⁠str_exception:t Ppxlib__.Import.list ‑> ?⁠sig_type_decl:t Ppxlib__.Import.list ‑> ?⁠sig_type_ext:t Ppxlib__.Import.list ‑> ?⁠sig_exception:t Ppxlib__.Import.list ‑> t Ppxlib__.Import.list ‑> t

add_alias name set add an alias. When the user write the alias, all the generator of set will be used instead. It is possible to override the set for any of the context by passing the specific set in the approriate optional argument of add_alias.

val ignore : t ‑> Ppxlib__.Import.unit

Ignore a deriver. So that one can write: Deriving.add ... |> Deriving.ignore