flux changed the topic of #ocaml to: Discussions about the OCaml programming language | http://caml.inria.fr/ | OCaml 4.00.1 http://bit.ly/UHeZyT | http://www.ocaml.org | Public logs at http://tunes.org/~nef/logs/ocaml/
transfinite has joined #ocaml
lewis1711 has quit [Ping timeout: 245 seconds]
talzeus has joined #ocaml
q66 has quit [Quit: Leaving]
mcsquiggedy has joined #ocaml
<mcsquiggedy> Evening, folks. Would anyone happen to know, off the top of their head, which version of the OpenGL API is supported by LablGL?
<mcsquiggedy> The most recent mention that I've found was from 2011, about a year before the most recent version of lablGL that I could find.
alexey has quit [Ping timeout: 264 seconds]
breakds has joined #ocaml
csakatoku has joined #ocaml
breakds has quit [Client Quit]
alexey has joined #ocaml
talzeus has quit [Remote host closed the connection]
lusory has joined #ocaml
madroach has quit [Ping timeout: 264 seconds]
madroach has joined #ocaml
walter has joined #ocaml
pkrnj has joined #ocaml
Drup has quit [Quit: Leaving.]
ollehar has quit [Ping timeout: 264 seconds]
talzeus has joined #ocaml
ygrek has joined #ocaml
zRecursive has left #ocaml []
darkf has joined #ocaml
introom has joined #ocaml
watermind has quit [Quit: Konversation terminated!]
justdit has joined #ocaml
introom has quit [Remote host closed the connection]
introom has joined #ocaml
justdit has quit [Read error: Connection reset by peer]
shinnya has joined #ocaml
ulfdoz has joined #ocaml
chris2 has quit [Ping timeout: 260 seconds]
ulfdoz has quit [Ping timeout: 248 seconds]
<technomancy> which syllable in "ocaml" is emphasized?
void64 has quit [Ping timeout: 246 seconds]
<ygrek> second
<technomancy> cool
introom has quit [Remote host closed the connection]
shinnya has quit [Ping timeout: 245 seconds]
<technomancy> is there a way to alter a ref by just sending it a function that takes the current value as the arg? rather than reading the ref contents, passing it to a function, and calling that?
<technomancy> like in clojure you can say (alter my-ref + 10) and the ref will contain its old value plus ten
<technomancy> or even just the ability to use a function for functional updates of a record would be great
<whitequa1k> there's incr
<whitequa1k> also you can write your own `alter' if you want
<technomancy> huh; incr is kind of along the lines of what I'm looking for, but inside-out
<technomancy> was just wondering if there was an existing idiom
<technomancy> I guess it doesn't matter as much in ocaml because you don't have to worry about atomicity
ollehar has joined #ocaml
<flux> just go with let ( *!++->!* ) var fn = var := fn !var;; :)
yacks has quit [Ping timeout: 260 seconds]
lewis1711 has joined #ocaml
lewis1711 has quit [Ping timeout: 256 seconds]
zRecursive has joined #ocaml
pkrnj has quit [Quit: Textual IRC Client: www.textualapp.com]
ggole has joined #ocaml
justdit has joined #ocaml
ollehar has quit [Ping timeout: 240 seconds]
lewis1711 has joined #ocaml
introom has joined #ocaml
zpe has joined #ocaml
zpe has quit [Ping timeout: 248 seconds]
Snark has joined #ocaml
Simn has joined #ocaml
zpe has joined #ocaml
ygrek has quit [Ping timeout: 245 seconds]
<adrien> technomancy: ocamlclean is a tool that isn't available upstream and which prevents some functionalities; I'm not sure which one of its features could be made upstream
zpe has quit [Ping timeout: 264 seconds]
csakatok_ has joined #ocaml
csakatoku has quit [Ping timeout: 256 seconds]
djcoin has joined #ocaml
zpe has joined #ocaml
thomasga has joined #ocaml
zpe has quit [Ping timeout: 256 seconds]
<flux> heh, Mike Lin chose a fun syntax for his assertion library: x $hould # be # at # most 124
<flux> quite rubyish that ;)
<whitequa1k> this is absolutely horrible.
<kerneis> technomancy whitequa1k clojure's "alter" does much more than just incrementing
<flux> "One can also say $houldn't"
lewis1711 has quit [Ping timeout: 256 seconds]
<kerneis> it also takes care of atomic transactions
<flux> also: calling f x $hould # raise # exn # prefixed "MyException"
<kerneis> I also hate the $hould syntax, but must reckon it's creative
<flux> it i$ creative, yes
<flux> (I somehow doubt I'll be using the library, though)
<flux> this is #ocaml, grumpy men not easily excited by fun syntax ;-)
<adrien> too early in the morning and in the week
<adrien> ask again on friday evening and everyone will love it :P
thomasga has quit [Quit: Leaving.]
<ggole> That's clever/horrifying.
ygrek has joined #ocaml
zpe has joined #ocaml
zRecursive has left #ocaml []
mika1 has joined #ocaml
cago has joined #ocaml
ttamttam has joined #ocaml
zpe has quit [Ping timeout: 256 seconds]
thomasga has joined #ocaml
introom has quit [Remote host closed the connection]
AltGr has joined #ocaml
ontologiae has joined #ocaml
zpe has joined #ocaml
introom has joined #ocaml
ontologiae_ has joined #ocaml
ontologiae has quit [Read error: Connection reset by peer]
ttamttam1 has joined #ocaml
ttamttam2 has joined #ocaml
zpe has quit [Ping timeout: 264 seconds]
ttamttam has quit [Ping timeout: 245 seconds]
ttamttam1 has quit [Ping timeout: 240 seconds]
zpe has joined #ocaml
wormphlegm has quit [Ping timeout: 245 seconds]
zpe has quit [Ping timeout: 256 seconds]
wormphlegm has joined #ocaml
zpe has joined #ocaml
ggole_ has joined #ocaml
ggole has quit [Ping timeout: 245 seconds]
Anarchos has joined #ocaml
<Anarchos> GLR parsers are able to cope with ambiguous grammar, but are there lexers able to cope with ambigous lexemes ?
zpe has quit [Ping timeout: 268 seconds]
<adrien_oww> really been some time I've done parsing but aren't you just going to have greedy lexing?
<Anarchos> adrien_oww as you know i want to be able to parse math formulas in which the multiplication is implicit...
<ski> ooc, like `xy' or just like `x y' ?
<Anarchos> ski like xy if x and y are known as valid objects or xy if xy is a valid object
<kerneis> Anarchos: dypgen can do the lexing for you, but I don't know if in that case the lexer and parser are tightly integrated (allowing ambiguous lexemes) or not
<ggole_> Return an unambiguous lexeme and pick it apart later?
ggole_ is now known as ggole
<Anarchos> kerneis i read the dypgen doc and it doesn't seem to be able to generate ambiguous lexing
q66 has joined #ocaml
ollehar has joined #ocaml
void64 has joined #ocaml
zpe has joined #ocaml
justdit has quit [Quit: Lost terminal]
zpe has quit [Ping timeout: 240 seconds]
beginner42 has joined #ocaml
<Anarchos> What i want is providing a GUI to let the user define his own notations for maths formulas (but in respect of latex syntax)
mcclurmc has joined #ocaml
introom has quit [Remote host closed the connection]
zpe has joined #ocaml
zpe has quit [Remote host closed the connection]
zpe has joined #ocaml
<beginner42> mrvn: you mentioned some time ago that i should use bigarray for the zeromq send and receive functions, could you elaborate on that a little bit more?
void64 has quit [Ping timeout: 240 seconds]
void64 has joined #ocaml
<kerneis> gasche: can you think of a reason why the results of a cmxa -> cmxs would not be cached?
<kerneis> (the cmxa is built from a dynamic mllib, but the mllib and the cmxa itself are cached, so I don't understand)
<avsm> kerneis: is there a .so built as well?
<kerneis> no
<kerneis> I suspected that might be the issue
<kerneis> (because the generic rule depends on .so)
Drup has joined #ocaml
ttamttam2 has quit [Quit: ttamttam2]
void64 has quit [Ping timeout: 245 seconds]
<kerneis> avsm: if you have a work-around, that would be great
<avsm> nope, sorry. it just occurred to me that it's probably the reason: in a dual rule, some other target isn't being built. tracing through the various rules in ocamlbuild/ocaml_specific.ml is the only way i debug this stuff
void64 has joined #ocaml
<kerneis> that's my way to do it as well
<kerneis> ok, in that case I guess my future "fix all this mllib mess" patch should address it too
<Anarchos> Can somebody translate a PS file to PDF ?
<kerneis> Anarchos: pstopdf?
<Anarchos> kerneis my pstopdf is broken
introom has joined #ocaml
chris2 has joined #ocaml
n06rin has joined #ocaml
<beginner42> dsheets_: i have added some more functions to the git repository
talzeus has quit [Remote host closed the connection]
_andre has joined #ocaml
csakatok_ has quit [Remote host closed the connection]
Drup has quit [Read error: Operation timed out]
luke_ has joined #ocaml
void64 has quit [Ping timeout: 248 seconds]
transfinite is now known as ecc
<thomasga> hnrgrgr: why are you spamming Github PR ?
ben_zen has joined #ocaml
csakatoku has joined #ocaml
csakatoku has quit [Ping timeout: 256 seconds]
Anarchos has quit [Quit: Vision[0.9.7-H-130604]: i've been blurred!]
Drup has joined #ocaml
<n06rin> # let rec sum n m f =
<n06rin> if n = m then 0
<n06rin> else f (n+1) + sum (n+1) n f;;
<n06rin> val sum : int -> int -> (int -> int) -> int = <fun>
<n06rin> # sum 0 2 (fun x -> 2+x);;
<n06rin> Stack overflow during evaluation (looping recursion?).
<n06rin> what's wrong?
<Kakadu> sum (n+1) n f;;
<Kakadu> maybe sum (n+1) m f;;
<Kakadu> ?
<ggole> That's why you use nice names like low and high
<n06rin> yeah, thanks kakadu
<ggole> Better to use n >= m, too
<n06rin> i were make this)
ygrek has quit [Ping timeout: 245 seconds]
<ski> why exclusive lower bound ?
csakatoku has joined #ocaml
wwilly has joined #ocaml
ttamttam has joined #ocaml
<wwilly> bonjour
talzeus has joined #ocaml
talzeus_ has joined #ocaml
talzeus has quit [Ping timeout: 240 seconds]
yacks has joined #ocaml
csakatoku has quit [Remote host closed the connection]
wwilly has quit [Ping timeout: 245 seconds]
wwilly has joined #ocaml
ben_zen has quit [Quit: leaving]
saml has joined #ocaml
bondar has joined #ocaml
bondar has quit [Client Quit]
ccasin has quit [Ping timeout: 245 seconds]
bondar has joined #ocaml
cago has left #ocaml []
mika1 has quit [Quit: Leaving.]
luke_ has quit [Remote host closed the connection]
shinnya has joined #ocaml
void64 has joined #ocaml
introom has quit [Remote host closed the connection]
walter has quit [Quit: This computer has gone to sleep]
introom has joined #ocaml
demonimin has quit [Ping timeout: 246 seconds]
Kakadu has quit [Quit: Konversation terminated!]
darkf has quit [Quit: Leaving]
_andre has quit [Quit: leaving]
_andre has joined #ocaml
thomasga has quit [Quit: Leaving.]
introom has quit [Remote host closed the connection]
bondar has quit []
introom has joined #ocaml
n06rin has quit [Quit: Leaving.]
AltGr has quit [Quit: Konversation terminated!]
ttamttam has quit [Quit: ttamttam]
Neros has joined #ocaml
ontologiae_ has quit [Ping timeout: 248 seconds]
Anarchos has joined #ocaml
<Anarchos> if i type Unix.getpid in my toplevel, i get an error about an undefined reference to 'Unix' .... what is the option to pass to ocaml to have Unix available ?
<Anarchos> oh just #load "unix.cma", i could have found it before....
demonimin has joined #ocaml
demonimin has quit [Changing host]
demonimin has joined #ocaml
<adrien_oww> #use "topfind";;
<adrien_oww> #require "unix";;
<adrien_oww> :)
<Anarchos> #use "topfind";; ==> Cannot find file topfind.
<Anarchos> adrien_oww you joker :)
introom has quit [Remote host closed the connection]
<companion_cube> did you install ocamlfind?
<Anarchos> companion_cube why should i install ocamlfind ??
<companion_cube> to be able to "use topfind"
<Anarchos> the #load worked perfectly anyway
<companion_cube> and because it is good
<Anarchos> companion_cube i want my software to rely only on the compiler , to be the most portable
<adrien_oww> Anarchos: you should install ocamlfind for two reasons
<Anarchos> i can ask people to install an ocaml compiler, but i know that interested people in installing things is exponentially decreasing with the number of packages to be installed at once
<adrien_oww> 1- it's the standard way to install and use libraries
<adrien_oww> 2- gasche, I and others will hunt you down if you don't
<adrien_oww> we've already done so with companion_cube :D
<Anarchos> adrien_oww i won't enter your sect :)
<adrien_oww> seriously, it makes lib management much easier
<adrien_oww> not having it is like not using pkg-config for C
<companion_cube> adrien_oww: I did, it was just that code I wrote 15 min ago was not already ocamlfind-compliant
* Anarchos doesn't know nothing about this pkg-config...
<adrien_oww> it makes discovering libraries easy
Anarchos is now known as haiku_ocaml_guy
<haiku_ocaml_guy> maybe with this new nick less political and more technical, people will understand :)
<adrien_oww> even if you're trying to keep things "light", the amount of work you'll have to put by not using ocamlfind or pkg-config will force you to add a lot of code which will counter this "lightness"
<adrien_oww> no, no understanding: just use ocamlfind because otherwise it's a huge pita for everyone
<adrien_oww> pita -> pain in the ass, not the food =)
<adrien_oww> -> home
<Drup> haiku_ocaml_guy: not using ocamlfind just make your lib horrible to use easily
<technomancy> question: I'm using this bencode library (https://github.com/technomancy/grenchman/blob/master/bencode.ml) and finding myself wondering why everything needs to be wrapped in Bencode-specific types before it can be marshaled.
<technomancy> it ends up being very cumbersome compared to the rest of my interactions with the type system so far, and I can't tell if it's a quirk of this lib vs being an inherent problem between the type system and serialization.
zpe has quit [Remote host closed the connection]
<technomancy> frinstance, when I get an alist back, there's a lot of syntactic noise involved in using it: https://github.com/technomancy/grenchman/blob/master/repl.ml#L52
<technomancy> (or maybe there's a simple way to consume the wrapped data structure that I'm missing)
<haiku_ocaml_guy> adrien_oww on haiku, libs must be in standard directory :)
<companion_cube> technomancy: well, how would you get rid of the wrapping?
<companion_cube> B-encoding needs some specific structure
<technomancy> what I don't understand is why a Bencode.t can't contain a regular string. isn't that a specific enough type?
thomasga has joined #ocaml
<technomancy> (context: I have been using OCaml for like five days now)
<technomancy> but I can write functions to wrap regular types easily enough: https://github.com/technomancy/grenchman/blob/master/nrepl.ml#L11
<technomancy> why can't the boilerplate be handled for me?
<ggole> What's the objection? Typing Bencode.String a bunch of times?
<companion_cube> OCaml doesn't provide implicit type conversion
<ggole> You could rewrite the match to avoid that
<ggole> Or you could write a little function to map a Bencode.t to a string option, and match on that.
zpe has joined #ocaml
<technomancy> why can't Bencode.t contain strings directly though?
<ggole> I dunno. What the heck does this library actually do?
<technomancy> "contain" isn't the right word
<technomancy> ggole: just serialization
<ggole> Hmm
zpe has quit [Remote host closed the connection]
<ggole> The structure looks a little bit like JSON
<companion_cube> technomancy: because there are other alternatives
<companion_cube> you need to make a distinction between the case "string" and the case "int", or "list"...
<technomancy> companion_cube: right, but why can't it just be an OR of all the unwrapped types?
<companion_cube> ggole: B-encode is a nice serialization format
<companion_cube> technomancy: because you need to be able to know which case of the OR you're in
<companion_cube> during pattern matching
<companion_cube> type a = string | int just isn't possible
tobiasBora has joined #ocaml
<technomancy> companion_cube: I guess I'll just have to take your word for it.
<ggole> OCaml doesn't have any type information at runtime
<technomancy> of course
<ggole> None whatsoever. So you can't expect things to be tagged that way.
<companion_cube> technomancy: just think about what a pattern matching against such a type would look like
<ggole> That means you have to handle the tags yourself
<companion_cube> well, you can also have several cases parametrized by the same type
<companion_cube> type my_int = Odd of int | Even of int
<technomancy> hm; I guess if you could have types that didn't introduce a wrapper type it would be really difficult to infer which one a given pattern match was supposed to refer to
<haiku_ocaml_guy> ah ah typo in source code : debugger/program_loading.ml : 'this fould fail' ---> epic fail :)
<technomancy> because there would be tons of overlap
<technomancy> that makes sense
<technomancy> performing the wrap/unwrap in the Bencode module is probably the way to go then
mcclurmc has quit [Quit: Leaving.]
<adrien> haiku_ocaml_guy: doesn't matter that libs must be in a standard directory on haiku since they can be elsewhere on other systems =)
<adrien> and you can skip installing libs system-wide
Drup has quit [Ping timeout: 264 seconds]
hcarty_ is now known as harty
harty is now known as hcarty
<haiku_ocaml_guy> adrien sure
<haiku_ocaml_guy> hmmm ocamldebug has trouble to get the unix socket name
<haiku_ocaml_guy> get_socketaddr makes a buffer overflow with a file name :/
<haiku_ocaml_guy> i don't understand why the length of the file name is recomputed after the memmove .
Drup has joined #ocaml
<haiku_ocaml_guy> In the following code i would concat a "- 1" :
<haiku_ocaml_guy> *adr_len = ((char *)&(adr->s_unix.sun_path) - (char *)&(adr->s_unix)) + len;
* haiku_ocaml_guy is idle: gone eating
introom has joined #ocaml
<pippijn> has anyone here used menhir parameterised parsers before?
<pippijn> mine produces broken mli files: https://paste.xinu.at/yzNSZM/
mcclurmc has joined #ocaml
<saml> is ocaml good?
introom has quit [Ping timeout: 260 seconds]
<adrien> yeah: tastes pretty good
zpe has joined #ocaml
<pippijn> wonderful with a glass of milk
<haiku_ocaml_guy> so nobody has a clue about get_sockaddr ?
<pippijn> ok, never mind about the brokenness, it was my own fault
zpe has quit [Ping timeout: 246 seconds]
rixed_ has joined #ocaml
rixed_ has quit [Client Quit]
skchrko has joined #ocaml
yacks has quit [Quit: Leaving]
zpe has joined #ocaml
ollehar has quit [Ping timeout: 264 seconds]
zpe_ has joined #ocaml
zpe has quit [Read error: Connection reset by peer]
milosn has quit [Ping timeout: 246 seconds]
milosn has joined #ocaml
zpe_ has quit [Ping timeout: 245 seconds]
Arsenik has joined #ocaml
mcclurmc has quit [Quit: Leaving.]
void64 has quit [Ping timeout: 245 seconds]
contempt has quit [Ping timeout: 240 seconds]
Snark has quit [Quit: leaving]
<beginner42> i need the size_t datatype from ctypes, i installed ctypes with opam. ocamlfind list only shows me ctypes and ctypes.foreign?
luke_ has joined #ocaml
cdidd has quit [Ping timeout: 248 seconds]
cdidd has joined #ocaml
ggole has quit []
contempt has joined #ocaml
skchrko has quit [Quit: Leaving]
<wmeyer> pippijn: hey adrien: hey
<wmeyer> companion_cube: hey
<haiku_ocaml_guy> nobody has trouble using ocamldebug with a local socket like ocamldebug -s /tmp/camldebug program_foo ?
<wmeyer> haiku_ocaml_guy: you may want to ask who uses ocamldebug first
<wmeyer> not many people actually
<wmeyer> but, Jacque Garrigue uses it happily to debug the type checker, so I suppose it's working for him
<adrien> hi wmeyer
<wmeyer> I saw a new patch, thanks
<beginner42> does anyone here use ctypes?
<wmeyer> ctypes are good
<wmeyer> that's what I can tell
<beginner42> wmeyer: did you write code using ctypes?
thomasga has quit [Ping timeout: 245 seconds]
callen has joined #ocaml
<wmeyer> beginner42: no, but I have to say it should be easy in most cases
void64 has joined #ocaml
luke_ has quit [Ping timeout: 240 seconds]
<beginner42> wmeyer: compared to writing stubs by hand its extremely simple. So far i couldnt test my binding, somehow my ubuntu doesnt find the dynamic libraries...
<haiku_ocaml_guy> wmeyer ok thanks. on antoher channel, they find error in the unix bind() implementaion of the OS i use :)
_andre has quit [Quit: leaving]
void64 has quit [Ping timeout: 245 seconds]
wwilly has quit [Quit: Leaving]
tauntaun has joined #ocaml
void64 has joined #ocaml
Arsenik has quit [Remote host closed the connection]
thomasga has joined #ocaml
tobiasBora has quit [Read error: Connection reset by peer]
void64 has quit [Ping timeout: 276 seconds]
tobiasBora has joined #ocaml
yacks has joined #ocaml
void64 has joined #ocaml
thomasga has quit [Quit: Leaving.]
djcoin has quit [Quit: WeeChat 0.4.0]
<haiku_ocaml_guy> Is it possible to use as first class objects, list of modules ?
beginner42 has quit [Quit: Leaving]
<wmeyer> haiku_ocaml_guy: of course. First class modules as the name says, are first class, so when they are packaged they can be used anywehere where values can appear.
<haiku_ocaml_guy> wmeyer so i can do let a = [M;N] where M and N are modules ?
<wmeyer> yes
<wmeyer> but you have to package them first
<haiku_ocaml_guy> wmeyer how do i do that in the toplevel ?
<wmeyer> let a = [val M : Some_module_type; val N : Some_module_type];;
Simn has quit [Quit: Leaving]
watermind has joined #ocaml
<haiku_ocaml_guy> let a = [val M : module type of M];; --> error
<wmeyer> well you have to supply the signature as a separat entitu
<wmeyer> and you'd better show me the error
<wmeyer> saying 'error' is not very helpful
<haiku_ocaml_guy> wmeyer : let a = [val M : S];; Error: Syntax error
<wmeyer> on which OCaml are you?
<haiku_ocaml_guy> The OCaml toplevel, version 4.02.0+dev0-2013-06-13
<wmeyer> sorry
<wmeyer> other way round
<wmeyer> let a = [module M : S];;
<wmeyer> and val to unpack
<wmeyer> anyway, I am going to bed, happy hacking haiku_ocaml_guy!
<haiku_ocaml_guy> wmeyer i have to add ()
<haiku_ocaml_guy> around
<haiku_ocaml_guy> they are mandatory, but it worked
<haiku_ocaml_guy> hmmm ocamlbuild is unable to create a .mli file from a .ml file by ocamlc -i ??
<wmeyer> ocamlbuild foo.inferred.mli
<haiku_ocaml_guy> wmeyer yes but if i just put ocamlbuild foo.mli it doesn't work
<wmeyer> it will not, because it will mean that the file is dropped in _build directory, and because ocamlbuild creates them anyway during the build process (when they are not supplied by the user), they need to have different name
<haiku_ocaml_guy> wmeyer ok so people create the _build/foo.inferred.mli and just copy it at the source folder . Make sense :)
gereedy has quit [Quit: ZNC - http://znc.sourceforge.net]
<wmeyer> exactly
<haiku_ocaml_guy> wmeyer and do you thnik that module as first class will stay in the future ?
gereedy has joined #ocaml
saml has quit [Quit: Leaving]
<haiku_ocaml_guy> hmm what can i do with a list of module ??
<haiku_ocaml_guy> i have l:= [(module M);(module N)];;
<haiku_ocaml_guy> how to iter on such a list ?
mathieui has quit [Ping timeout: 248 seconds]
<mfp> haiku_ocaml_guy: List.iter (fun x -> let module M = (val x : SOME_MODULE_TYPE) in ... M.whatever) l
* mfp -> zzZ
<haiku_ocaml_guy> thanks mfp
<haiku_ocaml_guy> it gives birth to strange error :
<haiku_ocaml_guy> module type S = sig type t val a : t end let f l = List.iter (fun x -> let module M = (val x : S) in M.a) l;;
<haiku_ocaml_guy> Error: This expression has type M.t but an expression was expected of type M.t
<haiku_ocaml_guy> if you replace iter by map
mathieui has joined #ocaml
haiku_ocaml_guy has quit [Quit: Vision[0.9.7-H-130604]: i've been blurred!]
cdidd has quit [Ping timeout: 245 seconds]
cdidd has joined #ocaml
Neros has quit [Ping timeout: 264 seconds]
introom has joined #ocaml
testcocoon has quit [Ping timeout: 245 seconds]
testcocoon has joined #ocaml
introom has quit [Remote host closed the connection]
watermind has quit [Quit: Konversation terminated!]