**************************
Chez Scheme Code Generator
**************************
The Chez Scheme code generator is the default, or it can be accessed via a REPL
command:
::
Main> :set cg chez
By default, therefore, to run Idris programs you will need to install
`Chez Scheme `_. Chez Scheme is open source, and
available via most OS package managers.
You can compile an expression ``expr`` of type ``IO ()`` to an executable as
follows, at the REPL:
::
Main> :c execname expr
...where ``execname`` is the name of the executable file. This will generate
the following:
* A shell script ``build/exec/execname`` which invokes the program
* A subdirectory ``build/exec/execname_app`` which contains all the data necessary
to run the program. This includes the Chez Scheme source (``execname.ss``),
the compiled Chez Scheme code (``execname.so``) and any shared libraries needed
for foreign function definitions.
The executable ``execname`` is relocatable to any subdirectory, provided that
``execname_app`` is also in the same subdirectory.
You can also execute an expression directly:
::
Main> :exec expr
Again, ``expr`` must have type ``IO ()``. This will generate a temporary
executable script ``_tmpchez`` in the ``build/exec`` directory, and execute
that.
Chez Scheme is the default code generator, so if you invoke ``idris2`` with the
``-o execname`` flag, it will generate an executable script
``build/exec/execname``, again with support files in ``build/exec/execname_app``.
Chez Directives
===============
* ``--directive extraRuntime=``
Embed Scheme source from ```` directly into generated output. Can be specified more than
once, in which case all given files will be included in the order specified.
.. code-block:: scheme
; extensions.scm
(define (my-mul a b)
(* a b))
.. code-block:: idris
-- Main.idr
%foreign "scheme:my-mul"
myMul : Int -> Int -> Int
.. code-block::
$ idris2 --codegen chez --directive extraRuntime=/path/to/extensions.scm -o main Main.idr