<?xml version="1.0" encoding="UTF-8"?>
<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns="http://purl.org/rss/1.0/" xmlns:taxo="http://purl.org/rss/1.0/modules/taxonomy/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:syn="http://purl.org/rss/1.0/modules/syndication/" xmlns:admin="http://webns.net/mvcb/">
  <channel rdf:about="http://blog.gmane.org/gmane.comp.lang.caml.inria">
    <title>gmane.comp.lang.caml.inria</title>
    <link>http://blog.gmane.org/gmane.comp.lang.caml.inria</link>
    <description/>
    <syn:updatePeriod>hourly</syn:updatePeriod>
    <syn:updateFrequency>1</syn:updateFrequency>
    <syn:updateBase>1901-01-01T00:00+00:00</syn:updateBase>
    <items>
      <rdf:Seq>
        <rdf:li rdf:resource="http://permalink.gmane.org/gmane.comp.lang.caml.inria/54940"/>
        <rdf:li rdf:resource="http://permalink.gmane.org/gmane.comp.lang.caml.inria/54939"/>
        <rdf:li rdf:resource="http://permalink.gmane.org/gmane.comp.lang.caml.inria/54938"/>
        <rdf:li rdf:resource="http://permalink.gmane.org/gmane.comp.lang.caml.inria/54937"/>
        <rdf:li rdf:resource="http://permalink.gmane.org/gmane.comp.lang.caml.inria/54936"/>
        <rdf:li rdf:resource="http://permalink.gmane.org/gmane.comp.lang.caml.inria/54935"/>
        <rdf:li rdf:resource="http://permalink.gmane.org/gmane.comp.lang.caml.inria/54934"/>
        <rdf:li rdf:resource="http://permalink.gmane.org/gmane.comp.lang.caml.inria/54933"/>
        <rdf:li rdf:resource="http://permalink.gmane.org/gmane.comp.lang.caml.inria/54932"/>
        <rdf:li rdf:resource="http://permalink.gmane.org/gmane.comp.lang.caml.inria/54931"/>
        <rdf:li rdf:resource="http://permalink.gmane.org/gmane.comp.lang.caml.inria/54930"/>
        <rdf:li rdf:resource="http://permalink.gmane.org/gmane.comp.lang.caml.inria/54929"/>
        <rdf:li rdf:resource="http://permalink.gmane.org/gmane.comp.lang.caml.inria/54928"/>
        <rdf:li rdf:resource="http://permalink.gmane.org/gmane.comp.lang.caml.inria/54927"/>
        <rdf:li rdf:resource="http://permalink.gmane.org/gmane.comp.lang.caml.inria/54926"/>
        <rdf:li rdf:resource="http://permalink.gmane.org/gmane.comp.lang.caml.inria/54925"/>
        <rdf:li rdf:resource="http://permalink.gmane.org/gmane.comp.lang.caml.inria/54924"/>
        <rdf:li rdf:resource="http://permalink.gmane.org/gmane.comp.lang.caml.inria/54923"/>
        <rdf:li rdf:resource="http://permalink.gmane.org/gmane.comp.lang.caml.inria/54922"/>
        <rdf:li rdf:resource="http://permalink.gmane.org/gmane.comp.lang.caml.inria/54921"/>
      </rdf:Seq>
    </items>
    <image rdf:resource="http://gmane.org/img/gmane-25t.png"/>
    <textinput rdf:resource=""/>
  </channel>
  <image rdf:about="http://gmane.org/img/gmane-25t.png">
    <title>Gmane</title>
    <url>http://gmane.org/img/gmane-25t.png</url>
    <link>http://gmane.org</link>
  </image>
  <item rdf:about="http://permalink.gmane.org/gmane.comp.lang.caml.inria/54940">
    <title>[Announce] New release of tuareg mode</title>
    <link>http://permalink.gmane.org/gmane.comp.lang.caml.inria/54940</link>
    <description>&lt;pre&gt;Hi,

I am pleased to announce a new release of Tuareg mode:

  http://forge.ocamlcore.org/projects/tuareg/

It is recommended that you use the new SMIE based code by putting at
the toplevel (and NOT in the tuareg mode hook as I stated previously)
of your .emacs file

  (setq tuareg-use-smie t)

Please report any problem to the mailing list "tuareg-mode":
http://forge.ocamlcore.org/mail/?group_id=43

Enjoy!
C.

&lt;/pre&gt;</description>
    <dc:creator>Christophe TROESTLER</dc:creator>
    <dc:date>2012-05-24T08:47:08</dc:date>
  </item>
  <item rdf:about="http://permalink.gmane.org/gmane.comp.lang.caml.inria/54939">
    <title>Re: Tuareg-mode and pipes |</title>
    <link>http://permalink.gmane.org/gmane.comp.lang.caml.inria/54939</link>
    <description>&lt;pre&gt;
I can be very patient, it seems ;)

Thanks for the fix! Warning: I may come back in two years if this
doesn't work.

Cheers,

&lt;/pre&gt;</description>
    <dc:creator>Romain Bardou</dc:creator>
    <dc:date>2012-05-24T08:10:49</dc:date>
  </item>
  <item rdf:about="http://permalink.gmane.org/gmane.comp.lang.caml.inria/54938">
    <title>Re: Tuareg-mode and pipes |</title>
    <link>http://permalink.gmane.org/gmane.comp.lang.caml.inria/54938</link>
    <description>&lt;pre&gt;
Thanks for fixing this issue. Do you plan to make a new release
of tuareg?

Regards,

&lt;/pre&gt;</description>
    <dc:creator>Mehdi Dogguy</dc:creator>
    <dc:date>2012-05-23T21:27:42</dc:date>
  </item>
  <item rdf:about="http://permalink.gmane.org/gmane.comp.lang.caml.inria/54937">
    <title>Re: Tuareg-mode and pipes |</title>
    <link>http://permalink.gmane.org/gmane.comp.lang.caml.inria/54937</link>
    <description>&lt;pre&gt;
Thank you for drawing my attention to this regression ― you should
have insisted earlier because the bug was closed and we did not notice
it was a problem for so many people.

I have commited a fix to the trunk.  To use it, you must put

  (setq tuareg-use-smie t)

in “(add-hook 'tuareg-mode-hook ...)”.  You can customize the amount
of indentation with tuareg-match-clause-indent.  The default is 1 to
respect http://caml.inria.fr/resources/doc/guides/guidelines.en.html

Best,
C.

&lt;/pre&gt;</description>
    <dc:creator>Christophe TROESTLER</dc:creator>
    <dc:date>2012-05-23T20:51:37</dc:date>
  </item>
  <item rdf:about="http://permalink.gmane.org/gmane.comp.lang.caml.inria/54936">
    <title>Re: Re: Tuareg-mode and pipes |</title>
    <link>http://permalink.gmane.org/gmane.comp.lang.caml.inria/54936</link>
    <description>&lt;pre&gt;Hi

Alternatively you could use typerex from ocamlpro 
(http://www.typerex.org/), which indents the way you want. As for the 
features, it does at least what tuareg does (and a few additionnal 
things which i did not tested).

Thibault Suzanne

Le 23/05/2012 19:16, Hongbo Zhang a écrit :

&lt;/pre&gt;</description>
    <dc:creator>Thibault Suzanne</dc:creator>
    <dc:date>2012-05-23T18:03:54</dc:date>
  </item>
  <item rdf:about="http://permalink.gmane.org/gmane.comp.lang.caml.inria/54935">
    <title>Re: Tuareg-mode and pipes |</title>
    <link>http://permalink.gmane.org/gmane.comp.lang.caml.inria/54935</link>
    <description>&lt;pre&gt;It's true.
I previously used tuareg-mode, switched to caml-mode then


&lt;/pre&gt;</description>
    <dc:creator>Hongbo Zhang</dc:creator>
    <dc:date>2012-05-23T17:16:44</dc:date>
  </item>
  <item rdf:about="http://permalink.gmane.org/gmane.comp.lang.caml.inria/54934">
    <title>Re: Tuareg-mode and pipes |</title>
    <link>http://permalink.gmane.org/gmane.comp.lang.caml.inria/54934</link>
    <description>&lt;pre&gt;
I basically use only the auto-indenting features, and they've been
fine.  I only rarely run an OCaml subprocess, for example, so there
may be differences there that I haven't noticed.

&lt;/pre&gt;</description>
    <dc:creator>Eric Cooper</dc:creator>
    <dc:date>2012-05-23T16:15:55</dc:date>
  </item>
  <item rdf:about="http://permalink.gmane.org/gmane.comp.lang.caml.inria/54933">
    <title>Re: Tuareg-mode and pipes |</title>
    <link>http://permalink.gmane.org/gmane.comp.lang.caml.inria/54933</link>
    <description>&lt;pre&gt;Le 23/05/2012 17:53, Eric Cooper a écrit :

Thanks for your input. Do you miss anything from tuareg-mode or is your 
life just better now?

Cheers,

&lt;/pre&gt;</description>
    <dc:creator>Romain Bardou</dc:creator>
    <dc:date>2012-05-23T15:55:15</dc:date>
  </item>
  <item rdf:about="http://permalink.gmane.org/gmane.comp.lang.caml.inria/54932">
    <title>Re: Tuareg-mode and pipes |</title>
    <link>http://permalink.gmane.org/gmane.comp.lang.caml.inria/54932</link>
    <description>&lt;pre&gt;
I switched to caml-mode from tuareg for exactly this reason.  I can
confirm that with its default settings, it indents in the second
style.

&lt;/pre&gt;</description>
    <dc:creator>Eric Cooper</dc:creator>
    <dc:date>2012-05-23T15:53:07</dc:date>
  </item>
  <item rdf:about="http://permalink.gmane.org/gmane.comp.lang.caml.inria/54931">
    <title>Tuareg-mode and pipes |</title>
    <link>http://permalink.gmane.org/gmane.comp.lang.caml.inria/54931</link>
    <description>&lt;pre&gt;Hi list,

About two years ago, the following bug was reported:
https://forge.ocamlcore.org/tracker/index.php?func=detail&amp;amp;aid=659&amp;amp;group_id=43&amp;amp;atid=255

If you don't want to click, here is the issue. Tuareg indents 
pattern-matching like this:

match x with
   | Bla -&amp;gt;
     hello

But the previous behavior of Tuareg, which I prefer, was:

match x with
   | Bla -&amp;gt;
       hello

I have occasionally been updating my tuareg-mode, looking forward for 
this "tuareg-pipe-indent" variable (see the comments in the bug report), 
while patiently re-indenting pattern-matching by hand. But this 
variable, or any similar variable, never appeared.

After two years, I'm becoming suspicious that something went wrong. Does 
anybody know what happened to the patch? Or how I can get my preferred 
behavior back?

A related question is the following. I read here a few weeks ago a claim 
that the caml-mode was much better than the tuareg-mode. I was not able 
to find a comparison between these two modes, to support this claim, nor 
whether the caml-mode would fix the pipe behavior for me. Any comment 
here would be appreciated.

Cheers,

&lt;/pre&gt;</description>
    <dc:creator>Romain Bardou</dc:creator>
    <dc:date>2012-05-23T15:15:17</dc:date>
  </item>
  <item rdf:about="http://permalink.gmane.org/gmane.comp.lang.caml.inria/54930">
    <title>Fw: ICSSEA 2012 : Call for Papers  : Software and Systems Engineering and their Applications - Paris, October 23-25, 2012</title>
    <link>http://permalink.gmane.org/gmane.comp.lang.caml.inria/54930</link>
    <description>&lt;pre&gt;ICSSEA 2012
24th International Conference on 

SOFTWARE &amp;amp; SYSTEMS ENGINEERING and their APPLICATIONS

Telecom ParisTech, Paris, October 23-25, 2012



Web site : http://icssea.enst.fr

 

Sponsored by AFIS (the French Association for Systems Engineering) and INCOSE, co-organized by TELECOM ParisTech, CS Communication &amp;amp; Systems, and the Génie Logiciel quarterly, the 24th edition of the ICSSEA Conference (International Conference on Software &amp;amp; Systems Engineering and their Applications) will be held in Paris on October 23-25, 2012. By gathering actors from across the enterprise and research worlds, it aims at providing a critical survey of the status of tools, methods, and processes for elaborating software &amp;amp; systems.

 

TOPICS

 

As in previous ICSSEA Conferences, any topic in connection with software engineering &amp;amp; systems engineering is eligible. 

 

. Architectures: composition, orchestration, semantically-enabled SOA, ontology-based technologies...

. Complex systems engineering

. Components &amp;amp; reusability

. Development methods: agile, lean, contract-oriented development.

. Distributed computing: service-oriented computing, grid services, Web services, mobile applications...

. Evolution: adaptability, maintainability, variability...

. Information systems

. Management of functional and non-functional properties: analysis &amp;amp; design, representation, modeling, monitoring, composition, configurability, relationship with architecture, resolution of conflicts, aspect orientation, metrics for non-functional properties, semantic issues...

. Man-system interfaces: ergonomics, interaction, cognitive engineering.

. Open source issues: architectures for seamless integration/composition, quality assurance, 

. Outsourcing issues

. Process engineering with different notations: UML, DoDAF, SysML, the MDA/MDE approaches.

. Project management: conventional methods, agile approaches.

. Quality control &amp;amp; assurance: quality assessment, testing, V&amp;amp;V...

. Quantitative evaluations: architecture, availability, performance, quality, reliability, safety...

. Requirements engineering: elicitation, V&amp;amp;V, modeling, natural language approaches, use of ontologies,.

. Software platforms specific of application domains

. Systems engineering and Systems of systems

. Web engineering: design, composition, control flow, user interface migration, discovery and selection of services, ontology engineering...

 

Original, unpublished papers are solicited. They may concern industrial implementations or experiments, describe significant results from ongoing projects, research results applicable to industrial applications, or deal with socioeconomic issues associated with software &amp;amp; systems engineering. Offerors may also propose tool demonstrations and posters presentations. All submissions should clearly describe the nature of the work to be presented, explain its contribution, highlight its novel features, and state precisely its current status.

 

All types of systems are eligible: adaptive, autonomous, context-aware, distributed, embedded, grid computing, mobile, real-time, service-oriented, ubiquitous, Web-based, etc. All end-user domains and economic areas are eligible: information systems, process management, automotive, avionics, banking, defense, energy, health care, insurance, space, telecommunications, transportation, etc.

 

INSTRUCTIONS TO AUTHORS

 

Submission and selection of proposed interventions will be conducted as follows:

1- Submit, before June 8, 2012, 

- for industrial implementations and experiments, a text of at least 1000 words (about 5,000 characters, figures excluded), in English, including the title of the paper, an abstract of about 200 words, and the address, phone and fax numbers as well as the email address of the authors. If already available, a complete text (about 20,000 characters) would be welcome. 

- For applied research results, a text not exceeding the equivalent of 20,000 characters in length (with figures included), in English, including the title of the paper, a 200-500 word summary, and the address, phone and fax numbers as well as the email address of the authors. 

- For tools demonstrations and posters presentations, a text not exceeding 2 pages

2- Full papers or extended abstracts will be reviewed by at least three independent reviewers and selected by the International Program Committee. 

3- Authors of accepted papers or extended papers will be notified by July 1rst, 2012 and will receive the recommendations made by the International Program Committee. 

4- Authors of accepted abstracts or full papers should provide, before August 1st, 2012, a text not exceeding the equivalent of 20,000 characters in length (with figures included), in the form of a file, in Word format, attached to an electronic message. Final texts will be submitted, for final checking, to the International Program Committee before publication in the Conference Proceedings, which will be available during the event. 

5- At least one author is required to register and attend the conference to present the paper

 

Submission address: genie-logiciel&amp;lt; at &amp;gt;orange.fr

GENERAL CHAIRS
Agusti Canals (CS)
Elie Najm (Telecom ParisTech)
Jean-Claude Rault (Génie Logiciel)

STEERING COMMITTEE
Maarten Boasson - Consultant (NL)
Joseph K. DeRosa - Consultant (USA)
Vassilka Kirova - Alcatel-Lucent (USA)
Claude Y. Laporte - École de Technologie Supérieure (CDN)
Gérard Memmi - Telecom ParisTech (F)
Axel Rennoch - Fraunhofer FOKUS (D)

 

INTERNATIONAL PROGRAM COMMITTEE

See Web site: http://icssea.enst.fr

 

__________________________________________________________________________

 

INFORMATION FORM

 

To be returned to:

Jean-Claude Rault

genie-logiciel&amp;lt; at &amp;gt;orange.fr

 

Last Name:.............................................................................

First Name:............................................................................

Organization: ........................................................................

E-mail: ......................

Telephone: ...................

Address:.................................................................................

...............................................................................................

...............................................................................................

 

(   ) is interested in ICSSEA 2012

(   ) wishes to be kept informed

(   ) intends to submit a paper

 

Tentative title:............................................................................................................

...................................................................................................................................

Short abstract (5-10 lines): .......................................................................................

...................................................................................................................................

...................................................................................................................................

 

&lt;/pre&gt;</description>
    <dc:creator>genie-logiciel</dc:creator>
    <dc:date>2012-05-22T06:34:42</dc:date>
  </item>
  <item rdf:about="http://permalink.gmane.org/gmane.comp.lang.caml.inria/54929">
    <title>Re: Channels not closed on gc?</title>
    <link>http://permalink.gmane.org/gmane.comp.lang.caml.inria/54929</link>
    <description>&lt;pre&gt;
IIRC, OCaml core team has always been reluctant to add
non-essential-to-the-compiler features/helpers in OCaml's stdlib. This
proposal fits the "non-essential-to-the-compiler" description :)

Besides, if I'm not mistaken, Batteries already provide such mechanism
(See module BatIO). Some "non ocaml hackers" can already use it!

Regards,

&lt;/pre&gt;</description>
    <dc:creator>Mehdi Dogguy</dc:creator>
    <dc:date>2012-05-21T14:48:29</dc:date>
  </item>
  <item rdf:about="http://permalink.gmane.org/gmane.comp.lang.caml.inria/54928">
    <title>Re: Channels not closed on gc?</title>
    <link>http://permalink.gmane.org/gmane.comp.lang.caml.inria/54928</link>
    <description>&lt;pre&gt;

Certainly, but I meant on a high-level way, without the need to
explicitly use OCaml's internal API, for the sake of "non ocaml
hackers".  :)

--
Philippe Wang

&lt;/pre&gt;</description>
    <dc:creator>Philippe Wang</dc:creator>
    <dc:date>2012-05-21T14:18:50</dc:date>
  </item>
  <item rdf:about="http://permalink.gmane.org/gmane.comp.lang.caml.inria/54927">
    <title>Re: Channels not closed on gc?</title>
    <link>http://permalink.gmane.org/gmane.comp.lang.caml.inria/54927</link>
    <description>&lt;pre&gt;Am Montag, den 21.05.2012, 14:53 +0200 schrieb Philippe Wang:

You can easily do this yourself:

Gc.finalise close_in ch

(if ch is an in_channel; for out_channels use close_out_noerr). We
exploit here that channels track whether they are already closed. If
there is the danger of getting an exception, catch it:

let close_out_catch ch =
  try close_out ch
  with error -&amp;gt;
    prerr_endline("Exception from attempt to close channel: " ^ Printexc.to_string error)

This points, btw, to another problem: Exceptions can no longer be
reasonably handled, but only be printed. You cannot do much in a
finaliser.

Gerd


&lt;/pre&gt;</description>
    <dc:creator>Gerd Stolpmann</dc:creator>
    <dc:date>2012-05-21T13:31:47</dc:date>
  </item>
  <item rdf:about="http://permalink.gmane.org/gmane.comp.lang.caml.inria/54926">
    <title>CICM 2012: Call for participation</title>
    <link>http://permalink.gmane.org/gmane.comp.lang.caml.inria/54926</link>
    <description>&lt;pre&gt;    CICM 2012 - Conference on Intelligent Computer Mathematics
      July 9-13, 2012 at Jacobs University, Bremen, Germany

       http://www.informatik.uni-bremen.de/cicm2012/
  
             Call for participation 
----------------------------------------------------------------

As computers and communications technology advance, greater
opportunities arise for intelligent mathematical computation. While
computer algebra, automated deduction, mathematical publishing and
novel user interfaces individually have long and successful histories,
we are now seeing increasing opportunities for synergy among these
areas. The Conference on Intelligent Computer Mathematics offers a
venue for discussing these areas and their synergy.

The conference is organized by Serge Autexier and Michael Kohlhase at 
Jacobs University in Bremen and consist of five tracks:

Artificial Intelligence and Symbolic Computation (AISC)
  Co-Chairs: John A. Campbell, Jacques Carette
Calculemus
  Chair: Gabriel Dos Reis
Digital Mathematical Libraries (DML)
  Chair: Petr Sojka
Mathematical Knowledge Management (MKM)
  Chair: Makarius Wenzel
Systems and Projects
  Chair: Volker Sorge
  
The overall programme is organized by the General Program Chair 
Johan Jeuring.

Invited talks will be given by:

Yannis Haralambous, Département Informatique, Télécom Bretagne
Conor McBride, Department of Computer and Information Sciences, 
  University of Strathclyde
Cezar Ionescu, Potsdam Institute for Climate Impact Research

----------------------------------------------------------------
                       Programme
----------------------------------------------------------------

The global programme of the conference, tracks, and workshops
are available via:

http://www.informatik.uni-bremen.de/cicm2012/cicm.php?event=&amp;amp;menu=programme

and the accepted papers via:

http://www.informatik.uni-bremen.de/cicm2012/cicm.php?event=&amp;amp;menu=accepted

----------------------------------------------------------------
                     Registration
----------------------------------------------------------------

Early registration rates are applicable until June 15. See

http://www.informatik.uni-bremen.de/cicm2012/cicm.php?event=&amp;amp;menu=registration




&lt;/pre&gt;</description>
    <dc:creator>Johan Jeuring</dc:creator>
    <dc:date>2012-05-21T12:56:56</dc:date>
  </item>
  <item rdf:about="http://permalink.gmane.org/gmane.comp.lang.caml.inria/54925">
    <title>Re: Channels not closed on gc?</title>
    <link>http://permalink.gmane.org/gmane.comp.lang.caml.inria/54925</link>
    <description>&lt;pre&gt;
Wouldn't it be a good idea to provide both ways?
i.e., one that collects automatically, in addition to the current one
that doesn't.

&lt;/pre&gt;</description>
    <dc:creator>Philippe Wang</dc:creator>
    <dc:date>2012-05-21T12:53:14</dc:date>
  </item>
  <item rdf:about="http://permalink.gmane.org/gmane.comp.lang.caml.inria/54924">
    <title>AW: Channels not closed on gc?</title>
    <link>http://permalink.gmane.org/gmane.comp.lang.caml.inria/54924</link>
    <description>&lt;pre&gt;Am 21.05.2012 13:23:36 schrieb(en) Lauri Alanko:

It's predictable.

Closing a channel is not only about releasing OS resources. Imagine the  
channel is actually a pipe - closing it means to signal EOF, i.e. it's  
a way of notifying another program about an event. This should not  
happen behind one's back.

Closing a regular file would in deed be harmless, but there is no  
generic way to identify such channels (in the OS).

Gerd



&lt;/pre&gt;</description>
    <dc:creator>Gerd Stolpmann</dc:creator>
    <dc:date>2012-05-21T11:57:32</dc:date>
  </item>
  <item rdf:about="http://permalink.gmane.org/gmane.comp.lang.caml.inria/54923">
    <title>Channels not closed on gc?</title>
    <link>http://permalink.gmane.org/gmane.comp.lang.caml.inria/54923</link>
    <description>&lt;pre&gt;I only recently noticed that ocaml does not close open channels when  
they are garbage collected. This is evidently intentional behavior,  
but it was quite unexpected.

To be clear, I do think it's bad style to rely on GC for releasing OS  
resources, but that doesn't explain why GC shouldn't do this if the  
programmer has failed to explicitly close the channel. And if the  
intention were to _enforce_ good style, the channel finaliser would  
spout out an error or warning upon detecting that the channel hasn't  
yet been closed, instead of just silently leaking file handles like it  
does currently.

It is of course trivial to "fix" this by attaching a simple finaliser,  
but the fact that this is not done by default makes me suspect that  
there would be something fishy with this approach. So, what's the  
rationale for the current behavior?

Thanks,


Lauri



&lt;/pre&gt;</description>
    <dc:creator>Lauri Alanko</dc:creator>
    <dc:date>2012-05-21T11:23:36</dc:date>
  </item>
  <item rdf:about="http://permalink.gmane.org/gmane.comp.lang.caml.inria/54922">
    <title>Re: One-value functors</title>
    <link>http://permalink.gmane.org/gmane.comp.lang.caml.inria/54922</link>
    <description>&lt;pre&gt;

Well, there is a superficial similarity with typeclasses, in that it may be
used for similar patterns, and that without first-class functors, we are
bound to some prefix abstractions (first all the functor abstractions, then
the regular type). With first-class functors, however, we can, in principle
be much freer. But really, my reason for using these one-value functors
(monofunctors?) is to gain access to higher kinding (like, in my above
example, function abstracted over type families).



On 17 May 2012 16:52, Goswin von Brederlow &amp;lt;goswin-v-b&amp;lt; at &amp;gt;web.de&amp;gt; wrote:


This is part of the definition of Leibniz equality in  [
http://okmij.org/ftp/ML/first-class-modules/first-class-modules.pdf ]. The
idea is that a and b must be the same type et Subst.x the identity.

Hard to say if I can't even understand what "this kind of thing" is.

Well, you probably never needed such a pattern, otherwise you would have
recognised it. Let me try to give you a more concrete example.

The simplest case, I believe, where one would want higher-kinding is linked
to interruptible List.fold_left, using option to report errors (you can use
it, for instance, to define List.for_all exiting as soon as you know the
answer is "false"). Let's proceed :

val i_iter : ('a -&amp;gt; 'b -&amp;gt; 'a option) -&amp;gt; 'a -&amp;gt; 'b list -&amp;gt; 'a option
let rec i_iter f seed = function
  | [] -&amp;gt; Some seed
  | b::l -&amp;gt; match f seed b with | None -&amp;gt; None | Some a -&amp;gt; i_iter f a l

This was quite direct, but is part of a bigger story, which involves
monads. The above definition can be abstracted over monads in the following
manner

module type Monad = sig
  type 'a t

  val return : 'a -&amp;gt; 'a t
  val (&amp;gt;&amp;gt;=) : 'a t -&amp;gt; ('a -&amp;gt; 'b t) -&amp;gt; 'b t
end

module MIter (M:Monad) = struct
  let rec x f seed = function
    | [] -&amp;gt; M.return seed
    | b::l -&amp;gt; M.(f seed b &amp;gt;&amp;gt;= fun a -&amp;gt; x f a l)
end


The proposed syntax would let me write the MIter as a val, rather than a
module :

val m_iter : (M:Monad) =&amp;gt; ('a -&amp;gt; 'b -&amp;gt; 'a M.t) -&amp;gt; 'a -&amp;gt; 'b list -&amp;gt; 'a M.t

Then you can get the traditional fold_left as

let fold_left = m_iter {{struct type 'a t = 'a  let return x = x let (&amp;gt;&amp;gt;=)
x k = k x end}}

The interruptible fold_left as

let i_iter = m_iter {{struct type 'a t = 'a option let return x = Some x
let (&amp;gt;&amp;gt;=) x k = match x with | None -&amp;gt; None | Some x' -&amp;gt; k x' end}}

You can also get a lazy fold_left as

let l_iter = m_iter {{struct type 'a t = 'a Lazy.t  let return x =
Lazy.lazy_from_val x let (&amp;gt;&amp;gt;=) x k = lazy (k (force x)) end}}

One that is particularly useful for me is a fold_left compatible with state
passing style

let s_iter (type state) = m_iter {{struct type 'a t = state -&amp;gt; ('a*state)
let return x s = (x,s) let (&amp;gt;&amp;gt;=) x k s = let (x',s') = x s in k x' s' end}}

What matters is that I need to abstract over a type family, which cannot be
done without functors in OCaml.


--
Arnaud

&lt;/pre&gt;</description>
    <dc:creator>Arnaud Spiwack</dc:creator>
    <dc:date>2012-05-21T09:25:29</dc:date>
  </item>
  <item rdf:about="http://permalink.gmane.org/gmane.comp.lang.caml.inria/54921">
    <title>Re: OCaml 3.00 compatibility</title>
    <link>http://permalink.gmane.org/gmane.comp.lang.caml.inria/54921</link>
    <description>&lt;pre&gt;Changes are listed here
http://caml.inria.fr/pub/distrib/ocaml-3.12/notes/Changes (they go
back well before 3.00).

Changes breaking backward compatibility are marked with a '*' (as
explained in the document). There is mention of NaN handling and
exceptions in invalid accesses for strings and arrays.

On Sun, May 20, 2012 at 10:43 PM, Jon Harrop &amp;lt;jon&amp;lt; at &amp;gt;ffconsultancy.com&amp;gt; wrote:



&lt;/pre&gt;</description>
    <dc:creator>Raphael Proust</dc:creator>
    <dc:date>2012-05-21T07:15:32</dc:date>
  </item>
  <item rdf:about="http://permalink.gmane.org/gmane.comp.lang.caml.inria/54920">
    <title>Re: Any library for reading/writing compressed files?</title>
    <link>http://permalink.gmane.org/gmane.comp.lang.caml.inria/54920</link>
    <description>&lt;pre&gt;You should check the bitmasks and Marshal's output with a binary
editor. There's probably at least one thing to learn.

This is with 2.1MB of zeroes.

8:08 ~ % dd if=/dev/zero of=Z.mask bs=1M count=2
2+0 records in
2+0 records out
2097152 bytes (2.1 MB) copied, 0.00606737 s, 346 MB/s
8:09 ~ % gzip -1v Z.mask
Z.mask:  99.6% -- replaced with Z.mask.gz
8:09 ~ % ls -lh Z.mask.gz
-rw-r--r-- 1 adrien users 9.0K May 21 08:09 Z.mask.gz

&lt;/pre&gt;</description>
    <dc:creator>Adrien</dc:creator>
    <dc:date>2012-05-21T06:11:33</dc:date>
  </item>
  <textinput rdf:about="http://search.gmane.org/?group=$group=gmane.comp.lang.caml.inria">
    <title>Search Engine</title>
    <description>Search the mailing list at Gmane</description>
    <name>query</name>
    <link>http://search.gmane.org/?group=$group=gmane.comp.lang.caml.inria</link>
  </textinput>
</rdf:RDF>

