[cwn] Attn: Development Editor, Latest Caml Weekly News

Alan Schmitt alan.schmitt at polytechnique.org
Tue Jan 24 08:26:31 PST 2012


Hello,

Here is the latest Caml Weekly News, for the week of January 17 to 24, 
2012.

1) otags reloaded 3.12.1 for OCaml 3.12.1
2) ounit v1.1.1: Unit testing framework
3) polymorphic variants in match statements
4) Other Caml News

========================================================================
1) otags reloaded 3.12.1 for OCaml 3.12.1
Archive: 
<https://sympa-roc.inria.fr/wws/arc/caml-list/2012-01/msg00154.html>
------------------------------------------------------------------------
** Hendrik Tews announced:

better late than never: I would like to announce the first
release of otags reloaded for OCaml 3.12. It is available at

     <http://askra.de/software/otags/>

Otags reloaded generates tags tables for emacs and vi/vim.

Note that otags (by default) refuses to compile with OCaml
3.12.0, because that version contains a bug that makes otags
quite unusable.

Otags reloaded is distributed under GPL v3.

========================================================================
2) ounit v1.1.1: Unit testing framework
Archive: 
<https://sympa-roc.inria.fr/wws/arc/caml-list/2012-01/msg00157.html>
------------------------------------------------------------------------
** Sylvain Le Gall announced:

OUnit is a unit testing framework for OCaml, inspired by the JUnit tool 
for
Java, and the HUnit tool for Haskell.

More information on [HUnit](<http://hunit.sourceforge.net>)

In version 1.1.1:

- bracket now enforce returning unit
- update examples
- ListSimpleMake now use the provided comparator for all elements

This version is already available on oasis-db (and can be installed 
through
odb):
<http://oasis.ocamlcore.org/dev/view/ounit/1.1.1>

Homepage:
<http://ounit.forge.ocamlcore.org>

Get source code:
$ darcs get <http://darcs.ocamlcore.org/repos/ounit>

Browse source code:
<http://darcs.ocamlcore.org/cgi-bin/darcsweb.cgi?r=ounit;a=summary>

========================================================================
3) polymorphic variants in match statements
Archive: 
<https://sympa-roc.inria.fr/wws/arc/caml-list/2012-01/msg00206.html>
------------------------------------------------------------------------
** Milan Stanojevi? asked and Jacques Garrigue replied:

> Hi, we're trying to understand the type inference with polymorphic
> variants in match statements. This is a simplification of an actual
> case that happened in practice.
>
> 1)
> let f i a =
> match i, a with
> | true, `A -> `B
> | false, x -> x
>
> fails with
> File "foo.ml", line 4, characters 16-17:
> Error: This expression has type [< `A ]
>     but an expression was expected of type [> `B ]
>     The first variant type does not allow tag(s) `B
>
> 2) changing false to _
> let f i a =
> match i, a with
> | true, `A -> `B
> | _, x -> x
>
> this succeeds with
> val f : bool -> ([> `A | `B ] as 'a) -> 'a
>
> 3) changing x in (1) to _ , and using a on the right side
> let f i a =
> match i, a with
> | true, `A -> `B
> | false, _ -> a
>
> this fails in the same way as (1)
>
> 4) finally adding another case to match statement
> let f i a =
> match i, a with
> | true, `A -> `B
> | false, x -> x
> | true, x -> x
>
> this succeeds with the same type as (2)
>
>
> So it seems there is some interaction between type inference and
> exhaustivnest of the match statements.
>
> Can someone shed some light on what is going on here?

Indeed. The basic idea is to close variant types when leaving them
open would make the pattern matching non-exhaustive.
Here, if we assume that a has type [`A | `B], then the pattern-matching
becomes non-exhaustive, so the type inferred is just [`A]
(i.e. the list of all constructors appearing inside the patterns at this
position).

Actually, the theory is a bit more complicated, and the full details are
in the following paper, but you should just expect the above behavior
in practice.

         Typing deep pattern-matching in presence of polymorphic 
variants.
         <http://www.math.nagoya-u.ac.jp/~garrigue/papers/index.html>

Note that there is also another way to make (1) type, without adding
new cases

   let f i a =
     match i, a with
     | true, `A -> `B
     | false, (`A as x) -> x;;
   val f : bool -> [< `A ] -> [> `A | `B ] = <fun>

Here we have removed the connection between a and the output,
allowing `A to be combine with `B without changing the type of a.

========================================================================
4) Other Caml News
------------------------------------------------------------------------
** From the ocamlcore planet blog:

Thanks to Alp Mestan, we now include in the Caml Weekly News the links 
to the
recent posts from the ocamlcore planet blog at 
<http://planet.ocamlcore.org/>.

libsndfile:
   <https://forge.ocamlcore.org/projects/libsndfile/>

OCaml Submodule Pattern:
   <http://www.nicollet.net/2012/01/ocaml-submodule-pattern/>

OUnit 1.1.1:
   <http://caml.inria.fr/cgi-bin/hump.cgi?contrib=293>

Otags 3.12.1:
   <http://caml.inria.fr/cgi-bin/hump.cgi?contrib=294>

A puzzle about typing:
   <http://math.andrej.com/2012/01/20/a-puzzle-about-typing/>

Happy new year from the Ocsigen team:
   <http://ocsigen.org/>

1D integration:
   <https://forge.ocamlcore.org/projects/integration1d/>

Share your mistakes: adventures in optimization:
   
<http://blog.incubaid.com/2012/01/17/share-your-mistakes-adventures-in-optimization/>

========================================================================
Old cwn
------------------------------------------------------------------------

If you happen to miss a CWN, you can send me a message
(alan.schmitt at polytechnique.org) and I'll mail it to you, or go take a 
look at
the archive (<http://alan.petitepomme.net/cwn/>) or the RSS feed of the
archives (<http://alan.petitepomme.net/cwn/cwn.rss>). If you also wish
to receive it every week by mail, you may subscribe online at
<http://lists.idyll.org/listinfo/caml-news-weekly/> .

========================================================================


More information about the caml-news-weekly mailing list