Previous week Up Next week


Here is the latest Caml Weekly News, for the week of June 06 to 13, 2006.

  1. pa_monad 1.0 - syntax extension for monads
  2. Job Announcement
  3. ocamlscript 1.99
  4. Would you like a job working on GHC?

pa_monad 1.0 - syntax extension for monads


Jacques Carette announced:
We are pleased to announce the release of the stable version our syntax 
extension for monadic expressions in Ocaml. 
All the details can be obtained from . 

Example: A simple but realistic example of the use of a list monad looks 
like this 

          [1; 2; 3] 
          (fun a -> bind 
                      [3; 4; 5] 
                      (fun b -> return (a + b))) 

where we assume the appropriate definitions of the functions "bind" and 
"return". With the help of "pa_monad" this can be written as 

          a <-- [1; 2; 3]; 
          b <-- [3; 4; 5]; 
          return (a + b) 

which is much clearer and thus easier to understand and maintain. By the 
way, the expression evaluates to [4; 5; 6; 5; 6; 7; 6; 7; 8] the sum of 
each pair of values of the input lists. 


- Efficient code: The generated code is as efficient as hand-coded. 
- Highly flexible: The "bind" and "failwith" functions can be 
  specified in various ways 
  (a) Binding with default names: 
          perform ... 
  (b) Binding with user-defined names: 
          perform with my_bind and my_failwith in ... 
  (c) One-of-a-kind binding: 
          perform with fun a f -> f a and ... in ... 
  (d) Module-based binding: 
          perform with MyMonad in ... 
      or with OCaml's local modules: 
          let foo ... = 
            let module MyMonad = ... in 
            perform with MyMonad in ... 

The package for this extension contains more examples as well as some 
self-tests and an extensive README with yet more details (including a 
patch to tuareg-mode).  In the source code (and the generated ocamldoc 
html), one can find amongst other things an informal and formal 
description of the grammar of the extension, and a (rewriting) semantics 
for the extension. 

This code is licensed under the GNU library general public license, 
compatible with Ocaml's own license. 

Job Announcement


Yaron Minsky announced:
I'm pleased to announce that Jane Street Capital is yet again actively 
looking to hire some top-notch functional programmers. 
Jane Street Capital ( is a proprietary 
trading company located in Manhattan, and we're looking to hire 
developers interested in working on trading systems and 
infrastructure, all built in OCaml. 

Jane Street is an open and informal environment (you can wear shorts 
and a t-shirt to the office), and the work is technically challenging 
and wide-ranging.  Pay is competitive, and we're a reasonably small 
company (around 100 employees), so advancement is pretty quick for 
someone who performs well. 

Here's what we're looking for (in no particular order): 

 - Strong programming skills.  Pretty much all of our programming is 
   in OCaml, so being a solid Caml hacker is a big plus.  Extra points 
   for deep knowledge of OCaml internals and experience wrapping 
   thorny libraries.  But we're also interested in great programmers 
   who we are convinced will be able to pick up OCaml quickly, so 
   anyone with a high-level of proficiency with functional languages 
   would be a good match. 

 - A commitment to the practical. Our work is tightly integrated with 
   our trading operation, and we work very hard to keep our work 
   relevant. One of the big attractions of the job is the opportunity 
   to apply serious ideas to real-world problems. 

 - Great communication skills. We need people who can explain things 
   clearly and cogently. 

 - Strong mathematical and analytic skills.  We want people who can 
   solve difficult technical problems, and think clearly and 
   mathematically about all sorts of problems. 

 - Strong Unix/Linux skills --- We're looking for someone who knows 
   their way around the standard Unix tools, can write makefiles, 
   shell scripts, etc.  We're also very interested in people with 
   serious systems administration and architecture experience. 

If you're interested (or have any students you think might be a good 
match) and would be willing to relocate to New York, please send a 
cover-letter and resume to:

And you can get more information about us here: 

Note for foreign applicants: it is never too early to apply!  The 
quote for this year for H1-B visas is already filled, so the earliest 
possible hiring date is October 2007. 

ocamlscript 1.99


Martin Jambon announced:
We are pleased to announce a pre-release of the future ocamlscript 2. 
Ocamlscript allows to write single-file programs that include their own 
compilation options and run fast thanks to ocamlopt. 

Ocamlscript is simply a command-line tool which takes a single input 
file, compiles it and runs it. 

1) Key concepts: 
- one source file contains everything (no more tar.gz or makefiles); 
- programs run fast (unlike scripts using the "ocaml" command); 
- programs are recompiled when needed (based on last modification 

2) Novelties 

A script is now composed of two parts: 
- a short header which is written in OCaml and that is used to set 
   compilation options (packages to use, compiler options, a special 
   preprocessing, or even a completely different compiler to use 
   instead of ocamlopt); 
- the program itself. 

By default, the program is compiled with ocamlopt and camlp4o as 
preprocessor, but this can be changed. 

This new version is not 100% compatible with the last release of 
ocamlscript (1.1). It only concerns specific cases, i.e. scripts that requi 
exactly one cmx or cmxa file with no other option. 

3) A complete example 

Real example: a CGI script which uses the PCRE-OCaml, 
Ocamlnet (cgi package) and Micmatch_pcre libraries. 

The syntax extension provided by Micmatch_pcre is automatically loaded. 
PCRE-OCaml (pcre package) is automatically loaded as a dependency of 
Ocamlnet and Micmatch_pcre. So the script simply needs to start like 

#!/usr/bin/env ocamlscript 
Ocaml.packs := ["micmatch_pcre"; "cgi"] 

The full source code is there: 

The resulting CGI executable is running as: 

4) Development status 

This is the pre-release 1.99.0 of the future ocamlscript 2. It is 
provided without a true documentation, and some aspects of the interface co 
change until the 2.0 release. 

User input will be greatly appreciated (see wiki below). 

5) Distribution 

OCamlscript was written by David Mentré (original version) and Martin 
Jambon (latest features). It is distributed under the terms of the Boost 
software license. 

Source code: 

Wiki page for comments, questions and more: 

Would you like a job working on GHC?


Simon Peyton-Jones announced:
                Would you like to be paid to work on GHC? 
The Glasgow Haskell Compiler (GHC) is now being used by so many people, 
on so many platforms, that at GHC HQ we've been struggling to keep up. 
We're delighted to say that we are now looking to hire a GHC support 
engineer to work with us. 

Here is how we envisage working together: 
* You would work 3-5 days a week on GHC (details flexible). 
* You don't need to live in Cambridge, but we would like you to visit 
  every few months, so that we build up a face-to-face relationship. 
* You'll be a self-employed consultant, not a Microsoft employee. 
   You bill us; we pay you. 
* The position is a one year fixed term contract in the first instance. 
* GHC is, and will remain, an open-source project with a BSD-style 

We are looking for help with the role of supporting GHC in the field. 
Specifically, here's what the job involves: 
* Investigating, prioritising and fixing bugs, improving the test suite 
* Managing the STABLE branch of the source tree 
* Managing the GHC release cycle 
* Keeping the GHC web site up to date 
* Answering questions from GHC users 
* Helping to support the open-source community that works on GHC itself 

We're particularly looking for someone who is experienced in a variety 
of operating system platforms and libraries. You should be able to deal 
with questions like "I try to build GHC on Solaris 2.3.4 and get 
`undefined symbol _readline'"; or "How do I link to DLLs on Windows?"; 
or "does the ByteString library in GHC 6.2.1 do XXX?".  The role will 
not primarily involve working on GHC's core; it's the parts round the 
edges that you would mainly focus on.  You must be able to read and 
write Haskell, but we don't expect that you'll need to write a great 
deal of Haskell code.  C and 'make' experience are important too. 

Above all, we are looking for someone who is enthusiastic about Haskell, 
and fired up about the prospect of becoming a GHC expert. 

If you are interested, please send your CV and a statement of why you 
would be a good fit for the job, to our Human Resources Department at   We're happy to accept informal enquiries of 
course: please contact Simon Marlow ( or Simon 
Peyton Jones ( for further information. 

The rate of pay is dependent on qualifications and experience.  It'll be 

Simon Peyton Jones and Simon Marlow 

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}$'?'&lt;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