Applications written in Caml

/UbiEst/ is intended to be a indexer, allowing *structural* and
*compound* searches into a "bunch" of documents (files). What is an
indexer ? An indexer is a program recording the occurrences of words
among documents and enable to point on them (quickly if possible). A
detailled explanation is available in the distribution, but in two or
three words...
By *structural* indexing, we mean that /UbiEst/ not only maps words
onto their locations, but also structures of the indexed documents.
By *compound* indexing, we mean that /UbiEst/ does not allow to
request to find occurrences of simple words among the indexed
document. requests can be combined by the mean of operators. By
combining requests, you not only get simple occurrences of words,
but rather /extends/ (i.e. piece of text) containing information
fitting you global request.
/UbiEst/ is developped in Objective Caml and a
graphical user interface based on Gtk (Lablgtk) is available.

Camlp4 extensions

The ocaml-bitstring project adds Erlang-style bitstrings and matching over bitstrings as a syntax extension and library for OCaml.
(This project was formerly known as "bitmatch").
You can use this module to both parse and generate binary formats, files and protocols.
Bitstring handling is added as primitives to the language, making it exceptionally simple to use and very powerful.

Development tools

Mocac is a generator of construction functions for Caml concrete data types with algebraic invariants and maximal sharing facilities. Algebraic invariants are specified by using keywords denoting equational theories like commutativity and associativity. The construction functions generated by Mocac allow each equivalence class to be represented by a unique value.

Libraries

Native OCaml libraries

Bindlib is a library and a camlp4 syntax extension for the OCaml language. It proposes a set of tools to manage data structures with bound and free variables. It includes fast substitution and management of variables names including renaming.

This module implements compact integer sets, represented as a (custom) list of integer intervals. Usual set operations are provided. The advantage compared to ordered lists is that the actual size may be smaller than the cardinal of a set when many elements are contiguous. Most set operations are linear w.r.t. the size of the structure, not the cardinal of the set.

Dum is a library for inspecting the runtime representation of arbitrary Objective Caml values.
Shared or cyclic data are detected and labelled. This guarantees that printing would always terminate. This makes it possible to print values such as closures, objects or exceptions in depth and without risk.

This library can read and write CSV files, including all extensions used by Excel - eg. quotes, newlines, 8 bit characters in fields, "0 etc.
The library comes with a handy command line tool called csvtool for handling CSV files from shell scripts.

A quite simple program to do some basic routing over Open Streat Map maps. It parses an .osm.bz2 file, creates a compact data structure in memory (which is saved into a cache to speed up next searches), finds the OSM nodes closest to the source and goal points given as (latitude, longitude) couples, does the routing itself, prints it on the screen and saves it in .osm XML format (for example to load it into JOSM).

A modular framework of Objective Caml libraries comprising general purpose utilities and functional data structures, a more flexible abstraction of the system network sockets layer than the standard library, and modules to support the development of concurrent, single-threaded network application services with a functional programming style.

This is a user-space implementation of STM (Software Transactional Memory)
library for OCaml. It's mainly inspired by the STM library of Haskell, with
some exceptions due to the different nature of languages and different
strategies of implementation.

Uuidm is an OCaml module implementing 128 bits universally unique
identifiers version 3, 5 (name based with MD5, SHA-1 hashing) and 4
(random based) according to RFC 4122.
Uuidm is made of a single, independent, module and distributed under
the new BSD license.

Bindings with C libraries

Ancient is an OCaml module that allows you to use in-memory data structures which are larger than available memory and so are kept in swap. If you try this in normal OCaml code, you'll find that the machine quickly descends into thrashing as the garbage collector repeatedly iterates over swapped memory structures. This module lets you break that limitation. Of course the module doesn't work by magic :-) If your program tries to access these large structures, they still need to be swapped back in, but it is suitable for large, sparsely accessed structures.
Secondly, this module allows you to share those structures between processes. In this mode, the structures are backed by a disk file, and any process that has read/write access that disk file can map that file in and see the structures.