package catala
Install
Dune Dependency
Authors
Maintainers
Sources
md5=1408a1cce45c7d5990b981e83e7589c2
sha512=eb3b923aa1f743378b4a05e30f50be5d180dc862a716270d747a90e469017f42fa5fc41352f02fbbf59cd2560f91c4f1b32cf38d80085b105d9387b0aed2039d
doc/plugins.html
Example backend plugins
This directory contains backend plugins that demonstrate how those can be written and used with Catala. They probably don't provide much value otherwise.
Use make plugins
from the root of the source tree to build them.
A plugin is created by writing an OCaml module that calls Driver.Plugin.register_lcalc
or Driver.Plugin.register_scalc
and that links against catala.driver
. Here is an example dune stanza to compile it:
(executable (name my-plugin) (modes plugin) (modules my_plugin_main_module) (libraries catala.driver))
See the following module for the registration interface:
Using plugins
Plugins are dynamically loaded. The Catala compiler will be looking for them at startup within <prefix>/lib/catala/plugins
(assuming that the compiler is installed into <prefix>/bin
), or any other directory specified through the `--plugin-dir` command-line flag or by setting the CATALA_PLUGINS
environment variable.
The plugin of your choice can then be called just like the built-in backends, using:
$ catala MyPlugin <file> [options]
Examples
python example
This trivial example registers a plugin that uses the scalc
format as input. It simply calls the code of the built-in Python backend, and should be no different to using the normal Catala Python output mode.
js_of_ocaml
wrapper generator example
This plugin generates a js_of_ocaml
wrapper from the lcalc
representation of a Catala program.
It start by generating the OCaml module before generating the _api_web.ml
one, which contains all the class types and conversion functions between the OCaml types and their corresponding JS objects. At the end the module exposes all methods in a JS lib <module_name>Lib
.
See law_source for examples of generated code.
JSON schema generator example
This plugin generates a JSON schema corresponding to a scope of a Catala program.
See json_schemas for examples of generated schemas.