{0 YOCaml}

{!module:Yocaml} is a framework for building construction rules. Its
implementation is biased towards facilitating the construction of static site
(or document) generators. Conceptually, it is fairly close to version 3 of
{{:https://jaspervdj.be/hakyll/} Hakyll}, a generator written in
{{:https://www.haskell.org/} Haskell}.

This page serves as an index of documents describing and justifying certain {i
design} choices, as well as guides on how to use YOCaml to build projects.

The YOCaml API (full documentation) can be accessed via {{!module:Yocaml} this
link}. The various plugins are accessible via the {{: ../index.html}
documentation root}.

You can refer to the examples at the root of the source repository to
see extensively documented examples of how to use YOCaml.

{1 Specific guides}

{{!page:data_validation} Generic validation of structured data}

YOCaml allows the use of {b a collection of generic formats}, so it must
be able to validate arbitrary data. In this guide, we'll look at how to
handle the validation of data (structured in the form of key values,
rather like a [JSON] document) and how to project it into controllable
OCaml types.

{1 Design choices}

A few notes about some design choices (which will probably be expanded
upon in specific blog posts).

- {{!page:effect} Effects abstraction}
