Previous week Up Next week


Here is the latest Caml Weekly News, for the week of 31 May to 07 June, 2005.

  1. OUnit-1.0.2
  2. ocaml-ssl 0.3.0
  3. OCaml NAE releases Cf-0.6
  4. Caml2TeX
  5. 2005 ICFP Programming Contest



Maas-Maarten Zeeman announced:
I'd like to announce OUnit-1.0.2, an OCaml unit-testing framework 
similar to JUnit.

ocaml-ssl 0.3.0


Samuel Mimram announced:
The 0.3.0 version of ocaml-ssl is out. This library consists in bindings 
to the open-ssl library to handle secure communications. You can find it 

The main improvement of this version is that functions are provided to 
make the library thread-safe (see the Ssl_threads.init function). It is 
also more cooperative with threads (blocking sections everywhere). Bugs 
were corrected and some functions were reorganized (small API breakage, 

It is released under the GPL license + openssl exception (though, I 
could make it LGPL if someone really needs that).

Feel free to mail me if you've got any comment, bug, etc.

OCaml NAE releases Cf-0.6


James Woodyatt announced:
Today, my OCaml Network Application Environment (NAE) project is 
releasing another maintenance update of its core foundation library.  
As the project page on SourceForge.Net says, OCaml NAE is "a collection 
of Objective Caml libraries to support the development of concurrent, 
single-threaded Internet application servers."

For downloads and more information, please see:

The Cf library was formerly known as the Pagoda Core Foundation, but it 
was never connected with the Pagoda project on SourceForge and should 
not be confused with it.  An excerpt of the README file and the 
complete CHANGES record for this release are below.

===== OCaml NAE Core Foundation (cf) library =====

This distribution is the Objective Caml Network Application Environment 
Core Foundation library, which is a collection of miscellaneous 
extensions to
the Objective Caml standard library.

Highlighted features include:

- Functional streams and stream processors (extended).
- Functional bootstrapped skew-binomial heap.
- Functional red-black binary tree (associative array).
- Functional sets based on red-black binary tree.
- Functional real-time catenable deque.
- Functional LL(x) parsing using state-exception monad.
- Functional lazy deterministic finite automaton (DFA).
- Functional lexical analyzer (using lazy DFA and monadic parser).
- Functional substring list manipulation (message buffer chains).
- Gregorian calendar date manipulation.
- Standard time manipulation.
- System time in Temps Atomique Internationale (TAI).
- Unicode transcoding.
- Extended socket interface (supports more options, and UDP 
- Universal resource identifier (URI) manipulation.
- I/O event multiplexing (with

Note: see the ISSUES file for a list of open problems in this release.

===== Required Components =====

This library requires the following external components:

- Objective Caml (v3.08.3 or newer)
- Findlib (tested with v0.8.1 and v1.0.4)

Principal development was on Mac OS X 10.3.  The final version of this
library also compiled successfully and passed all self-tests without 
on Suse Linux 9.0 for x86-32.  Other platforms with POSIX-like 
should require only a minimal porting effort.

One major open issue: the extended socket interface is broken under 
(The author invites help porting the library to other environments.)

===== Version 0.6 =====

Highlights of the changes:

+ More bugs fixed (some critical).

--- [Cf_rbtree]
     Fix bug in [Map.insert] that failed to replace nodes when the key 
     a node that is already in the map.  (Thanks to Craig Falls, once 
again, for
     finding this bug.)

--- [Cf_dfa]
     Improved lazy DFA module with a better functorial interface, to 
allow for
     more efficient symbol maps (to support, e.g. wide character lexers) 
and to
     decouple the symbol type from the cursor type, so that Cf_parser.X 
can be
     used easily in place of Cf_parser.

--- [Cf_dfa, Cf_lexer]
     Fixed the documentation for the [( $@ )] operator to reflect the 
     behavior.  When the action parser does not accept the recognized 
     then no other rule is selected and no other action functions are 

--- [Cf_lexer]
     Updated to use the new [Cf_dfa] interface, though it is now 
deprecated in
     favor of the new, improved [Cf_lex] module (see below).

--- [Cf_uri]
     Updated to use the new [Cf_lex] in place of the deprecated 

--- [various .c files]
     Rename custom data tags from 'pagoda' to 'ocnae'.

+ New functions.

--- [Cf_rbtree, Cf_set, Cf_map]
     Add [of_list_incr], [of_list_decr], [of_seq_incr] and 
[of_seq_decr], which
     are optimized for lists and sequences known to be in increasing or
     decreasing order.

     These functions were derived from code contributed by Brian Hurt 
     and implement a variant on Hinze's algorithm:

--- [Cf_set]
     Add [size] function.

--- [Cf_seq]
     Add [nil] value.
     Add [flatten] function.
     Requires Ocaml-3.08 now.

--- [Cf_flow]
     Add [commute_string] function.

--- [Cf_parser]
     Add [of_extended] and [to_extended] functions.
     Add [req] parser, an efficient shortcut for [alt (p :: err f :: 
     Add [Error] exception for generic unparameterized errors.
     Add [altz] parser for match from a sequence (instead of a list) of 

--- [Cf_scan_parser]
     Change [scanf] to return an ordinary Cf_parser.t function.
     Add [scanfx] to return a Cf_parser.X.t function.

--- [Cf_regex]
     New module for regular expression parsing, matching and search.

--- [Cf_lex]
     A new and improved lexical analysis module, with an interface 
derived from
     the now deprecated [Cf_lexer].  It offers a more flexible interface 
to the
     underlying [Cf_dfa] module, and its [( !~ )] and [( !$ )] operators 
     their string arguments as regular subexpressions with the format 
defined in
     the new [Cf_regex] module.

--- [README]
     Fixed an embarrassing word-choice bug, i.e. principle vs. principal.



Pierre-Etienne Meunier announced:
I am proud to announce the first release of Caml2TeX, an application 
that produces LaTeX2e code from caml (OCaml, Caml light) source files.

Available at :

Since I wrote it very quickly from the Caml2html code, it may still have 
a few bugs, but it worked for the caml files I did it for.
My main goal when I wrote it was to avoid creating a new LaTeX package. 
It makes my TeX files very portable : you dont need to install anything 
to compile the documents.

Known bugs :
- The standard Caml functions are not recognized as functions by Caml2TeX
- The functions following '#' (OCaml objects) are not recognized as 
- I write my Caml code with emacs, which produces weird indentations, 
badly detected by Caml2TeX
- If argument 'a' is passed to function 'f', and 'a' is already declared 
as a function, 'a' is considered a function in 'f', but it should be 
considered an argument. In my opinion, it should lead to a bug in the 
caml compiler : how do you use function 'a' in 'f' ?

2005 ICFP Programming Contest


Robby Findler announced:
Think your favorite programming language is the best one out
there? Put it to the test in this year's International Conference
on Functional Programming's annual Programming Contest. The
contest is coming up in a little under 4 weeks and we have just
released more information (including a live cd, mailing list, and
prize details) to the web page, at:

This year's competition rewards programmers who can plan ahead. As
before, we'll announce a problem and give you three days to solve it.
Two weeks later, we'll announce a change to the problem specification
and give you one day to adapt your program to the new spec. And you
guessed it: the second half will be worth considerably more than the

Important dates:

  Problem announced: Friday, June 24th, 9:00am CDT (UTC-5)
  Initial entries due: Monday, June 27th, 9:00am CDT (UTC-5)
  Revision announced: Saturday, July 9th, 9:00am CDT (UTC-5)
  Final entries due: Sunday, July 10th, 9:00am CDT (UTC-5)

Using folding to read the cwn in vim 6+

Here is a quick trick to help you read this CWN if you are viewing it using vim (version 6 or greater).

:set foldmethod=expr
:set foldexpr=getline(v:lnum)=~'^=\\{78}$'?'<1':1

If you know of a better way, please let me know.

Old cwn

If you happen to miss a CWN, you can send me a message and I'll mail it to you, or go take a look at the archive or the RSS feed of the archives.

If you also wish to receive it every week by mail, you may subscribe online.

Alan Schmitt