doc: update readme

This commit is contained in:
Simon Cruanes 2020-08-04 09:42:55 -04:00
parent ade2500e68
commit 38d8fc2f9a

View file

@ -7,8 +7,8 @@ A modular, clean and powerful extension of the OCaml standard library.
Containers is an extension of OCaml's standard library (under BSD license) Containers is an extension of OCaml's standard library (under BSD license)
focused on data structures, combinators and iterators, without dependencies on focused on data structures, combinators and iterators, without dependencies on
unix, str or num. Every module is independent and is prefixed with 'CC' in the unix, str or num. Every module is independent and is prefixed with 'CC' in the
global namespace. Some modules extend the stdlib (e.g. CCList provides safe global namespace. Some modules extend the stdlib (e.g. `CCList` provides safe
map/fold_right/append, and additional functions on lists). `map`/`fold_right`/`append`, and additional functions on lists).
Alternatively, `open Containers` will bring enhanced versions of the standard Alternatively, `open Containers` will bring enhanced versions of the standard
modules into scope. modules into scope.
@ -24,17 +24,17 @@ Containers is:
lists including safe versions of `map` and `append`. It also lists including safe versions of `map` and `append`. It also
provides a drop-in replacement to the standard library, in the module provides a drop-in replacement to the standard library, in the module
`Containers` (intended to be opened, replaces some stdlib modules `Containers` (intended to be opened, replaces some stdlib modules
with extended ones). with extended ones), and a small S-expression printer and parser
- Several small additional libraries that complement it: that can be functorized over the representation of values.
* `containers.data` with additional data structures that don't have an
equivalent in the standard library;
* `containers.iter` with list-like and tree-like iterators;
- Utilities around the `unix` library in `containers.unix` (mainly to spawn - Utilities around the `unix` library in `containers.unix` (mainly to spawn
sub-processes easily and deal with resources safely) sub-processes easily and deal with resources safely)
- A lightweight S-expression printer and streaming parser in `containers.sexp` - A separate library `containers-data` with additional
- A library for threaded programming in `containers.thread`, data structures that don't have an equivalent in the standard library,
typically not as thoroughly maintained. This is now in its own package
since 3.0.
- A separate library for threaded programming in `containers-thread`,
including a blocking queue, semaphores, an extension of `Mutex`, and including a blocking queue, semaphores, an extension of `Mutex`, and
thread-pool based futures. thread-pool based futures. This is in its own package since 3.0.
Some of the modules have been moved to their own repository (e.g. `sequence` (now `iter`), Some of the modules have been moved to their own repository (e.g. `sequence` (now `iter`),
`gen`, `qcheck`) and are on opam for great fun and profit. `gen`, `qcheck`) and are on opam for great fun and profit.
@ -318,7 +318,7 @@ A few guidelines to follow the philosophy of containers:
- no dependencies between basic modules (even just for signatures); - no dependencies between basic modules (even just for signatures);
- add `@since` tags for new functions; - add `@since` tags for new functions;
- add tests if possible (using [qtest](https://github.com/vincent-hugot/iTeML/)). - add tests if possible (using [qtest](https://github.com/vincent-hugot/qtest/)).
There are numerous inline tests already, There are numerous inline tests already,
to see what it looks like search for comments starting with `(*$` to see what it looks like search for comments starting with `(*$`
in source files. in source files.
@ -545,7 +545,7 @@ Consider for instance:
- : unit = () - : unit = ()
``` ```
This just opened the file '/tmp/foobar', creating it if it didn't exist, This just opened the file 'foobar', creating it if it didn't exist,
and wrote two lines in it. We did not have to close the file descriptor and wrote two lines in it. We did not have to close the file descriptor
because `with_out` took care of it. By the way, the type signatures are: because `with_out` took care of it. By the way, the type signatures are:
@ -638,9 +638,6 @@ Some structural types are used throughout the library:
and the standard `seq`. and the standard `seq`.
- `error`: `'a or_error = ('a, string) result = Error of string | Ok of 'a` - `error`: `'a or_error = ('a, string) result = Error of string | Ok of 'a`
using the standard `result` type, supported in `CCResult`. using the standard `result` type, supported in `CCResult`.
- `klist`: `'a klist = unit -> [`Nil | `Cons of 'a * 'a klist]` is a lazy list
without memoization, used as a persistent iterator. The reference
module is `CCKList` (in `containers.iter`).
- `printer`: `'a printer = Format.formatter -> 'a -> unit` is a pretty-printer - `printer`: `'a printer = Format.formatter -> 'a -> unit` is a pretty-printer
to be used with the standard module `Format`. In particular, in many cases, to be used with the standard module `Format`. In particular, in many cases,
`"foo: %a" Foo.print foo` will type-check. `"foo: %a" Foo.print foo` will type-check.