<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><rss xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:media="http://search.yahoo.com/mrss/" xmlns:yt="http://gdata.youtube.com/schemas/2007" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0">
   <channel>
      <title>Planet Caml [EN]</title>
      <description>Planet Caml [EN]</description>
      <link>http://feedproxy.google.com/planet_caml_en</link>
      <atom:link rel="next" href="http://pipes.yahoo.com/pipes/pipe.run?_id=tKQ3C5YE3BG1Ab6QouNLYQ&amp;_render=rss&amp;page=2" />
      <pubDate>Fri, 25 May 2012 06:12:24 +0000</pubDate>
      
      <atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/rss+xml" href="http://feeds.feedburner.com/planet_caml_en" /><feedburner:info xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" uri="planet_caml_en" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><item>
         <title>0005622: typing error : The implementation does not match the interface</title>
         <link>http://caml.inria.fr/mantis/view.php?id=5622</link>
         <description>I attached the file(ocaml 3.12.1)&amp;lt;br /&amp;gt;
I have a deadline next week, I would appreicate&amp;lt;br /&amp;gt;
if anyone could give me some hints. (maybe I am wrong, the type system&amp;lt;br /&amp;gt;
of Object layer is nontrivial to me)
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/G22yga1zIyIopTgrfyShx7dGXWM/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/G22yga1zIyIopTgrfyShx7dGXWM/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/G22yga1zIyIopTgrfyShx7dGXWM/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/G22yga1zIyIopTgrfyShx7dGXWM/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/planet_caml_en?a=s9dvNI77xGQ:Gw9mMyc-jJw:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/planet_caml_en?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/planet_caml_en?a=s9dvNI77xGQ:Gw9mMyc-jJw:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/planet_caml_en?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/planet_caml_en/~4/s9dvNI77xGQ" height="1" width="1"/&gt;</description>
         <guid isPermaLink="false">http://caml.inria.fr/mantis/view.php?id=5622</guid>
         <pubDate>Thu, 24 May 2012 19:16:50 +0000</pubDate>
         <category>OCaml typing</category>
      </item>
      <item>
         <title>0005365: Spurious "PIE" warning in Mac OS X 10.7 Lion</title>
         <link>http://caml.inria.fr/mantis/view.php?id=5365</link>
         <description>In Mac OS X 10.7 Lion, there's a spurious warning when ocamlscript is compiled, and whenever ocamlscript itself runs. This weird &amp;quot;PIE&amp;quot; warning is specific to Lion, but it appears across languages, in Haskell as well.&amp;lt;br /&amp;gt;
&amp;lt;br /&amp;gt;
$ cat hello.ml&amp;lt;br /&amp;gt;
#!/usr/bin/env ocamlscript -o hello&amp;lt;br /&amp;gt;
print_endline &amp;quot;Hello World!&amp;quot;&amp;lt;br /&amp;gt;
&amp;lt;br /&amp;gt;
$ ./hello.ml&amp;lt;br /&amp;gt;
ld: warning: PIE disabled. Absolute addressing (perhaps -mdynamic-no-pic) not allowed in code signed PIE, but used in _caml_program from /var/folders/ch/_lv6l5q936n1xv03j5qp28y40000gn/T/camlstartup2188ff.o. To fix this warning, don't compile with -mdynamic-no-pic or link with -Wl,-no_pie&amp;lt;br /&amp;gt;
Hello World!
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/3hLOLgwz_ikAU1vkVreHsEuuerM/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/3hLOLgwz_ikAU1vkVreHsEuuerM/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/3hLOLgwz_ikAU1vkVreHsEuuerM/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/3hLOLgwz_ikAU1vkVreHsEuuerM/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/planet_caml_en?a=kSxwmjUjHt8:uALprKXqT18:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/planet_caml_en?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/planet_caml_en?a=kSxwmjUjHt8:uALprKXqT18:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/planet_caml_en?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/planet_caml_en/~4/kSxwmjUjHt8" height="1" width="1"/&gt;</description>
         <guid isPermaLink="false">http://caml.inria.fr/mantis/view.php?id=5365</guid>
         <pubDate>Thu, 24 May 2012 17:37:40 +0000</pubDate>
         <category>OCaml general</category>
      </item>
      <item>
         <title>0005578: Windows: Exception raised when reading from a socket</title>
         <link>http://caml.inria.fr/mantis/view.php?id=5578</link>
         <description>In recent versions of the trunk, the following piece of code raises an exception on input_line:&amp;lt;br /&amp;gt;
&amp;lt;br /&amp;gt;
let () =&amp;lt;br /&amp;gt;
  let sock = Unix.socket Unix.PF_INET Unix.SOCK_STREAM 0 in&amp;lt;br /&amp;gt;
  Unix.setsockopt sock Unix.SO_REUSEADDR true;&amp;lt;br /&amp;gt;
  Unix.bind sock (Unix.ADDR_INET (Unix.inet_addr_any, 8090));&amp;lt;br /&amp;gt;
  Unix.listen sock 10;&amp;lt;br /&amp;gt;
  let (client, _) = Unix.accept sock in&amp;lt;br /&amp;gt;
  Unix.set_close_on_exec client;&amp;lt;br /&amp;gt;
  let ic = Unix.in_channel_of_descr client in&amp;lt;br /&amp;gt;
  print_endline (input_line ic)&amp;lt;br /&amp;gt;
&amp;lt;br /&amp;gt;
&amp;lt;br /&amp;gt;
(compiled with: ocamlc -custom -o test_http.exe unix.cma test_http.ml&amp;lt;br /&amp;gt;
 to trigger the error, just connect to 127.0.0.1:8090 (with telnet, a browser, ...)&amp;lt;br /&amp;gt;
&amp;lt;br /&amp;gt;
The exception is:&amp;lt;br /&amp;gt;
&amp;lt;br /&amp;gt;
Fatal error: exception Sys_error(&amp;quot;Invalid argument&amp;quot;)&amp;lt;br /&amp;gt;
&amp;lt;br /&amp;gt;
I've tested this with the trunk (msvc and mingw ports).  I'm pretty sure this used to work with previous versions.&amp;lt;br /&amp;gt;
&amp;lt;br /&amp;gt;
Replacing input_line with Unix.recv seems to work.
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/71VUP4ZAnQcQ8rKBTGZTXbTqC_Y/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/71VUP4ZAnQcQ8rKBTGZTXbTqC_Y/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/71VUP4ZAnQcQ8rKBTGZTXbTqC_Y/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/71VUP4ZAnQcQ8rKBTGZTXbTqC_Y/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/planet_caml_en?a=H0HUGQh8HPE:gn5-ZJfVyKU:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/planet_caml_en?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/planet_caml_en?a=H0HUGQh8HPE:gn5-ZJfVyKU:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/planet_caml_en?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/planet_caml_en/~4/H0HUGQh8HPE" height="1" width="1"/&gt;</description>
         <guid isPermaLink="false">http://caml.inria.fr/mantis/view.php?id=5578</guid>
         <pubDate>Thu, 24 May 2012 17:17:45 +0000</pubDate>
         <category>OCaml otherlibs</category>
      </item>
      <item>
         <title>0005325: Blocked Unix.recv in one thread blocks Unix.send in another thread under Windows</title>
         <link>http://caml.inria.fr/mantis/view.php?id=5325</link>
         <description>It appears not be possible to write to a socket in one thread if another thread is blocked in a [recv] call on the same socket (and presumably vice versa).&amp;lt;br /&amp;gt;
&amp;lt;br /&amp;gt;
This behaviour only seems to affect Windows - tried on both Windows 7 with 3.12.0 and Windows XP with 3.10.1 with the same effect.
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/3-JA8CJnefVCY9kljC0GcVs2_Vo/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/3-JA8CJnefVCY9kljC0GcVs2_Vo/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/3-JA8CJnefVCY9kljC0GcVs2_Vo/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/3-JA8CJnefVCY9kljC0GcVs2_Vo/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/planet_caml_en?a=WkDmOHwZti4:DER-CHFEL-o:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/planet_caml_en?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/planet_caml_en?a=WkDmOHwZti4:DER-CHFEL-o:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/planet_caml_en?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/planet_caml_en/~4/WkDmOHwZti4" height="1" width="1"/&gt;</description>
         <guid isPermaLink="false">http://caml.inria.fr/mantis/view.php?id=5325</guid>
         <pubDate>Thu, 24 May 2012 17:11:42 +0000</pubDate>
         <category>OCaml general</category>
      </item>
      <item>
         <title>Fix for PR#5578 left on trunk but removed from 4.00 because of PR#5578.</title>
         <link>https://github.com/thelema/ocaml-community/commit/e3dfd96fd60a984450c55a62ac8e201f3d66cc33</link>
         <description>&lt;pre&gt;m Changes
&lt;/pre&gt;
      &lt;pre style='white-space:pre-wrap;width:81ex;'&gt;Fix for PR#5578 left on trunk but removed from 4.00 because of PR#5578.


git-svn-id: http://caml.inria.fr/svn/ocaml/trunk@12481 f963ae5c-01c2-4b8c-9fe0-0dff7051ff02&lt;/pre&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/i-A_LV_Jc2MTrt7mOTwZ0YK7tn8/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/i-A_LV_Jc2MTrt7mOTwZ0YK7tn8/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/i-A_LV_Jc2MTrt7mOTwZ0YK7tn8/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/i-A_LV_Jc2MTrt7mOTwZ0YK7tn8/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/planet_caml_en?a=HsnCGKPHVkc:NDZ5_60jH-g:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/planet_caml_en?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/planet_caml_en?a=HsnCGKPHVkc:NDZ5_60jH-g:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/planet_caml_en?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/planet_caml_en/~4/HsnCGKPHVkc" height="1" width="1"/&gt;</description>
         <guid isPermaLink="false">tag:github.com,2008:Grit::Commit/e3dfd96fd60a984450c55a62ac8e201f3d66cc33</guid>
         <pubDate>Thu, 24 May 2012 16:41:34 +0000</pubDate>
         <media:thumbnail height="30" url="https://secure.gravatar.com/avatar/22444ce17636682e3eb06f6041003f1d?s=30&amp;d=https://a248.e.akamai.net/assets.github.com%2Fimages%2Fgravatars%2Fgravatar-140.png" width="30" />
      </item>
      <item>
         <title>0005321: Graphics: auto_synchronize does not always work as intended</title>
         <link>http://caml.inria.fr/mantis/view.php?id=5321</link>
         <description>The following code shows the bug:&amp;lt;br /&amp;gt;
&amp;lt;br /&amp;gt;
open Graphics&amp;lt;br /&amp;gt;
open Printf&amp;lt;br /&amp;gt;
&amp;lt;br /&amp;gt;
let graph s =&amp;lt;br /&amp;gt;
  open_graph(&amp;quot; 200x200&amp;quot; ^ s);&amp;lt;br /&amp;gt;
  auto_synchronize false;&amp;lt;br /&amp;gt;
&amp;lt;br /&amp;gt;
  moveto 10 10;&amp;lt;br /&amp;gt;
  lineto 100 100;&amp;lt;br /&amp;gt;
&amp;lt;br /&amp;gt;
  ignore(Graphics.wait_next_event [Graphics.Key_pressed]);&amp;lt;br /&amp;gt;
  synchronize();&amp;lt;br /&amp;gt;
  ignore(Graphics.wait_next_event [Graphics.Key_pressed]);&amp;lt;br /&amp;gt;
  close_graph()&amp;lt;br /&amp;gt;
&amp;lt;br /&amp;gt;
let () =&amp;lt;br /&amp;gt;
  graph &amp;quot;&amp;quot;; (* bug *)&amp;lt;br /&amp;gt;
  graph &amp;quot;-0&amp;quot; (* fine *)
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/YjFD4QSqYbvDzmXj4abCaYORG7I/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/YjFD4QSqYbvDzmXj4abCaYORG7I/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/YjFD4QSqYbvDzmXj4abCaYORG7I/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/YjFD4QSqYbvDzmXj4abCaYORG7I/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/planet_caml_en?a=D4pns-wK91g:vbj5QTTbrn8:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/planet_caml_en?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/planet_caml_en?a=D4pns-wK91g:vbj5QTTbrn8:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/planet_caml_en?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/planet_caml_en/~4/D4pns-wK91g" height="1" width="1"/&gt;</description>
         <guid isPermaLink="false">http://caml.inria.fr/mantis/view.php?id=5321</guid>
         <pubDate>Thu, 24 May 2012 16:29:17 +0000</pubDate>
         <category>OCaml general</category>
      </item>
      <item>
         <title>0005616: Please claritfy license and copyright holders of ocamlbuild/manual/*</title>
         <link>http://caml.inria.fr/mantis/view.php?id=5616</link>
         <description>Hi,&amp;lt;br /&amp;gt;
&amp;lt;br /&amp;gt;
It seems that files shipped under &amp;quot;ocamlbuild/manual/&amp;quot; do not have a&amp;lt;br /&amp;gt;
declared copyright owner or a license. Admittedly, manual.tex's has a&amp;lt;br /&amp;gt;
list of authors but they are not the copyright holders (it is not said&amp;lt;br /&amp;gt;
explicitly). So we cannot redistribute them or do anything useful with&amp;lt;br /&amp;gt;
them.&amp;lt;br /&amp;gt;
&amp;lt;br /&amp;gt;
The LICENSE file says the following:&amp;lt;br /&amp;gt;
&amp;lt;br /&amp;gt;
&amp;gt; and &amp;quot;the Compiler&amp;quot; refers to all files marked &amp;quot;Copyright INRIA&amp;quot; in the&amp;lt;br /&amp;gt;
&amp;gt; following directories and their sub-directories:&amp;lt;br /&amp;gt;
&amp;gt; &amp;lt;br /&amp;gt;
&amp;gt;   asmcomp, boot, build, bytecomp, debugger, driver, lex, man,&amp;lt;br /&amp;gt;
&amp;gt;   ocamlbuild, ocamldoc, parsing, testsuite, tools, toplevel, typing,&amp;lt;br /&amp;gt;
&amp;gt;   utils, yacc&amp;lt;br /&amp;gt;
&amp;lt;br /&amp;gt;
but affected files are not maked &amp;quot;Copyright INRIA&amp;quot; and thus not&amp;lt;br /&amp;gt;
covered by the LICENSE file.&amp;lt;br /&amp;gt;
&amp;lt;br /&amp;gt;
Can you please clarify their license and copyright holders?&amp;lt;br /&amp;gt;
&amp;lt;br /&amp;gt;
Besides, it would nice to also provide the ocamlbuild's manual&amp;lt;br /&amp;gt;
(generated .pdf and .html) in&amp;lt;br /&amp;gt;
&amp;lt;a href=&amp;quot;http://caml.inria.fr/pub/distrib/ocaml-$ver/&amp;quot;&amp;gt;http://caml.inria.fr/pub/distrib/ocaml-$ver/&amp;lt;/a&amp;gt; [&amp;lt;a href=&amp;quot;http://caml.inria.fr/pub/distrib/ocaml-$ver/&amp;quot; target=&amp;quot;_blank&amp;quot;&amp;gt;^&amp;lt;/a&amp;gt;] since it looks like a&amp;lt;br /&amp;gt;
canonical location for ocaml documentation.&amp;lt;br /&amp;gt;
&amp;lt;br /&amp;gt;
Regards,
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/CV0qm1ftmzQPw4msGxoLRiaWugE/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/CV0qm1ftmzQPw4msGxoLRiaWugE/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/CV0qm1ftmzQPw4msGxoLRiaWugE/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/CV0qm1ftmzQPw4msGxoLRiaWugE/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/planet_caml_en?a=KpuHAdp1KvI:s9vpIPos6vM:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/planet_caml_en?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/planet_caml_en?a=KpuHAdp1KvI:s9vpIPos6vM:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/planet_caml_en?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/planet_caml_en/~4/KpuHAdp1KvI" height="1" width="1"/&gt;</description>
         <guid isPermaLink="false">http://caml.inria.fr/mantis/view.php?id=5616</guid>
         <pubDate>Thu, 24 May 2012 16:27:58 +0000</pubDate>
         <category>OCaml documentation</category>
      </item>
      <item>
         <title>PR#5616: ocamlbuild's manual is now part of the "official" OCaml reference manual, so just remove these files, it's the easier answer to the copyright-minded folks.</title>
         <link>https://github.com/thelema/ocaml-community/commit/3f39cb2c65172c160c2d1ae3835fe1a60810fe46</link>
         <description>&lt;pre&gt;- ocamlbuild/manual/.ignore
- ocamlbuild/manual/Makefile
- ocamlbuild/manual/manual.hva
- ocamlbuild/manual/manual.tex
- ocamlbuild/manual/myocamlbuild.ml
- ocamlbuild/manual/trace.out
- ocamlbuild/ocamlbuild-presentation.rslide
&lt;/pre&gt;
      &lt;pre style='white-space:pre-wrap;width:81ex;'&gt;PR#5616: ocamlbuild's manual is now part of the "official" OCaml reference manual, so just remove these files, it's the easier answer to the copyright-minded folks.



git-svn-id: http://caml.inria.fr/svn/ocaml/trunk@12479 f963ae5c-01c2-4b8c-9fe0-0dff7051ff02&lt;/pre&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/xZ-QvoOk8EAoE-TLmMCJRq3dCIE/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/xZ-QvoOk8EAoE-TLmMCJRq3dCIE/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/xZ-QvoOk8EAoE-TLmMCJRq3dCIE/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/xZ-QvoOk8EAoE-TLmMCJRq3dCIE/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/planet_caml_en?a=C2ZW6UfSqWw:RzHrgZGRKXI:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/planet_caml_en?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/planet_caml_en?a=C2ZW6UfSqWw:RzHrgZGRKXI:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/planet_caml_en?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/planet_caml_en/~4/C2ZW6UfSqWw" height="1" width="1"/&gt;</description>
         <guid isPermaLink="false">tag:github.com,2008:Grit::Commit/3f39cb2c65172c160c2d1ae3835fe1a60810fe46</guid>
         <pubDate>Thu, 24 May 2012 16:26:07 +0000</pubDate>
         <media:thumbnail height="30" url="https://secure.gravatar.com/avatar/22444ce17636682e3eb06f6041003f1d?s=30&amp;d=https://a248.e.akamai.net/assets.github.com%2Fimages%2Fgravatars%2Fgravatar-140.png" width="30" />
      </item>
      <item>
         <title>0004653: Install utils/config.cmi so OCaml programs can query their environment</title>
         <link>http://caml.inria.fr/mantis/view.php?id=4653</link>
         <description>toplevellib.cma contains utils/config.cmo which contains useful information for OCaml based installers. If utils/config.cmi is installed as well then it would be possible to access this information.
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/jMY-jfXVNuauWucBVPLJRodC0ns/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/jMY-jfXVNuauWucBVPLJRodC0ns/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/jMY-jfXVNuauWucBVPLJRodC0ns/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/jMY-jfXVNuauWucBVPLJRodC0ns/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/planet_caml_en?a=PxW03XHmwxk:S4weBU2Sk8w:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/planet_caml_en?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/planet_caml_en?a=PxW03XHmwxk:S4weBU2Sk8w:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/planet_caml_en?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/planet_caml_en/~4/PxW03XHmwxk" height="1" width="1"/&gt;</description>
         <guid isPermaLink="false">http://caml.inria.fr/mantis/view.php?id=4653</guid>
         <pubDate>Thu, 24 May 2012 16:19:50 +0000</pubDate>
         <category>OCaml general</category>
      </item>
      <item>
         <title>0001804: "make install" should install interface files for toploop-manipulation modules</title>
         <link>http://caml.inria.fr/mantis/view.php?id=1804</link>
         <description>Full_Name: Aleksey Nogin&amp;lt;br /&amp;gt;
Version: 3.06, 3.07beta2&amp;lt;br /&amp;gt;
OS: Red Hat Linux&amp;lt;br /&amp;gt;
Submission from: mojave1.cs.caltech.edu (131.215.44.186)&amp;lt;br /&amp;gt;
&amp;lt;br /&amp;gt;
&amp;lt;br /&amp;gt;
In order to create a custom Ocaml toploop and to be able to manipulate it&amp;lt;br /&amp;gt;
successfuly, one needs access to a bunch of interface files that are not&amp;lt;br /&amp;gt;
normally copied into LIBDIR by ocaml's &amp;quot;make install&amp;quot;. For example, to be able&amp;lt;br /&amp;gt;
to compile code that uses Toplevel.execute_phrase, one needs access to&amp;lt;br /&amp;gt;
parsetree.cmi...&amp;lt;br /&amp;gt;
&amp;lt;br /&amp;gt;
Currently (see &amp;lt;a href=&amp;quot;http://cvs.metaprl.org:12000/cvsweb/metaprl/editor/ml/shell_p4.ml?rev=HEAD&amp;amp;content-type=text/x-cvsweb-markup&amp;quot;&amp;gt;http://cvs.metaprl.org:12000/cvsweb/metaprl/editor/ml/shell_p4.ml?rev=HEAD&amp;amp;content-type=text/x-cvsweb-markup&amp;lt;/a&amp;gt; [&amp;lt;a href=&amp;quot;http://cvs.metaprl.org:12000/cvsweb/metaprl/editor/ml/shell_p4.ml?rev=HEAD&amp;amp;content-type=text/x-cvsweb-markup&amp;quot; target=&amp;quot;_blank&amp;quot;&amp;gt;^&amp;lt;/a&amp;gt;]&amp;lt;br /&amp;gt;
for the code of the file that manipulates the toploop) we end up having to&amp;lt;br /&amp;gt;
manually copy the files:&amp;lt;br /&amp;gt;
&amp;lt;br /&amp;gt;
parsing/location.cmi parsing/location.mli parsing/longident.cmi&amp;lt;br /&amp;gt;
parsing/longident.mli parsing/parsetree.cmi parsing/parsetree.mli&amp;lt;br /&amp;gt;
typing/typecore.cmi typing/typecore.mli&amp;lt;br /&amp;gt;
&amp;lt;br /&amp;gt;
to LIBDIR. Would you please consider modifying the &amp;quot;install&amp;quot; target in the&amp;lt;br /&amp;gt;
Makefile to copy these files (and may be other interface files needed to take&amp;lt;br /&amp;gt;
full advantage of Toploop module - such as env.{mli,cmi}, for example) somewhere&amp;lt;br /&amp;gt;
under LIBDIR? &amp;lt;br /&amp;gt;
&amp;lt;br /&amp;gt;
Thanks a lot!
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/uIPIXAneIABATjmBJjkFjf8grjM/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/uIPIXAneIABATjmBJjkFjf8grjM/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/uIPIXAneIABATjmBJjkFjf8grjM/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/uIPIXAneIABATjmBJjkFjf8grjM/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/planet_caml_en?a=ZQTCdVPOtBI:TGFMWlMztxw:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/planet_caml_en?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/planet_caml_en?a=ZQTCdVPOtBI:TGFMWlMztxw:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/planet_caml_en?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/planet_caml_en/~4/ZQTCdVPOtBI" height="1" width="1"/&gt;</description>
         <guid isPermaLink="false">http://caml.inria.fr/mantis/view.php?id=1804</guid>
         <pubDate>Thu, 24 May 2012 16:19:50 +0000</pubDate>
         <category>OCaml general</category>
      </item>
      <item>
         <title>fix two bugs in commit 12453</title>
         <link>https://github.com/thelema/ocaml-community/commit/ad272679b79c761509ec1d51d3955ca4db215453</link>
         <description>&lt;pre&gt;m stdlib/hashtbl.ml
&lt;/pre&gt;
      &lt;pre style='white-space:pre-wrap;width:81ex;'&gt;fix two bugs in commit 12453

git-svn-id: http://caml.inria.fr/svn/ocaml/trunk@12476 f963ae5c-01c2-4b8c-9fe0-0dff7051ff02&lt;/pre&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/Ub4aYPa5T7hudN93Q3xXB8pIdNw/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/Ub4aYPa5T7hudN93Q3xXB8pIdNw/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/Ub4aYPa5T7hudN93Q3xXB8pIdNw/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/Ub4aYPa5T7hudN93Q3xXB8pIdNw/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/planet_caml_en?a=Ym-0NsYr2rY:kbPOo21qQp0:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/planet_caml_en?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/planet_caml_en?a=Ym-0NsYr2rY:kbPOo21qQp0:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/planet_caml_en?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/planet_caml_en/~4/Ym-0NsYr2rY" height="1" width="1"/&gt;</description>
         <guid isPermaLink="false">tag:github.com,2008:Grit::Commit/ad272679b79c761509ec1d51d3955ca4db215453</guid>
         <pubDate>Thu, 24 May 2012 15:12:37 +0000</pubDate>
         <media:thumbnail height="30" url="https://secure.gravatar.com/avatar/51c7369946c02caf4411d88b68c14d84?s=30&amp;d=https://a248.e.akamai.net/assets.github.com%2Fimages%2Fgravatars%2Fgravatar-140.png" width="30" />
      </item>
      <item>
         <title>0005621: Crash</title>
         <link>http://caml.inria.fr/mantis/view.php?id=5621</link>
         <description>Toplevel crashes as soon as one ask for a few million bytes of memory. See program below.
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/XiLMGlJ_eTxVIDJSdt-J3Yvg7K4/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/XiLMGlJ_eTxVIDJSdt-J3Yvg7K4/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/XiLMGlJ_eTxVIDJSdt-J3Yvg7K4/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/XiLMGlJ_eTxVIDJSdt-J3Yvg7K4/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/planet_caml_en?a=6nr1TzEQ5FY:ZNQl6OoBN_4:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/planet_caml_en?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/planet_caml_en?a=6nr1TzEQ5FY:ZNQl6OoBN_4:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/planet_caml_en?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/planet_caml_en/~4/6nr1TzEQ5FY" height="1" width="1"/&gt;</description>
         <guid isPermaLink="false">http://caml.inria.fr/mantis/view.php?id=5621</guid>
         <pubDate>Thu, 24 May 2012 12:41:19 +0000</pubDate>
         <category>Caml light</category>
      </item>
      <item>
         <title>2012/05/23/Twitter</title>
         <link>http://zheng.li/buzzlogs-ocaml/2012/05/23/twt.html</link>
         <description>&lt;div class="highlight"&gt;&lt;pre&gt;&lt;code class="irc"&gt;&lt;span class="cp"&gt;02:32:14  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;raganwald&amp;gt; &lt;/span&gt;“A Haskell newbie is someone who hasn’t yet implemented a compiler. They’ve only written a monad tutorial.” via http://t.co/22Jg0t8M   | 205123944854986752
&lt;span class="cp"&gt;02:36:16  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;planet_ocaml&amp;gt; &lt;/span&gt;&lt;span class="na"&gt;2012/05/22/IRC:&lt;/span&gt; 00:02:35 &amp;lt;eikke&amp;gt; removing the function call overhead by copying the required Buffer functions i... http://t.co/Sv3fI3KG   | 205124962867085312
&lt;span class="cp"&gt;09:43:57  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;planet_ocaml&amp;gt; &lt;/span&gt;&lt;span class="na"&gt;PR#5620:&lt;/span&gt; invalid printing of type manifest (camlp4 revised syntax): m camlp4/Camlp4/Printers/OCamlr.ml PR... http://t.co/V1R9BqQc   | 205232592902041600
&lt;span class="cp"&gt;09:43:58  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;planet_ocaml&amp;gt; &lt;/span&gt;update related to commit 12473 (fixing PR#5620): m Changes update related to commit 12473 (fixing PR#5620... http://t.co/2G2bctso   | 205232593870921728
&lt;span class="cp"&gt;12:28:29  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;planet_ocaml&amp;gt; &lt;/span&gt;OCaml for the Masses: Here&amp;#39;s one I meant to blog earlier: OCaml for the Masses by Yaron Minsky, from the Nov 201... http://t.co/6u5oiZqS   | 205273997187887104
&lt;span class="cp"&gt;14:56:32  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;stewartadcock&amp;gt; &lt;/span&gt;Writing Ocaml code today. Sure it&amp;#39;s elegant language, not so sure it&amp;#39;s good for my productivity. Makes change from procedural algos though.   | 205311254133342209
&lt;span class="cp"&gt;15:46:37  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;akoprowski&amp;gt; &lt;/span&gt;&amp;quot;OCaml for the Masses&amp;quot; by Yaron Minsky, http://t.co/z2lg4mIR   | 205323857509355520
&lt;span class="cp"&gt;17:04:23  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;wagerlabs&amp;gt; &lt;/span&gt;OCaml and Haskell are struggling mightily in my head.OCaml, the incumbent,thinks he cannot be unseated.Erlang won over Haskell years ago.   | 205343429222342656
&lt;span class="cp"&gt;19:09:13  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;mentby&amp;gt; &lt;/span&gt;Tuareg-mode and pipes | #caml #ocaml http://t.co/XzkNcXQw   | 205374844727083010
&lt;span class="cp"&gt;19:30:16  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;Jose_A_Alonso&amp;gt; &lt;/span&gt;OCaml for the masses. (Why the next language you learn should be functional). By Yaron Minsky http://t.co/aeCM9aCU #FP #OCaml   | 205380144439898112
&lt;span class="cp"&gt;21:36:01  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;wtiv770&amp;gt; &lt;/span&gt;Practical OCaml (Hardcover): Objective Caml (OCaml) is an open sourced programming language that allows a progra... http://t.co/BQAnZsAE   | 205411786936168448
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/56YBitUEw2DiiJZvG6_L2ANDW-I/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/56YBitUEw2DiiJZvG6_L2ANDW-I/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/56YBitUEw2DiiJZvG6_L2ANDW-I/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/56YBitUEw2DiiJZvG6_L2ANDW-I/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/planet_caml_en?a=0vxUAYGVtz8:K14iC6Mqj1A:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/planet_caml_en?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/planet_caml_en?a=0vxUAYGVtz8:K14iC6Mqj1A:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/planet_caml_en?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/planet_caml_en/~4/0vxUAYGVtz8" height="1" width="1"/&gt;</description>
         <guid isPermaLink="false">http://zheng.li/buzzlogs-ocaml/2012/05/23/twt</guid>
         <pubDate>Wed, 23 May 2012 23:59:59 +0000</pubDate>
      </item>
      <item>
         <title>2012/05/23/IRC</title>
         <link>http://zheng.li/buzzlogs-ocaml/2012/05/23/irc.html</link>
         <description>&lt;div class="highlight"&gt;&lt;pre&gt;&lt;code class="irc"&gt;&lt;span class="cp"&gt;05:44:15  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;IamUnix&amp;gt; &lt;/span&gt;Why should i use Caml language not Pascal/C or Go language? What is the main difference?
&lt;span class="cp"&gt;05:54:48  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;IamUnix&amp;gt; &lt;/span&gt;Is Caml dead? no innovations anymore.
&lt;span class="cp"&gt;06:04:45  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;adrien&amp;gt; &lt;/span&gt;http://caml.inria.fr/cgi-bin/viewvc.cgi/ocaml/trunk/Changes?view=markup
&lt;span class="cp"&gt;06:42:43  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;ssbr&amp;gt; &lt;/span&gt;&lt;span class="na"&gt;IamUnix:&lt;/span&gt; The main difference is probably that caml has a great type system.
&lt;span class="cp"&gt;10:10:40  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;IamUnix&amp;gt; &lt;/span&gt;With Caml, is it possible to do C like pointers and pre-processing ?
&lt;span class="cp"&gt;10:11:26  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;adrien&amp;gt; &lt;/span&gt;pre-processing, not in the language (like in C&amp;#39;s case actually): there&amp;#39;s camlp4 and a number of existing syntax extensions for it
&lt;span class="cp"&gt;10:11:33  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;adrien&amp;gt; &lt;/span&gt;define &amp;quot;C-like pointers&amp;quot;
&lt;span class="cp"&gt;10:12:51  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;IamUnix&amp;gt; &lt;/span&gt;adrien, OK - yes, I mean such: float *px; px = &amp;amp;x;
&lt;span class="cp"&gt;10:13:01  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;adrien&amp;gt; &lt;/span&gt;no
&lt;span class="cp"&gt;10:13:22  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;adrien&amp;gt; &lt;/span&gt;but if you tell us what you are trying to achieve (and not only &amp;quot;how&amp;quot;), we might help better
&lt;span class="cp"&gt;10:14:00  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;IamUnix&amp;gt; &lt;/span&gt;adrien, i am learning Caml, from my C, Java experience, just comparing what i can and what i cant. To quickly catch the basics.
&lt;span class="cp"&gt;10:16:31  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;IamUnix&amp;gt; &lt;/span&gt;Can i do something like this ? struct computer {     float cost;     int year;     int cpu_speed;  char cpu_type[16]; }; typedef struct computer SC;
&lt;span class="cp"&gt;10:17:21  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;vincenzoml&amp;gt; &lt;/span&gt;Hi there, I&amp;#39;m trying to learn ocsigen. I can&amp;#39;t start the web server for the first example in the tutorial:   Fatal error: cannot load shared library dlllwt-unix - Reason: dlllwt-unix.so: cannot open shared object file: No such file or directory
&lt;span class="cp"&gt;10:18:08  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;vincenzoml&amp;gt; &lt;/span&gt;the dlllwt-unix.so library is in /usr/local/lib/ocaml/stublibs/dlllwt-unix.so
&lt;span class="cp"&gt;10:18:11  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;djcoin&amp;gt; &lt;/span&gt;&lt;span class="na"&gt;vincenzoml:&lt;/span&gt; there is a specific #ocsigen channel by the way
&lt;span class="cp"&gt;10:18:17  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;vincenzoml&amp;gt; &lt;/span&gt;ah thanks, I did not know
&lt;span class="cp"&gt;10:18:31  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;vincenzoml&amp;gt; &lt;/span&gt;I&amp;#39;ll ask again there
&lt;span class="cp"&gt;10:18:34  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;djcoin&amp;gt; &lt;/span&gt;:)
&lt;span class="cp"&gt;10:19:20  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;adrien&amp;gt; &lt;/span&gt;it&amp;#39;ll be interesting to say which OS you&amp;#39;re running and how you&amp;#39;re installing everything
&lt;span class="cp"&gt;10:20:42  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;vincenzoml&amp;gt; &lt;/span&gt;thanks adrien :)
&lt;span class="cp"&gt;10:23:39  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;IamUnix&amp;gt; &lt;/span&gt;Do i have possibility to do such `union` in Caml e.g: union automobile { int year; } sedan; union automobile *pointer; pointer-&amp;gt;year = 1997;
&lt;span class="cp"&gt;10:24:23  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;IamUnix&amp;gt; &lt;/span&gt;or something: struct survey { int year; union { int year; } provider; }
&lt;span class="cp"&gt;10:24:37  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;flux&amp;gt; &lt;/span&gt;iamunix, hmm, your example doesn&amp;#39;t really make sense even in C
&lt;span class="cp"&gt;10:24:50  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;flux&amp;gt; &lt;/span&gt;you need to have at least two elements you make a union out of for it to make sense..
&lt;span class="cp"&gt;10:24:51  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;adrien&amp;gt; &lt;/span&gt;unions, no, because they&amp;#39;re unsafe
&lt;span class="cp"&gt;10:25:01  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;flux&amp;gt; &lt;/span&gt;but probably you want to use ocaml sum types
&lt;span class="cp"&gt;10:25:05  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;adrien&amp;gt; &lt;/span&gt;&lt;span class="na"&gt;flux:&lt;/span&gt; never read the code of the linux kernel ;-)
&lt;span class="cp"&gt;10:25:19  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;IamUnix&amp;gt; &lt;/span&gt;OK
&lt;span class="cp"&gt;10:25:20  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;adrien&amp;gt; &lt;/span&gt;but as flux said, there is a different mechanism
&lt;span class="cp"&gt;10:25:25  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;flux&amp;gt; &lt;/span&gt;adrien, they have single-field unions?
&lt;span class="cp"&gt;10:25:47  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;adrien&amp;gt; &lt;/span&gt;&lt;span class="na"&gt;flux:&lt;/span&gt; of course :-)
&lt;span class="cp"&gt;10:26:03  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;adrien&amp;gt; &lt;/span&gt;socket code
&lt;span class="cp"&gt;10:26:15  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;IamUnix&amp;gt; &lt;/span&gt;Can i do such: enum { success, fail, max_len = 81 } , the term `enum` or typedef int twobyte; twobyte i, j; ?
&lt;span class="cp"&gt;10:27:24  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;flux&amp;gt; &lt;/span&gt;iamunix, you have type aliases in ocaml. if you want to have constants, you just put a name to them; all variables in ocaml are const by default
&lt;span class="cp"&gt;10:27:39  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;IamUnix&amp;gt; &lt;/span&gt;OK
&lt;span class="cp"&gt;10:28:01  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;mfp&amp;gt; &lt;/span&gt;&lt;span class="na"&gt;IamUnix:&lt;/span&gt; the idiomatic equivalent of both unions and enumerations in OCaml is sum types (= disjoint unions)
&lt;span class="cp"&gt;10:28:02  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;flux&amp;gt; &lt;/span&gt;probably you want to use sum types for those as well, though, and have a separate way to map them into numbers if you want
&lt;span class="cp"&gt;10:28:08  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;IamUnix&amp;gt; &lt;/span&gt;I am trying to language casting. To understand quickly. nvm.
&lt;span class="cp"&gt;10:28:26  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;flux&amp;gt; &lt;/span&gt;&amp;quot;success, fail, max_len&amp;quot; is an example of code ocaml probably wouldn&amp;#39;t have
&lt;span class="cp"&gt;10:29:26  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;IamUnix&amp;gt; &lt;/span&gt;Can i do goto stuff such as in C: label-name:   statement1;   statement2;  goto label-name;
&lt;span class="cp"&gt;10:29:43  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;flux&amp;gt; &lt;/span&gt;there is no goto in ocaml
&lt;span class="cp"&gt;10:30:00  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;flux&amp;gt; &lt;/span&gt;I think it&amp;#39;s time for you to introduce to some ocaml tutorials and documentation ;)
&lt;span class="cp"&gt;10:30:13  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;flux&amp;gt; &lt;/span&gt;(s/introduce/introduce yourself/)
&lt;span class="cp"&gt;10:32:53  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;IamUnix&amp;gt; &lt;/span&gt;OK - Thank you.
&lt;span class="cp"&gt;10:33:33  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;djcoin&amp;gt; &lt;/span&gt;Goto statements
&lt;span class="cp"&gt;10:33:35  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;djcoin&amp;gt; &lt;/span&gt;lol
&lt;span class="cp"&gt;10:40:01  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;IamUnix&amp;gt; &lt;/span&gt;NVM, just casting language for better/quick catch. Can i do Java like mapping to any object? e.g: private static Map&amp;lt;String, JTextField&amp;gt; currentComponents = new HashMap&amp;lt;String, JTextField&amp;gt;();
&lt;span class="cp"&gt;10:41:12  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;djcoin&amp;gt; &lt;/span&gt;&lt;span class="na"&gt;IamUnix:&lt;/span&gt; do you really think java is close to OCaml ?
&lt;span class="cp"&gt;10:41:12  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;IamUnix&amp;gt; &lt;/span&gt;OR try { ... } catch (IOException io) { io.dump... ; }
&lt;span class="cp"&gt;10:41:26  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;IamUnix&amp;gt; &lt;/span&gt;NO just the terms getting used.
&lt;span class="cp"&gt;10:43:14  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;IamUnix&amp;gt; &lt;/span&gt;Those type of terms: private static Map&amp;lt;String, JTextField&amp;gt; currentComponents = new HashMap&amp;lt;String, JTextField&amp;gt;(); OR private static List&amp;lt;JTextField&amp;gt; list = new ArrayList&amp;lt;JTextField&amp;gt;(); OR type cast JTextField goal = (JTextField) (JTextComponent) (Object) &amp;quot;serverTextField&amp;quot;;
&lt;span class="cp"&gt;10:43:39  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;IamUnix&amp;gt; &lt;/span&gt;Map or List or multiple cast from right to left...
&lt;span class="cp"&gt;10:43:49  &lt;/span&gt;&lt;span class="k"&gt;* &lt;/span&gt;&lt;span class="gi"&gt;ski is not sure what IamUnix is asking about&lt;/span&gt;
&lt;span class="cp"&gt;10:44:17  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;IamUnix&amp;gt; &lt;/span&gt;OCaml cheat-sheet for background of C/Java users.
&lt;span class="cp"&gt;10:44:39  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;ski&amp;gt; &lt;/span&gt;i&amp;#39;m not sure sure a cheat-sheet would make much sense ..
&lt;span class="cp"&gt;10:44:46  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;djcoin&amp;gt; &lt;/span&gt;&lt;span class="na"&gt;IamUnix:&lt;/span&gt; what don&amp;#39;t you just send the whole program you are trying to convert line by line ? :)
&lt;span class="cp"&gt;10:44:54  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;ski&amp;gt; &lt;/span&gt;.. except to tell you to forget most of what you know from C or Java :)
&lt;span class="cp"&gt;10:45:17  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;ski&amp;gt; &lt;/span&gt;IamUnix : there are no casts in O&amp;#39;Caml
&lt;span class="cp"&gt;10:45:26  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;IamUnix&amp;gt; &lt;/span&gt;OK
&lt;span class="cp"&gt;10:46:36  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;ski&amp;gt; &lt;/span&gt;(you can convert from a subtype to a supertype (but not vice versa), though)
&lt;span class="cp"&gt;10:47:30  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;ski&amp;gt; &lt;/span&gt;IamUnix : if you&amp;#39;re looking at a general introduction, maybe you&amp;#39;d like to take a peek at &amp;lt;http://caml.inria.fr/pub/docs/manual-ocaml/manual003.html&amp;gt; ?
&lt;span class="cp"&gt;11:07:48  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;mrvn_&amp;gt; &lt;/span&gt;-c/etc/wpa_supplicant.conf
&lt;span class="cp"&gt;11:08:38  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;mrvn_&amp;gt; &lt;/span&gt;ups, ewin
&lt;span class="cp"&gt;13:24:14  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;everyonemines&amp;gt; &lt;/span&gt;&lt;span class="na"&gt;IamUnix:&lt;/span&gt; your goto example would be: let rec loop() = statement1;  statement2; loop()
&lt;span class="cp"&gt;13:24:21  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;everyonemines&amp;gt; &lt;/span&gt;or for a downward goto, an exception
&lt;span class="cp"&gt;13:24:38  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;everyonemines&amp;gt; &lt;/span&gt;ocaml exceptions are fast enough that you can use them like that
&lt;span class="cp"&gt;13:25:20  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;djcoin&amp;gt; &lt;/span&gt;goto are such an essential programming feature and best practice :&amp;gt;
&lt;span class="cp"&gt;13:26:02  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;IamUnix&amp;gt; &lt;/span&gt;Thanks!
&lt;span class="cp"&gt;13:26:30  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;everyonemines&amp;gt; &lt;/span&gt;if you want to map, you do it like
&lt;span class="cp"&gt;13:26:36  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;everyonemines&amp;gt; &lt;/span&gt;Array.map [array]
&lt;span class="cp"&gt;13:26:44  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;everyonemines&amp;gt; &lt;/span&gt;er, Array.map [function] [array]
&lt;span class="cp"&gt;13:26:52  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;everyonemines&amp;gt; &lt;/span&gt;read the module reference for the standard library functions
&lt;span class="cp"&gt;13:27:03  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;IamUnix&amp;gt; &lt;/span&gt;OK
&lt;span class="cp"&gt;13:27:31  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;everyonemines&amp;gt; &lt;/span&gt;if you want to do lots of array stuff, you can &amp;quot;open array&amp;quot; then map function array
&lt;span class="cp"&gt;13:27:55  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;everyonemines&amp;gt; &lt;/span&gt;(but remember that modules must be capitalized)
&lt;span class="cp"&gt;13:28:02  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;Ptival&amp;gt; &lt;/span&gt;&amp;quot;open Array&amp;quot;
&lt;span class="cp"&gt;13:28:44  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;everyonemines&amp;gt; &lt;/span&gt;or, Array.(map function array) opens it locally
&lt;span class="cp"&gt;13:29:16  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;everyonemines&amp;gt; &lt;/span&gt;once you get to know ocaml I think you&amp;#39;ll like it better than java :-)
&lt;span class="cp"&gt;13:29:30  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;IamUnix&amp;gt; &lt;/span&gt;I hope so :)
&lt;span class="cp"&gt;13:29:42  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;everyonemines&amp;gt; &lt;/span&gt;what kind of thing are you working on?
&lt;span class="cp"&gt;13:29:56  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;everyonemines&amp;gt; &lt;/span&gt;or is it class stuff?
&lt;span class="cp"&gt;13:30:20  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;IamUnix&amp;gt; &lt;/span&gt;Text translations
&lt;span class="cp"&gt;13:30:23  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;Ptival&amp;gt; &lt;/span&gt;(Java is always &amp;quot;class&amp;quot; stuff :p)
&lt;span class="cp"&gt;13:30:44  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;IamUnix&amp;gt; &lt;/span&gt;Chinese to Bengali or reverse etc...
&lt;span class="cp"&gt;13:30:49  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;djcoin&amp;gt; &lt;/span&gt;class stuff, rofl :)
&lt;span class="cp"&gt;13:30:52  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;everyonemines&amp;gt; &lt;/span&gt;That&amp;#39;s a pretty tough problem.
&lt;span class="cp"&gt;13:30:57  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;f[x]&amp;gt; &lt;/span&gt;classy!
&lt;span class="cp"&gt;13:31:03  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;everyonemines&amp;gt; &lt;/span&gt;but I like algorithmic stuff :-)
&lt;span class="cp"&gt;13:33:35  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;everyonemines&amp;gt; &lt;/span&gt;&lt;span class="na"&gt;IamUnix:&lt;/span&gt; Have you done natural language processing stuff before?
&lt;span class="cp"&gt;13:35:20  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;IamUnix&amp;gt; &lt;/span&gt;everyonemines, Not yet. Textual translations right now for one project
&lt;span class="cp"&gt;13:37:30  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;everyonemines&amp;gt; &lt;/span&gt;well, you can learn a lot from working on that, and ocaml is useful, but if you need something now, you might be better off using the google translate api :-/
&lt;span class="cp"&gt;14:05:30  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;mfp&amp;gt; &lt;/span&gt;according the the gc.mli,   let v = ... in Gc.finalise (fun x -&amp;gt; ...) v    &amp;quot;will not work as expected&amp;quot; because &amp;quot;anything reachable from the closure of finalisation functions is considered reachable&amp;quot;
&lt;span class="cp"&gt;14:06:46  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;mfp&amp;gt; &lt;/span&gt;does that only apply to the case where ... captures v, or is it general? (and if so, why does the closure enclose the whole environment?)
&lt;span class="cp"&gt;14:23:47  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;thelema&amp;gt; &lt;/span&gt;&lt;span class="na"&gt;mfp:&lt;/span&gt; it only makes sense to me that it&amp;#39;s when ... captures v
&lt;span class="cp"&gt;14:26:44  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;mfp&amp;gt; &lt;/span&gt;hmm maybe there could be &amp;quot;surprise captures&amp;quot; in cases like   (fun () -&amp;gt; .... a .... b .... Gc.finalise (fun _ -&amp;gt; ... a .... b ...) c)
&lt;span class="cp"&gt;14:27:40  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;mfp&amp;gt; &lt;/span&gt;in some hypothetical OCaml implementation (AFAIK not the current one) that reused the environment for the outer closure in the inner one
&lt;span class="cp"&gt;14:32:36  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;thelema&amp;gt; &lt;/span&gt;probably just an over-warning; if people always define their finalization function before declaring their value...
&lt;span class="cp"&gt;14:32:52  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;mfp&amp;gt; &lt;/span&gt;guess so
&lt;span class="cp"&gt;15:28:55  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;hcarty&amp;gt; &lt;/span&gt;&lt;span class="na"&gt;orbitz:&lt;/span&gt; The upstream PCRE file is missing.  I sent the author an email asking about it.
&lt;span class="cp"&gt;15:39:27  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;ssbr_&amp;gt; &lt;/span&gt;Which of these is generally considered more idiomatic? &amp;quot;let x y z = match z with ...&amp;quot; or &amp;quot;let x y = function ...&amp;quot; ?
&lt;span class="cp"&gt;15:41:24  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;hcarty&amp;gt; &lt;/span&gt;&lt;span class="na"&gt;ssbr_:&lt;/span&gt; I&amp;#39;m not sure which is generally considered more idiomatic, but I use the first when there are multiple arguments and the second when there is only one.
&lt;span class="cp"&gt;15:41:58  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;ssbr_&amp;gt; &lt;/span&gt;Yeah. I just don&amp;#39;t know if this currying stuff is _actually_ confusing, or if it&amp;#39;s just something I&amp;#39;m not used to yet, you know?
&lt;span class="cp"&gt;15:42:18  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;ssbr_&amp;gt; &lt;/span&gt;It&amp;#39;s difficult to edit this codebase because it was written by two people: one who was really good at ocaml, and one who was really bad.
&lt;span class="cp"&gt;15:42:26  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;ssbr_&amp;gt; &lt;/span&gt;(worse than me, and I just started, really.)
&lt;span class="cp"&gt;15:43:01  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;ssbr_&amp;gt; &lt;/span&gt;This is not confusing though, so it&amp;#39;s not like that this time. I&amp;#39;ll leave it as is.
&lt;span class="cp"&gt;15:43:37  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;hcarty&amp;gt; &lt;/span&gt;&lt;span class="na"&gt;ssbr_:&lt;/span&gt; That&amp;#39;s why I have that split - I find it a bit easier to read the resulting code as a human.
&lt;span class="cp"&gt;15:44:31  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;hcarty&amp;gt; &lt;/span&gt;When there are multiple arguments I have found that throwing &amp;quot;= function&amp;quot; on the end makes it more difficult to parse the function at a glance.
&lt;span class="cp"&gt;15:45:47  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;ssbr_&amp;gt; &lt;/span&gt;Yeah, that&amp;#39;s what I figured.
&lt;span class="cp"&gt;15:46:19  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;ssbr_&amp;gt; &lt;/span&gt;Hm. Reading the body of this function, it might have been written by the bad programmer. But the good programmer is the one that loves currying everything...
&lt;span class="cp"&gt;15:46:26  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;ssbr_&amp;gt; &lt;/span&gt;Aieie
&lt;span class="cp"&gt;15:47:04  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;ssbr_&amp;gt; &lt;/span&gt;By the way, what is &amp;quot;||&amp;quot; in ocaml?
&lt;span class="cp"&gt;15:47:28  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;ssbr_&amp;gt; &lt;/span&gt;errr, wait, I think that&amp;#39;s [||]
&lt;span class="cp"&gt;15:47:32  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;ssbr_&amp;gt; &lt;/span&gt;is that an empty array?
&lt;span class="cp"&gt;15:48:25  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;Qrntz&amp;gt; &lt;/span&gt;ssbr_, yes, [| |] is an empty array
&lt;span class="cp"&gt;15:48:35  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;Qrntz&amp;gt; &lt;/span&gt;the amount of whitespace between the braces is arbitrary
&lt;span class="cp"&gt;15:49:18  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;Qrntz&amp;gt; &lt;/span&gt;«||» is a logical OR
&lt;span class="cp"&gt;15:49:35  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;ssbr_&amp;gt; &lt;/span&gt;Right, I realized my question was ambiguous slightly too late. :(
&lt;span class="cp"&gt;15:49:51  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;ssbr_&amp;gt; &lt;/span&gt;(and that the braces were probably part of the syntax -- the return type was array)
&lt;span class="cp"&gt;15:50:04  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;Qrntz&amp;gt; &lt;/span&gt;[ || ] wouldn&amp;#39;t make sense
&lt;span class="cp"&gt;15:50:07  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;Qrntz&amp;gt; &lt;/span&gt;so, perhaps
&lt;span class="cp"&gt;15:50:21  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;ssbr_&amp;gt; &lt;/span&gt;Thanks :)
&lt;span class="cp"&gt;15:50:40  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;Qrntz&amp;gt; &lt;/span&gt;you&amp;#39;re welcome
&lt;span class="cp"&gt;15:50:59  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;f[x]&amp;gt; &lt;/span&gt;[(||)]
&lt;span class="cp"&gt;20:02:37  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;osa1&amp;gt; &lt;/span&gt;can anyone recommend me an introduction text for ocaml? I have functional programming(haskell, scheme) experience but I&amp;#39;m not an expert in types and advanced functional programming techniques
&lt;span class="cp"&gt;20:03:53  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;bitbckt&amp;gt; &lt;/span&gt;&lt;span class="na"&gt;osa1:&lt;/span&gt; www.cs.caltech.edu/courses/cs134/cs134b/book.pdf
&lt;span class="cp"&gt;20:04:12  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;bitbckt&amp;gt; &lt;/span&gt;that&amp;#39;s probably the most approachable intro.
&lt;span class="cp"&gt;20:04:26  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;osa1&amp;gt; &lt;/span&gt;&lt;span class="na"&gt;bitbckt:&lt;/span&gt; thanks
&lt;span class="cp"&gt;20:04:33  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;bitbckt&amp;gt; &lt;/span&gt;np
&lt;span class="cp"&gt;20:04:48  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;bitbckt&amp;gt; &lt;/span&gt;the official manual is thorough, if a bit dry.
&lt;span class="cp"&gt;20:04:52  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;bitbckt&amp;gt; &lt;/span&gt;best used as a reference.
&lt;span class="cp"&gt;20:05:57  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;osa1&amp;gt; &lt;/span&gt;&lt;span class="na"&gt;bitbckt:&lt;/span&gt; oh, it&amp;#39;s from author of real world ocaml ..
&lt;span class="cp"&gt;20:06:08  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;bitbckt&amp;gt; &lt;/span&gt;one of them, yes.
&lt;span class="cp"&gt;20:35:45  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;orbitz&amp;gt; &lt;/span&gt;&lt;span class="na"&gt;hcarty:&lt;/span&gt; thanks
&lt;span class="cp"&gt;21:01:51  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;wmeyer``&amp;gt; &lt;/span&gt;&lt;span class="na"&gt;ssbr:&lt;/span&gt; Abuse currying that&amp;#39;s what it was designed for. Beware combinators like &amp;quot;flip&amp;quot; and point free coding however. In terms of let foo a b c = ... then 1) Usually my functions are single argument and the rest is the environment outside a closure - but I&amp;#39;m doing a lot of AST transformations - if they have second argument - then it&amp;#39;s accumlator or environment - in case of API situations might be very different! 2) If they acc
&lt;span class="cp"&gt;21:01:51  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;wmeyer``&amp;gt; &lt;/span&gt;than one and you need to pattern match for the last argument - I usually use &amp;quot;function&amp;quot;, that&amp;#39;s for me more idiomatic. In general what type checks and is readable in 80% is enough.
&lt;span class="cp"&gt;21:09:53  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;wmeyer``&amp;gt; &lt;/span&gt;&lt;span class="na"&gt;thelema_:&lt;/span&gt; I rebased my branch - now you can pull
&lt;span class="cp"&gt;21:15:04  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;ski&amp;gt; &lt;/span&gt;(possible cut off &amp;quot;... 2) If they acc&amp;quot;)
&lt;span class="cp"&gt;21:54:55  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;osa1&amp;gt; &lt;/span&gt;is there a way to load a source into ocaml repl? like :load in haskell&amp;#39;s ghci
&lt;span class="cp"&gt;21:55:11  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;gildor_&amp;gt; &lt;/span&gt;#load ?
&lt;span class="cp"&gt;21:55:28  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;Qrntz&amp;gt; &lt;/span&gt;#use &amp;quot;file.ml&amp;quot; ;;
&lt;span class="cp"&gt;21:56:07  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;osa1&amp;gt; &lt;/span&gt;thanks
&lt;span class="cp"&gt;21:56:40  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;Se7en&amp;gt; &lt;/span&gt;yes, use that
&lt;span class="cp"&gt;22:47:27  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;orbitz&amp;gt; &lt;/span&gt;Does the run time gurantee the order modules are executed in, fo rexample can I have a module register itself with a plugin registry like let () = Registry.register yadda;; or could it be possible Registry has not ben initialized yet?
&lt;span class="cp"&gt;22:48:23  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;_habnabit&amp;gt; &lt;/span&gt;orbitz, if you&amp;#39;re referencing Registry, then it&amp;#39;s been initialized
&lt;span class="cp"&gt;22:48:45  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;_habnabit&amp;gt; &lt;/span&gt;orbitz, initialization order is based on which modules depend on each other
&lt;span class="cp"&gt;22:50:37  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;orbitz&amp;gt; &lt;/span&gt;Excellent
&lt;span class="cp"&gt;22:50:48  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;orbitz&amp;gt; &lt;/span&gt;Is what I am trying to do a good idea?
&lt;span class="cp"&gt;22:51:07  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;_habnabit&amp;gt; &lt;/span&gt;it doesn&amp;#39;t seem like a bad idea. the ocaml stdlib already does this.
&lt;span class="cp"&gt;22:51:12  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;orbitz&amp;gt; &lt;/span&gt;Basically I want a factory I guess
&lt;span class="cp"&gt;22:51:25  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;_habnabit&amp;gt; &lt;/span&gt;this doesn&amp;#39;t seem like a factory
&lt;span class="cp"&gt;22:51:30  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;Qrntz&amp;gt; &lt;/span&gt;I would be very interested in something like that
&lt;span class="cp"&gt;22:51:32  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;orbitz&amp;gt; &lt;/span&gt;Being able to handle multiple database types at runtime, for example
&lt;span class="cp"&gt;22:51:35  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;Qrntz&amp;gt; &lt;/span&gt;(a plugin factory)
&lt;span class="cp"&gt;22:51:41  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;_habnabit&amp;gt; &lt;/span&gt;it&amp;#39;s a registry
&lt;span class="cp"&gt;22:52:01  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;orbitz&amp;gt; &lt;/span&gt;&lt;span class="na"&gt;_habnabit:&lt;/span&gt; Well, I&amp;#39;d register with it, then when I want a new db connection i&amp;#39;d say Registery.get db_type
&lt;span class="cp"&gt;22:52:14  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;orbitz&amp;gt; &lt;/span&gt;and then I&amp;#39;d have a record (or something?) that has functiosn to play with a db
&lt;span class="cp"&gt;22:52:34  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;_habnabit&amp;gt; &lt;/span&gt;if you&amp;#39;re using 3.12, you could use modules-as-values
&lt;span class="cp"&gt;22:53:11  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;orbitz&amp;gt; &lt;/span&gt;Yeah, I don&amp;#39;t think that necessarily changes much though
&lt;span class="cp"&gt;22:53:16  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;orbitz&amp;gt; &lt;/span&gt;I&amp;#39;d still eb doing a .get somewhere, right?
&lt;span class="cp"&gt;22:53:31  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;_habnabit&amp;gt; &lt;/span&gt;well, yeah
&lt;span class="cp"&gt;22:53:38  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;_habnabit&amp;gt; &lt;/span&gt;I just mean instead of a record
&lt;span class="cp"&gt;22:53:45  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;orbitz&amp;gt; &lt;/span&gt;Yeah
&lt;span class="cp"&gt;22:54:04  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;orbitz&amp;gt; &lt;/span&gt;I&amp;#39;d probably have get really be .connect or soemthign and give me back something I can use a Connection module on
&lt;span class="cp"&gt;23:09:03  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;wmeyer``&amp;gt; &lt;/span&gt;&lt;span class="na"&gt;orbitz:&lt;/span&gt; with first class values you can package them and assign to mutable variable during load
&lt;span class="cp"&gt;23:09:22  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;wmeyer``&amp;gt; &lt;/span&gt;&lt;span class="na"&gt;orbitz:&lt;/span&gt; s/values/modules/
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/t12OOrgrJkffdQUIs9jO_TLWOCc/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/t12OOrgrJkffdQUIs9jO_TLWOCc/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/t12OOrgrJkffdQUIs9jO_TLWOCc/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/t12OOrgrJkffdQUIs9jO_TLWOCc/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/planet_caml_en?a=Y9loifhXMtE:ucuaO6hu_Qk:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/planet_caml_en?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/planet_caml_en?a=Y9loifhXMtE:ucuaO6hu_Qk:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/planet_caml_en?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/planet_caml_en/~4/Y9loifhXMtE" height="1" width="1"/&gt;</description>
         <guid isPermaLink="false">http://zheng.li/buzzlogs-ocaml/2012/05/23/irc</guid>
         <pubDate>Wed, 23 May 2012 23:59:59 +0000</pubDate>
      </item>
      <item>
         <title>0005620: camlp4 printer bug</title>
         <link>http://caml.inria.fr/mantis/view.php?id=5620</link>
         <description>a minimal example:&amp;lt;br /&amp;gt;
camlp4rf -str 'type t = M.t == [A|B];' -printer r &amp;lt;br /&amp;gt;
type t = M.t = [ A | B ];
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/WZDOuJ6ijAiJ2Y9LisWkU6Bunc8/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/WZDOuJ6ijAiJ2Y9LisWkU6Bunc8/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/WZDOuJ6ijAiJ2Y9LisWkU6Bunc8/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/WZDOuJ6ijAiJ2Y9LisWkU6Bunc8/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/planet_caml_en?a=caAC8xgKDaE:DspDdWdCB1I:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/planet_caml_en?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/planet_caml_en?a=caAC8xgKDaE:DspDdWdCB1I:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/planet_caml_en?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/planet_caml_en/~4/caAC8xgKDaE" height="1" width="1"/&gt;</description>
         <guid isPermaLink="false">http://caml.inria.fr/mantis/view.php?id=5620</guid>
         <pubDate>Wed, 23 May 2012 17:46:53 +0000</pubDate>
         <category>Camlp4</category>
      </item>
      <item>
         <title>OCaml for the Masses</title>
         <link>http://wadler.blogspot.com/2012/05/ocaml-for-masses.html</link>
         <description>&lt;br /&gt;&lt;div class="separator" style="clear:both;text-align:center;"&gt;&lt;a rel="nofollow" target="_blank" href="http://4.bp.blogspot.com/-v6G9ueq7HdE/T7y6zDzdJtI/AAAAAAAAARU/eHSszN2jtos/s1600/cover_full.jpg" style="margin-left:1em;margin-right:1em;"&gt;&lt;img border="0" src="http://4.bp.blogspot.com/-v6G9ueq7HdE/T7y6zDzdJtI/AAAAAAAAARU/eHSszN2jtos/s1600/cover_full.jpg"/&gt;&lt;/a&gt;&lt;/div&gt;Here's one I meant to blog earlier: &lt;a rel="nofollow" target="_blank" href="http://cacm.acm.org/magazines/2011/11/138203-ocaml-for-the-masses/fulltext"&gt;OCaml for the Masses&lt;/a&gt; by Yaron Minsky, from the Nov 2011 CACM.&amp;nbsp; Is material on FP for developers the new trend?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9757377-2210977104850768313?l=wadler.blogspot.com' alt=''/&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/RILAZTi3Ay5r77eTV1Bzfpj8jBE/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/RILAZTi3Ay5r77eTV1Bzfpj8jBE/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/RILAZTi3Ay5r77eTV1Bzfpj8jBE/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/RILAZTi3Ay5r77eTV1Bzfpj8jBE/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/planet_caml_en?a=G6GvjuqBoYc:opNFfruqyY0:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/planet_caml_en?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/planet_caml_en?a=G6GvjuqBoYc:opNFfruqyY0:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/planet_caml_en?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/planet_caml_en/~4/G6GvjuqBoYc" height="1" width="1"/&gt;</description>
         <author>noreply@blogger.com (Philip Wadler)</author>
         <guid isPermaLink="false">tag:blogger.com,1999:blog-9757377.post-2210977104850768313</guid>
         <pubDate>Wed, 23 May 2012 10:26:00 +0000</pubDate>
         <media:thumbnail height="72" url="http://4.bp.blogspot.com/-v6G9ueq7HdE/T7y6zDzdJtI/AAAAAAAAARU/eHSszN2jtos/s72-c/cover_full.jpg" width="72" />
      </item>
      <item>
         <title>update related to commit 12473 (fixing PR#5620)</title>
         <link>https://github.com/thelema/ocaml-community/commit/35268d11d5754bdaf06ef8c2bc53f9a21a0b330f</link>
         <description>&lt;pre&gt;m Changes
&lt;/pre&gt;
      &lt;pre style='white-space:pre-wrap;width:81ex;'&gt;update related to commit 12473 (fixing PR#5620)

git-svn-id: http://caml.inria.fr/svn/ocaml/trunk@12474 f963ae5c-01c2-4b8c-9fe0-0dff7051ff02&lt;/pre&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/k3-0D8MC4jvYjt-R7faGCKhV1GE/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/k3-0D8MC4jvYjt-R7faGCKhV1GE/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/k3-0D8MC4jvYjt-R7faGCKhV1GE/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/k3-0D8MC4jvYjt-R7faGCKhV1GE/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/planet_caml_en?a=g4bt9wE4pS8:Dbo9oj7PogM:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/planet_caml_en?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/planet_caml_en?a=g4bt9wE4pS8:Dbo9oj7PogM:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/planet_caml_en?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/planet_caml_en/~4/g4bt9wE4pS8" height="1" width="1"/&gt;</description>
         <guid isPermaLink="false">tag:github.com,2008:Grit::Commit/35268d11d5754bdaf06ef8c2bc53f9a21a0b330f</guid>
         <pubDate>Wed, 23 May 2012 08:23:52 +0000</pubDate>
         <media:thumbnail height="30" url="https://secure.gravatar.com/avatar/5283ac7a92e70b12ff6935092d66be5f?s=30&amp;d=https://a248.e.akamai.net/assets.github.com%2Fimages%2Fgravatars%2Fgravatar-140.png" width="30" />
      </item>
      <item>
         <title>PR#5620: invalid printing of type manifest (camlp4 revised syntax)</title>
         <link>https://github.com/thelema/ocaml-community/commit/740bd511ad6320e8f5ad1750efc8c152bcef886e</link>
         <description>&lt;pre&gt;m camlp4/Camlp4/Printers/OCamlr.ml
&lt;/pre&gt;
      &lt;pre style='white-space:pre-wrap;width:81ex;'&gt;PR#5620: invalid printing of type manifest (camlp4 revised syntax)

git-svn-id: http://caml.inria.fr/svn/ocaml/trunk@12473 f963ae5c-01c2-4b8c-9fe0-0dff7051ff02&lt;/pre&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/YsZbkpJkOorBImJjpvuj0rz6frM/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/YsZbkpJkOorBImJjpvuj0rz6frM/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/YsZbkpJkOorBImJjpvuj0rz6frM/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/YsZbkpJkOorBImJjpvuj0rz6frM/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/planet_caml_en?a=Cb4slf7_31k:wmvgMCcP6-I:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/planet_caml_en?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/planet_caml_en?a=Cb4slf7_31k:wmvgMCcP6-I:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/planet_caml_en?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/planet_caml_en/~4/Cb4slf7_31k" height="1" width="1"/&gt;</description>
         <guid isPermaLink="false">tag:github.com,2008:Grit::Commit/740bd511ad6320e8f5ad1750efc8c152bcef886e</guid>
         <pubDate>Wed, 23 May 2012 08:19:46 +0000</pubDate>
         <media:thumbnail height="30" url="https://secure.gravatar.com/avatar/5283ac7a92e70b12ff6935092d66be5f?s=30&amp;d=https://a248.e.akamai.net/assets.github.com%2Fimages%2Fgravatars%2Fgravatar-140.png" width="30" />
      </item>
      <item>
         <title>Students at Gallium</title>
         <link>http://gallium.inria.fr/~scherer/gagallium/students-at-gallium/index.html</link>
         <description>&lt;p&gt;A short presentation of the various young people that
regularly gather (or used to gather) at the conversation-rich and
often surprising coffee breaks we have at Gallium.&lt;/p&gt;


&lt;h3&gt;Onsite Gallium PhD students&lt;/h3&gt;

&lt;p&gt;In decreasing order of elderness:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;a rel="nofollow" target="_blank" href="http://xulforum.org/"&gt;Jonathan Protzenko&lt;/a&gt; had the idea of this
blog. He is working with François Pottier on programming language
approaches to have finer control of mutability and aliasing. He also
hacks for Mozilla on his spare time (eg. he's the author of the
world-famous Conversations extension for Thunderbird) and even wrote
a full book about XUL in his young age, before seeing the truth of
functional programming. From these fond experiences he's formed
a strong sense of contribution to the community, which makes him an
asset of the OCaml bug triaging volunteer squad. Let's just add that
he took responsability for the Windows installer, to give you an
idea of his sense of self-sacrifice. His is also in charge of the
&amp;quot;junior seminar&amp;quot; here at INRIA Rocquencourt, a great opportunity for
students to practice their communication skills, that I hope this
blog will complement.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Fixing Windows bugs is rarely a charming activity, and Jonathan's
mood sometime pays for it. &lt;a rel="nofollow" target="_blank" href="http://gallium.inria.fr/~jcretin/"&gt;Julien
Cretin&lt;/a&gt; is the ever-smiling
one. He works on coercions (that is, in his mind, mostly anything
typing-related) with Didier Rémy but is in fact busy preparing the
revolution: anytime soon programmers will stop using term syntax and
variables, and instead draw graphs. He's also an asset for our
cultural diversity, as his main working language is Haskell; he had
the luck to do an internship in MSR Cambridge last year, where he
helped a dream team to &lt;a rel="nofollow" target="_blank" href="http://research.microsoft.com/en-us/um/people/simonpj/papers/ext-f/promotion.pdf"&gt;promote Haskell
(PDF)&lt;/a&gt;
through kind-level programming.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;I'm &lt;a rel="nofollow" target="_blank" href="http://gallium.inria.fr/~scherer/"&gt;Gabriel Scherer&lt;/a&gt; and
I should be working on module systems, also with Didier Rémy. In
fact, I'm trying to recover from a serious illness: the inability
not to answer a question on the Internet -- or comment on a good
post. Please also don't approach me with interesting research topics
(anything programming language related), I'm much too likely to get
distracted.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Jacques-Henri Jourdan started as a PhD student just a few weeks
ago. He has already worked in Gallium as an intern, on a formal
correctness proof from a grammar description (in Coq, automatically
translated from a Menhir grammar) to a LR automaton. He will now
work on mechanized formalizations of abstract interpretation
techniques.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;Stranger beings&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;a rel="nofollow" target="_blank" href="http://gallium.inria.fr/~pilkiewi/"&gt;Alexandre Pilkiewicz&lt;/a&gt; found
that writing a PhD thesis was too easy, and decided to
simultaneously start a job at Google. Here, he was working on
formalizing compiler optimizations based on polyhedral loop
analyses. He is very comfortable with Coq, to the point that he once
did a formal proof of correctness for a small patch I proposed for
the standard Map data structure, just for fun.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a rel="nofollow" target="_blank" href="http://cseweb.ucsd.edu/~vrobert/"&gt;Valentin Robert&lt;/a&gt; worked as an
intern with Xavier Leroy on Compcert, first on a certified pointer
analysis pass, and then on test programs to verify the work of the
external non-verified toolchains that take Compcert proved-correct
assembly output and generate a real executable. He is our meme
expert, and notoriously indecisive. After much hesitation, he will
be leaving us in a few months to do a PhD in San Diego.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a rel="nofollow" target="_blank" href="http://gallium.inria.fr/~rproust/"&gt;Raphael Proust&lt;/a&gt; is the most
recent intern in the team; he will be working with Xavier Leroy on
the intermediate representations (in a compiler) of functional
languages : CPS, SSA, ANF etc. He previously worked with the
&lt;a rel="nofollow" target="_blank" href="http://www.openmirage.org/"&gt;Mirage&lt;/a&gt; team in Cambridge, doing
OS-level development in OCaml, and will probably go back there to
start a PhD in a few months. That's a very interesting project with
not-so-surprising ties to programming language research; for example
he worked on the use of &lt;a rel="nofollow" target="_blank" href="http://anil.recoil.org/papers/drafts/2012-places-limel-draft1.pdf"&gt;Limel
(PDF)&lt;/a&gt;,
a programming language with linear type, to faithfully encode the
constraints on low-level dataflow tasks in a networked system.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;Recent former students&lt;/h3&gt;

&lt;p&gt;I won't list all the former students of Gallium, but here are those
I had the pleasure to meet while they were still on duty.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;a rel="nofollow" target="_blank" href="http://nicolaspouillard.fr/"&gt;Nicolas Pouillard&lt;/a&gt; is our former
&amp;quot;cultural diversity&amp;quot; leader, using Agda as his proving tool of
choice. Coq and OCaml are more in the culture of the place, but
anyone is free to choose -- and XMonad is certainly king among the
window managers used. Nicolas worked on the hairy subject of
representing and formally reasoning on syntactic terms with
binders. He was also our local expert on practical uses of secure
design or cryptography, such as security by capabilities (a hobby
I share), web privacy, BitCoin, Tahoe-LAFS... He is now a post-doc
at ITU Copenhaguen as part of the &lt;a rel="nofollow" target="_blank" href="http://www.demtech.dk/"&gt;demtech&lt;/a&gt;
project on &amp;quot;trustworthy democratic technology&amp;quot;.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a rel="nofollow" target="_blank" href="http://www.normalesup.org/~ramanana/"&gt;Tahina Ramananandro&lt;/a&gt; worked
on the craziest topic one could find. What is the hardest way to
describe a programming language?  I would say it is writing
mechanized formal semantics for it. What is the most insanely
complex language a twisted mind could want to describe? C++. At the
end of a truly heroic effort, Tahina had a formalized semantics of
memory layout of structs/classes and construction/destruction of
objects. He's now doing a post-doc in the
&lt;a rel="nofollow" target="_blank" href="http://flint.cs.yale.edu/"&gt;FLINT&lt;/a&gt; group at Yale.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a rel="nofollow" target="_blank" href="http://www.cis.upenn.edu/~montagu/"&gt;Benoît Montagu&lt;/a&gt; worked on
module systems with Didier Rémy. He studied several ways to enhance
Fω with some orthogonal features each adding some aspect of the ML
module system. He's now a post-doc in Philadelphia, as part of the
quite exciting &lt;a rel="nofollow" target="_blank" href="http://www.crash-safe.org/"&gt;CRASH/SAFE&lt;/a&gt;
project. Take a bunch of type system and formal proof experts, and
ask them to design an end-to-end (hardware and software) system
aimed for security, safety and reliability; they produce a &lt;em&gt;dynamic&lt;/em&gt;
language.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/r2rxh3s5GRuxmV3b1gVShmC1g8c/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/r2rxh3s5GRuxmV3b1gVShmC1g8c/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/r2rxh3s5GRuxmV3b1gVShmC1g8c/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/r2rxh3s5GRuxmV3b1gVShmC1g8c/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/planet_caml_en?a=NNZDtTNqbD4:j6Feq6zBhWQ:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/planet_caml_en?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/planet_caml_en?a=NNZDtTNqbD4:j6Feq6zBhWQ:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/planet_caml_en?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/planet_caml_en/~4/NNZDtTNqbD4" height="1" width="1"/&gt;</description>
         <guid isPermaLink="false">http://gallium.inria.fr/~scherer/gagallium/students-at-gallium/index.html</guid>
         <pubDate>Wed, 23 May 2012 08:00:00 +0000</pubDate>
      </item>
      <item>
         <title>2012/05/22/Twitter</title>
         <link>http://zheng.li/buzzlogs-ocaml/2012/05/22/twt.html</link>
         <description>&lt;div class="highlight"&gt;&lt;pre&gt;&lt;code class="irc"&gt;&lt;span class="cp"&gt;01:40:38  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;yang_yihming&amp;gt; &lt;/span&gt;&lt;span class="na"&gt;vw009:&lt;/span&gt; Which language do you often use in parallel programing? Ocaml? Erlang? C01? Or some other language?   | 204748571533258754
&lt;span class="cp"&gt;07:21:45  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;planet_ocaml&amp;gt; &lt;/span&gt;OCaml-MySQL 1.1.1: A package for Objective Caml that provides access to MySQL databases. http://t.co/jMyNorhR   | 204834418655891456
&lt;span class="cp"&gt;07:21:45  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;planet_ocaml&amp;gt; &lt;/span&gt;ocaml-snappy 0.0.1: Bindings to snappy - fast compression/decompression library. http://t.co/AI5IB3fG   | 204834419641548800
&lt;span class="cp"&gt;07:21:46  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;planet_ocaml&amp;gt; &lt;/span&gt;ocaml-lzo 0.0.1: Bindings to LZO - a portable lossless data compression library. http://t.co/5F2Sz60z   | 204834420677554176
&lt;span class="cp"&gt;07:21:46  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;planet_ocaml&amp;gt; &lt;/span&gt;ocaml-winsvc 0.0.1: The library to make OCaml program act as a Windows service. http://t.co/hZtT9hfZ   | 204834421625454592
&lt;span class="cp"&gt;07:21:46  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;planet_ocaml&amp;gt; &lt;/span&gt;RegStab 2.0: RegSTAB is a SAT-solver able to deal with formula schemas: you can give it a scheme o... http://t.co/gO5W6Klx   | 204834422573371392
&lt;span class="cp"&gt;09:36:07  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;planet_ocaml&amp;gt; &lt;/span&gt;Iterating over the AST: Context A facetious colleague who claims that he should be better writing his thesis bu... http://t.co/O8yJABB1   | 204868230702051328
&lt;span class="cp"&gt;10:02:35  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;reddit_haskell&amp;gt; &lt;/span&gt;A proposal for Open Extensible Datatypes in OCaml, inspired from Löh&amp;amp;Hinze http://t.co/UZNg0HZ5   | 204874890795417600
&lt;span class="cp"&gt;11:31:32  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;debasishg&amp;gt; &lt;/span&gt;Patch for extensible open data types in OCaml as a solution to the expression problem .. https://t.co/psWzQAX6   | 204897278404734976
&lt;span class="cp"&gt;12:20:42  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;planet_ocaml&amp;gt; &lt;/span&gt;Caml Weekly News, 22 May 2012: Any library for reading/writing compressed files? / extunix 0.0.4, ocaml-mysql 1.... http://t.co/7Y82VvFq   | 204909651609915392
&lt;span class="cp"&gt;13:31:47  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;educamedia&amp;gt; &lt;/span&gt;&lt;span class="na"&gt;Codepad:&lt;/span&gt;online compiler/interpreter for C, C++, D, Haskell, Lua, OCaml, PHP, Perl, Plain Text, Python, Ruby Scheme &amp;amp;Tel http://t.co/q5UCIcBm   | 204927541818032128
&lt;span class="cp"&gt;16:47:39  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;4r_creativita&amp;gt; &lt;/span&gt;I no longer count the number of ladies who proposed right after discovering that I was an OCaml programmer.   | 204976829344395265
&lt;span class="cp"&gt;21:50:19  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;KanzariyaJayesh&amp;gt; &lt;/span&gt;#teamletsnurture Technical Details: Static Blogging in OCaml with Stog http://t.co/0hfvQAat   | 205053001495347201
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/KfY4zHPXuIOPw5ShtOdWjszm8qc/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/KfY4zHPXuIOPw5ShtOdWjszm8qc/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/KfY4zHPXuIOPw5ShtOdWjszm8qc/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/KfY4zHPXuIOPw5ShtOdWjszm8qc/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/planet_caml_en?a=mHCK_RClxe0:ZIBYCoXIfWk:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/planet_caml_en?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/planet_caml_en?a=mHCK_RClxe0:ZIBYCoXIfWk:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/planet_caml_en?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/planet_caml_en/~4/mHCK_RClxe0" height="1" width="1"/&gt;</description>
         <guid isPermaLink="false">http://zheng.li/buzzlogs-ocaml/2012/05/22/twt</guid>
         <pubDate>Tue, 22 May 2012 23:59:59 +0000</pubDate>
      </item>
      <item>
         <title>2012/05/22/IRC</title>
         <link>http://zheng.li/buzzlogs-ocaml/2012/05/22/irc.html</link>
         <description>&lt;div class="highlight"&gt;&lt;pre&gt;&lt;code class="irc"&gt;&lt;span class="cp"&gt;00:02:35  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;eikke&amp;gt; &lt;/span&gt;removing the function call overhead by copying the required Buffer functions in a module in the same file, then compiling with agressive inlining, helps +- 10% (asm shows all call&amp;#39;s are gone)
&lt;span class="cp"&gt;03:00:21  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;ssbr&amp;gt; &lt;/span&gt;I figured out what I want!    I definitely wish I could do &amp;quot;match x with ((Foo | Bar) (x, y, z)) -&amp;gt; ...&amp;quot;
&lt;span class="cp"&gt;03:00:57  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;ssbr&amp;gt; &lt;/span&gt;hm, but then I&amp;#39;d want a label for whatever Foo | Bar was so that I could return a new Foo/Bar as necessary...
&lt;span class="cp"&gt;03:01:04  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;_habnabit&amp;gt; &lt;/span&gt;match x with Foo (x, y, z) | Bar (x, y, z) -&amp;gt; x + y + z
&lt;span class="cp"&gt;03:01:28  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;ssbr&amp;gt; &lt;/span&gt;&lt;span class="na"&gt;_habnabit:&lt;/span&gt; that is annoying. Also I&amp;#39;d forgotten my actual problem
&lt;span class="cp"&gt;03:01:51  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;ssbr&amp;gt; &lt;/span&gt;which is Foo (x,y,z) -&amp;gt; blah x y z | Bar (x,y,z) -&amp;gt; blah x y z
&lt;span class="cp"&gt;03:02:09  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;_habnabit&amp;gt; &lt;/span&gt;and why couldn&amp;#39;t you write it the way I said?
&lt;span class="cp"&gt;03:04:22  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;ssbr&amp;gt; &lt;/span&gt;&lt;span class="na"&gt;_habnabit:&lt;/span&gt; oh, because it&amp;#39;s really annoying
&lt;span class="cp"&gt;03:05:20  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;ssbr&amp;gt; &lt;/span&gt;&lt;span class="na"&gt;_habnabit:&lt;/span&gt; it ends up looking like this: match x with Foo (x, y, z) -&amp;gt; let renamed = (rename_params x z) in ((rename_values y renamed), renamed) | Bar (x, y, z) -&amp;gt; let renamed = (rename_params x z) in ((rename_values y renamed), renamed)
&lt;span class="cp"&gt;03:05:42  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;_habnabit&amp;gt; &lt;/span&gt;er, I don&amp;#39;t think you read what I said
&lt;span class="cp"&gt;03:05:45  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;ssbr&amp;gt; &lt;/span&gt;I guess I should write that as a function? makes it spaghetti-like
&lt;span class="cp"&gt;03:05:56  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;ssbr&amp;gt; &lt;/span&gt;&lt;span class="na"&gt;_habnabit:&lt;/span&gt; ehhhhhh! I forgot the last bit
&lt;span class="cp"&gt;03:05:59  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;_habnabit&amp;gt; &lt;/span&gt;note how mine only ahs one -&amp;gt;
&lt;span class="cp"&gt;03:06:27  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;ssbr&amp;gt; &lt;/span&gt;&lt;span class="na"&gt;_habnabit:&lt;/span&gt; I think it was actually ((rename_values y renamed), Foo x y renamed) or something like thbat
&lt;span class="cp"&gt;03:06:35  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;ssbr&amp;gt; &lt;/span&gt;Foo (x,y,renamed)
&lt;span class="cp"&gt;03:06:40  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;ssbr&amp;gt; &lt;/span&gt;I really wish I had the code in front of me
&lt;span class="cp"&gt;03:06:47  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;_habnabit&amp;gt; &lt;/span&gt;oh, well
&lt;span class="cp"&gt;03:06:53  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;ssbr&amp;gt; &lt;/span&gt;... crap, I mistyped my &amp;quot;actual problem&amp;quot;
&lt;span class="cp"&gt;03:06:55  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;_habnabit&amp;gt; &lt;/span&gt;then I&amp;#39;d write a function, yeah
&lt;span class="cp"&gt;03:07:03  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;ssbr&amp;gt; &lt;/span&gt;&lt;span class="na"&gt;_habnabit:&lt;/span&gt; sure, except... how?
&lt;span class="cp"&gt;03:07:25  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;ssbr&amp;gt; &lt;/span&gt;Either way I _need_ that (let renamed = ... in ...) bit to be copy-pasted
&lt;span class="cp"&gt;03:07:43  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;_habnabit&amp;gt; &lt;/span&gt;it is kind of a problem that you can&amp;#39;t pass around a type constructor like a function
&lt;span class="cp"&gt;03:07:57  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;_habnabit&amp;gt; &lt;/span&gt;I&amp;#39;d like to see the actual code, though :p
&lt;span class="cp"&gt;03:08:08  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;ssbr&amp;gt; &lt;/span&gt;&lt;span class="na"&gt;_habnabit:&lt;/span&gt; I&amp;#39;ll show it to you tomorrow
&lt;span class="cp"&gt;03:08:40  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;ssbr&amp;gt; &lt;/span&gt;I might be misremembering  _this_ particular annoying case, although there were others that were less horrible
&lt;span class="cp"&gt;03:09:13  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;ssbr&amp;gt; &lt;/span&gt;anyway, um, yes, I communicated poorly. Hush, I just woke up. :&amp;lt;
&lt;span class="cp"&gt;03:45:06  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;wmeyer``&amp;gt; &lt;/span&gt;:)
&lt;span class="cp"&gt;03:45:31  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;wmeyer``&amp;gt; &lt;/span&gt;&lt;span class="na"&gt;ssbr:&lt;/span&gt; lucky, i am going to bed now
&lt;span class="cp"&gt;03:45:50  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;ssbr&amp;gt; &lt;/span&gt;&lt;span class="na"&gt;wmeyer``:&lt;/span&gt; hardly lucky. I missed a whole day
&lt;span class="cp"&gt;03:45:52  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;ssbr&amp;gt; &lt;/span&gt;it is midnight here
&lt;span class="cp"&gt;03:46:35  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;wmeyer``&amp;gt; &lt;/span&gt;&lt;span class="na"&gt;ssbr:&lt;/span&gt; that&amp;#39;s exactly what I did yesterday
&lt;span class="cp"&gt;03:46:51  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;wmeyer``&amp;gt; &lt;/span&gt;&lt;span class="na"&gt;ssbr:&lt;/span&gt; woke up at midnight and started hacking
&lt;span class="cp"&gt;03:48:16  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;wmeyer``&amp;gt; &lt;/span&gt;&lt;span class="na"&gt;ssbr:&lt;/span&gt; so where are you at, if it&amp;#39;s midnight I presume is some way half way to states from UK
&lt;span class="cp"&gt;03:49:25  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;ssbr&amp;gt; &lt;/span&gt;&lt;span class="na"&gt;wmeyer``:&lt;/span&gt; Toronto!
&lt;span class="cp"&gt;03:49:35  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;wmeyer``&amp;gt; &lt;/span&gt;&lt;span class="na"&gt;ssbr:&lt;/span&gt; that&amp;#39;s pretty cool :)
&lt;span class="cp"&gt;03:49:41  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;ssbr&amp;gt; &lt;/span&gt;it&amp;#39;s actually really hot
&lt;span class="cp"&gt;03:49:43  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;ssbr&amp;gt; &lt;/span&gt;and I don&amp;#39;t have AC
&lt;span class="cp"&gt;03:50:10  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;wmeyer``&amp;gt; &lt;/span&gt;&lt;span class="na"&gt;ssbr:&lt;/span&gt; me either - but here is not needed
&lt;span class="cp"&gt;03:50:22  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;ssbr&amp;gt; &lt;/span&gt;Lucky. :)
&lt;span class="cp"&gt;03:50:59  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;wmeyer``&amp;gt; &lt;/span&gt;&lt;span class="na"&gt;ssbr:&lt;/span&gt; oh, I wish the weather was slighly better - but anyway most of the I spent in the bunker so I don&amp;#39;t mind
&lt;span class="cp"&gt;03:51:41  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;wmeyer``&amp;gt; &lt;/span&gt;&lt;span class="na"&gt;ssbr:&lt;/span&gt; but the beer festival has just started
&lt;span class="cp"&gt;03:51:58  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;ssbr&amp;gt; &lt;/span&gt;Oof. So you&amp;#39;re missing that then?
&lt;span class="cp"&gt;03:51:58  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;wmeyer``&amp;gt; &lt;/span&gt;&lt;span class="na"&gt;ssbr:&lt;/span&gt; today &amp;#92;o/ so I might come out to drink some pints
&lt;span class="cp"&gt;03:53:38  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;wmeyer``&amp;gt; &lt;/span&gt;sometimes I wish the weather was better yes, not that often, in fact i am mostly fine with wearing almost whole year a light jacket
&lt;span class="cp"&gt;03:54:32  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;wmeyer``&amp;gt; &lt;/span&gt;&lt;span class="na"&gt;ssbr:&lt;/span&gt; Camlp4 let me down again :(
&lt;span class="cp"&gt;03:54:53  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;ssbr&amp;gt; &lt;/span&gt;hahaha
&lt;span class="cp"&gt;03:55:00  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;ssbr&amp;gt; &lt;/span&gt;camlp4 always lets me down :&amp;lt;
&lt;span class="cp"&gt;03:55:08  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;ssbr&amp;gt; &lt;/span&gt;I keep expecting it to be able to grok what it does not grok
&lt;span class="cp"&gt;03:55:18  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;wmeyer``&amp;gt; &lt;/span&gt;&lt;span class="na"&gt;ssbr:&lt;/span&gt; true, true. :D
&lt;span class="cp"&gt;03:55:32  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;wmeyer``&amp;gt; &lt;/span&gt;but this time I had another weird problem
&lt;span class="cp"&gt;03:56:24  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;wmeyer``&amp;gt; &lt;/span&gt;on saturday night It was generating an additional leading bar in the generated polymorphic variant types
&lt;span class="cp"&gt;03:56:52  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;wmeyer``&amp;gt; &lt;/span&gt;which is strangely fine when you generate OCaml text file
&lt;span class="cp"&gt;03:57:07  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;wmeyer``&amp;gt; &lt;/span&gt;but is not when it performs direct marshaling to the compiler
&lt;span class="cp"&gt;03:57:31  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;wmeyer``&amp;gt; &lt;/span&gt;so it compiles fine - but when you use -pp it gives weir error message
&lt;span class="cp"&gt;03:57:47  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;wmeyer``&amp;gt; &lt;/span&gt;so I work arounded that by using custom ocamlbuild plugin
&lt;span class="cp"&gt;03:58:03  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;wmeyer``&amp;gt; &lt;/span&gt;today there is some problem I&amp;#39;ve never had before
&lt;span class="cp"&gt;03:58:19  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;wmeyer``&amp;gt; &lt;/span&gt;it generates: let alu stream = fun _ -&amp;gt; raise (Match_failure (&amp;quot;ghost-location&amp;quot;, 1, 0))
&lt;span class="cp"&gt;03:58:19  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;wmeyer``&amp;gt; &lt;/span&gt;
&lt;span class="cp"&gt;03:58:26  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;wmeyer``&amp;gt; &lt;/span&gt;very helpful isn&amp;#39;t it?
&lt;span class="cp"&gt;03:58:33  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;ssbr&amp;gt; &lt;/span&gt;mmm.
&lt;span class="cp"&gt;03:58:53  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;wmeyer``&amp;gt; &lt;/span&gt;I am sure however I handle all the cases
&lt;span class="cp"&gt;03:58:59  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;wmeyer``&amp;gt; &lt;/span&gt;it was working before the refactoring
&lt;span class="cp"&gt;03:59:17  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;wmeyer``&amp;gt; &lt;/span&gt;ups - maybe the list is empty!
&lt;span class="cp"&gt;03:59:37  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;wmeyer``&amp;gt; &lt;/span&gt;so it will generate and empty &amp;lt;:expr&amp;lt;&amp;gt;&amp;gt; or whatever
&lt;span class="cp"&gt;03:59:42  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;wmeyer``&amp;gt; &lt;/span&gt;and camlp4 goes mad
&lt;span class="cp"&gt;04:00:26  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;wmeyer``&amp;gt; &lt;/span&gt;anyway I pretty much done for today
&lt;span class="cp"&gt;04:00:44  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;wmeyer``&amp;gt; &lt;/span&gt;time to take a nap before i start doing C++ :/
&lt;span class="cp"&gt;04:02:52  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;ssbr&amp;gt; &lt;/span&gt;Goodnight
&lt;span class="cp"&gt;04:02:57  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;wmeyer``&amp;gt; &lt;/span&gt;night!
&lt;span class="cp"&gt;13:39:19  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;leopard2&amp;gt; &lt;/span&gt;Hi anyone around?
&lt;span class="cp"&gt;13:39:44  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;Drakken&amp;gt; &lt;/span&gt;yep
&lt;span class="cp"&gt;13:40:41  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;adrien&amp;gt; &lt;/span&gt;sorry, /me is a square
&lt;span class="cp"&gt;13:40:41  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;leopard2&amp;gt; &lt;/span&gt;&lt;span class="na"&gt;Error:&lt;/span&gt; Unbound value get_full_path
&lt;span class="cp"&gt;13:41:02  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;adrien&amp;gt; &lt;/span&gt;&lt;span class="na"&gt;leopard2:&lt;/span&gt; you should pastebin the full code ;-)
&lt;span class="cp"&gt;13:41:24  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;Drakken&amp;gt; &lt;/span&gt;get_full_path isn&amp;#39;t defined in that scope.
&lt;span class="cp"&gt;13:41:30  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;leopard2&amp;gt; &lt;/span&gt;Just running a test on Leopard   prerr_endline ( get_full_path &amp;quot;/usr/lib/haxe/std/StdTypes.hx&amp;quot;);;
&lt;span class="cp"&gt;13:42:22  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;Drakken&amp;gt; &lt;/span&gt;where is gfp defined?
&lt;span class="cp"&gt;13:43:37  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;leopard2&amp;gt; &lt;/span&gt;I was just running a test for Nicolas for haxe issue on leopard just going to try on lion.  But newbie to ocaml.
&lt;span class="cp"&gt;13:44:25  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;leopard2&amp;gt; &lt;/span&gt;should the line be different?
&lt;span class="cp"&gt;13:44:53  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;leopard2&amp;gt; &lt;/span&gt;this is the compile line... ocamlopt -o test -cclib libs/extc/extc_stubs.o -cclib -lz libs/extc/extc.cmxa test.ml
&lt;span class="cp"&gt;13:47:36  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;adrien&amp;gt; &lt;/span&gt;get_full_path is probably from extc
&lt;span class="cp"&gt;13:47:42  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;adrien&amp;gt; &lt;/span&gt;so, considering the name
&lt;span class="cp"&gt;13:47:51  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;adrien&amp;gt; &lt;/span&gt;&lt;span class="na"&gt;try:&lt;/span&gt; &amp;quot;Extc.get_full_path&amp;quot;
&lt;span class="cp"&gt;13:49:55  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;f[x]&amp;gt; &lt;/span&gt;live telepathy seance!
&lt;span class="cp"&gt;13:50:04  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;leopard2&amp;gt; &lt;/span&gt;Thanks adrien  is the compile info correct for mac?
&lt;span class="cp"&gt;13:50:54  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;leopard2&amp;gt; &lt;/span&gt;its complaining about Unbound Module Extc
&lt;span class="cp"&gt;13:52:32  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;leopard2&amp;gt; &lt;/span&gt;could it be that may ocaml is via mac ports and the poth to extc is wrong?
&lt;span class="cp"&gt;13:52:44  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;leopard2&amp;gt; &lt;/span&gt;path
&lt;span class="cp"&gt;13:52:52  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;adrien&amp;gt; &lt;/span&gt;could be; it&amp;#39;s very hard to say since we have little infos
&lt;span class="cp"&gt;13:53:12  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;adrien&amp;gt; &lt;/span&gt;what have you installed? ocaml only? ocaml+haxe? something else?
&lt;span class="cp"&gt;13:55:32  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;leopard2&amp;gt; &lt;/span&gt;I have haxe installed but currently a broken haxe version on leopard only.  I have tracked down the break to rev 4188 haxe.  And I have ocaml 3.12.1
&lt;span class="cp"&gt;13:57:10  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;leopard2&amp;gt; &lt;/span&gt;its line 1300 or there abouts of typeload.ml this line     mfile = Common.get_full_path file;  that breaks leopard.
&lt;span class="cp"&gt;13:58:00  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;leopard2&amp;gt; &lt;/span&gt;removing Common.get_full_path and it works fine. So just running a test Nicolas ask me to run.  But it&amp;#39;s not compiling on Lion on leopard.
&lt;span class="cp"&gt;14:00:54  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;leopard2&amp;gt; &lt;/span&gt;ok I have...
&lt;span class="cp"&gt;14:01:00  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;leopard2&amp;gt; &lt;/span&gt;locate extc_stubs.o
&lt;span class="cp"&gt;14:01:01  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;leopard2&amp;gt; &lt;/span&gt;/Users/justinmills/ocaml/extc/extc_stubs.o
&lt;span class="cp"&gt;14:01:03  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;leopard2&amp;gt; &lt;/span&gt;/haxe29/haxe-read-only/doc/haxe/libs/extc/extc_stubs.o
&lt;span class="cp"&gt;14:01:04  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;leopard2&amp;gt; &lt;/span&gt;/haxe29/haxe-read-only/libs/extc/extc_stubs.o
&lt;span class="cp"&gt;14:01:06  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;leopard2&amp;gt; &lt;/span&gt;/usr/lib/haxe/temp/haxe-read-only/libs/extc/extc_stubs.o
&lt;span class="cp"&gt;14:01:07  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;leopard2&amp;gt; &lt;/span&gt;/usr/lib/ocaml/extc/extc_stubs.o
&lt;span class="cp"&gt;14:02:18  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;leopard2&amp;gt; &lt;/span&gt;I presuem I should change the compile to make sure extc_stubs.o is found
&lt;span class="cp"&gt;14:02:25  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;leopard2&amp;gt; &lt;/span&gt;presume
&lt;span class="cp"&gt;14:04:34  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;leopard2&amp;gt; &lt;/span&gt;I have changed the compile line to... ocamlopt -o test -cclib /usr/lib/ocaml/extc/extc_stubs.o -cclib -lz /usr/lib/ocaml/extc/extc.cmxa test.ml
&lt;span class="cp"&gt;14:06:23  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;adrien&amp;gt; &lt;/span&gt;and?
&lt;span class="cp"&gt;14:07:54  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;leopard2&amp;gt; &lt;/span&gt;it is still unbound with or without Extc
&lt;span class="cp"&gt;14:08:07  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;leopard2&amp;gt; &lt;/span&gt;what is -cclib doing?
&lt;span class="cp"&gt;14:08:25  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;adrien&amp;gt; &lt;/span&gt;system linker arguments
&lt;span class="cp"&gt;14:08:35  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;adrien&amp;gt; &lt;/span&gt;tells it to use &amp;quot;-lz&amp;quot;
&lt;span class="cp"&gt;14:09:20  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;leopard2&amp;gt; &lt;/span&gt;Are there path differences between leopard and snowy in ocaml ?
&lt;span class="cp"&gt;14:12:13  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;leopard2&amp;gt; &lt;/span&gt;by the way is there a good book on ocaml, I can never find any at any book stores ( and tried London, Bath, Oxford ).
&lt;span class="cp"&gt;14:13:36  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;adrien&amp;gt; &lt;/span&gt;there&amp;#39;s the o&amp;#39;reilly book; now free of charge but not printed
&lt;span class="cp"&gt;14:13:42  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;adrien&amp;gt; &lt;/span&gt;and see ocaml-lang.org
&lt;span class="cp"&gt;14:13:54  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;adrien&amp;gt; &lt;/span&gt;as for your command, what&amp;#39;s the error message for the last one?
&lt;span class="cp"&gt;14:14:12  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;leopard2&amp;gt; &lt;/span&gt;is the o&amp;#39;reilly book up to date?
&lt;span class="cp"&gt;14:14:29  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;leopard2&amp;gt; &lt;/span&gt;ocamlopt -o test -cclib /usr/lib/ocaml/extc/extc_stubs.o -cclib -lz /usr/lib/ocaml/extc/extc.cmxa test.ml
&lt;span class="cp"&gt;14:14:30  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;leopard2&amp;gt; &lt;/span&gt;File &amp;quot;test.ml&amp;quot;, line 1, characters 16-29:
&lt;span class="cp"&gt;14:14:32  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;leopard2&amp;gt; &lt;/span&gt;&lt;span class="na"&gt;Error:&lt;/span&gt; Unbound value get_full_path
&lt;span class="cp"&gt;14:14:42  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;leopard2&amp;gt; &lt;/span&gt;when I exclude Extc
&lt;span class="cp"&gt;14:14:47  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;leopard2&amp;gt; &lt;/span&gt;and
&lt;span class="cp"&gt;14:15:04  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;leopard2&amp;gt; &lt;/span&gt;File &amp;quot;test.ml&amp;quot;, line 1, characters 16-34:
&lt;span class="cp"&gt;14:15:05  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;leopard2&amp;gt; &lt;/span&gt;&lt;span class="na"&gt;Error:&lt;/span&gt; Unbound module Extc
&lt;span class="cp"&gt;14:16:48  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;adrien&amp;gt; &lt;/span&gt;well, for get_full_path, ask Nicolas what should be the line; it&amp;#39;s a library function but you&amp;#39;re missing the full path probably
&lt;span class="cp"&gt;14:16:52  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;adrien&amp;gt; &lt;/span&gt;he should know it
&lt;span class="cp"&gt;14:17:00  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;leopard2&amp;gt; &lt;/span&gt;I tried cd /usr/lib/ocaml/extc/   and it takes me to the correct place
&lt;span class="cp"&gt;14:18:02  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;leopard2&amp;gt; &lt;/span&gt;I will have to push back on the email yes I just thought I should try IRC often a good way to get more insight into a language.  Thanks for the help anyway.
&lt;span class="cp"&gt;14:19:31  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;adrien&amp;gt; &lt;/span&gt;the issue is that it uses a library that most of us don&amp;#39;t know about
&lt;span class="cp"&gt;14:19:36  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;adrien&amp;gt; &lt;/span&gt;(&amp;quot;extc&amp;quot;)
&lt;span class="cp"&gt;14:24:05  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;leopard2&amp;gt; &lt;/span&gt;how do I check where my Ocaml is running from?
&lt;span class="cp"&gt;14:24:17  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;adrien&amp;gt; &lt;/span&gt;ocamlc -where
&lt;span class="cp"&gt;14:24:26  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;adrien&amp;gt; &lt;/span&gt;it shows the standard library path
&lt;span class="cp"&gt;14:24:38  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;adrien&amp;gt; &lt;/span&gt;but you really should not have two installations of ocaml available at the same time
&lt;span class="cp"&gt;14:26:02  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;leopard2&amp;gt; &lt;/span&gt;ocamlc -where
&lt;span class="cp"&gt;14:26:03  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;leopard2&amp;gt; &lt;/span&gt;/opt/local/lib/ocaml
&lt;span class="cp"&gt;14:27:49  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;leopard2&amp;gt; &lt;/span&gt;there is no extc folder in there though can I macport it
&lt;span class="cp"&gt;14:28:47  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;adrien&amp;gt; &lt;/span&gt;ls /usr/bin/*ocamlopt*
&lt;span class="cp"&gt;14:30:01  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;leopard2&amp;gt; &lt;/span&gt;well mine is in usr/lib/ocaml/ does that differ between leopard and snowy?
&lt;span class="cp"&gt;14:37:16  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;adrien&amp;gt; &lt;/span&gt;well, not really a matter of mac os x version, more of macports
&lt;span class="cp"&gt;14:39:57  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;leopard2&amp;gt; &lt;/span&gt;Older versions of haxe compiled fine so using macports ocaml should not be a problem or atleast haxe source should no mind
&lt;span class="cp"&gt;14:40:09  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;leopard2&amp;gt; &lt;/span&gt;not mind
&lt;span class="cp"&gt;15:18:49  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;fpz&amp;gt; &lt;/span&gt;window balance
&lt;span class="cp"&gt;15:20:42  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;orbitz&amp;gt; &lt;/span&gt;&lt;span class="na"&gt;hcarty:&lt;/span&gt; Hello!
&lt;span class="cp"&gt;16:01:20  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;orbitz&amp;gt; &lt;/span&gt;&lt;span class="na"&gt;hcarty:&lt;/span&gt; No mor String.sub error, but pcre is 404: failed to get http://oasis.ocamlcore.org/dev/odb/stable/pkg/pcre-6.2.3.tar.gz
&lt;span class="cp"&gt;16:45:50  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;tchell&amp;gt; &lt;/span&gt;so I have a neato 20 line program that segfaults.
&lt;span class="cp"&gt;16:45:54  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;tchell&amp;gt; &lt;/span&gt;http://hastebin.com/cuwulorogi.coffee
&lt;span class="cp"&gt;16:46:06  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;tchell&amp;gt; &lt;/span&gt;And it segfaults in a different place every time, as judged by printf debugging.
&lt;span class="cp"&gt;16:47:35  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;tchell&amp;gt; &lt;/span&gt;It opens and closes lots of filehandles, uses Pcre, reads a 22GB file line by line... I&amp;#39;m running out of ideas.
&lt;span class="cp"&gt;16:47:44  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;mfp&amp;gt; &lt;/span&gt;&lt;span class="na"&gt;tchell:&lt;/span&gt; looks like a stack overflow
&lt;span class="cp"&gt;16:47:54  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;tchell&amp;gt; &lt;/span&gt;because of my mutually recursive functions?
&lt;span class="cp"&gt;16:47:55  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;mfp&amp;gt; &lt;/span&gt;next is not tail-recursive
&lt;span class="cp"&gt;16:48:05  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;tchell&amp;gt; &lt;/span&gt;I see.
&lt;span class="cp"&gt;16:48:17  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;mfp&amp;gt; &lt;/span&gt;you are calling read inside a try ... with Not_found -&amp;gt; ...
&lt;span class="cp"&gt;16:48:45  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;tchell&amp;gt; &lt;/span&gt;ok, I can fix that.
&lt;span class="cp"&gt;16:49:12  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;mfp&amp;gt; &lt;/span&gt;the typical idiom to handle that is  let ms = try Some (Pcre.extract ...) with Not_found -&amp;gt; None in  match ms with Some x -&amp;gt; ... | None -&amp;gt; ...
&lt;span class="cp"&gt;16:49:24  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;mfp&amp;gt; &lt;/span&gt;allowing you to call perform the recursive calls in tail position
&lt;span class="cp"&gt;16:49:41  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;mfp&amp;gt; &lt;/span&gt;-call
&lt;span class="cp"&gt;16:54:04  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;tchell&amp;gt; &lt;/span&gt;Ok.
&lt;span class="cp"&gt;16:54:30  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;tchell&amp;gt; &lt;/span&gt;Great! That seems to work!  Thanks!
&lt;span class="cp"&gt;16:54:44  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;mfp&amp;gt; &lt;/span&gt;np
&lt;span class="cp"&gt;16:56:39  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;wmeyer``&amp;gt; &lt;/span&gt;&lt;span class="na"&gt;thelema:&lt;/span&gt; are you there?
&lt;span class="cp"&gt;16:58:23  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;wmeyer``&amp;gt; &lt;/span&gt;&lt;span class="na"&gt;thelema:&lt;/span&gt; I was thinking currently about parsing _oasis dependencies, I will push another fix for the oasis installation first. BTW: Shouldn&amp;#39;t odb have interactive mode?
&lt;span class="cp"&gt;17:00:22  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;wmeyer``&amp;gt; &lt;/span&gt;&lt;span class="na"&gt;thelema:&lt;/span&gt; Another idea -- why to clober user with the unneeded log -- spawn the build, check what was the status code, if it&amp;#39;s not 0 then be suspicious and print the accumulated log. In general I would expect that odb would be more elegant in terms of the dialog with the user.
&lt;span class="cp"&gt;17:42:40  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;jaxtr&amp;gt; &lt;/span&gt;ahh it&amp;#39;s a wonderful day
&lt;span class="cp"&gt;17:46:46  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;wmeyer``&amp;gt; &lt;/span&gt;&lt;span class="na"&gt;thelema:&lt;/span&gt; Just commited the final fix for getting oasis if it&amp;#39;s needed
&lt;span class="cp"&gt;18:33:18  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;thelema&amp;gt; &lt;/span&gt;&lt;span class="na"&gt;wmeyer``:&lt;/span&gt; I&amp;#39;ll take a look at it now, but I&amp;#39;m about to go, so unless it pulls cleanly, I don&amp;#39;t think it&amp;#39;ll get merged right now
&lt;span class="cp"&gt;18:37:49  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;thelema&amp;gt; &lt;/span&gt;I worry that an interactive interface for odb is...  unnecessary.  I think we can put a program with an interactive interface in the odb repo, but I want simple `curl odb.ml | ocaml` to work out of the box
&lt;span class="cp"&gt;18:44:05  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;wmeyer``&amp;gt; &lt;/span&gt;&lt;span class="na"&gt;thelema:&lt;/span&gt; No worry it can wait, thanks.
&lt;span class="cp"&gt;18:53:16  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;wmeyer``&amp;gt; &lt;/span&gt;&lt;span class="na"&gt;thelema:&lt;/span&gt; I think having some odb-simple or odb-interactive that will call odb.ml put *somewhere* (biggest chalenge) would be an interesting experiment - worth to try - if ocamlbrew supported that - this would be even better. I think we could then make odb.ml better at the same time - sort of separating dialog from the rest of code. So far I am happy on incremental improvements
&lt;span class="cp"&gt;19:59:06  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;ssbr_&amp;gt; &lt;/span&gt;I never want to see a fold for the rest of my life
&lt;span class="cp"&gt;19:59:33  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;ssbr_&amp;gt; &lt;/span&gt;100% of the List.fold_lefts and List.fold_rights I&amp;#39;ve read, I&amp;#39;ve rewritten as List.map
&lt;span class="cp"&gt;20:01:20  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;adrien&amp;gt; &lt;/span&gt;# List.fold_left (+) 0 [ 1; 2; 3; 4 ];;
&lt;span class="cp"&gt;20:02:02  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;adrien&amp;gt; &lt;/span&gt;also, if you&amp;#39;ve rewritten a fold_left into something with map, you&amp;#39;ve lost tail-recursivity
&lt;span class="cp"&gt;20:02:11  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;jonafan&amp;gt; &lt;/span&gt;let List.map f xs = List.fold_right (fun x xs -&amp;gt; f x :: xs) xs []
&lt;span class="cp"&gt;20:03:03  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;jonafan&amp;gt; &lt;/span&gt;map and fold are for different things, and you probably should have used map in the first place
&lt;span class="cp"&gt;20:04:49  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;adrien&amp;gt; &lt;/span&gt;if you manager to make something using fold_left and a lower complexity than it&amp;#39;d take with map or rev_map, then definitely use fold_left
&lt;span class="cp"&gt;20:08:20  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;ssbr_&amp;gt; &lt;/span&gt;&lt;span class="na"&gt;adrien:&lt;/span&gt; they&amp;#39;re implementing map in terms of folds.
&lt;span class="cp"&gt;20:09:20  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;ssbr_&amp;gt; &lt;/span&gt;List.fold_right (fun k lst -&amp;gt; (foo k) :: lst) somelist []
&lt;span class="cp"&gt;20:11:07  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;ssbr_&amp;gt; &lt;/span&gt;I just replaced something in exactly this form.
&lt;span class="cp"&gt;20:13:13  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;jonafan&amp;gt; &lt;/span&gt;well, at least you didn&amp;#39;t use a list reference with List.iter
&lt;span class="cp"&gt;20:13:39  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;ssbr_&amp;gt; &lt;/span&gt;There&amp;#39;s also the thing where I really don&amp;#39;t like reading folds -- the associativity issues disturb me out of a relaxed reading :S
&lt;span class="cp"&gt;20:13:54  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;_habnabit&amp;gt; &lt;/span&gt;jonafan, fwiw it&amp;#39;s legacy code not written by ssbr_
&lt;span class="cp"&gt;20:14:14  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;jonafan&amp;gt; &lt;/span&gt;ah
&lt;span class="cp"&gt;20:14:26  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;ssbr_&amp;gt; &lt;/span&gt;I&amp;#39;m not sure if I&amp;#39;ll grow out of disliking folds. But in this case I think the folds are pretty objectively wrong.
&lt;span class="cp"&gt;20:14:52  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;ssbr_&amp;gt; &lt;/span&gt;maybe you can quibble about the fold_lefts that are equivalent to a reverse map?
&lt;span class="cp"&gt;20:14:59  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;ssbr_&amp;gt; &lt;/span&gt;I don&amp;#39;t remember if there were any of those
&lt;span class="cp"&gt;20:15:57  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;_habnabit&amp;gt; &lt;/span&gt;ssbr_, what&amp;#39;s the alternative to a fold, though? are you suggesting that map not be implemented in terms of a fold, or what
&lt;span class="cp"&gt;20:17:07  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;ssbr_&amp;gt; &lt;/span&gt;&lt;span class="na"&gt;_habnabit:&lt;/span&gt; I
&lt;span class="cp"&gt;20:17:11  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;ssbr_&amp;gt; &lt;/span&gt;whoops
&lt;span class="cp"&gt;20:17:25  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;ssbr_&amp;gt; &lt;/span&gt;&lt;span class="na"&gt;_habnabit:&lt;/span&gt; I don&amp;#39;t really care how map is implemented. But I find recursion easier to read.
&lt;span class="cp"&gt;20:17:41  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;ssbr_&amp;gt; &lt;/span&gt;Apparently functional programmers hate recursion and love HOFs, but...
&lt;span class="cp"&gt;20:17:52  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;ssbr_&amp;gt; &lt;/span&gt;I dunno, fold isn&amp;#39;t a HOF I like, anyway.
&lt;span class="cp"&gt;20:17:58  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;ssbr_&amp;gt; &lt;/span&gt;Maybe I&amp;#39;ll grow out of it.
&lt;span class="cp"&gt;20:18:12  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;_habnabit&amp;gt; &lt;/span&gt;that&amp;#39;s fine for the case of lists, maybe. but what about folding over a tree?
&lt;span class="cp"&gt;20:18:22  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;_habnabit&amp;gt; &lt;/span&gt;you don&amp;#39;t necessarily want to expose the implementation
&lt;span class="cp"&gt;20:19:00  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;ssbr_&amp;gt; &lt;/span&gt;&lt;span class="na"&gt;_habnabit:&lt;/span&gt; I&amp;#39;ve never folded over a tree.
&lt;span class="cp"&gt;20:21:48  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;everyonemines&amp;gt; &lt;/span&gt;fold doesn&amp;#39;t parallelize, map does
&lt;span class="cp"&gt;20:22:04  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;everyonemines&amp;gt; &lt;/span&gt;(but in the case of ocaml map is implemented as a for loop)
&lt;span class="cp"&gt;20:22:24  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;_habnabit&amp;gt; &lt;/span&gt;(only if you&amp;#39;re mapping a pure function)
&lt;span class="cp"&gt;20:22:33  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;everyonemines&amp;gt; &lt;/span&gt;(but you usually are)
&lt;span class="cp"&gt;20:23:59  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;ssbr_&amp;gt; &lt;/span&gt;I don&amp;#39;t care about CPU usage or stack usage one bit with this code.
&lt;span class="cp"&gt;20:24:18  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;ssbr_&amp;gt; &lt;/span&gt;Everything being folded that I&amp;#39;ve replaced is really tiny.
&lt;span class="cp"&gt;20:28:29  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;wmeyer``&amp;gt; &lt;/span&gt;&lt;span class="na"&gt;ssbr_:&lt;/span&gt; I use a lot of fold, I prefer combinators over explicit recursion
&lt;span class="cp"&gt;20:29:10  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;ssbr_&amp;gt; &lt;/span&gt;I dunno. I feel like I should.
&lt;span class="cp"&gt;20:29:24  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;ssbr_&amp;gt; &lt;/span&gt;I think after enough of it I will just pattern match the associativity instantly
&lt;span class="cp"&gt;20:29:38  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;ssbr_&amp;gt; &lt;/span&gt;as it is I have to think, &amp;quot;OK, fold_right replaces cons with f, and fold_left goes left to right&amp;quot;
&lt;span class="cp"&gt;20:29:52  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;ssbr_&amp;gt; &lt;/span&gt;and work it out. Annoying. :(
&lt;span class="cp"&gt;20:30:10  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;ssbr_&amp;gt; &lt;/span&gt;(fortunately for stuff like (+) and (*) it doesn&amp;#39;t matter at all!)
&lt;span class="cp"&gt;20:30:22  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;Ptival&amp;gt; &lt;/span&gt;I just think of it as &amp;quot;ok, need to do something on that list, passing around that result being built...&amp;quot;
&lt;span class="cp"&gt;20:30:44  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;ssbr_&amp;gt; &lt;/span&gt;&lt;span class="na"&gt;Ptival:&lt;/span&gt; you&amp;#39;re thinking of constructing a fold though
&lt;span class="cp"&gt;20:30:49  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;ssbr_&amp;gt; &lt;/span&gt;I&amp;#39;m thinking of reading. :S
&lt;span class="cp"&gt;20:31:24  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;ssbr_&amp;gt; &lt;/span&gt;I guess it applies both ways
&lt;span class="cp"&gt;20:31:47  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;Qrntz&amp;gt; &lt;/span&gt;on a slightly related note, would it make more sense to use a string map instead of a (string, string) hash table if 1) I have a small dataset 2) the structure is often fold 3) the structure stays constant throughout the program run?
&lt;span class="cp"&gt;20:32:09  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;Ptival&amp;gt; &lt;/span&gt;why would you not use a map?
&lt;span class="cp"&gt;20:32:16  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;Qrntz&amp;gt; &lt;/span&gt;I am mostly concerned with performance
&lt;span class="cp"&gt;20:32:21  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;Qrntz&amp;gt; &lt;/span&gt;that&amp;#39;s what I&amp;#39;m asking!
&lt;span class="cp"&gt;20:32:37  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;Ptival&amp;gt; &lt;/span&gt;unless you&amp;#39;re doing HPC...
&lt;span class="cp"&gt;20:40:15  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;Ptival&amp;gt; &lt;/span&gt;anyway, given your constraints, you can use both
&lt;span class="cp"&gt;20:40:30  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;Ptival&amp;gt; &lt;/span&gt;yes, you&amp;#39;ll probably get better performance with hashtbl
&lt;span class="cp"&gt;20:40:56  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;Ptival&amp;gt; &lt;/span&gt;but unless you&amp;#39;re querying that structure like crazy, I doubt you&amp;#39;ll be seeing much difference
&lt;span class="cp"&gt;20:41:38  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;Qrntz&amp;gt; &lt;/span&gt;I fold it quite often
&lt;span class="cp"&gt;20:42:46  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;Ptival&amp;gt; &lt;/span&gt;fold should be the same
&lt;span class="cp"&gt;20:42:49  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;Qrntz&amp;gt; &lt;/span&gt;actually, I just discovered that I&amp;#39;m sorting the list I get by folding over that hash table in some places, so it would probably be better to use an ordered structure in the first place
&lt;span class="cp"&gt;20:46:01  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;jonafan&amp;gt; &lt;/span&gt;have you profiled this code and shown that it&amp;#39;s too slow?
&lt;span class="cp"&gt;20:47:38  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;Qrntz&amp;gt; &lt;/span&gt;I profiled this code and the bottleneck isn&amp;#39;t in this place
&lt;span class="cp"&gt;20:47:52  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;Qrntz&amp;gt; &lt;/span&gt;I&amp;#39;m just obsessed with making everything «idiomatic» without losing performance
&lt;span class="cp"&gt;20:48:26  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;jonafan&amp;gt; &lt;/span&gt;my preference is for persistant data structures like map
&lt;span class="cp"&gt;21:19:33  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;orbitz&amp;gt; &lt;/span&gt;I want to have all of my library under a namespace of X, so a user can do X.Client or X.Server, for example.  Is best way to do that to make an X module and do module Server = X_server?
&lt;span class="cp"&gt;21:20:20  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;pippijn&amp;gt; &lt;/span&gt;&lt;span class="na"&gt;orbitz:&lt;/span&gt; you can make a pack
&lt;span class="cp"&gt;21:20:32  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;orbitz&amp;gt; &lt;/span&gt;a pack with the devil?
&lt;span class="cp"&gt;21:20:50  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;pippijn&amp;gt; &lt;/span&gt;ocamlc -pack or oasis Pack: true
&lt;span class="cp"&gt;21:21:34  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;orbitz&amp;gt; &lt;/span&gt;God building in Ocaml is such a terrible experience
&lt;span class="cp"&gt;21:24:31  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;adrien&amp;gt; &lt;/span&gt;? packing is fairly simple
&lt;span class="cp"&gt;21:30:03  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;orbitz&amp;gt; &lt;/span&gt;Lots of simple things makes one complex thing
&lt;span class="cp"&gt;21:31:53  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;adrien&amp;gt; &lt;/span&gt;packing&amp;#39;s main issue is that if you also access the functions from the same source repository as where you define them, it&amp;#39;s possible that you access them without going through the pack
&lt;span class="cp"&gt;21:32:51  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;pippijn&amp;gt; &lt;/span&gt;&lt;span class="na"&gt;adrien:&lt;/span&gt; yes.. but only if you do, and also, why is that bad?
&lt;span class="cp"&gt;21:33:25  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;adrien&amp;gt; &lt;/span&gt;it&amp;#39;s not &amp;quot;bad&amp;quot;, but it&amp;#39;s doable while you might not want to do it
&lt;span class="cp"&gt;21:33:33  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;pippijn&amp;gt; &lt;/span&gt;right
&lt;span class="cp"&gt;21:33:34  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;pippijn&amp;gt; &lt;/span&gt;ok
&lt;span class="cp"&gt;21:33:46  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;Qrntz&amp;gt; &lt;/span&gt;is there any way to «open» a module namespace for a dynamically loaded file from within the code that loads it?
&lt;span class="cp"&gt;21:34:02  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;adrien&amp;gt; &lt;/span&gt;typically, you&amp;#39;d make a folder and pack everything in it with the idea that source files from outside that folder cannot skip the pack
&lt;span class="cp"&gt;21:34:35  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;pippijn&amp;gt; &lt;/span&gt;I&amp;#39;m almost convinced that packs are a good thing, but not entirely, yet
&lt;span class="cp"&gt;21:51:33  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;pippijn&amp;gt; &lt;/span&gt;I have a testcase here: http://paste.xinu.at/TOG/
&lt;span class="cp"&gt;21:52:12  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;pippijn&amp;gt; &lt;/span&gt;the problem is that process_accept does not go past br2
&lt;span class="cp"&gt;21:52:17  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;pippijn&amp;gt; &lt;/span&gt;Ssl.get_certificate hangs forever
&lt;span class="cp"&gt;21:52:43  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;pippijn&amp;gt; &lt;/span&gt;well, I don&amp;#39;t know that for sure, but it doesn&amp;#39;t do anything
&lt;span class="cp"&gt;21:53:26  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;pippijn&amp;gt; &lt;/span&gt;http://paste.xinu.at/7b7Pj/ &amp;lt;- server.pem
&lt;span class="cp"&gt;21:53:59  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;pippijn&amp;gt; &lt;/span&gt;oh
&lt;span class="cp"&gt;21:54:05  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;pippijn&amp;gt; &lt;/span&gt;so it doesn&amp;#39;t hang
&lt;span class="cp"&gt;21:54:09  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;pippijn&amp;gt; &lt;/span&gt;it produces an exception
&lt;span class="cp"&gt;21:54:31  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;pippijn&amp;gt; &lt;/span&gt;so try_lwt ignores uncaught exceptions? that&amp;#39;s not nice..
&lt;span class="cp"&gt;21:56:42  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;pippijn&amp;gt; &lt;/span&gt;I don&amp;#39;t understand.. if I re-raise it, I still see nothing
&lt;span class="cp"&gt;21:57:36  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;pippijn&amp;gt; &lt;/span&gt;Printexc says it&amp;#39;s an Ssl.Certificate_error.. is there any way to find out what was wrong with the cert?
&lt;span class="cp"&gt;21:58:15  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;pippijn&amp;gt; &lt;/span&gt;maybe it&amp;#39;s missing the CA
&lt;span class="cp"&gt;22:00:47  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;mfp&amp;gt; &lt;/span&gt;&lt;span class="na"&gt;pippijn:&lt;/span&gt; are you using Ssl.load_verify_locations somewhere?
&lt;span class="cp"&gt;22:03:52  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;pippijn&amp;gt; &lt;/span&gt;&lt;span class="na"&gt;mfp:&lt;/span&gt; is there any documentation for Ssl?
&lt;span class="cp"&gt;22:04:10  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;mfp&amp;gt; &lt;/span&gt;AFAIK there&amp;#39;s only the .mli
&lt;span class="cp"&gt;22:04:14  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;pippijn&amp;gt; &lt;/span&gt;I&amp;#39;m looking at the mli and it has almost no comments
&lt;span class="cp"&gt;22:04:24  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;pippijn&amp;gt; &lt;/span&gt;external load_verify_locations : context -&amp;gt; string -&amp;gt; string -&amp;gt; unit = &amp;quot;ocaml_ssl_ctx_load_verify_locations&amp;quot;
&lt;span class="cp"&gt;22:04:33  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;pippijn&amp;gt; &lt;/span&gt;and ocaml is awesome like that.. it has no names in the declarations
&lt;span class="cp"&gt;22:04:47  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;mfp&amp;gt; &lt;/span&gt;that&amp;#39;s not what my .mli says
&lt;span class="cp"&gt;22:04:54  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;pippijn&amp;gt; &lt;/span&gt;oh
&lt;span class="cp"&gt;22:05:03  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;pippijn&amp;gt; &lt;/span&gt;it&amp;#39;s the ml, sorry, I was looking in the wrong place
&lt;span class="cp"&gt;22:05:16  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;pippijn&amp;gt; &lt;/span&gt;muuch better :)
&lt;span class="cp"&gt;22:05:21  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;mfp&amp;gt; &lt;/span&gt;http://pastebin.com/4LhqZMTk
&lt;span class="cp"&gt;22:05:24  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;pippijn&amp;gt; &lt;/span&gt;sorry
&lt;span class="cp"&gt;22:05:29  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;mfp&amp;gt; &lt;/span&gt;ok :)
&lt;span class="cp"&gt;22:07:39  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;mfp&amp;gt; &lt;/span&gt;you probably need to add Ssl.load_verify_locations ssl_context path_to_ca_cert &amp;quot;&amp;quot;   or such
&lt;span class="cp"&gt;22:08:03  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;mfp&amp;gt; &lt;/span&gt;and something like   Ssl.set_verify ssl_context [Ssl.Verify_fail_if_no_peer_cert] None   to make sure there&amp;#39;s a client certificate
&lt;span class="cp"&gt;22:08:17  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;pippijn&amp;gt; &lt;/span&gt;&lt;span class="na"&gt;mfp:&lt;/span&gt; I don&amp;#39;t want that
&lt;span class="cp"&gt;22:08:23  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;pippijn&amp;gt; &lt;/span&gt;the client certificate is optional
&lt;span class="cp"&gt;22:08:43  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;pippijn&amp;gt; &lt;/span&gt;anyway, I tried the following things:
&lt;span class="cp"&gt;22:08:49  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;mfp&amp;gt; &lt;/span&gt;then Verify_peer IIRC
&lt;span class="cp"&gt;22:09:00  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;pippijn&amp;gt; &lt;/span&gt;hm, ok
&lt;span class="cp"&gt;22:11:21  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;pippijn&amp;gt; &lt;/span&gt;ah
&lt;span class="cp"&gt;22:11:24  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;pippijn&amp;gt; &lt;/span&gt;&lt;span class="na"&gt;mfp:&lt;/span&gt; it works
&lt;span class="cp"&gt;22:11:42  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;mfp&amp;gt; &lt;/span&gt;&lt;span class="na"&gt;Qrntz:&lt;/span&gt; you cannot access the values defined in the dynamically loaded file directly, but you can have it register them somehow
&lt;span class="cp"&gt;22:12:29  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;mfp&amp;gt; &lt;/span&gt;&lt;span class="na"&gt;Qrntz:&lt;/span&gt; in particular, you can register a first-class module and then unpack it in the loader, giving you full access to whatever functionality you want to export in the loaded module :)
&lt;span class="cp"&gt;22:14:19  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;pippijn&amp;gt; &lt;/span&gt;why isn&amp;#39;t that exception propagated out?
&lt;span class="cp"&gt;22:15:01  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;mfp&amp;gt; &lt;/span&gt;isn&amp;#39;t it escaping Lwt_main.run?
&lt;span class="cp"&gt;22:15:37  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;mfp&amp;gt; &lt;/span&gt;try_lwt automatically adds a  | exn -&amp;gt; raise_lwt exn   clause
&lt;span class="cp"&gt;22:16:06  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;mfp&amp;gt; &lt;/span&gt;so it should be raising it
&lt;span class="cp"&gt;22:19:01  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;mfp&amp;gt; &lt;/span&gt;&lt;span class="na"&gt;pippijn:&lt;/span&gt; you might want to add a call to Ssl.verify for good measure (it&amp;#39;ll raise if the client cert is not OK), even though in theory the handshake should be terminated according to SSL_CTX_set_verify(3) (it&amp;#39;s not how that would be reported in the Ssl bindings)
&lt;span class="cp"&gt;22:19:19  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;mfp&amp;gt; &lt;/span&gt;not *clear* how
&lt;span class="cp"&gt;22:20:12  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;pippijn&amp;gt; &lt;/span&gt;set_verify does that, I think
&lt;span class="cp"&gt;22:20:17  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;pippijn&amp;gt; &lt;/span&gt;and it does
&lt;span class="cp"&gt;22:20:23  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;pippijn&amp;gt; &lt;/span&gt;in my code
&lt;span class="cp"&gt;22:20:35  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;mfp&amp;gt; &lt;/span&gt;but there&amp;#39;s only one  verify_callback, isn&amp;#39;t there?
&lt;span class="cp"&gt;22:20:54  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;mfp&amp;gt; &lt;/span&gt;one *value* of verify_callback, I mean
&lt;span class="cp"&gt;22:20:59  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;pippijn&amp;gt; &lt;/span&gt;yeah
&lt;span class="cp"&gt;22:21:06  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;pippijn&amp;gt; &lt;/span&gt;I set it to None
&lt;span class="cp"&gt;22:21:08  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;pippijn&amp;gt; &lt;/span&gt;then it raised
&lt;span class="cp"&gt;22:21:33  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;pippijn&amp;gt; &lt;/span&gt;http://paste.xinu.at/ybv/
&lt;span class="cp"&gt;22:23:59  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;pippijn&amp;gt; &lt;/span&gt;&lt;span class="na"&gt;mfp:&lt;/span&gt; I think &amp;lt;&amp;amp;&amp;gt; is the problem
&lt;span class="cp"&gt;22:24:21  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;pippijn&amp;gt; &lt;/span&gt;a raised exception will wait at the infinite &amp;lt;&amp;amp;&amp;gt;
&lt;span class="cp"&gt;22:24:31  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;mfp&amp;gt; &lt;/span&gt;what&amp;#39;s that operator? I assume it was the pastebin garbling  &amp;gt;&amp;gt;
&lt;span class="cp"&gt;22:24:59  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;mfp&amp;gt; &lt;/span&gt;ah Lwt.join
&lt;span class="cp"&gt;22:25:06  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;pippijn&amp;gt; &lt;/span&gt;it&amp;#39;s Lwt.join
&lt;span class="cp"&gt;22:25:18  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;mfp&amp;gt; &lt;/span&gt;*assumed
&lt;span class="cp"&gt;22:25:22  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;mfp&amp;gt; &lt;/span&gt;argh can&amp;#39;t type tonight
&lt;span class="cp"&gt;22:26:29  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;pippijn&amp;gt; &lt;/span&gt;I need to catch it, anyway, so I can close the socket
&lt;span class="cp"&gt;22:33:41  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;Qrntz&amp;gt; &lt;/span&gt;mfp, hmm, that would indeed make the module accessible to the loaded ones, but I want to explicitly «open» it, as in let the loaded modules access the elements of it without using the module name
&lt;span class="cp"&gt;22:33:50  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;Qrntz&amp;gt; &lt;/span&gt;(trying to mock up a plugin api)
&lt;span class="cp"&gt;22:34:46  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;mfp&amp;gt; &lt;/span&gt;you want to use values defined in the &amp;quot;loader&amp;quot; module from the load*ed* one?
&lt;span class="cp"&gt;22:35:26  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;Qrntz&amp;gt; &lt;/span&gt;well, yes, that would do it
&lt;span class="cp"&gt;22:35:39  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;mfp&amp;gt; &lt;/span&gt;you should be able to do that directly
&lt;span class="cp"&gt;22:35:41  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;Qrntz&amp;gt; &lt;/span&gt;(accessing without a qualified module name, though)
&lt;span class="cp"&gt;22:35:50  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;Qrntz&amp;gt; &lt;/span&gt;hm
&lt;span class="cp"&gt;22:35:55  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;mfp&amp;gt; &lt;/span&gt;just open Xxx then :)
&lt;span class="cp"&gt;22:37:35  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;Qrntz&amp;gt; &lt;/span&gt;that&amp;#39;s the problem — I don&amp;#39;t want to «open» a module explicitly from within the loaded ones, that is, I need to access something from another module (preferrably, one specially meant for dynlinked modules) as if it were defined in the loaded module itself
&lt;span class="cp"&gt;22:38:01  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;Qrntz&amp;gt; &lt;/span&gt;sort of like if it was defined in pervasives, I wouldn&amp;#39;t go as far as augmenting pervasives though :-)
&lt;span class="cp"&gt;22:39:43  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;mfp&amp;gt; &lt;/span&gt;I don&amp;#39;t know any way to have that &amp;quot;implicit open&amp;quot; at load time
&lt;span class="cp"&gt;22:40:11  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;mfp&amp;gt; &lt;/span&gt;would it be acceptable to preprocess the sources to prepend  open Mynewpervasives  at compile-time?
&lt;span class="cp"&gt;22:40:24  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;Qrntz&amp;gt; &lt;/span&gt;that&amp;#39;s what I just thought of, too
&lt;span class="cp"&gt;22:40:30  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;Qrntz&amp;gt; &lt;/span&gt;perhaps
&lt;span class="cp"&gt;22:40:32  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;mfp&amp;gt; &lt;/span&gt;(looks like a lot of work just to avoid  open X, but...)
&lt;span class="cp"&gt;22:40:42  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;Qrntz&amp;gt; &lt;/span&gt;:-)
&lt;span class="cp"&gt;22:40:54  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;mfp&amp;gt; &lt;/span&gt;batteries used to do that with camlp4
&lt;span class="cp"&gt;22:41:27  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;Qrntz&amp;gt; &lt;/span&gt;maybe I&amp;#39;ll think of something better, all I aim for is a plugin interface that&amp;#39;s maximally transparent and «sandboxed» but is in ocaml
&lt;span class="cp"&gt;22:42:35  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;Qrntz&amp;gt; &lt;/span&gt;the sandboxing part is achieved fairly easily with Dynlink.allow_only, now I&amp;#39;m trying to do something with transparency
&lt;span class="cp"&gt;22:43:09  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;Qrntz&amp;gt; &lt;/span&gt;still, thanks for your help!
&lt;span class="cp"&gt;22:43:20  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;mfp&amp;gt; &lt;/span&gt;&lt;span class="na"&gt;Qrntz:&lt;/span&gt; does allow_only work for native code?
&lt;span class="cp"&gt;22:48:49  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;Qrntz&amp;gt; &lt;/span&gt;good question
&lt;span class="cp"&gt;22:49:06  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;Qrntz&amp;gt; &lt;/span&gt;it doesn&amp;#39;t say anything about its byte/native compatibility in reference manual
&lt;span class="cp"&gt;22:50:03  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;mfp&amp;gt; &lt;/span&gt;there&amp;#39;s a note about allow_unsafe_modules being a NOP in native code, though
&lt;span class="cp"&gt;22:50:22  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;mfp&amp;gt; &lt;/span&gt;so maybe allow_only does work
&lt;span class="cp"&gt;22:50:48  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;Qrntz&amp;gt; &lt;/span&gt;hmm, yes, it seems to
&lt;span class="cp"&gt;22:51:00  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;mfp&amp;gt; &lt;/span&gt;would like to know if you figure it out, but zzz time for me now
&lt;span class="cp"&gt;22:51:12  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;Sablier&amp;gt; &lt;/span&gt;hi, does a lib like SDL-mixer who works for windows exist ?
&lt;span class="cp"&gt;22:51:17  &lt;/span&gt;&lt;span class="k"&gt;* &lt;/span&gt;&lt;span class="gi"&gt;mfp afk&lt;/span&gt;
&lt;span class="cp"&gt;22:52:14  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;Qrntz&amp;gt; &lt;/span&gt;mfp, on load it says «no implementation available» for the modules that were referenced but not allowed to be used, so yes, I presume it works
&lt;span class="cp"&gt;22:52:53  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;pippijn&amp;gt; &lt;/span&gt;is there something that can parse /C=US/ST=State Name/L=Locality/O=Organisation/...?
&lt;span class="cp"&gt;22:52:55  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;Qrntz&amp;gt; &lt;/span&gt;Sablier, ocamlsdl interfaces with sdl_mixer
&lt;span class="cp"&gt;22:53:07  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;pippijn&amp;gt; &lt;/span&gt;and gives me a list of data?
&lt;span class="cp"&gt;22:53:44  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;Sablier&amp;gt; &lt;/span&gt;yes of curse, but impossible to build ocaml-sdl :/
&lt;span class="cp"&gt;22:54:01  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;Sablier&amp;gt; &lt;/span&gt;same for sfml
&lt;span class="cp"&gt;22:54:41  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;Sablier&amp;gt; &lt;/span&gt;i try to solve that but i cant :s
&lt;span class="cp"&gt;22:56:06  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;Sablier&amp;gt; &lt;/span&gt;and i dont see any compiled tools for that :/
&lt;span class="cp"&gt;23:14:42  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;Qrntz&amp;gt; &lt;/span&gt;Sablier, it is certainly possible since I&amp;#39;ve succeeded in building it myself
&lt;span class="cp"&gt;23:14:47  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;Qrntz&amp;gt; &lt;/span&gt;what exactly is your error
&lt;span class="cp"&gt;23:17:23  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;Sablier&amp;gt; &lt;/span&gt;when i try make ocamlsdl i have this error
&lt;span class="cp"&gt;23:17:24  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;Sablier&amp;gt; &lt;/span&gt;ocamlc.opt -ccopt &amp;quot;-I/mingw/include/SDL -D_GNU_SOURCE=1 -Dmain=SDL_main -g -O &amp;quot; sdl_stub.c
&lt;span class="cp"&gt;23:17:24  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;Sablier&amp;gt; &lt;/span&gt;&lt;span class="na"&gt;cc1.exe:&lt;/span&gt; erreur: unrecognized command line option &amp;#39;-mno-cygwin&amp;#39;
&lt;span class="cp"&gt;23:19:26  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;Sablier&amp;gt; &lt;/span&gt;i use this tutorial : http://blogperso.univ-rennes1.fr/san.vu-ngoc/index.php/post/2011/02/20/Ocaml-and-SDL-on-windows
&lt;span class="cp"&gt;23:20:47  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;Qrntz&amp;gt; &lt;/span&gt;oh, afraid I can&amp;#39;t help you with windows setups
&lt;span class="cp"&gt;23:20:57  &lt;/span&gt;&lt;span class="k"&gt;* &lt;/span&gt;&lt;span class="gi"&gt;Qrntz has no experience with that&lt;/span&gt;
&lt;span class="cp"&gt;23:21:01  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;Sablier&amp;gt; &lt;/span&gt;i try to use cygwin after, but i have all the time errors dues to &amp;#92;r normes :p
&lt;span class="cp"&gt;23:21:05  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;Sablier&amp;gt; &lt;/span&gt;oh np :p
&lt;span class="cp"&gt;23:21:14  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;Qrntz&amp;gt; &lt;/span&gt;perhaps find where that option is defined and try to remove it?
&lt;span class="cp"&gt;23:22:14  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;Sablier&amp;gt; &lt;/span&gt;I try, its not in the makefile of ocamlsdl
&lt;span class="cp"&gt;23:22:43  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;Sablier&amp;gt; &lt;/span&gt;but i find 1 occurence of this flag in an ocaml makefile
&lt;span class="cp"&gt;23:22:50  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;Sablier&amp;gt; &lt;/span&gt;i remove it but no change :&amp;#39;(
&lt;span class="cp"&gt;23:24:29  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;Sablier&amp;gt; &lt;/span&gt;mmmh i think tomorrow i remove ocaml + cygwin + mingw + VC6 + all who can hurt that, and I retry :o
&lt;span class="cp"&gt;23:27:16  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;Sablier&amp;gt; &lt;/span&gt;and i think i have to try with older versions of SDL &amp;amp; mingw when I see Last OCamL-SDL : Last modification date:	05-Nov-2002
&lt;span class="cp"&gt;23:30:51  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;Sablier&amp;gt; &lt;/span&gt;mmmh thx Qrntz, i go to bed now, SDL is too much tiring :D
&lt;span class="cp"&gt;23:35:59  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;Qrntz&amp;gt; &lt;/span&gt;np, Sablier, good night
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/wyuj8CC1v2arYrdA7AvA235Abh0/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/wyuj8CC1v2arYrdA7AvA235Abh0/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/wyuj8CC1v2arYrdA7AvA235Abh0/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/wyuj8CC1v2arYrdA7AvA235Abh0/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/planet_caml_en?a=OxTSGIw7J14:ZWMYlBVUHYc:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/planet_caml_en?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/planet_caml_en?a=OxTSGIw7J14:ZWMYlBVUHYc:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/planet_caml_en?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/planet_caml_en/~4/OxTSGIw7J14" height="1" width="1"/&gt;</description>
         <guid isPermaLink="false">http://zheng.li/buzzlogs-ocaml/2012/05/22/irc</guid>
         <pubDate>Tue, 22 May 2012 23:59:59 +0000</pubDate>
      </item>
      <item>
         <title>Tiny iOS App in One Source File</title>
         <link>http://psellos.com/2012/05/2012.05.tiny-ios-app.html</link>
         <description>&lt;div class="date"&gt;May 22, 2012&lt;/div&gt;

&lt;p&gt;Psi is a tiny, but complete, iOS test app in one source file, around 40
lines of Objective C.  It&amp;#8217;s nothing fancy, it just draws a Greek psi
character on the screen.  But I thought it might be useful to other
folks.  Sometimes it&amp;#8217;s just nice to have a little example.&lt;/p&gt;

&lt;div class="flowaroundimg" style="margin-top:1.0em;"&gt;
&lt;a rel="nofollow" target="_blank" href="http://psellos.com/ocaml/"&gt;&lt;img src="http://psellos.com/images/psi-p2.png" alt="Psi example app"&gt;&lt;/a&gt;
&lt;/div&gt;

&lt;p&gt;Psi can be very simple because it&amp;#8217;s targeted at iOS 5, when Apple
generalized the startup process to add storyboard support.  A side
effect is that it&amp;#8217;s now possible to have no startup file (nib or
storyboard file) at all.  Psi shows how this can work.  You can find a
more detailed description of the iOS app launch sequence in a &lt;a rel="nofollow" target="_blank" href="http://oleb.net/blog/2012/02/app-launch-sequence-ios-revisited/"&gt;blog post
by Ole Begemann&lt;/a&gt;, which is where I got the idea.&lt;/p&gt;

&lt;div style="clear:both;"&gt;&lt;/div&gt;

&lt;p&gt;You can download the binary of Psi and run it directly in the iOS
Simulator:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a rel="nofollow" target="_blank" href="http://psellos.com/pub/psi/psi-simapp-1.0.0.zip"&gt;Psi Tiny iOS App Binary for iOS Simulator&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;To try out this version, unzip and double click on the launcher app
&lt;code&gt;PsiLauncher.app&lt;/code&gt;.  You need to have Xcode and the iOS 5.0 Simulator
installed for this to work.  Psi appears on the second screen of
apps&amp;#8212;swipe to the left to see it.  If it&amp;#8217;s not there, you might need to
change the version number to 5.1 in the &lt;strong&gt;Hardware -&amp;gt; Version&lt;/strong&gt; menu.&lt;/p&gt;

&lt;p&gt;Psi is so exceptionally simple that it&amp;#8217;s really not very interesting to
run&amp;#8212;the figure above shows everything there is to see.  However, it
might be interesting to see how I packaged up an OS X app to run Psi in
the simulator.&lt;/p&gt;

&lt;p&gt;You can also download the sources and an Xcode project for building and
running in the iOS Simulator or on an iOS device:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a rel="nofollow" target="_blank" href="http://psellos.com/pub/psi/psi-1.0.0.zip"&gt;Psi Tiny iOS App Sources and Xcode project&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;To try out this version, unzip and double click on the Xcode project,
&lt;code&gt;Psi.xcodeproj&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;You can also build and run from the command line using the &lt;code&gt;runsim&lt;/code&gt;
script if you are so inclined.  After unzipping the sources, here&amp;#8217;s what
you need to do:&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;&lt;strong&gt;&lt;code&gt;$ cd psi-1.0.0&lt;/code&gt;&lt;/strong&gt; &lt;br /&gt;
  &lt;strong&gt;&lt;code&gt;$ make -f Makefile.iossim Psi&lt;/code&gt;&lt;/strong&gt; &lt;br /&gt;
  &lt;strong&gt;&lt;code&gt;$ runsim Psi&lt;/code&gt;&lt;/strong&gt;  &lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;For more about the &lt;code&gt;runsim&lt;/code&gt; script, see &lt;a rel="nofollow" target="_blank" href="http://psellos.com/2012/05/2012.05.iossim-command-line-2.html"&gt;Run iOS Simulator from the
Command Line (Improved)&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Finally, here is the full source of Psi.&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;/* psi.m     Tiny iOS App in one file
 *
 * (It just draws a Greek letter Psi.)
 *
 * Copyright (c) 2012 Psellos   http://psellos.com/
 * Licensed under the MIT License:
 *     http://www.opensource.org/licenses/mit-license.php
 */
#import &amp;lt;UIKit/UIKit.h&amp;gt;

@interface AppDelegate : NSObject &amp;lt;UIApplicationDelegate&amp;gt; {
}
@end

@implementation AppDelegate : NSObject
- (BOOL) application: (UIApplication *) anAppl
                didFinishLaunchingWithOptions: (NSDictionary *) opts
{
    UIViewController *vc = [[UIViewController alloc] init];
    UIWindow *w =
        [[UIWindow alloc] initWithFrame: [[UIScreen mainScreen] bounds]];
    UILabel *l = [[UILabel alloc] initWithFrame: [w bounds]];
    l.font = [UIFont fontWithName: @"MarkerFelt-Thin" size: 300.0];
    l.text = [NSString stringWithUTF8String: "&amp;#92;xce&amp;#92;xa8"];
    l.textColor =
        [UIColor colorWithRed: 0.141 green: 0.251 blue: 0.439 alpha: 1.0];
    l.textAlignment = UITextAlignmentCenter;
    l.backgroundColor =
        [UIColor colorWithRed: 0.800 green: 0.333 blue: 0.000 alpha: 1.0];
    vc.view = l;
    w.rootViewController = vc;
    [w makeKeyAndVisible];
    return YES;
}
@end

int main(int argc, char *argv[])
{
    NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];
    int retVal = UIApplicationMain(argc, argv, nil, @"AppDelegate");
    [pool release];
    return retVal;
}&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;If you have any comments, corrections, or suggestions, leave them below
or email me at &lt;a rel="nofollow"&gt;&amp;#106;e&amp;#102;&amp;#x66;&amp;#115;&amp;#099;o&amp;#064;&amp;#112;&amp;#115;&amp;#x65;&amp;#108;l&amp;#x6f;&amp;#x73;&amp;#x2e;&amp;#x63;&amp;#111;&amp;#109;&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Posted by: &lt;a rel="nofollow" target="_blank" href="http://psellos.com/aboutus.html#jeffreya.scofieldphd"&gt;Jeffrey&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;style type="text/css"&gt;
.flowaroundimg {
float:left;margin:0em 1em 0em 0em;}
pre {
white-space:pre-wrap;width:96%;margin-bottom:24px;overflow:hidden;padding:3px 10px;background-color:#fed;border:1px solid #dcb;}
code {
white-space:nowrap;font-size:1.1em;padding:2px;background-color:#fed;border:1px solid #dcb;}
pre code {
white-space:pre-wrap;border:none;padding:0;background-color:transparent;}
&lt;/style&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/_lXLz1-xFqnhzBRVVhfiP6T5Itk/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/_lXLz1-xFqnhzBRVVhfiP6T5Itk/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/_lXLz1-xFqnhzBRVVhfiP6T5Itk/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/_lXLz1-xFqnhzBRVVhfiP6T5Itk/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/planet_caml_en?a=jQvGY_QEXzI:gHir171o7o4:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/planet_caml_en?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/planet_caml_en?a=jQvGY_QEXzI:gHir171o7o4:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/planet_caml_en?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/planet_caml_en/~4/jQvGY_QEXzI" height="1" width="1"/&gt;</description>
         <guid isPermaLink="false">http://psellos.com/2012/05/2012.05.tiny-ios-app.html</guid>
         <pubDate>Tue, 22 May 2012 19:00:00 +0000</pubDate>
      </item>
      <item>
         <title>Caml Weekly News, 22 May 2012</title>
         <link>http://alan.petitepomme.net/cwn/2012.05.22.html</link>
         <description>Any library for reading/writing compressed files? / extunix 0.0.4, ocaml-mysql 1.1.1 and some more / Other Caml News
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/vGYrFiOaMBbtCK846uPkkH-iQZQ/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/vGYrFiOaMBbtCK846uPkkH-iQZQ/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/vGYrFiOaMBbtCK846uPkkH-iQZQ/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/vGYrFiOaMBbtCK846uPkkH-iQZQ/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/planet_caml_en?a=vt7ARjCg2XY:0_6J9gahTQU:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/planet_caml_en?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/planet_caml_en?a=vt7ARjCg2XY:0_6J9gahTQU:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/planet_caml_en?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/planet_caml_en/~4/vt7ARjCg2XY" height="1" width="1"/&gt;</description>
         <guid isPermaLink="false">http://alan.petitepomme.net/cwn/2012.05.22.html</guid>
         <pubDate>Tue, 22 May 2012 12:00:00 +0000</pubDate>
      </item>
      <item>
         <title>Iterating over the AST</title>
         <link>http://blog.frama-c.com/index.php?post/2012/05/21/Iterating-over-the-AST</link>
         <description>&lt;h3&gt;Context&lt;/h3&gt;

&lt;p&gt;A facetious colleague who claims that he should be better writing his thesis but keeps committing Coq and OCaml files on Frama-C's repository, asked me the following question: &lt;q&gt;Is there a function in Frama-C's kernel that can fold&lt;sup&gt;[&lt;a rel="nofollow" target="_blank" href="http://blog.frama-c.com/index.php?post/2012/05/21/Iterating-over-the-AST#pnote-144-1" id="rev-pnote-144-1"&gt;1&lt;/a&gt;]&lt;/sup&gt; a function over all types that appear in a C program?&lt;/q&gt;&lt;/p&gt;


&lt;p&gt;As it turns out, nothing is readily available for this exact purpose, but another facetious colleague could have come up with a terse answer: &lt;q&gt;There's a &lt;strong&gt;visitor&lt;/strong&gt; for that!&lt;/q&gt; Now, we can be a bit more helpful and actually write that visitor. Our end goal is to come up with a function&lt;/p&gt;
&lt;pre&gt;
fold_typ: (Cil_types.typ -&amp;gt; 'a -&amp;gt; 'a) -&amp;gt; 'a -&amp;gt; 'a
&lt;/pre&gt;

&lt;p&gt;so that &lt;code&gt;fold_typ f init&lt;/code&gt; will be &lt;code&gt;f t_1 (f t_2 (... (f t_n init)...))&lt;/code&gt;, where the &lt;code&gt;t_i&lt;/code&gt; are all the C types appearing in a given C program (in no particular order).&lt;/p&gt;


&lt;h3&gt;Frama-C's visitors&lt;/h3&gt;


&lt;p&gt;The &lt;a rel="nofollow" target="_blank" href="http://en.wikipedia.org/wiki/Visitor_pattern"&gt;visitor pattern&lt;/a&gt; is a well-known object-oriented design pattern that can be used to perform a given action over all nodes of a complex data structure (in our case the Abstract Syntax Tree -AST for short- of a C program). Frama-C provides a generic visitor mechanism, built upon CIL's visitor,
whose entry points can be found in the aptly named &lt;code&gt;src/kernel/visitor.mli&lt;/code&gt; file. It is also documented in section 5.14 of &lt;a rel="nofollow" target="_blank" href="http://frama-c.com/download/plugin-development-guide-Nitrogen-20111001.pdf"&gt;the developer manual&lt;/a&gt;. In summary, you first define a class that inherits from the generic visitor and overrides the methods corresponding to the nodes you're interested in (in our case, this will be &lt;code&gt;vtype&lt;/code&gt; for visiting uses of &lt;code&gt;Cil_types.typ&lt;/code&gt;). Then you apply an object of this class to the function from the &lt;code&gt;Visitor&lt;/code&gt; module that correspond to the subpart of the AST that you want to inspect (in our case, this will be the whole AST).&lt;/p&gt;


&lt;h3&gt;Basic version&lt;/h3&gt;


&lt;p&gt;The standard visitor does not provide anything to return a value outside of the AST. In fact, all the entry points in &lt;code&gt;Visitor&lt;/code&gt; return a node of the same type that the node in which the visit starts (for visitors that don't perform code transformation, this is in fact physically the same node). But if you accept to sneak in a little bit of imperative code into your development -and by using Frama-C you've already accepted that- there is an easy way out: pass to the visitor a reference
that it can update, and you just have to read the final value that reference is holding after the visit. The visitor then looks like the following:&lt;/p&gt;
&lt;pre&gt;
class fold_typ_basic f acc =
object
  inherit Visitor.frama_c_inplace
  method vtype ty = acc:= f ty !acc; Cil.DoChildren
end
&lt;/pre&gt;

&lt;p&gt;And that's it. Each time the visitor sees a type, it will apply &lt;code&gt;f&lt;/code&gt; to &lt;code&gt;ty&lt;/code&gt; and the result of the previous computations, stored in &lt;code&gt;acc&lt;/code&gt;. &lt;code&gt;fold_typ&lt;/code&gt; then just needs to call the visitor over the whole AST and give it a reference initialized with &lt;code&gt;init&lt;/code&gt;:&lt;/p&gt;
&lt;pre&gt;
let fold_typ f init =
  let racc = ref init in
  let vis = new fold_typ_basic f racc in
  Visitor.visitFramacFileSameGlobals vis (Ast.get());
  !racc
&lt;/pre&gt;


&lt;h3&gt;Don't do the same work twice&lt;/h3&gt;


&lt;p&gt;This first version, that is barely more than 10 LoC, works, but we can do a little better. Indeed, &lt;code&gt;f&lt;/code&gt; will be called each time a type is encountered in the AST. In most cases, we want to call &lt;code&gt;f&lt;/code&gt; once for any given type. This can be done quite simply by memoizing in an instance variable of our visitor the set of types encountered thus far. Frama-C's &lt;code&gt;Cil_datatype&lt;/code&gt; module (&lt;code&gt;cil/src/cil_datatype.mli&lt;/code&gt;) provides all the needed functions for that:&lt;/p&gt;
&lt;pre&gt;
class fold_typ f acc =
object
  inherit Visitor.frama_c_inplace
  val mutable known_types = Cil_datatype.Typ.Set.empty
  method vtype ty =
    if Cil_datatype.Typ.Set.mem ty known_types then Cil.DoChildren
    else begin
      known_types &amp;lt;- Cil_datatype.Typ.Set.add ty known_types;
      acc:= f ty !acc;
      Cil.DoChildren
    end
end
&lt;/pre&gt;


&lt;h3&gt;Testing the infrastructure&lt;/h3&gt;


&lt;p&gt;It is now time to test if everything works smoothly. The following function will print the name and size of the type who has the biggest size in the analyzed program.&lt;/p&gt;
&lt;pre&gt;
let test () =
  let f ty (maxty,maxsize as acc) =
    try
      let size = Cil.sizeOf_int ty in
      if size &amp;gt; maxsize then (ty,size) else acc
    with Cil.SizeOfError _ -&amp;gt; acc
  in
  let (ty,size) = fold_typ f (Cil.voidType,0) in
  Format.printf &amp;quot;Biggest type is %a,@ with size %d@.&amp;quot; 
    !Ast_printer.d_type ty size
&lt;/pre&gt;

&lt;p&gt;Since it is only a quick test, we don't do anything special if Cil complains that it cannot compute the size of a given type: we just stick to the maximal value computed
so far.&lt;/p&gt;


&lt;p&gt;File &lt;a rel="nofollow" target="_blank" href="http://blog.frama-c.com/public/fold_typ.ml"&gt;fold_typ.ml&lt;/a&gt; provides the code for the visitor and the test function. &lt;code&gt;frama-c -load-script fold_typ.ml file.c&lt;/code&gt; should output something like&lt;/p&gt;
&lt;pre&gt;
[kernel] preprocessing with &amp;quot;gcc -C -E -I.  file.c&amp;quot;
Biggest type is struct Ts,
with size 44
&lt;/pre&gt;


&lt;h3&gt;Exercises&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;How can you use the &lt;code&gt;fold_typ&lt;/code&gt; class to define an &lt;code&gt;iter_typ&lt;/code&gt; function that apply a function &lt;code&gt;f&lt;/code&gt; returning &lt;code&gt;unit&lt;/code&gt; to each type of the AST (&lt;code&gt;val iter_typ: (Cil_types.typ -&amp;gt; unit) -&amp;gt; unit&lt;/code&gt;)?&lt;/li&gt;
&lt;li&gt;Writing &lt;code&gt;fold_typ&lt;/code&gt; is a bit overkill if you're going to apply it once in your plug-in. Write a specialized visitor that will do the same thing as the &lt;code&gt;test&lt;/code&gt; function above.&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="footnotes"&gt;&lt;h4&gt;Notes&lt;/h4&gt;
&lt;p&gt;[&lt;a rel="nofollow" target="_blank" href="http://blog.frama-c.com/index.php?post/2012/05/21/Iterating-over-the-AST#rev-pnote-144-1" id="pnote-144-1"&gt;1&lt;/a&gt;] For those who are not familiar with functional programming: &lt;a rel="nofollow" target="_blank" href="http://en.wikipedia.org/wiki/Fold_%28higher-order_function%29" title="http://en.wikipedia.org/wiki/Fold_%28higher-order_function%29"&gt;http://en.wikipedia.org/wiki/Fold_%...&lt;/a&gt;&lt;/p&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/jGgf2YfjS_HUWrqHKORYGpsMSCI/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/jGgf2YfjS_HUWrqHKORYGpsMSCI/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/jGgf2YfjS_HUWrqHKORYGpsMSCI/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/jGgf2YfjS_HUWrqHKORYGpsMSCI/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/planet_caml_en?a=mkiMlgNJx9I:pMdTT39dGYc:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/planet_caml_en?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/planet_caml_en?a=mkiMlgNJx9I:pMdTT39dGYc:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/planet_caml_en?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/planet_caml_en/~4/mkiMlgNJx9I" height="1" width="1"/&gt;</description>
         <author>virgile</author>
         <guid isPermaLink="false">urn:md5:697e23c1f9e3a919dcf6c9d8d2de380a</guid>
         <pubDate>Tue, 22 May 2012 09:45:00 +0000</pubDate>
      </item>
      <item>
         <title>0004934: ocamlbuild takes up to one minute to scan already done parts of Coq sources</title>
         <link>http://caml.inria.fr/mantis/view.php?id=4934</link>
         <description>Hi!&amp;lt;br /&amp;gt;
&amp;lt;br /&amp;gt;
I'm investigating the use of ocamlbuild for building Coq. I'd be glad to completely get rid of nasty Makefile stuff, but currently, two major issues prevent a complete switch to ocamlbuild. One is the lack of proper parallel compilation (see a forthcoming bug report). Another is that the delay needed by ocamlbuild to scan already built parts (&amp;gt; 1min here) prohibits using it&amp;lt;br /&amp;gt;
for interactive development (edit a file, recompile, and so on). I've already had private discussions on this topic, without clear solutions, so I turn this into a proper bug report, for the records.&amp;lt;br /&amp;gt;
&amp;lt;br /&amp;gt;
Disclaimer: I clearly do not claim my myocamlbuild.ml file to be perfect, so&amp;lt;br /&amp;gt;
this inefficiency can be caused by the way it is written. Any hints are welcome...&amp;lt;br /&amp;gt;
&amp;lt;br /&amp;gt;
Best regards,&amp;lt;br /&amp;gt;
Pierre Letouzey&amp;lt;br /&amp;gt;
&amp;lt;br /&amp;gt;
Instructions to reproduce:&amp;lt;br /&amp;gt;
&amp;lt;br /&amp;gt;
0) you'll need camlp5 installed&amp;lt;br /&amp;gt;
1) get a copy of coq development archive &amp;lt;br /&amp;gt;
   svn checkout &amp;lt;a href=&amp;quot;svn://scm.gforge.inria.fr/svn/coq/trunk/&amp;quot;&amp;gt;svn://scm.gforge.inria.fr/svn/coq/trunk/&amp;lt;/a&amp;gt; [&amp;lt;a href=&amp;quot;svn://scm.gforge.inria.fr/svn/coq/trunk/&amp;quot; target=&amp;quot;_blank&amp;quot;&amp;gt;^&amp;lt;/a&amp;gt;]&amp;lt;br /&amp;gt;
2) ./configure -local -opt&amp;lt;br /&amp;gt;
3) Launch a first build via ocamlbuild (./build is a small wrapper)&amp;lt;br /&amp;gt;
   ./build           &amp;lt;br /&amp;gt;
4) Launch ./build again&amp;lt;br /&amp;gt;
&amp;lt;br /&amp;gt;
Here, the first build says: &amp;lt;br /&amp;gt;
Finished, 2716 targets (0 cached) in 00:13:10.&amp;lt;br /&amp;gt;
&amp;lt;br /&amp;gt;
While the second says:&amp;lt;br /&amp;gt;
Finished, 2716 targets (2716 cached) in 00:01:07.&amp;lt;br /&amp;gt;
&amp;lt;br /&amp;gt;
With old-style make, the second run of make says instantly that nothing is to be done.&amp;lt;br /&amp;gt;
&amp;lt;br /&amp;gt;
NB: I've tried the patch for bug &amp;lt;a href=&amp;quot;http://caml.inria.fr/mantis/view.php?id=4922&amp;quot;&amp;gt;0004922&amp;lt;/a&amp;gt;, unfortunately it doesn't help.&amp;lt;br /&amp;gt;
We're not recompiling too many files here, simply taking too much time&amp;lt;br /&amp;gt;
scanning cached things.
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/UXsY1aNWkHPshAwgCCGQ-Hk0IMI/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/UXsY1aNWkHPshAwgCCGQ-Hk0IMI/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/UXsY1aNWkHPshAwgCCGQ-Hk0IMI/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/UXsY1aNWkHPshAwgCCGQ-Hk0IMI/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/planet_caml_en?a=l3FJLQYMH3s:cvhEYpcQkrQ:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/planet_caml_en?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/planet_caml_en?a=l3FJLQYMH3s:cvhEYpcQkrQ:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/planet_caml_en?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/planet_caml_en/~4/l3FJLQYMH3s" height="1" width="1"/&gt;</description>
         <guid isPermaLink="false">http://caml.inria.fr/mantis/view.php?id=4934</guid>
         <pubDate>Tue, 22 May 2012 09:26:12 +0000</pubDate>
         <category>OCamlbuild (the tool)</category>
      </item>
      <item>
         <title>2012/05/21/Twitter</title>
         <link>http://zheng.li/buzzlogs-ocaml/2012/05/21/twt.html</link>
         <description>&lt;div class="highlight"&gt;&lt;pre&gt;&lt;code class="irc"&gt;&lt;span class="cp"&gt;01:05:33  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;raphscallion&amp;gt; &lt;/span&gt;&lt;span class="na"&gt;ronald_duncan:&lt;/span&gt; :-) nw. I think functors are one of OCaml&amp;#39;s biggest wins. Makes for very code flexible organisation.   | 204377356138328064
&lt;span class="cp"&gt;02:35:00  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;levwalkin&amp;gt; &lt;/span&gt;Calling OCaml callback from C code invoked from OCaml runtime managed by Erlang. #layeredArchitecture #sarcasm   | 204399868523986944
&lt;span class="cp"&gt;10:24:09  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;jonharrop&amp;gt; &lt;/span&gt;&lt;span class="na"&gt;jaceklaskowski:&lt;/span&gt; HLVM is a VM I wrote using LLVM. http://t.co/yKta1Ljj   | 204517931231612929
&lt;span class="cp"&gt;10:43:16  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;ontologiae&amp;gt; &lt;/span&gt;AtdGen #Ocaml serializer and deserializer of Ocaml data type in JSON or binary format   | 204522742991687681
&lt;span class="cp"&gt;10:47:54  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;michael_pichon&amp;gt; &lt;/span&gt;&lt;span class="na"&gt;&amp;quot;@ontologiae:&lt;/span&gt; AtdGen #Ocaml serializer and deserializer of Ocaml data type in JSON or binary format&amp;quot;   | 204523910857887744
&lt;span class="cp"&gt;13:51:07  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;silentbicycle&amp;gt; &lt;/span&gt;&lt;span class="na"&gt;pavlobaron:&lt;/span&gt; Basically, I wanted to get fluent again in a language complimentary to C, Lua, K, and Erlang. I&amp;#39;m too rusty at OCaml these days.   | 204570019336683521
&lt;span class="cp"&gt;14:50:11  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;planet_ocaml&amp;gt; &lt;/span&gt;&lt;span class="na"&gt;Makefile:&lt;/span&gt; typo in installoptopt entry: m Makefile m otherlibs/labltk/browser/Makefile.shared m otherlibs/labltk/... http://t.co/uUaVyp2d   | 204584883656466433
&lt;span class="cp"&gt;15:11:21  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;mentby&amp;gt; &lt;/span&gt;Channels not closed on gc? #caml #ocaml http://t.co/PGv0tXe9   | 204590209592074240
&lt;span class="cp"&gt;23:15:29  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;StackCodeReview&amp;gt; &lt;/span&gt;Is this binary search close to idiomatic OCaml? http://t.co/L50cOcmk #binarysearch   | 204712045264912386
&lt;span class="cp"&gt;23:31:16  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;chaosape&amp;gt; &lt;/span&gt;In case you are looking for an OCaml style guide: http://t.co/7ROyNbhA   | 204716017472114688
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/W_JeXHg9wJ2EsyiXpvMMQTDtjRI/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/W_JeXHg9wJ2EsyiXpvMMQTDtjRI/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/W_JeXHg9wJ2EsyiXpvMMQTDtjRI/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/W_JeXHg9wJ2EsyiXpvMMQTDtjRI/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/planet_caml_en?a=DIRw7DPjuy0:uWaJRFhNiMQ:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/planet_caml_en?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/planet_caml_en?a=DIRw7DPjuy0:uWaJRFhNiMQ:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/planet_caml_en?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/planet_caml_en/~4/DIRw7DPjuy0" height="1" width="1"/&gt;</description>
         <guid isPermaLink="false">http://zheng.li/buzzlogs-ocaml/2012/05/21/twt</guid>
         <pubDate>Mon, 21 May 2012 23:59:59 +0000</pubDate>
      </item>
      <item>
         <title>2012/05/21/IRC</title>
         <link>http://zheng.li/buzzlogs-ocaml/2012/05/21/irc.html</link>
         <description>&lt;div class="highlight"&gt;&lt;pre&gt;&lt;code class="irc"&gt;&lt;span class="cp"&gt;01:35:08  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;wmeyer&amp;gt; &lt;/span&gt;&lt;span class="na"&gt;thelema:&lt;/span&gt; now bootstraping from _oasis is possible, checkout the pull request
&lt;span class="cp"&gt;01:37:07  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;wmeyer&amp;gt; &lt;/span&gt;&lt;span class="na"&gt;thelema:&lt;/span&gt; sorry it&amp;#39;s been taking that long - I sat down finally to odb today
&lt;span class="cp"&gt;07:22:21  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;adrien&amp;gt; &lt;/span&gt;yarg
&lt;span class="cp"&gt;07:22:42  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;adrien&amp;gt; &lt;/span&gt;most annoying thing when expanding lablgtk&amp;#39;s API: not breaking API-compatibility for everyone =/
&lt;span class="cp"&gt;09:00:55  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;ssbr_&amp;gt; &lt;/span&gt;Is there any function like this in the stdlib? fun a b -&amp;gt;(a, b)
&lt;span class="cp"&gt;09:05:18  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;rixed&amp;gt; &lt;/span&gt;&lt;span class="na"&gt;ssbr_:&lt;/span&gt; None that I know of. Intererstingly, there does not seams to have one in Batteries.Tuple2 neither :-(
&lt;span class="cp"&gt;09:06:08  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;ssbr_&amp;gt; &lt;/span&gt;That is just weird. :(
&lt;span class="cp"&gt;09:06:56  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;rixed&amp;gt; &lt;/span&gt;I think constructors are curryable in SML (bot not in OCaml), if this is what you are after. Although writting such a function would be trivial.
&lt;span class="cp"&gt;09:07:28  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;ssbr_&amp;gt; &lt;/span&gt;&lt;span class="na"&gt;rixed:&lt;/span&gt; nah, I&amp;#39;m building an association list from two lists
&lt;span class="cp"&gt;09:07:42  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;ssbr_&amp;gt; &lt;/span&gt;List.map2 (fun a b -&amp;gt; (a,b)) list1 list2
&lt;span class="cp"&gt;09:07:47  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;adrien&amp;gt;        &lt;/span&gt;val combine : &amp;#39;a list -&amp;gt; &amp;#39;b list -&amp;gt; (&amp;#39;a * &amp;#39;b) list
&lt;span class="cp"&gt;09:08:28  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;ssbr_&amp;gt; &lt;/span&gt;Oh.
&lt;span class="cp"&gt;09:08:29  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;rixed&amp;gt; &lt;/span&gt;&lt;span class="na"&gt;ssbr_:&lt;/span&gt; So List.map2 Cons list1 list2 may be valid SML (or close)
&lt;span class="cp"&gt;09:08:31  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;ssbr_&amp;gt; &lt;/span&gt;Well that&amp;#39;s convenient
&lt;span class="cp"&gt;09:09:07  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;ssbr_&amp;gt; &lt;/span&gt;what kind of bot is adrien?
&lt;span class="cp"&gt;09:09:25  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;ssbr_&amp;gt; &lt;/span&gt;it&amp;#39;s a little weird to be able to pick the function that does what I want like that
&lt;span class="cp"&gt;09:09:36  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;ssbr_&amp;gt; &lt;/span&gt;(List.combine is a thing that exists)
&lt;span class="cp"&gt;09:10:58  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;adrien&amp;gt; &lt;/span&gt;sorry, forgot to mention that came from &amp;quot;man List&amp;quot; :-)
&lt;span class="cp"&gt;09:11:09  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;ssbr_&amp;gt; &lt;/span&gt;&lt;span class="na"&gt;adrien:&lt;/span&gt; what, you&amp;#39;re human?
&lt;span class="cp"&gt;09:11:17  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;ssbr_&amp;gt; &lt;/span&gt;maaaaaan
&lt;span class="cp"&gt;09:11:25  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;ssbr_&amp;gt; &lt;/span&gt;you said it __right__ after I gave the function definition
&lt;span class="cp"&gt;09:11:29  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;ssbr_&amp;gt; &lt;/span&gt;it was creepy.
&lt;span class="cp"&gt;09:11:45  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;ssbr_&amp;gt; &lt;/span&gt;&lt;span class="na"&gt;adrien:&lt;/span&gt; but thanks! :)
&lt;span class="cp"&gt;09:12:01  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;adrien&amp;gt; &lt;/span&gt;I&amp;#39;d be more worrying if someone had managed to make a bot that reads IRC and properly gives such hints :-)
&lt;span class="cp"&gt;09:12:09  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;Qrntz&amp;gt; &lt;/span&gt;a xavierbot with fuzzy logic
&lt;span class="cp"&gt;09:12:22  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;adrien&amp;gt; &lt;/span&gt;(although we need a bette topic, an faq, and a bot which can lookup functions according to their types)
&lt;span class="cp"&gt;09:13:13  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;ssbr_&amp;gt; &lt;/span&gt;well I was thinking how hard a problem it was. Figuring out which function in the stdlib is equivalent to a provided snippet of code is, well, undecidable to begin with
&lt;span class="cp"&gt;09:13:45  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;rixed&amp;gt; &lt;/span&gt;&lt;span class="na"&gt;ssbr_:&lt;/span&gt; actually, adrien is able to mimick a real person if you chat with him. But he is a bot obviously, you spotted it
&lt;span class="cp"&gt;09:14:24  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;adrien&amp;gt; &lt;/span&gt;or a human who didn&amp;#39;t have enough sleep and is waiting for some hardware to reboot =)
&lt;span class="cp"&gt;09:14:53  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;flux&amp;gt; &lt;/span&gt;hah hah, how jolly and believeable nonsense those markov chains can generate!
&lt;span class="cp"&gt;09:14:58  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;ssbr_&amp;gt; &lt;/span&gt;hum, data constructors aren&amp;#39;t first class, huh?
&lt;span class="cp"&gt;09:15:05  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;ssbr_&amp;gt; &lt;/span&gt;uhhh, why did I say &amp;quot;data&amp;quot;
&lt;span class="cp"&gt;09:15:05  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;flux&amp;gt; &lt;/span&gt;ssbr_, sadly correct
&lt;span class="cp"&gt;09:15:40  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;ssbr_&amp;gt; &lt;/span&gt;I have two constructors that mean the exact same thing except for one bit of extra information (logical negation). I do not like copy-pasting code like this. :&amp;lt;
&lt;span class="cp"&gt;09:15:51  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;ssbr_&amp;gt; &lt;/span&gt;(I didn&amp;#39;t make this design don&amp;#39;t look at me.)
&lt;span class="cp"&gt;09:16:44  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;flux&amp;gt; &lt;/span&gt;iirc there&amp;#39;s a campl4 extension that achieves that trick
&lt;span class="cp"&gt;09:16:52  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;flux&amp;gt; &lt;/span&gt;basically by generating functions for each constructor
&lt;span class="cp"&gt;09:17:14  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;flux&amp;gt; &lt;/span&gt;well, it might not cover all cases of first-classfulness
&lt;span class="cp"&gt;09:17:53  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;ssbr_&amp;gt; &lt;/span&gt;hyagh, and I can&amp;#39;t even do (let a = (b, c) in SomeThing a) for SomeThing of a * b
&lt;span class="cp"&gt;09:18:21  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;flux&amp;gt; &lt;/span&gt;use SomeThing of (a * b), they are succinctly different
&lt;span class="cp"&gt;09:18:28  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;flux&amp;gt; &lt;/span&gt;of course, if that&amp;#39;s what you already have, then never mind :)
&lt;span class="cp"&gt;09:18:48  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;ssbr_&amp;gt; &lt;/span&gt;Why aren&amp;#39;t all constructors nullary or unary?
&lt;span class="cp"&gt;09:18:59  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;ssbr_&amp;gt; &lt;/span&gt;is there a benefit to SomeThing of a * b over SomeThing of (a * b) ?
&lt;span class="cp"&gt;09:19:13  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;ssbr_&amp;gt; &lt;/span&gt;they aren&amp;#39;t curried so there isn&amp;#39;t that.
&lt;span class="cp"&gt;09:19:21  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;flux&amp;gt; &lt;/span&gt;SomeThing of a * b has a more efficient memory representation, with some downsides as you noticed
&lt;span class="cp"&gt;09:23:07  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;flux&amp;gt; &lt;/span&gt;with that the a and b are directly accompanied by the constructor, with the () form they are dereferenced through a pointer
&lt;span class="cp"&gt;09:23:46  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;ssbr_&amp;gt; &lt;/span&gt;&lt;span class="na"&gt;flux:&lt;/span&gt; I figured. Although I also figured that ocaml can certainly unbox things itself if it wants to. But I guess this is here so that the programmer can control it?
&lt;span class="cp"&gt;09:23:55  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;ssbr_&amp;gt; &lt;/span&gt;except if it&amp;#39;s here for programmer control, it sure is inconvenient
&lt;span class="cp"&gt;09:24:35  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;rixed&amp;gt; &lt;/span&gt;&lt;span class="na"&gt;ssbr_:&lt;/span&gt; OCamlc does not perform such complex things at code generation level.
&lt;span class="cp"&gt;09:25:04  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;rixed&amp;gt; &lt;/span&gt;&lt;span class="na"&gt;ssbr_:&lt;/span&gt; which is fine I think (predictability)
&lt;span class="cp"&gt;09:25:13  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;flux&amp;gt; &lt;/span&gt;well, that kind of stuff affects the interfaces as well, so they cannot really be optimized. but, I suppose it could automatically do some conversion when extracting sub-patterns, although that would result in == perhaps not working in the expected way - but probably code relying on that would be broken on some level already anyway ;)
&lt;span class="cp"&gt;09:25:48  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;ssbr_&amp;gt; &lt;/span&gt;&lt;span class="na"&gt;rixed:&lt;/span&gt; well, it&amp;#39;s only predictable if you read the type definition
&lt;span class="cp"&gt;09:26:00  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;ssbr_&amp;gt; &lt;/span&gt;and you could always make it controllable by specifying whether you want the tuple to be boxed or unboxed
&lt;span class="cp"&gt;09:26:16  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;ssbr_&amp;gt; &lt;/span&gt;(at said type definition).  I just don&amp;#39;t like that the interface is so different between the two
&lt;span class="cp"&gt;09:26:38  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;ssbr_&amp;gt; &lt;/span&gt;especially in ways that make my life harder :&amp;lt;
&lt;span class="cp"&gt;09:27:26  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;rixed&amp;gt; &lt;/span&gt;&lt;span class="na"&gt;ssbr_:&lt;/span&gt; I don&amp;#39;t like this particular &amp;quot;syntax&amp;quot; neither. I&amp;#39;m just happy with a compiler that does not sometime inline the same data structures and sometime don&amp;#39;t.
&lt;span class="cp"&gt;09:28:12  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;flux&amp;gt; &lt;/span&gt;I just use always (a * b)
&lt;span class="cp"&gt;09:28:17  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;flux&amp;gt; &lt;/span&gt;unless I have special performance needs
&lt;span class="cp"&gt;09:28:22  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;ssbr_&amp;gt; &lt;/span&gt;&lt;span class="na"&gt;flux:&lt;/span&gt; I think this is smart.
&lt;span class="cp"&gt;09:28:22  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;flux&amp;gt; &lt;/span&gt;(haven&amp;#39;t found such a situation yet)
&lt;span class="cp"&gt;09:28:51  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;ssbr_&amp;gt; &lt;/span&gt;so sad that this isn&amp;#39;t my code. :&amp;lt;
&lt;span class="cp"&gt;09:29:01  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;rixed&amp;gt; &lt;/span&gt;&lt;span class="na"&gt;flux:&lt;/span&gt; notice that if you have the requirement to deconstruct the type very fast then the ()ed form might be faster
&lt;span class="cp"&gt;09:29:10  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;flux&amp;gt; &lt;/span&gt;rixed, well, true
&lt;span class="cp"&gt;14:38:54  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;orbitz&amp;gt; &lt;/span&gt;Anyone know which godi works with Core?
&lt;span class="cp"&gt;14:38:59  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;orbitz&amp;gt; &lt;/span&gt;Or at least I can install oasis with
&lt;span class="cp"&gt;14:41:16  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;smondet&amp;gt; &lt;/span&gt;&lt;span class="na"&gt;orbitz:&lt;/span&gt; Hi, last time I tried Core did not build with godi
&lt;span class="cp"&gt;14:41:37  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;smondet&amp;gt; &lt;/span&gt;The core package in godi is quite outdated
&lt;span class="cp"&gt;14:41:42  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;orbitz&amp;gt; &lt;/span&gt;Unfortunately
&lt;span class="cp"&gt;14:41:50  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;orbitz&amp;gt; &lt;/span&gt;I&amp;#39;m trying to get godi to install oasis for me though
&lt;span class="cp"&gt;14:41:55  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;orbitz&amp;gt; &lt;/span&gt;but that fails beause it depends o bin_prot?
&lt;span class="cp"&gt;14:42:33  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;smondet&amp;gt; &lt;/span&gt;no, I think oasis depends only on type-conv (?)
&lt;span class="cp"&gt;14:42:56  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;orbitz&amp;gt; &lt;/span&gt;Which it can&amp;#39;t install :(
&lt;span class="cp"&gt;14:43:02  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;orbitz&amp;gt; &lt;/span&gt;And installing oasis by hand looks annoing
&lt;span class="cp"&gt;14:43:12  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;orbitz&amp;gt; &lt;/span&gt;Not terrible annoying, just the kind of annoying I don&amp;#39;t feel like I should have to deal with in 2012
&lt;span class="cp"&gt;14:43:13  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;smondet&amp;gt; &lt;/span&gt;you can get type-conv, core and more from that tar.gz: https://bitbucket.org/yminsky/ocaml-core/downloads
&lt;span class="cp"&gt;14:43:43  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;orbitz&amp;gt; &lt;/span&gt;That download does not compile on mac
&lt;span class="cp"&gt;14:44:09  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;orbitz&amp;gt; &lt;/span&gt;It&amp;#39;s a vicious cycle
&lt;span class="cp"&gt;14:45:26  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;smondet&amp;gt; &lt;/span&gt;I&amp;#39;e been there (but not on Mac): I got type-conv from godi, then compiled Oasis-0.3rc3 from sources, then got core from the bitbucket repo (and I had to put some code in comments)
&lt;span class="cp"&gt;14:47:05  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;orbitz&amp;gt; &lt;/span&gt;Haha
&lt;span class="cp"&gt;14:47:07  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;orbitz&amp;gt; &lt;/span&gt;Insanity
&lt;span class="cp"&gt;14:47:22  &lt;/span&gt;&lt;span class="k"&gt;* &lt;/span&gt;&lt;span class="gi"&gt;orbitz shakes fist at Ocaml&amp;#39;s poor build environment&lt;/span&gt;
&lt;span class="cp"&gt;14:48:01  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;flux&amp;gt; &lt;/span&gt;careful with that fist or you might break the poor build environment even further :(
&lt;span class="cp"&gt;14:49:21  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;orbitz&amp;gt; &lt;/span&gt;Hah
&lt;span class="cp"&gt;14:49:49  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;orbitz&amp;gt; &lt;/span&gt;I wish we could replace the ocamlc ommunity with haskell since I want to write Ocaml and not Haskell but their build tools are awesome!
&lt;span class="cp"&gt;14:50:52  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;avsm&amp;gt; &lt;/span&gt;the tarballs shouldnt need OASIS to be istnalled
&lt;span class="cp"&gt;14:51:27  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;orbitz&amp;gt; &lt;/span&gt;For Core?
&lt;span class="cp"&gt;14:51:40  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;orbitz&amp;gt; &lt;/span&gt;The proble mwith the Core tarball is it won&amp;#39;t build for me, some 32bit 64bit missmatch error
&lt;span class="cp"&gt;15:03:55  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;orbitz&amp;gt; &lt;/span&gt;I&amp;#39;ve taken to hacking godi database to fix the jane st deps
&lt;span class="cp"&gt;15:24:13  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;hcarty&amp;gt; &lt;/span&gt;&lt;span class="na"&gt;orbitz:&lt;/span&gt; If you need/want to install oasis you can give odb a try
&lt;span class="cp"&gt;15:24:47  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;orbitz&amp;gt; &lt;/span&gt;&lt;span class="na"&gt;hcarty:&lt;/span&gt; what is odb?
&lt;span class="cp"&gt;15:25:05  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;hcarty&amp;gt; &lt;/span&gt;&lt;span class="na"&gt;orbitz:&lt;/span&gt; https://github.com/thelema/odb
&lt;span class="cp"&gt;15:26:06  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;orbitz&amp;gt; &lt;/span&gt;How many package systems are there or ocaml?
&lt;span class="cp"&gt;15:26:33  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;hcarty&amp;gt; &lt;/span&gt;&lt;span class="na"&gt;orbitz:&lt;/span&gt; Two?
&lt;span class="cp"&gt;15:26:43  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;hcarty&amp;gt; &lt;/span&gt;&lt;span class="na"&gt;orbitz:&lt;/span&gt; GODI and odb are two very different tools though
&lt;span class="cp"&gt;15:26:55  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;orbitz&amp;gt; &lt;/span&gt;odb seems lik ea nice tool for bootstraping
&lt;span class="cp"&gt;15:27:00  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;hcarty&amp;gt; &lt;/span&gt;GODI gets you up and running with OCaml + a set of packages
&lt;span class="cp"&gt;15:27:16  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;orbitz&amp;gt; &lt;/span&gt;&lt;span class="na"&gt;osx:&lt;/span&gt;tmp orbitz$ ocaml odb.ml oasis
&lt;span class="cp"&gt;15:27:16  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;orbitz&amp;gt; &lt;/span&gt;&lt;span class="na"&gt;Exception:&lt;/span&gt; Invalid_argument &amp;quot;String.sub&amp;quot;.
&lt;span class="cp"&gt;15:27:17  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;orbitz&amp;gt; &lt;/span&gt;:9
&lt;span class="cp"&gt;15:27:19  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;orbitz&amp;gt; &lt;/span&gt;:(
&lt;span class="cp"&gt;15:27:19  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;hcarty&amp;gt; &lt;/span&gt;ocamlbrew uses odb for bootstrapping an OCaml + base set of libraries
&lt;span class="cp"&gt;15:27:32  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;hcarty&amp;gt; &lt;/span&gt;&lt;span class="na"&gt;orbitz:&lt;/span&gt; What version of OCaml?
&lt;span class="cp"&gt;15:27:38  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;orbitz&amp;gt; &lt;/span&gt;3.12.0
&lt;span class="cp"&gt;15:27:41  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;orbitz&amp;gt; &lt;/span&gt;Do I need latest?
&lt;span class="cp"&gt;15:28:57  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;hcarty&amp;gt; &lt;/span&gt;&lt;span class="na"&gt;orbitz:&lt;/span&gt; I don&amp;#39;t think so?  But it&amp;#39;s possible.  It works here for 3.12.1
&lt;span class="cp"&gt;15:29:48  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;hcarty&amp;gt; &lt;/span&gt;&lt;span class="na"&gt;orbitz:&lt;/span&gt; thelema may be able to help
&lt;span class="cp"&gt;15:29:50  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;orbitz&amp;gt; &lt;/span&gt;Hrm, turning stacktrace on doesn&amp;#39;t give me a stack trace...
&lt;span class="cp"&gt;15:30:06  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;hcarty&amp;gt; &lt;/span&gt;The toplevel doesn&amp;#39;t give traces
&lt;span class="cp"&gt;15:30:13  &lt;/span&gt;&lt;span class="k"&gt;* &lt;/span&gt;&lt;span class="gi"&gt;orbitz shakes fist in rage yet again&lt;/span&gt;
&lt;span class="cp"&gt;15:30:24  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;hcarty&amp;gt; &lt;/span&gt;Indeed
&lt;span class="cp"&gt;15:30:52  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;hcarty&amp;gt; &lt;/span&gt;&lt;span class="na"&gt;orbitz:&lt;/span&gt; Might I recommend Batteries? :-)
&lt;span class="cp"&gt;15:31:15  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;orbitz&amp;gt; &lt;/span&gt;I want to play wtih Async :)
&lt;span class="cp"&gt;15:31:22  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;hcarty&amp;gt; &lt;/span&gt;Lwt! :-)
&lt;span class="cp"&gt;15:31:31  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;hcarty&amp;gt; &lt;/span&gt;I haven&amp;#39;t tried Async so I can&amp;#39;t compare the two
&lt;span class="cp"&gt;15:31:48  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;orbitz&amp;gt; &lt;/span&gt;I&amp;#39;ve done Lwt, and like it, curious to see what Async is like
&lt;span class="cp"&gt;15:31:55  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;orbitz&amp;gt; &lt;/span&gt;I have a feeling I won&amp;#39;t like how Async handles errors
&lt;span class="cp"&gt;15:32:58  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;orbitz&amp;gt; &lt;/span&gt;One advantage of Async apaprenly is the amount of C code is very small in it
&lt;span class="cp"&gt;15:52:22  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;orbitz&amp;gt; &lt;/span&gt;&lt;span class="na"&gt;hcarty:&lt;/span&gt; Hrm, same eror ron Ocaml 3.12.1
&lt;span class="cp"&gt;15:53:09  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;hcarty&amp;gt; &lt;/span&gt;&lt;span class="na"&gt;orbitz:&lt;/span&gt; Do you get the same error if you run odb.ml without any arguments?
&lt;span class="cp"&gt;15:53:20  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;orbitz&amp;gt; &lt;/span&gt;Nope, i get a list of packages
&lt;span class="cp"&gt;15:53:36  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;hcarty&amp;gt; &lt;/span&gt;&lt;span class="na"&gt;orbitz:&lt;/span&gt; What is the command you are running?
&lt;span class="cp"&gt;15:53:45  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;orbitz&amp;gt; &lt;/span&gt;ocaml odb.ml oasis
&lt;span class="cp"&gt;15:54:36  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;hcarty&amp;gt; &lt;/span&gt;&lt;span class="na"&gt;thelema:&lt;/span&gt; It looks like orbitz found a bug :-)
&lt;span class="cp"&gt;15:55:02  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;hcarty&amp;gt; &lt;/span&gt;&lt;span class="na"&gt;orbitz:&lt;/span&gt; I tested against the latest and got the same
&lt;span class="cp"&gt;15:55:13  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;orbitz&amp;gt; &lt;/span&gt;Phew! Not jus tme
&lt;span class="cp"&gt;15:55:17  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;hcarty&amp;gt; &lt;/span&gt;I must have had an outdated version of odb
&lt;span class="cp"&gt;15:55:31  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;orbitz&amp;gt; &lt;/span&gt;I&amp;#39;ve got ot head to the airport thouhg, I&amp;#39;ll check back tomorrow
&lt;span class="cp"&gt;15:55:53  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;hcarty&amp;gt; &lt;/span&gt;&lt;span class="na"&gt;orbitz:&lt;/span&gt; It will most likely be fixed by then
&lt;span class="cp"&gt;17:17:31  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;pippijn&amp;gt; &lt;/span&gt;does ocsigen support SSL client authentication?
&lt;span class="cp"&gt;17:24:08  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;pippijn&amp;gt; &lt;/span&gt;alternatively, does Lwt_ssl?
&lt;span class="cp"&gt;17:29:27  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;thelema&amp;gt; &lt;/span&gt;&lt;span class="na"&gt;hcarty:&lt;/span&gt; thanks for sending the bug report, I just noticed it, and it was a stupid mistake in testing whether a package name was a URI
&lt;span class="cp"&gt;17:29:40  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;thelema&amp;gt; &lt;/span&gt;It should be fixed now.  Thanks orbitz as well
&lt;span class="cp"&gt;17:34:29  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;hcarty&amp;gt; &lt;/span&gt;&lt;span class="na"&gt;thelema:&lt;/span&gt; You&amp;#39;re welcome - I&amp;#39;m glad it was a quick fix
&lt;span class="cp"&gt;17:36:51  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;thelema&amp;gt; &lt;/span&gt;If only the jane street people would put their tarballs on some website, odb could easily install the new core
&lt;span class="cp"&gt;17:43:14  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;wmeyer``&amp;gt; &lt;/span&gt;&lt;span class="na"&gt;thelema:&lt;/span&gt; :)
&lt;span class="cp"&gt;17:43:31  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;wmeyer``&amp;gt; &lt;/span&gt;&lt;span class="na"&gt;thelema:&lt;/span&gt; I put the pull request &amp;quot;yesterday&amp;quot;
&lt;span class="cp"&gt;17:43:57  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;thelema&amp;gt; &lt;/span&gt;&lt;span class="na"&gt;wmeyer``:&lt;/span&gt; yes, I was looking through it.
&lt;span class="cp"&gt;17:44:28  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;thelema&amp;gt; &lt;/span&gt;I hadn&amp;#39;t gotten to where the buildtype detection was done
&lt;span class="cp"&gt;17:44:56  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;thelema&amp;gt; &lt;/span&gt;ah, I see, the new function enclosure &amp;quot;try build using&amp;quot;
&lt;span class="cp"&gt;17:51:49  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;wmeyer``&amp;gt; &lt;/span&gt;&lt;span class="na"&gt;thelema:&lt;/span&gt; So it&amp;#39;s a state machine - in simple words it tries first everything, and then when even make file files and the _oasis is present it tries to bootstrap by calling this function again with the Oasis_bootstrap, and the tries Oasis again - in fact in the begining I was thinking that we might want to try again everything, but the prefered order is setup.ml first anyway.
&lt;span class="cp"&gt;17:53:43  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;wmeyer``&amp;gt; &lt;/span&gt;Maybe we should refactor how it&amp;#39;s done currently in general the control flow in this function - I might have time to have a go today. Usually i think about monads at these times.
&lt;span class="cp"&gt;17:53:50  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;smondet&amp;gt; &lt;/span&gt;&lt;span class="na"&gt;pippijn:&lt;/span&gt; Once I got a Lwt_ssl server working with client certificates (not through ocsigen), I used example code from ocamlnet: http://docs.camlcity.org/docs/godipkg/3.12/godi-ocamlnet/doc/godi-ocamlnet/examples/rpc/queues/qclient_auth_ssl.ml
&lt;span class="cp"&gt;17:54:17  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;thelema&amp;gt; &lt;/span&gt;&lt;span class="na"&gt;wmeyer``:&lt;/span&gt; sorry, distracted by conference call, will chat more when it&amp;#39;s done.
&lt;span class="cp"&gt;17:54:32  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;wmeyer``&amp;gt; &lt;/span&gt;&lt;span class="na"&gt;thelema:&lt;/span&gt; No problem, i am here whole evening.
&lt;span class="cp"&gt;18:03:41  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;pippijn&amp;gt; &lt;/span&gt;&lt;span class="na"&gt;smondet:&lt;/span&gt; that&amp;#39;s a client
&lt;span class="cp"&gt;18:03:53  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;pippijn&amp;gt; &lt;/span&gt;&lt;span class="na"&gt;smondet:&lt;/span&gt; what does the server side look like?
&lt;span class="cp"&gt;18:04:25  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;pippijn&amp;gt; &lt;/span&gt;ah, there is a qserver part
&lt;span class="cp"&gt;18:04:42  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;pippijn&amp;gt; &lt;/span&gt;nice
&lt;span class="cp"&gt;18:04:46  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;pippijn&amp;gt; &lt;/span&gt;&lt;span class="na"&gt;smondet:&lt;/span&gt; thanks, that looks good
&lt;span class="cp"&gt;18:13:24  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;smondet&amp;gt; &lt;/span&gt;&lt;span class="na"&gt;pippijn:&lt;/span&gt; This part is the kind-of C.A.-independent part, you still need to check that certificates have not been revokated (and that depends on the CA implementation, I don&amp;#39;t think it is standardized anywhere)
&lt;span class="cp"&gt;18:13:44  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;pippijn&amp;gt; &lt;/span&gt;yeah
&lt;span class="cp"&gt;18:14:02  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;pippijn&amp;gt; &lt;/span&gt;does ocaml have openssl ca bindings?
&lt;span class="cp"&gt;18:14:24  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;wmeyer``&amp;gt; &lt;/span&gt;&lt;span class="na"&gt;pippijn:&lt;/span&gt; I think I&amp;#39;ve seen some package doing that..
&lt;span class="cp"&gt;18:14:40  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;wmeyer``&amp;gt; &lt;/span&gt;&lt;span class="na"&gt;thelema:&lt;/span&gt; OK. I simplified a bit, added a commit to it
&lt;span class="cp"&gt;18:14:43  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;pippijn&amp;gt; &lt;/span&gt;I could just call the openssl binary
&lt;span class="cp"&gt;18:15:06  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;pippijn&amp;gt; &lt;/span&gt;but getting error codes from that is pretty crude
&lt;span class="cp"&gt;18:15:10  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;pippijn&amp;gt; &lt;/span&gt;&amp;quot;failed&amp;quot; or &amp;quot;succeeded&amp;quot;
&lt;span class="cp"&gt;18:15:17  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;smondet&amp;gt; &lt;/span&gt;I did not find any, I started trying to parse the files generated by openssl ca, but then I switched to create my own CA-like (I have a DB of users and roles already)
&lt;span class="cp"&gt;18:15:27  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;pippijn&amp;gt; &lt;/span&gt;I&amp;#39;m not going to parse the console output from openssl
&lt;span class="cp"&gt;18:15:56  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;pippijn&amp;gt; &lt;/span&gt;&lt;span class="na"&gt;smondet:&lt;/span&gt; hm, maybe I&amp;#39;ll do that..
&lt;span class="cp"&gt;18:16:24  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;pippijn&amp;gt; &lt;/span&gt;the advantage of using openssl crl is that I can inspect it from outside with the openssl program
&lt;span class="cp"&gt;18:19:52  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;smondet&amp;gt; &lt;/span&gt;&lt;span class="na"&gt;pippijn:&lt;/span&gt; For inspection... I use sexplib.syntax + emacs :)
&lt;span class="cp"&gt;18:20:38  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;pippijn&amp;gt; &lt;/span&gt;yeah
&lt;span class="cp"&gt;18:21:22  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;pippijn&amp;gt; &lt;/span&gt;stupid debian..
&lt;span class="cp"&gt;18:21:35  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;pippijn&amp;gt; &lt;/span&gt;their ocaml graphviz bindings need 3.11
&lt;span class="cp"&gt;18:21:38  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;mrvn&amp;gt; &lt;/span&gt;???
&lt;span class="cp"&gt;18:22:00  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;pippijn&amp;gt; &lt;/span&gt;http://packages.debian.org/sid/libgv-ocaml
&lt;span class="cp"&gt;18:22:04  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;mrvn&amp;gt; &lt;/span&gt;all ocaml packages need the ocaml they where build with.
&lt;span class="cp"&gt;18:22:13  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;pippijn&amp;gt; &lt;/span&gt;I don&amp;#39;t understand this
&lt;span class="cp"&gt;18:22:15  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;mrvn&amp;gt; &lt;/span&gt;&lt;span class="na"&gt;pippijn:&lt;/span&gt; file a bug for a binNMU.
&lt;span class="cp"&gt;18:22:29  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;pippijn&amp;gt; &lt;/span&gt;oh, it doesn&amp;#39;t exist for my architecture
&lt;span class="cp"&gt;18:22:45  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;pippijn&amp;gt; &lt;/span&gt;it only exists in squeeze for my architecture
&lt;span class="cp"&gt;18:22:53  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;pippijn&amp;gt; &lt;/span&gt;that&amp;#39;s why..
&lt;span class="cp"&gt;18:22:54  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;mrvn&amp;gt; &lt;/span&gt;The ocaml compiler produces object files that are incompatible between versions. So every time a new compiler version is uploaded all ocaml packages need to be recompiled.
&lt;span class="cp"&gt;18:23:15  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;mrvn&amp;gt; &lt;/span&gt;&lt;span class="na"&gt;pippijn:&lt;/span&gt; ahh, that explains why it wasn&amp;#39;t rebuild then
&lt;span class="cp"&gt;18:23:17  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;pippijn&amp;gt; &lt;/span&gt;&lt;span class="na"&gt;mrvn:&lt;/span&gt; libgv-ocaml doesn&amp;#39;t exist in testing
&lt;span class="cp"&gt;18:24:04  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;mrvn&amp;gt; &lt;/span&gt;Check the bugs against ftp.debian.org, libgv-ocaml or the Removals.txt to see why it was removed.
&lt;span class="cp"&gt;18:24:17  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;mrvn&amp;gt; &lt;/span&gt;or ask in debian-ocaml or on the ML.
&lt;span class="cp"&gt;18:25:19  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;pippijn&amp;gt; &lt;/span&gt;[auto-cruft] NBS (no longer built by graphviz)
&lt;span class="cp"&gt;18:26:26  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;pippijn&amp;gt; &lt;/span&gt;Debian Bug report logs: Bugs in package libgv-ocaml
&lt;span class="cp"&gt;18:26:29  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;pippijn&amp;gt; &lt;/span&gt;No reports found!
&lt;span class="cp"&gt;18:26:44  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;mrvn&amp;gt; &lt;/span&gt;so check the graphviz source why it stoped building it.
&lt;span class="cp"&gt;18:27:07  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;pippijn&amp;gt; &lt;/span&gt;it needs --enable-ocaml
&lt;span class="cp"&gt;18:27:20  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;pippijn&amp;gt; &lt;/span&gt;as far as I can tell, it didn&amp;#39;t stop
&lt;span class="cp"&gt;18:27:34  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;pippijn&amp;gt; &lt;/span&gt;there is even a libgv-ocaml.install in the debian directory
&lt;span class="cp"&gt;18:51:32  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;thelema&amp;gt; &lt;/span&gt;&lt;span class="na"&gt;wmeyer``:&lt;/span&gt; simpler is better, looking at new commit now
&lt;span class="cp"&gt;18:52:04  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;mrvn&amp;gt; &lt;/span&gt;less code - less bugs. :)
&lt;span class="cp"&gt;18:52:37  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;thelema&amp;gt; &lt;/span&gt;&lt;span class="na"&gt;mrvn:&lt;/span&gt; yes, I was sad when I crossed the 500LoC boundary on odb.ml
&lt;span class="cp"&gt;18:53:31  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;mrvn&amp;gt;   &lt;/span&gt;* Remove ocaml bindings (Closes: #647435)
&lt;span class="cp"&gt;18:54:57  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;mrvn&amp;gt; &lt;/span&gt;&lt;span class="na"&gt;pippijn:&lt;/span&gt; Seems to have been removed for lack of use. So if you have a use case just ask for it to be added back.
&lt;span class="cp"&gt;18:55:49  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;mrvn&amp;gt; &lt;/span&gt;and add a fix for the bug
&lt;span class="cp"&gt;18:57:03  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;thelema&amp;gt; &lt;/span&gt;&lt;span class="na"&gt;wmeyer``:&lt;/span&gt; I think I like the simpler code better.  What about if oasis isn&amp;#39;t installed - auto-installing it?
&lt;span class="cp"&gt;19:08:07  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;mfp&amp;gt; &lt;/span&gt;argh why does epoll_wait specify the timeout in milliseconds
&lt;span class="cp"&gt;19:08:46  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;mfp&amp;gt; &lt;/span&gt;and why does Lwt_unix.sleep 0.0001 sleep for &amp;gt;3(!)ms   http://pastebin.com/Y7k7nEGx
&lt;span class="cp"&gt;19:13:14  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;flux&amp;gt; &lt;/span&gt;when ever does sleep X say that you are not going to sleep &amp;gt;X?-)
&lt;span class="cp"&gt;19:13:58  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;flux&amp;gt; &lt;/span&gt;mfp, strace -tt or -ttt might be nice
&lt;span class="cp"&gt;19:14:19  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;flux&amp;gt; &lt;/span&gt;too bad it doesn&amp;#39;t (?) log the time spent in a system call
&lt;span class="cp"&gt;19:14:48  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;flux&amp;gt; &lt;/span&gt;ah, -T!
&lt;span class="cp"&gt;19:15:19  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;adrien&amp;gt; &lt;/span&gt;strace does everything ;-)
&lt;span class="cp"&gt;19:15:38  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;flux&amp;gt; &lt;/span&gt;except handle threads properly
&lt;span class="cp"&gt;19:15:40  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;mfp&amp;gt; &lt;/span&gt;ah yes    epoll_wait(3, {}, 64, 1)                = 0 &amp;lt;0.003857&amp;gt;
&lt;span class="cp"&gt;19:16:32  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;flux&amp;gt; &lt;/span&gt;what are you doing where you need 1000 us sleeps?
&lt;span class="cp"&gt;19:16:52  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;adrien&amp;gt; &lt;/span&gt;Sleep(1);
&lt;span class="cp"&gt;19:17:17  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;flux&amp;gt; &lt;/span&gt;mfp, btw, what happens if you sleep for 0.002 s?
&lt;span class="cp"&gt;19:19:02  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;mrvn&amp;gt; &lt;/span&gt;&lt;span class="na"&gt;flesk:&lt;/span&gt; then you wake up some time after 0.002s have passed
&lt;span class="cp"&gt;19:19:26  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;mrvn&amp;gt; &lt;/span&gt;&lt;span class="na"&gt;flux:&lt;/span&gt; ^^^
&lt;span class="cp"&gt;19:20:12  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;mfp&amp;gt; &lt;/span&gt;I have a lwt thread which writes to disk (and can fsync), which is awaken when there&amp;#39;s dirty data. But I want to amortize the write/fsync cost by doing group commits, and thus not Lwt.wakeup (actually, Lwt_condition.broadcast) right away, but after say 0.1ms (small delay so as to avoid adding too much latency in the non-fsync, non-concurrent case)
&lt;span class="cp"&gt;19:21:30  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;mrvn&amp;gt; &lt;/span&gt;I hope you don&amp;#39;t delay the write too
&lt;span class="cp"&gt;19:21:52  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;mfp&amp;gt; &lt;/span&gt;?
&lt;span class="cp"&gt;19:22:18  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;mrvn&amp;gt; &lt;/span&gt;if you write and then wait before the fsync then the FS has a chance to already write the data
&lt;span class="cp"&gt;19:22:35  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;mfp&amp;gt; &lt;/span&gt;&lt;span class="na"&gt;flux:&lt;/span&gt; Lwt_unix.sleep 0.002 gives these times  0.0058191 0.0039639 0.0039780 0.0040021 0.0041711 0.0038090 0.0039890 0.0039980 0.0039930
&lt;span class="cp"&gt;19:23:26  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;mfp&amp;gt; &lt;/span&gt;&lt;span class="na"&gt;mrvn:&lt;/span&gt; I don&amp;#39;t control the fsync time myself; I&amp;#39;m writing to a leveldb DB and setting a fsync:bool param on write.
&lt;span class="cp"&gt;19:25:36  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;mfp&amp;gt; &lt;/span&gt;I guess I could write with fsync:false and then perform a dummy fsynced write, so they&amp;#39;ll go to the same append-only file and flush at once, but I don&amp;#39;t really see the point (unless I want to allow non-fsynced commits, but that&amp;#39;s another story)
&lt;span class="cp"&gt;19:26:21  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;mrvn&amp;gt; &lt;/span&gt;that would just write the data twice.
&lt;span class="cp"&gt;19:28:07  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;mfp&amp;gt; &lt;/span&gt;would it? I mean the dummy fsynced write would not carry the same data (just some dummy record)
&lt;span class="cp"&gt;19:28:47  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;mrvn&amp;gt; &lt;/span&gt;it would still need to write at least one block. The point of doing the fsync later would be so that the fsync wouldn&amp;#39;t block
&lt;span class="cp"&gt;19:28:48  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;mfp&amp;gt; &lt;/span&gt;btw. Thread.delay 0.0001 gives a very constant  0.0001581  delay
&lt;span class="cp"&gt;19:29:57  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;mfp&amp;gt; &lt;/span&gt;the fsync is done in a separate thread, not the main one with the Lwt event loop
&lt;span class="cp"&gt;19:30:20  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;mfp&amp;gt; &lt;/span&gt;so no blocking
&lt;span class="cp"&gt;19:34:27  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;mfp&amp;gt; &lt;/span&gt;select(0, [], [], [], {0, 10})          = 0 (Timeout) &amp;lt;0.000079&amp;gt;    so there&amp;#39;s no pb sleeping for ~100us
&lt;span class="cp"&gt;19:44:05  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;flux&amp;gt; &lt;/span&gt;ah, I realized that epoll_wait cannot do shorter sleeps than 1 millisecond
&lt;span class="cp"&gt;19:44:18  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;flux&amp;gt; &lt;/span&gt;new cool interface for the win?
&lt;span class="cp"&gt;19:44:52  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;flux&amp;gt; &lt;/span&gt;someone somewhere decided that a new interface should only do sleeps &amp;gt;= 1000 us :)
&lt;span class="cp"&gt;19:45:20  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;flux&amp;gt; &lt;/span&gt;well, you could probably use setitimer to get shorter sleeps
&lt;span class="cp"&gt;19:46:39  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;flux&amp;gt; &lt;/span&gt;mfp, maybe you can choose to use some other async backend
&lt;span class="cp"&gt;19:47:12  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;mfp&amp;gt; &lt;/span&gt;yeah, could switch to the one based on select
&lt;span class="cp"&gt;19:49:03  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;mfp&amp;gt; &lt;/span&gt;but can also keep the libev one and synthesize a faster Lwt_unix.sleep by sleeping in a new thread and sending a notification; that would add some 20+20us latency or so
&lt;span class="cp"&gt;19:50:19  &lt;/span&gt;&lt;span class="k"&gt;* &lt;/span&gt;&lt;span class="gi"&gt;mfp afk&lt;/span&gt;
&lt;span class="cp"&gt;19:50:43  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;adrien&amp;gt; &lt;/span&gt;aren&amp;#39;t you overengineering this a bit?
&lt;span class="cp"&gt;19:53:01  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;mrvn&amp;gt; &lt;/span&gt;That&amp;#39;s a bit like if (time &amp;lt; 1000) { for i = 0; i &amp;lt; time * 3438; ++i) { } } else { usleep(time); }
&lt;span class="cp"&gt;20:19:56  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;bitbckt&amp;gt; &lt;/span&gt;cd
&lt;span class="cp"&gt;20:19:59  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;bitbckt&amp;gt; &lt;/span&gt;oops :)
&lt;span class="cp"&gt;20:20:02  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;bitbckt&amp;gt; &lt;/span&gt;&amp;gt;_&amp;gt; &amp;lt;_&amp;lt;
&lt;span class="cp"&gt;20:20:21  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;jonafan&amp;gt; &lt;/span&gt;LOL NOOB!!!!!!
&lt;span class="cp"&gt;20:20:34  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;jonafan&amp;gt; &lt;/span&gt;let&amp;#39;s keep it on topic bitbckt
&lt;span class="cp"&gt;20:20:43  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;bitbckt&amp;gt; &lt;/span&gt;cd ~/src/ocaml?
&lt;span class="cp"&gt;20:20:48  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;jonafan&amp;gt; &lt;/span&gt;better
&lt;span class="cp"&gt;20:20:49  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;bitbckt&amp;gt; &lt;/span&gt;:P
&lt;span class="cp"&gt;21:37:26  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;pippijn&amp;gt; &lt;/span&gt;oasis supports packs
&lt;span class="cp"&gt;21:37:30  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;pippijn&amp;gt; &lt;/span&gt;that&amp;#39;s nice
&lt;span class="cp"&gt;22:30:04  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;eikke&amp;gt; &lt;/span&gt;is there any way to create a &amp;#39;string&amp;#39; using alloca() in ocaml? :P
&lt;span class="cp"&gt;22:30:54  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;pippijn&amp;gt; &lt;/span&gt;that would be a bad idea
&lt;span class="cp"&gt;22:30:58  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;pippijn&amp;gt; &lt;/span&gt;and no
&lt;span class="cp"&gt;22:31:15  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;pippijn&amp;gt; &lt;/span&gt;why do you want that?
&lt;span class="cp"&gt;22:32:25  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;pippijn&amp;gt; &lt;/span&gt;I have a question about Lwt_ssl: http://paste.xinu.at/617/
&lt;span class="cp"&gt;22:32:46  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;eikke&amp;gt; &lt;/span&gt;some code in which I would create a small (like, 16-byte) buffer which will never escape local scope, but will be mutated in the algorithm
&lt;span class="cp"&gt;22:32:58  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;pippijn&amp;gt; &lt;/span&gt;when I make a connection, it starts using 100% CPU time
&lt;span class="cp"&gt;22:33:31  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;pippijn&amp;gt; &lt;/span&gt;&lt;span class="na"&gt;eikke:&lt;/span&gt; okay.. in ocaml, you don&amp;#39;t allocate a lot of things on the stack
&lt;span class="cp"&gt;22:33:41  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;eikke&amp;gt; &lt;/span&gt;I&amp;#39;m aware of that
&lt;span class="cp"&gt;22:34:06  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;eikke&amp;gt; &lt;/span&gt;we&amp;#39;re (more as a challenge) trying to squeeze the last overhead out of some very tight loop
&lt;span class="cp"&gt;22:34:14  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;eikke&amp;gt; &lt;/span&gt;in a couple of languages, comparing generated asm,...
&lt;span class="cp"&gt;22:34:23  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;pippijn&amp;gt; &lt;/span&gt;ah
&lt;span class="cp"&gt;22:34:43  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;pippijn&amp;gt; &lt;/span&gt;well, if you don&amp;#39;t mind the challenge, try storing the bytes of that string in a few ints
&lt;span class="cp"&gt;22:34:55  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;eikke&amp;gt; &lt;/span&gt;ocaml is pretty good, but calling camlBuffer__add_char is painful (I wish that could be inlined :D)
&lt;span class="cp"&gt;22:35:11  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;pippijn&amp;gt; &lt;/span&gt;uh
&lt;span class="cp"&gt;22:35:27  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;pippijn&amp;gt; &lt;/span&gt;before you start using Buffer, try just using a string
&lt;span class="cp"&gt;22:35:42  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;pippijn&amp;gt; &lt;/span&gt;if you want performance
&lt;span class="cp"&gt;22:36:04  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;pippijn&amp;gt; &lt;/span&gt;String.make 16 &amp;#39; &amp;#39;
&lt;span class="cp"&gt;22:37:11  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;pippijn&amp;gt; &lt;/span&gt;it won&amp;#39;t be on the stack, but that probably doesn&amp;#39;t matter too much
&lt;span class="cp"&gt;22:37:29  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;pippijn&amp;gt; &lt;/span&gt;ocaml&amp;#39;s runtime is pretty good with locality of reference
&lt;span class="cp"&gt;22:39:44  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;smondet&amp;gt; &lt;/span&gt;&lt;span class="na"&gt;pippijn:&lt;/span&gt; I think Lwt_ssl.accept needs to ba called on a socket already accepted by Lwt_unix.accept (I think I found readable server-side code in ocsigenserver&amp;#39;s darcs)
&lt;span class="cp"&gt;22:39:58  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;pippijn&amp;gt; &lt;/span&gt;oh
&lt;span class="cp"&gt;22:40:59  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;smondet&amp;gt; &lt;/span&gt;http://ocsigen.org/darcsweb/?r=ocsigenserver.dev;a=headblob;f=/src/server/ocsigen_server.ml#l976
&lt;span class="cp"&gt;22:41:11  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;smondet&amp;gt; &lt;/span&gt;they use Lwt_unix.accept_n
&lt;span class="cp"&gt;22:41:55  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;pippijn&amp;gt; &lt;/span&gt;yeah, that&amp;#39;s better
&lt;span class="cp"&gt;22:42:21  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;pippijn&amp;gt; &lt;/span&gt;it works
&lt;span class="cp"&gt;22:55:58  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;pippijn&amp;gt; &lt;/span&gt;&lt;span class="na"&gt;smondet:&lt;/span&gt; can I get the Ssl.socket from an Lwt_ssl.socket?
&lt;span class="cp"&gt;22:56:38  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;pippijn&amp;gt; &lt;/span&gt;I want to get the client certificate
&lt;span class="cp"&gt;22:57:19  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;smondet&amp;gt; &lt;/span&gt;Ah yes I had that problem :)
&lt;span class="cp"&gt;22:57:37  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;pippijn&amp;gt; &lt;/span&gt;I thought so
&lt;span class="cp"&gt;22:57:41  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;pippijn&amp;gt; &lt;/span&gt;that&amp;#39;s why I sask you :)
&lt;span class="cp"&gt;22:57:45  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;smondet&amp;gt; &lt;/span&gt;So, it&amp;#39;s not possible, in current version, I reported it and they fixed it
&lt;span class="cp"&gt;22:57:55  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;smondet&amp;gt; &lt;/span&gt;(very quickly)
&lt;span class="cp"&gt;22:57:59  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;pippijn&amp;gt; &lt;/span&gt;oh
&lt;span class="cp"&gt;22:58:03  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;pippijn&amp;gt; &lt;/span&gt;so I have to wait?
&lt;span class="cp"&gt;22:58:11  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;pippijn&amp;gt; &lt;/span&gt;or get HEAD/trunk/tip/whatever
&lt;span class="cp"&gt;22:58:43  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;smondet&amp;gt; &lt;/span&gt;in the maintime my code was using Obj.magic (my code has not been touched in a few months, I had other stuf to do)
&lt;span class="cp"&gt;22:59:05  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;pippijn&amp;gt; &lt;/span&gt;oh, it segfaulted with that
&lt;span class="cp"&gt;22:59:59  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;pippijn&amp;gt; &lt;/span&gt;how did you do that?
&lt;span class="cp"&gt;23:00:07  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;pippijn&amp;gt; &lt;/span&gt;I tried Ssl.get_certificate (List.hd (Obj.magic socket))
&lt;span class="cp"&gt;23:00:47  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;pippijn&amp;gt; &lt;/span&gt;bad luck, it&amp;#39;s not the first field
&lt;span class="cp"&gt;23:01:04  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;smondet&amp;gt;  &lt;/span&gt;&lt;span class="na"&gt;pippijn:&lt;/span&gt; http://pastebin.com/aEtYBJwX
&lt;span class="cp"&gt;23:01:56  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;pippijn&amp;gt; &lt;/span&gt;oh
&lt;span class="cp"&gt;23:02:05  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;pippijn&amp;gt; &lt;/span&gt;ok, so it&amp;#39;s the second field
&lt;span class="cp"&gt;23:11:30  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;pippijn&amp;gt; &lt;/span&gt;well, it doesn&amp;#39;t work :)
&lt;span class="cp"&gt;23:11:39  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;pippijn&amp;gt; &lt;/span&gt;it hangs, doing.. I don&amp;#39;t know
&lt;span class="cp"&gt;23:12:29  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;pippijn&amp;gt; &lt;/span&gt;ok, I see
&lt;span class="cp"&gt;23:12:45  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;pippijn&amp;gt; &lt;/span&gt;Ssl. Certificate_error
&lt;span class="cp"&gt;23:19:02  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;pippijn&amp;gt; &lt;/span&gt;Ssl.get_certificate hangs?
&lt;span class="cp"&gt;23:21:46  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;wmeyer``&amp;gt; &lt;/span&gt;&lt;span class="na"&gt;thelema:&lt;/span&gt; We could do it
&lt;span class="cp"&gt;23:22:04  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;pippijn&amp;gt; &lt;/span&gt;http://paste.xinu.at/m4Eoj/
&lt;span class="cp"&gt;23:22:05  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;wmeyer``&amp;gt; &lt;/span&gt;&lt;span class="na"&gt;thelema:&lt;/span&gt; I think it should be highly sort of optional to install oasis
&lt;span class="cp"&gt;23:22:30  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;wmeyer``&amp;gt; &lt;/span&gt;&lt;span class="na"&gt;thelema:&lt;/span&gt; the problem is that we don&amp;#39;t want developers just to rely on this feature - right?
&lt;span class="cp"&gt;23:23:33  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;wmeyer``&amp;gt; &lt;/span&gt;&lt;span class="na"&gt;thelema:&lt;/span&gt; I would think that oasis might be the first thing to install - but do you do it with autotools? btw however it&amp;#39;s the only day way you can do with the source control.
&lt;span class="cp"&gt;23:31:54  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;eikke&amp;gt; &lt;/span&gt;&lt;span class="na"&gt;pippijn:&lt;/span&gt; fwiw, using a string increases runtime with &amp;gt;100% and more-than-doubles GC rate in a microbench ;)
&lt;span class="cp"&gt;23:32:16  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;pippijn&amp;gt; &lt;/span&gt;&lt;span class="na"&gt;eikke:&lt;/span&gt; vs. using a Buffer?
&lt;span class="cp"&gt;23:32:30  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;eikke&amp;gt; &lt;/span&gt;sorta, yes
&lt;span class="cp"&gt;23:32:37  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;eikke&amp;gt; &lt;/span&gt;it&amp;#39;s already usign a buffer
&lt;span class="cp"&gt;23:33:10  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;pippijn&amp;gt; &lt;/span&gt;how about using a global string?
&lt;span class="cp"&gt;23:33:30  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;pippijn&amp;gt; &lt;/span&gt;or a semi-global one
&lt;span class="cp"&gt;23:34:57  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;eikke&amp;gt; &lt;/span&gt;thought about that as well, but I always think that feels really ugly and not really concurrency-safe
&lt;span class="cp"&gt;23:35:29  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;pippijn&amp;gt; &lt;/span&gt;you can pass the string in
&lt;span class="cp"&gt;23:35:32  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;pippijn&amp;gt; &lt;/span&gt;as a context
&lt;span class="cp"&gt;23:35:56  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;eikke&amp;gt; &lt;/span&gt;that pushes allocation cost to the caller, wont help. + I might need to enlarge the string on-the-go
&lt;span class="cp"&gt;23:36:48  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;pippijn&amp;gt; &lt;/span&gt;can you pre-calculate the maximum string size?
&lt;span class="cp"&gt;23:37:09  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;pippijn&amp;gt; &lt;/span&gt;maybe have a conservative estimate
&lt;span class="cp"&gt;23:43:17  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;eikke&amp;gt; &lt;/span&gt;&lt;span class="na"&gt;pippijn:&lt;/span&gt; sure I could. fwiw, here&amp;#39;s the thing: https://gist.github.com/2765432
&lt;span class="cp"&gt;23:43:47  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;pippijn&amp;gt; &lt;/span&gt;&lt;span class="na"&gt;eikke:&lt;/span&gt; I&amp;#39;m going to sleep now
&lt;span class="cp"&gt;23:43:49  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;pippijn&amp;gt; &lt;/span&gt;I&amp;#39;ll look at it tomorrow
&lt;span class="cp"&gt;23:44:20  &lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;eikke&amp;gt; &lt;/span&gt;sure, nn
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/lpnJ0E8TiRu96L-UUPcFmYtjULk/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/lpnJ0E8TiRu96L-UUPcFmYtjULk/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/lpnJ0E8TiRu96L-UUPcFmYtjULk/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/lpnJ0E8TiRu96L-UUPcFmYtjULk/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/planet_caml_en?a=8B1xKrgaDCk:p1fGLoxW5W0:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/planet_caml_en?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/planet_caml_en?a=8B1xKrgaDCk:p1fGLoxW5W0:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/planet_caml_en?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/planet_caml_en/~4/8B1xKrgaDCk" height="1" width="1"/&gt;</description>
         <guid isPermaLink="false">http://zheng.li/buzzlogs-ocaml/2012/05/21/irc</guid>
         <pubDate>Mon, 21 May 2012 23:59:59 +0000</pubDate>
      </item>
      <item>
         <title>0005127: wrong location after directive</title>
         <link>http://caml.inria.fr/mantis/view.php?id=5127</link>
         <description>The locations in the Camlp4 ast are completely wrong for the&amp;lt;br /&amp;gt;
material that follows a directive. For a two line file&amp;lt;br /&amp;gt;
&amp;lt;br /&amp;gt;
#use &amp;quot;y.ml&amp;quot;;;&amp;lt;br /&amp;gt;
let a = 5&amp;lt;br /&amp;gt;
&amp;lt;br /&amp;gt;
the location in the StVal node for line 2 has&amp;lt;br /&amp;gt;
&amp;lt;br /&amp;gt;
start_line = 3 (should be 2)&amp;lt;br /&amp;gt;
start_bol = 1 (should be 14)&amp;lt;br /&amp;gt;
start_off = 1 (should be 14)&amp;lt;br /&amp;gt;
&amp;lt;br /&amp;gt;
the stop location is also wrong.
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/YNaSF3WglT_qnz6o8rv0dKiXeXk/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/YNaSF3WglT_qnz6o8rv0dKiXeXk/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/YNaSF3WglT_qnz6o8rv0dKiXeXk/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/YNaSF3WglT_qnz6o8rv0dKiXeXk/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/planet_caml_en?a=iYfNB_Y3XI0:s_bdxnWhFPY:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/planet_caml_en?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/planet_caml_en?a=iYfNB_Y3XI0:s_bdxnWhFPY:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/planet_caml_en?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/planet_caml_en/~4/iYfNB_Y3XI0" height="1" width="1"/&gt;</description>
         <guid isPermaLink="false">http://caml.inria.fr/mantis/view.php?id=5127</guid>
         <pubDate>Mon, 21 May 2012 21:30:45 +0000</pubDate>
         <category>Camlp4</category>
      </item>
      <item>
         <title>RegStab 2.0</title>
         <link>http://caml.inria.fr/cgi-bin/hump.cgi?contrib=706</link>
         <description>RegSTAB is a SAT-solver able to deal with formula schemas:
              you can give it a scheme of formulas such as "/&amp;#92;i=1..n  
P_i -&amp;gt; P_i+1" (where n is a variable)
              and it will be able to answer you if *all the formulas  
of this form (i.e. for every value of n) are unsatisfiable*, i.e. it can treat at once an infinite set of  
propositional formulas.
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/CnLP5FLFNDmpy2UoELn-t5OXndM/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/CnLP5FLFNDmpy2UoELn-t5OXndM/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/CnLP5FLFNDmpy2UoELn-t5OXndM/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/CnLP5FLFNDmpy2UoELn-t5OXndM/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/planet_caml_en?a=sV3c8czt9HQ:Ro2eosQjYao:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/planet_caml_en?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/planet_caml_en?a=sV3c8czt9HQ:Ro2eosQjYao:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/planet_caml_en?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/planet_caml_en/~4/sV3c8czt9HQ" height="1" width="1"/&gt;</description>
         <guid isPermaLink="false" />
         <pubDate>Mon, 21 May 2012 15:45:38 +0000</pubDate>
      </item>
      <item>
         <title>ocaml-winsvc 0.0.1</title>
         <link>http://caml.inria.fr/cgi-bin/hump.cgi?contrib=814</link>
         <description>The library to make OCaml program act as a Windows service.
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/665Xa-qQpt9CCZA_h7ZD4ccOwLs/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/665Xa-qQpt9CCZA_h7ZD4ccOwLs/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/665Xa-qQpt9CCZA_h7ZD4ccOwLs/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/665Xa-qQpt9CCZA_h7ZD4ccOwLs/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/planet_caml_en?a=R_-CkbODJx4:Ro2eosQjYao:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/planet_caml_en?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/planet_caml_en?a=R_-CkbODJx4:Ro2eosQjYao:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/planet_caml_en?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/planet_caml_en/~4/R_-CkbODJx4" height="1" width="1"/&gt;</description>
         <guid isPermaLink="false" />
         <pubDate>Mon, 21 May 2012 15:29:37 +0000</pubDate>
      </item>
   </channel>
</rss><!-- fe1.pipes.ch1.yahoo.com uncompressed/chunked Fri May 25 06:11:57 UTC 2012 -->

