Sourceval list_partition_tf : 'a list->f:('a-> bool)->'a list * 'a list
Sourceval core_types : Ppxlib.location ->(string * Ppxlib_ast.Ast.expression) list
Many of the following functions are lifted from ppx_deriving. It's quite likely that there are good alternatives to these somewhere in ppxlib, but I've not yet found them.
They are used to deal with parameterised types. When declaring a function derived from a parameterised type, the function will be extended to take an argument for each type parameter. The important functions below are `poly_fun_of_type_decl` and `poly_apply_of_type_decl` - for declaring and using the derived functions respectively.
poly_fun_of_type_decl type_ expr wraps expr into fun poly_N -> ... for every type parameter 'N present in type_. For example, if type_ refers to type ('a, 'b) map, expr will be wrapped into fun poly_a poly_b -> [%e expr].
poly_apply_of_type_decl type_ expr wraps expr into expr poly_N for every type parameter 'N present in type_. For example, if type_ refers to type ('a, 'b) map, expr will be wrapped into [%e expr] poly_a poly_b. _ parameters are ignored.
expr_of_option ~loc o turns an optional expression into an expression of an optional value. In several places there are optional attributes, e.g. @@version foo, which end up as values of type `expression option`. These are often turned into optional values in the generated code.
get_doc loc rpcdoc attrs extracts documentation from the type declarations. rpcdoc is the result of looking for @doc tags. If this is found, we use that. If not, we look for ocamldoc docstrings and return them instead. In both cases, the result is an expression of type list