Hello
Here is the latest Caml Weekly News, for the week of 16 to 23 November, 2004.
Archive: http://caml.inria.fr/archives/200411/msg00145.html
Jean-Baptiste Rouquier announced:
I'm pleased to announce the first release of Config_file.
This library allows one to save configuration parameters (basic types, lists,
user defined, etc.) into a file and load them. The configuration file is human
readable, structured and allow (* *) comments.
I've started with the module Options from cameleon and added full
documentation, a few new features, rewritten in OO style (to learn OO :-),
error logging, more secure parsing of the configuration file.
This lib is used in cameleon and in my own programms. It's available on
http://savannah.nongnu.org/download/cameleon/ and on my own webpage.
It's part of cameleon2 (not yet available) but is also available separately.
Comments welcome, especially if you know other similar libs. I know Inifiles,
Option from cameleon and I couldn't download ConfigParser from Missinglib.
Archive: http://caml.inria.fr/archives/200411/msg00147.html
Richard Jones announced:
I'm happy to announce that mod_caml 1.3.4 has been released. This
fixes a couple of critical bugs relating to Apache 2.0. The greatest
thanks must go to Jeff Henrikson for persevering with this and helping
me to find the bugs.
http://savannah.nongnu.org/download/modcaml/
http://savannah.nongnu.org/download/modcaml/mod_caml-1.3.4.tar.gz
http://savannah.nongnu.org/download/modcaml/mod_caml-1.3.4.tar.gz.sig
Instructions on how to compile Apache 2.0 to work with mod_caml:
http://merjis.com/developers/mod_caml/apache_2.0
The Apache bug which never goes away (+ patch):
http://issues.apache.org/bugzilla/show_bug.cgi?id=27550
Archive: http://caml.inria.fr/archives/200411/msg00150.html
John F. Hughes asked:
I'd like to write a signature like this:
module type P =
sig
type t
val foo : t -> t
val z:int
end;;
And make two modules matching that signature:
module P1 : P =
struct
type t = int
let foo x:t = x
let z = 1
end;;
module P2 : P =
struct
type t = int
let foo x:t = x
let z = 2
end;;
I now want to apply a functor to those two modules...but a functor
wants a single module, so I make a signature for a "joined" type:
module type COMBINE =
sig
module A : P
module B : P
end;;
with A.t = B.t;;
and create a module of that type:
module C : COMBINE =
struct
module A = P1
module B = P2
end;;
And now I can write a functor:
module Fun =
functor (Z : COMBINE) ->
struct
let f x:Z.A.t = Z.B.foo x
end;;
This will fail because Z.B.foo expects a B.t, but is being handed an
A.t.
I'd like it to work. In other words, I'd like a way to promise to the
type system
that A.t and B.t (within a COMBINE) are always the same. I tried
module type COMBINE =
sig
module A : P
module B : P
end with A.t = B.t
I tried telling it they were the same when I created the module C:
module C : COMBINE =
struct
module A = P1
module B = P2
end with A.t = B.t;;
Neither worked. Can someone suggest a way to make this work, or am I
asking too
much of the module system. (I used to be able to do this in ML, using
the
"sharing type" construct, but...)
Alain Frisch answered:
> I'd like it to work. In other words, I'd like a way to promise to the
> type system
> that A.t and B.t (within a COMBINE) are always the same.
module type COMBINE =
sig
module A : P
module B : P with type t = A.t
end;;
You need to keep the P1.t and P2.t fields public, otherwise the
constraint cannot be checked:
module P1 = struct ... end;;
module P2 = struct ... end;;
or:
module P1 : P with type t = int = ...
module P2 : P with type t = int = ...
Btw, maybe you did it on purpose, but the type annotation in:
let f x:Z.A.t = Z.B.foo x
is upon the result type of f, not its argument (in your case, it's the
same).
Note also you don't need to combine the two structures in a single
module, you can just define a functor with several arguments:
module Fun(A : P)(B : P with type t = A.t) = struct
let f x = B.foo x
end
Archive: http://caml.inria.fr/archives/200411/msg00170.html
Christophe Troestler announced:
I am pleased to announce the release of lpd, a small threaded line
printer daemon. While its primary goal was to enable the use of a
windows-only printer, it should be easily modifiable for other
purposes (at present, it is not a library but if somebody is
interested we can work together to that goal).
A small module of pervasive-like functions for sockets on all
platforms (including win9x) is bundled together.
This software is released under the same license as the OCaml std
library. You can see the Socket API and download the source at
http://math.umh.ac.be/an/software.php#x4-80007
Comments, bug reports,... are of course welcome.
Archive: http://caml.inria.fr/archives/200411/msg00171.html
Christophe Troestler announced:
I am pleased to announce the release of benchmark-0.6. It is based on
Doug Bagley's version which Doug has kindly accepted that I take the
maintenance of. The code has been mostly rewritten to make it "more
functional" and the documentation has been improved.
The API has changed a little to allow multiple repetitions of a given
test (most code should compile unchanged still). This is used in
order to allow a Student's test on whether two rates are really
different.
The code is licensed under the GNU Lesser General Public License
(LGPL) with the same special exception as for the OCaml standard
library. More info at http://math.umh.ac.be/an/software.php#x4-60005
As always, your input is very welcome.
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
zM
If you know of a better way, please let me know.
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.