jlongster has quit [Quit: My MacBook has gone to sleep. ZZZzzz…]
jlongster has joined #ocaml
jlongster has quit [Client Quit]
jlongster has joined #ocaml
jlongster has quit [Client Quit]
jlongster has joined #ocaml
jlongster has quit [Quit: My MacBook has gone to sleep. ZZZzzz…]
unbalanced has quit [Read error: Connection reset by peer]
Simn has quit [Quit: Leaving]
silver has quit [Read error: Connection reset by peer]
tennix has joined #ocaml
jlongster has joined #ocaml
ia0 has quit [Quit: reboot]
ia0 has joined #ocaml
cdidd has quit [Remote host closed the connection]
wtetzner has joined #ocaml
ztennix has joined #ocaml
tennix has quit [Ping timeout: 240 seconds]
wtetzner has quit [Ping timeout: 258 seconds]
cdidd has joined #ocaml
djin has joined #ocaml
octarin has quit [Quit: leaving]
jbrown has quit [Ping timeout: 240 seconds]
djin has quit [Quit: Leaving.]
jbrown has joined #ocaml
jlongster has quit [Quit: My MacBook has gone to sleep. ZZZzzz…]
tmtwd has joined #ocaml
copy` has quit [Quit: Connection closed for inactivity]
<cpdean>
anyone have recommended vim plugins for ocamllex and menhir? merlin is freaking out over everything
rpip has joined #ocaml
snhmib has quit [Ping timeout: 240 seconds]
tmtwd has quit [Ping timeout: 240 seconds]
<Algebr>
I don't think they exist
michbad has quit [Ping timeout: 248 seconds]
mfp has quit [Ping timeout: 246 seconds]
<cpdean>
bummer
<Algebr>
well you don't usually spend that much time on it....
nomicflux has quit [Quit: nomicflux]
jbrown has quit [Ping timeout: 240 seconds]
cpdean has quit [Quit: Leaving.]
cpdean has joined #ocaml
<cpdean>
Algebr: oh, all right
cpdean has quit [Client Quit]
cpdean has joined #ocaml
<cpdean>
Algebr: thanks!
cpdean has quit [Client Quit]
jbrown has joined #ocaml
isd has quit [Remote host closed the connection]
LACampbell has quit [Ping timeout: 240 seconds]
LACampbell has joined #ocaml
shinnya has joined #ocaml
maicki has joined #ocaml
maicki has quit [Client Quit]
wtetzner has joined #ocaml
jlongster has joined #ocaml
pierpa has quit [Ping timeout: 248 seconds]
jao has quit [Ping timeout: 240 seconds]
snhmib has joined #ocaml
isd has joined #ocaml
isd has quit [Ping timeout: 240 seconds]
jbrown has quit [Ping timeout: 240 seconds]
isd has joined #ocaml
snhmib has quit [Read error: Connection reset by peer]
jbrown has joined #ocaml
jlongster has quit [Quit: My MacBook has gone to sleep. ZZZzzz…]
ztennix has quit [Quit: WeeChat 1.6]
tennix has joined #ocaml
shinnya has quit [Ping timeout: 248 seconds]
snhmib has joined #ocaml
michbad has joined #ocaml
wtetzner has quit [Remote host closed the connection]
snhmib has quit [Read error: Connection reset by peer]
michbad has quit [Ping timeout: 240 seconds]
jbrown has quit [Ping timeout: 240 seconds]
jbrown has joined #ocaml
tennix has quit [Ping timeout: 240 seconds]
tennix has joined #ocaml
snhmib has joined #ocaml
govg has quit [Quit: leaving]
andyc has quit [Ping timeout: 258 seconds]
Algebr has quit [Ping timeout: 255 seconds]
madroach has quit [Quit: leaving]
andyc has joined #ocaml
andyc has quit [Read error: Connection reset by peer]
andyc has joined #ocaml
andyc has quit [Read error: Connection reset by peer]
andyc has joined #ocaml
slash^ has joined #ocaml
tane has joined #ocaml
jbrown has quit [Ping timeout: 240 seconds]
jbrown has joined #ocaml
snhmib has quit [Read error: Connection reset by peer]
andyc has quit [Read error: Connection reset by peer]
andyc has joined #ocaml
andyc has quit [Read error: Connection reset by peer]
andyc has joined #ocaml
Simn has joined #ocaml
AlexDenisov has joined #ocaml
andyc has quit [Read error: Connection reset by peer]
andyc has joined #ocaml
snhmib has joined #ocaml
andyc has quit [Read error: Connection reset by peer]
andyc has joined #ocaml
snhmib has quit [Ping timeout: 258 seconds]
jbrown has quit [Ping timeout: 240 seconds]
jbrown has joined #ocaml
snhmib has joined #ocaml
snhmib has quit [Ping timeout: 255 seconds]
andyc has quit [Read error: Connection reset by peer]
freusque has quit [Ping timeout: 240 seconds]
andyc has joined #ocaml
<flux>
I guess I must be more worried about the memory, at night it climbed to 1.3 GB and killed the monitoring sysstat :)
snhmib has joined #ocaml
freusque has joined #ocaml
<flux>
(actually no, the process died by itself, systemd restarted it, and pidstat gave up as the pid changed)
rcabaco has joined #ocaml
luzie is now known as lucybun
silver has joined #ocaml
snhmib has quit [Ping timeout: 258 seconds]
shinnya has joined #ocaml
tane has quit [Read error: Connection reset by peer]
tane has joined #ocaml
andyc has quit [Read error: Connection reset by peer]
<orbitz>
flux: is this for work?
andyc has joined #ocaml
<flux>
not really, though I use it at the work :)
<flux>
it's a system that detects, by audio, when the playstation 3 is started..
<orbitz>
ha
<orbitz>
flux: sounds like your ps3 is busy at night ;)
<orbitz>
Must be aliens.
<flux>
not quit, it takes the same amount of work to detect if it's not started :)
<flux>
+e
<flux>
but I think the problem might be that the process starved and something(TM) queued audio samples quite a lot
<flux>
at least the crash coincides some kernel worries about mmcblk not working correctly
<orbitz>
flux: Are you trying to make sure your kids aren't sneaking into the game room at night? :)
<flux>
close! except it's adults, and during the day ;)
<orbitz>
haha
mfp has joined #ocaml
<flux>
though I suppose it would be applicable to that as well. too easy to disable, though.
<orbitz>
Ok, are you trying to make sure your parents aren't using your ps3 while you're away?! :)
<flux>
it's at the office! but there's usually one game of Worms 2 during the break.
<flux>
nowadays we coordinate the games at slack quite nicely, so perhaps this project has lived past its due.. but when I started it at 2015 this wasn't always the case :)
ziyourenxiang has joined #ocaml
<flux>
I've been thinking it might even be useful in other ways, such as by detecting the door bell (and passing that to slack)
<flux>
and fire alarm.. and perhaps just general level of noise.
<orbitz>
It seems like you can do a lot of neat stuff with sound detection
jbrown has quit [Ping timeout: 240 seconds]
andyc has quit [Read error: Connection reset by peer]
andyc has joined #ocaml
snhmib has joined #ocaml
jnavila has joined #ocaml
jbrown has joined #ocaml
silver has quit [Read error: Connection reset by peer]
silver has joined #ocaml
<Simn>
Is anyone familiar with https://github.com/mmottl/pcre-ocaml? I'm porting some C code which makes use of pcre_exec's len argument, but that doesn't seem to be exposed in these bindings.
<orbitz>
I am not familiar
<flux>
I've used pcre-ocaml, in fact it's my to-go re library, but I haven't used the C inteface so I don't know what I'm missing ;)
<flux>
what is the len argument?
<Simn>
It's the length of the subject string, which is used in the code I'm porting to get a substring.
<Leonidas>
aantron: I agree with flux, the recent changes are shaping up nicely. Thanks.
jnavila has quit [Ping timeout: 240 seconds]
jbrown has joined #ocaml
shinnya has quit [Ping timeout: 258 seconds]
AlexDenisov has joined #ocaml
wtetzner has joined #ocaml
<twold>
Hello! I'm just starting with ocaml and am already quite lost by regarding the standard libs. I've played with Core and Batteries (and what's the deal with the alpha3 version there?) and read several comparisons but if anything I'm only more confused. What I'm looking for is an advice such as "Just stick with the Batteries and all will be good in the end."
<twold>
Is it possible to give an advice like this?
<adrien>
hey
<adrien>
Core and Batteries are not _the_ standard library of ocaml but replacements for it
<adrien>
btw, Containers is an addition to it instead
<adrien>
all work well
<adrien>
so it's mostly a matter of the one you prefer and possibly of external constraints
<twold>
Fair enough. Say you'd have no external constraints, you're just learning ocaml for fun. Which one would you pick?
<twold>
I just want to stick with one choice and focus on learning important stuff, like modules, and don't want to care much about which important data structure or function is missing every other day.
<adrien>
the standard library has a few API misdesigns
<cheater>
then ocaml is not the language for you
<cheater>
it does not have a lot of... nice things
<Drup>
twold: batteries documentation is really nice
<adrien>
and Core is much more coherent in this regard and takes advantage of some features that have been added in ocaml at later stages
<twold>
@cheater: let me be the judge of that
<flux>
I think I used to go first with ExtLib (batteries' ancestor), then to batteries, but nowadays I'm finding myself using Containers.. and a little bit of Batteries :).
<flux>
on the other hand Core is completely different. but if you're starting from clean slate, perhaps it's ok?
<Drup>
flux: there are no reason tu use extlib when containers and batteries exists
<flux>
(well "completely" is perhaps a bit an overstatement)
<flux>
drup, correct
<twold>
well, I bought RWO, so I suppose I'll have to learn Core anyway. OTOH, I much prefer the community-base of batteries and containers
<twold>
perhaps I'll have to learn all of them anyway? :)
<flux>
I somehow doubt ExtLib is even being maintained anymore? at least not in the way other libraries are.
<Drup>
no, you won't
<Drup>
flux: not really, no
<adrien>
iirc ygrek was still doing some work on it but I haven't paid a lot of attention there
<Drup>
(personally, I use containers exclusively)
<flux>
and these days even the actual standard library is getting updated :-)
<twold>
anyway, thanks for your input everyone, I'll try to evaluate all of them a bit more and see what works for me
<flux>
maybe I should just try how much of Batteries I use in that most recent project - likely I can just drop the dependency quite easily
<Drup>
twold: containers is probably the easiest to use, being the less invasive and smallest one
<twold>
drup: thanks, I'll start with that then
<Drup>
batteries is bigger and some design decisions are questionable, but it's very well documented
<adrien>
containers relies on a few idioms though
<adrien>
but I'd say they're interesting to pick up in any case
<Drup>
Yeah, the idioms in questions are good ocaml idioms anyway
<Leonidas>
twold: i would skip batteries
<Leonidas>
i liked containers much more and it is better maintained :-)
<Leonidas>
battery maintenance is basically fixes to make it build on newer ocamls
<Leonidas>
(which is still great that gasche does it)
<Leonidas>
Core is also nice but very different
polyguy has joined #ocaml
<Leonidas>
if starting out with RWO I'd still recommend it
<flux>
it seems though most of these are single-man shows, though, except perhaps for Core?-o
<Leonidas>
yes, pretty much
<Leonidas>
there used to be more batteries developers but not anymore
<Leonidas>
that said, these libs are only so large
<Leonidas>
so once you implement it, its basically done
<Leonidas>
ezcept for Core ^^
<twold>
:)
<twold>
thanks
abeaumont has joined #ocaml
Xadnem has joined #ocaml
mfp has quit [Ping timeout: 248 seconds]
<mengu>
core is awesome
_whitelogger has joined #ocaml
nomicflux has joined #ocaml
nomicflux has quit [Client Quit]
mfp has joined #ocaml
ia0 has quit [Quit: reboot]
nomicflux has joined #ocaml
<Xadnem>
Hello friends, have someone built the lablqt repo in github ?
mengu has quit [Remote host closed the connection]
ia0 has joined #ocaml
Xadnem is now known as highlight
<highlight>
nick Xadnem
jbrown has quit [Ping timeout: 240 seconds]
ryanartecona has quit [Quit: ryanartecona]
nomicflux has quit [Quit: nomicflux]
jbrown has joined #ocaml
nomicflux has joined #ocaml
mengu has joined #ocaml
mengu has quit [Remote host closed the connection]
mengu has joined #ocaml
mengu has quit [Remote host closed the connection]
<highlight>
exit
highlight has quit [Quit: leaving]
Xadnem has joined #ocaml
tennix has quit [Ping timeout: 248 seconds]
mengu has joined #ocaml
<Xadnem>
Hello friends, have somebody built the lablqt repo in github?
nomicflux has quit [Quit: nomicflux]
Sakarah has joined #ocaml
mengu has quit [Read error: Connection reset by peer]
mengu has joined #ocaml
sillyotter has joined #ocaml
sillyotter has quit [Client Quit]
mengu has quit [Remote host closed the connection]
jnavila has joined #ocaml
mengu has joined #ocaml
infinity0 has quit [Remote host closed the connection]
infinity0 has joined #ocaml
wtetzner has quit [Remote host closed the connection]
infinity0 has quit [Remote host closed the connection]
Algebr has joined #ocaml
infinity0 has joined #ocaml
jnavila has quit [Ping timeout: 240 seconds]
jao has joined #ocaml
MK__ has joined #ocaml
<MK__>
What is the name of Opam package for lwt_io?
jnavila has joined #ocaml
<cheater>
lwt ?
<Sakarah>
Is there a way to formulate the type of all the polymorphic functions looking like a defined pattern (like a type of all the 'a -> 'a functions)
MK__ has quit [Remote host closed the connection]
<Sakarah>
Note that type 'a t : 'a -> 'a is not satisfying because the final type is 'a t and not just t
<Algebr>
type 'a f = 'a -> 'a ?
<Algebr>
ah
<Algebr>
but t here is the function
<Drup>
Sakarah: `type t = { f : 'a . 'a -> 'a }`
<Drup>
You need a record to be able to add a forall 'a, which is expressed in ocaml with 'a . <ty>
<Sakarah>
Drup: then t.f is the thing I search ?
<Drup>
You can't put the forall directly, only inside records/objects
<Drup>
for x of type t, x.f is the function, yes
<Sakarah>
Ok I think I understand
<Algebr>
Sakarah: Can you share what the context is that this is coming up for?
<Sakarah>
You cannot express it directly so you add a record layer that let you type 'a . 'a -> 'a
<Sakarah>
It is because I have a functor that need to get a type as argument
jnavila has quit [Ping timeout: 240 seconds]
<Drup>
Sakarah: that shouldn't be an issue, though, can you share the complete use case ?
<Drup>
Algebr: typical usage of forall annotations, let's consider this function:
<Drup>
val extract : ('a -> 'b) -> 'a -> 'a -> 'b * 'b = <fun>
<Drup>
let extract f l1 l2 = f l1, f l2 ;;
aantron has left #ocaml ["Leaving..."]
<Drup>
You should be able to have l1 and l2 have different types, and expect a "more polymorphic" function, such as ('a . 'a list -> 'a) -> 'a list -> 'b list -> 'a * 'b
<Drup>
but OCaml's type inference will not give you that, you need a forall annotation
<Algebr>
why does it get away with it with a record
aantron has joined #ocaml
<Drup>
That's an OCaml limitation, you can only put forall in records/objects
<Drup>
I don't remember the exact technical reasons
AlexDeni_ has joined #ocaml
<aantron>
flux: Leonidas: thanks, and good :)
<aantron>
MK__: and the ocamlfind package is i believe lwt.unix
rcabaco has quit [Quit: Lost terminal]
AlexDenisov has quit [Read error: Connection reset by peer]
<Sakarah>
With my workaround that already added a level of abstraction using a module
<Drup>
I see, yes, that's a good use case, replace ParentChooserFunction by a type with a forall
<aantron>
Leonidas: nice link. the new lwt terminology matches E on promise and resolver. in the manual, i was using "resolved" "failed" and "pending" for the new states
<aantron>
i'll give it some more thought though, and opinions welcome. im likely to give a second look to what terms are used in js as well
jbrown has quit [Ping timeout: 240 seconds]
jbrown has joined #ocaml
<Algebr>
aantron: I was wondering, is there anything special needed to be done to say launch a the equivalent of like Lwt.detach but instead of using the thread as owned by OCaml, just doing separate thread on a C stub function, to get real paralleism
<Algebr>
Looking to get easy parallelism, maybe I can just give a C++11 thread the work to do
xorpse has joined #ocaml
jnavila has joined #ocaml
<aantron>
Algebr: not particularly. the unix binding does some variation of that. when you call the functions, they launch regular (C) threads to do the work (if necessary), without creating an OCaml thread. actually, they use a thread pool and a work queue, its just more elaborate
<aantron>
(probably not what you want, but) if you want to use the existing thread pool machinery, you can declare an 'a Unix.job-returning function as an external
<Algebr>
this will still be only one thread running at a time
<aantron>
this = the job machinery? no, it's parallel
slash^ has quit [Read error: Connection reset by peer]
<aantron>
only one ocaml thread will be running at a time, but the C job is executed in parallel
<aantron>
except for the code needed to set it up
<Algebr>
but can the C job call OCaml code?
<Drup>
No
<aantron>
no
<aantron>
for that you would use Lwt_preemptive.detach to get a proper ocaml-friendly system thread
<Drup>
and the C job should not touch ocaml values
<flux>
well, it can after acquiring the lock?
mengu has quit [Remote host closed the connection]
<aantron>
and then you can drop into C from it and reacquire locks if you need to go back into ocaml
<Algebr>
right but I don't want to use detach because detach is still locking
<aantron>
how so?
<aantron>
if you detach a thread and drop into C and dro pthe lock, it's parallel
<aantron>
afaik
<Algebr>
yea but I don't want to drop into C per say, I wanted a Lwt task running on each core
<Algebr>
at the same time
<flux>
so to recap: the only way to get ocaml parallellism is to use separate processes
<aantron>
Algebr: what is a task here?
<flux>
alternative: use the ocaml-multicore branch
<Algebr>
an OCaml function to call
<flux>
but I imagine it still has issues left :)
<Algebr>
an OCaml lwt function
<aantron>
yeah, i don't think that's happening in general in ocaml
<aantron>
(multicore parallelism)
<aantron>
until multicore :)
chindy has joined #ocaml
<Algebr>
damnit, how stable is multicore..
<aantron>
it didnt build on my mac a week or so ago
<aantron>
at least not out of the box
<aantron>
was trying to get started on lwt multicore :p
<flux>
I actually would have a use case for ocaml parallellism right now, I guess it's manually creating worker processes etc
<flux>
is there something pre-existing to solve that with Lwt?
<Drup>
lwt-parallel
<aantron>
creating processes? Lwt_process? or you mean something else?
<aantron>
or maybe what Drup suggested :)
<Drup>
aantron: I think the use case is big enough so that we should just get that in lwt itself ...
<Drup>
(it would allow to evolve gracefully towards a real multicore version later, too)
<flux>
doesn't seem like the interface supports anything else than arguments+return values for passing data back and forth?
<flux>
and I also assume it's not usable for short tasks
chindy has quit [Ping timeout: 248 seconds]
<Drup>
aantron: wasn't aware of that page
<aantron>
flux: Algebr: i believe several people had a discussion about lwt-parallel recently, maybe mfp was also involved?
<Drup>
yes
<flux>
all I want in addition to that is a cross-process messaging facility :)
<flux>
Lwt_parallel_mvar
<Drup>
flux: well, lwt-parallel has message passing via pipes
<aantron>
im generally against extending lwt itself though, rather helping more libraries to be written on top of it
<aantron>
unless lwt gets more maintainers :)
<aantron>
lwt maintenance doesn't scale otherwise
<flux>
drup, under "expert interface".. the usage is a bit unclear to me from the type signature.
<Drup>
aantron: there is a flipcoin, which is that if you exile some modules, they are efectively going to be unmaintaned unless you actively find someone to do it
<aantron>
right
<aantron>
i am not trying to exile anything actively though, unless i find maintainers. i just dont want to add more unless it comes with maintainers
<Drup>
Having something part of the "lwt group of packages" (not necessarly one package, but at least one repo) ensure that it stays uptodate with lwt
<aantron>
or until the basic major lwt tasks are less
<Drup>
Yeah
<Drup>
I'm partially talking about all the "factor out" tasks here too
<aantron>
ok i should clarify that i don't intend to do anything irresponsibly. this is a wish list :)
<aantron>
the destination of some of those tasks is the stdlib for example
<Drup>
(same remark for the basics datastructure, btw. Maintaining a module that basically never changes like pqueue or sequence is much easier inside lwt than in another lib)
<Drup>
Honestly, I don't believe you'll get those in the stdlib
<Drup>
You can try, but I wouldn't hold my breath
<aantron>
its not a high-priority task to try
<Drup>
I know, just expressing my though ;)
<aantron>
yes :)
<flux>
actually figured out the usage :)
<aantron>
i'm expressing what i wish would happen, it may help someone else that is deciding what to do, or someone might actually have time to do that :)
<flux>
I think I might actually have use for that. yay #ocaml! yay drup! :)
<aantron>
:p
jnavila has quit [Ping timeout: 240 seconds]
<Drup>
=)
<Algebr>
loving these warnings in lwt now
<aantron>
:)
<aantron>
btw Drup, it may also be possible to just mention lwt-parallel from the lwt readme
<aantron>
in that still-planned blessed suggestions list
<Drup>
aantron: honestly, I'm not sure it's in a good enough shape for that
<aantron>
perhaps
<Drup>
the documentation is not hosted, the package is meh and the module is "Parallel", which is just wrong
kakadu has joined #ocaml
<Drup>
packaging*
<aantron>
but definitely i won't have time to make such a thing soon. so a contributor and/or maintainer will be required to work in parallel with me, or this work is serialized to much later
<Drup>
sure :)
<aantron>
slash someone could work on lwt-parallel in that repo, and lwt will link to it then
<aantron>
(which i prefer right now :p)
<aantron>
and thanks for the wiki edit :)
<Drup>
I tried to nudge mfp to do that, but he was resilient to my attempts :D
<aantron>
mfp is a very valuable person :p
xorpse has quit [Ping timeout: 240 seconds]
<aantron>
mfp: mfp ^
<mfp>
hey sorry I haven't been able to do any Lwt work yet, I'm swamped atm. :-(
* mfp
reads context
<aantron>
no, its fine :)
<aantron>
and swamped is no good
<Drup>
(except for Swampert)
trepta has joined #ocaml
<mfp>
Algebr: did you give the lwt_par snippet I gave you (it was you, wasn't it) a try?
<Algebr>
ya
<Algebr>
I did :)
<mfp>
IIRC it was pretty much ready for battle except for the issue of children cleanup on parent death
<aantron>
lol i love this sentence
<Algebr>
I saved it somewhere but that debian link would be great too, need to look through logs
<Drup>
r/nocontext
<aantron>
:D
<mfp>
which would be solvable e.g. by having the children write to a pipe whose writeable end is inherited from the parent and getting the moral equivalent of SIGPIPE and leaving when the read end is closed
<mfp>
:)
<mfp>
(IIRC lwt-parallel didn't do proper child cleanup either, it did leave dozens/hundreds(?) of processes behind when it crashed during my tests)
<mfp>
I did some exps with posix mqs, got latency in the ~8us or so, which was about as fast as a Lwt_preemptive.detach, and ~4X faster than dispatching with unix sockets
MK__ has joined #ocaml
<Algebr>
proper child cleanup is an issue
<MK__>
@cheater sorry, I was disconnected, lwt is already installed, but lwt_io is unavailable
<aantron>
MK__: are you using ocamlfind package lwt.unix?
<mfp>
Algebr: k, my idea is this (no time to implement it atm., sorry): create a pipe in Lwt_par.init (or however it was named) before the forking, with close-on-exec in the read part, then in each worker process, have a background thread that writes a byte every second (or as fast as you want cleanup to be), and another background (Lwt) thread which reads from it; when the parent leaves, all the children will get EPIPE when writing, exit then
<aantron>
instead of plain lwt?
<mfp>
and s/thread/promise/ or whatever is the term kept in the end }:-)
<aantron>
promise :)
<MK__>
aantron: thanks, worked
Sakarah has quit [Remote host closed the connection]
jbrown has quit [Ping timeout: 240 seconds]
manizzle has joined #ocaml
ia0 has quit [Quit: reboot]
trepta has quit [Ping timeout: 240 seconds]
ia0 has joined #ocaml
jbrown has joined #ocaml
AlexDeni_ has quit [Quit: My MacBook has gone to sleep. ZZZzzz…]
mengu has joined #ocaml
mengu has quit [Remote host closed the connection]
mengu has joined #ocaml
average has quit [Ping timeout: 245 seconds]
MK__ has quit [Remote host closed the connection]
average has joined #ocaml
tmtwd has joined #ocaml
mengu has quit [Remote host closed the connection]
MercurialAlchemi has quit [Ping timeout: 240 seconds]
Guest26 has joined #ocaml
pierpa has quit [Remote host closed the connection]
FreeBirdLjj has joined #ocaml
FreeBirdLjj has quit [Remote host closed the connection]