ChanServ changed the topic of #ocaml to: Discussions about the OCaml programming language | http://www.ocaml.org | OCaml 4.02.1 announcement at http://ocaml.org/releases/4.02.html | Public channel logs at http://irclog.whitequark.org/ocaml
<ollehar> small example if you're interested
nullcat has quit [Read error: Connection reset by peer]
ollehar has quit [Quit: ollehar]
AltGr has joined #ocaml
cesar_ has joined #ocaml
cesar_ is now known as Guest65498
Guest65498 has quit [Ping timeout: 265 seconds]
jonludlam has quit [Ping timeout: 250 seconds]
ygrek_ has joined #ocaml
lordkryss has quit [Quit: Connection closed for inactivity]
rand000 has quit [Quit: leaving]
dav has quit [Ping timeout: 246 seconds]
dav has joined #ocaml
ygrek_ has quit [Ping timeout: 248 seconds]
ygrek_ has joined #ocaml
WraithM has joined #ocaml
nullcat_ has joined #ocaml
darkf has joined #ocaml
c74d is now known as Guest7872
Guest7872 has quit [Read error: Connection reset by peer]
ghostpl_ has joined #ocaml
c74d has joined #ocaml
badon has joined #ocaml
ghostpl_ has quit [Ping timeout: 265 seconds]
oriba has quit [Quit: oriba]
cesar_ has joined #ocaml
cesar_ is now known as Guest5985
WraithM has quit [Quit: leaving]
Guest5985 has quit [Ping timeout: 265 seconds]
sdothum has quit [Quit: ZNC - 1.6.0 - http://znc.in]
oscar_toro has quit [Ping timeout: 256 seconds]
kdef has joined #ocaml
dav has quit [Ping timeout: 244 seconds]
tianon has quit [Read error: Connection reset by peer]
tianon has joined #ocaml
dav has joined #ocaml
rgrinberg has quit [Quit: WeeChat 1.1.1]
c74d has quit [Read error: Connection reset by peer]
c74d has joined #ocaml
tianon has quit [Read error: Connection reset by peer]
tianon has joined #ocaml
Gal3rielol has joined #ocaml
Gal3rielol has left #ocaml ["Textual IRC Client: www.textualapp.com"]
idegen has quit [Ping timeout: 255 seconds]
tianon has quit [Read error: Connection reset by peer]
tianon has joined #ocaml
ericwa has quit [Quit: Leaving...]
ghostpl_ has joined #ocaml
ghostpl_ has quit [Ping timeout: 272 seconds]
cesar_ has joined #ocaml
cesar_ is now known as Guest90613
siddharthv_away is now known as siddharthv
Guest90613 has quit [Ping timeout: 265 seconds]
tianon has quit [Read error: Connection reset by peer]
tianon has joined #ocaml
ggole has joined #ocaml
mcclurmc has quit [Remote host closed the connection]
Bhavya has joined #ocaml
tianon has quit [Read error: Connection reset by peer]
tianon has joined #ocaml
MercurialAlchemi has joined #ocaml
tianon has quit [Read error: Connection reset by peer]
tianon has joined #ocaml
mengu has joined #ocaml
MrScout_ has joined #ocaml
Intensity has quit [Remote host closed the connection]
mengu has quit [Ping timeout: 244 seconds]
pobivan has joined #ocaml
fyolnish has joined #ocaml
fyolnish has left #ocaml [#ocaml]
lewis1711 has quit [Quit: Ex-Chat]
waqas has joined #ocaml
tianon has quit [Read error: Connection reset by peer]
tianon has joined #ocaml
swgillespie has joined #ocaml
<waqas> I'm not familiar with Ocaml. Can someone give me a hint as to what ~ and ? indicate in this type definition: https://github.com/avsm/ocaml-github/blob/master/lib/github.atd#L158 ?
MrScout_ has quit [Ping timeout: 256 seconds]
mcclurmc has joined #ocaml
<waqas> My current best guess is these somehow mean ~nullable vs ?optional
MrScout has joined #ocaml
<nullcat_> when you use "let map ~l ~f = ...", you do "map ~l:[1;2;3] ~f:(function x -> x + 1)"
<nullcat_> ? is optional
<nullcat_> ~ is useful when you do currying
mcclurmc has quit [Ping timeout: 244 seconds]
Intensity has joined #ocaml
<def`> (see https://ocaml.org/learn/tutorials/labels.html labelled and optional arguments)
ghostpl_ has joined #ocaml
meteo_ has joined #ocaml
<waqas> Thanks for the hints. Still trying to wrap my head around this. The ~ in the type definition I linked above has the exact same purpose? I can almost see how this might work in function arguments, but still unsure of how it works in a type definition.
<def`> The file you linked is not ocaml code, but a dsl for deriving common functions from a type definition
<waqas> Aha
meteo_ has quit [Client Quit]
<def`> I guess ~ semantics might have no effect on the type definition, but on the derived functions (although I never used atd, so … :))
<waqas> I was looking at the data model of GitHub, Google Code, etc out of curiosity. I wanted type definitions instead of API docs, and stumbled on this one.
<nullcat_> ...
<nullcat_> i didn't even realize it's DSL...
ghostpl_ has quit [Ping timeout: 264 seconds]
<waqas> Neither did I. I've been interested in Ocaml for some time, so I picked the ocaml bindings out of all the others :)
<waqas> http://mjambon.com/atd-biniou-intro.html#atd — this explains the ATD tilde and question mark.
<nullcat_> good. thanks
<waqas> Well, I learned more than I was expecting just now, so thanks nullcat_, def` :)
cesar_ has joined #ocaml
<def`> you're welcome :)
cesar_ is now known as Guest24473
tianon has quit [Read error: Connection reset by peer]
tianon has joined #ocaml
Guest24473 has quit [Ping timeout: 256 seconds]
contempt has quit [Ping timeout: 256 seconds]
swgillespie has quit [Quit: My MacBook Pro has gone to sleep. ZZZzzz…]
ygrek_ has quit [Ping timeout: 272 seconds]
contempt has joined #ocaml
kdef has quit [Quit: Leaving]
tianon has quit [Read error: Connection reset by peer]
tianon has joined #ocaml
mcclurmc has joined #ocaml
mcclurmc has quit [Ping timeout: 252 seconds]
tianon has quit [Read error: Connection reset by peer]
tianon has joined #ocaml
nullcat_ has quit [Quit: My Mac has gone to sleep. ZZZzzz…]
waqas has quit [Quit: Leaving.]
kushal has joined #ocaml
MrScout has quit [Ping timeout: 256 seconds]
matason has joined #ocaml
tianon has quit [Read error: Connection reset by peer]
tianon has joined #ocaml
freling has joined #ocaml
ygrek_ has joined #ocaml
badon has quit [Ping timeout: 245 seconds]
ghostpl_ has joined #ocaml
tianon has quit [Read error: Connection reset by peer]
tianon has joined #ocaml
mcclurmc has joined #ocaml
ghostpl_ has quit [Ping timeout: 272 seconds]
mcclurmc has quit [Ping timeout: 250 seconds]
cesar_ has joined #ocaml
cesar_ is now known as Guest76291
matason has quit [Quit: Later!]
Guest76291 has quit [Ping timeout: 256 seconds]
govg has quit [Quit: leaving]
tane has joined #ocaml
Gama11 has joined #ocaml
tianon has quit [Read error: Connection reset by peer]
tianon has joined #ocaml
matason has joined #ocaml
_5kg has quit [Read error: Connection reset by peer]
Simn has joined #ocaml
dsheets has joined #ocaml
mengu has joined #ocaml
shinnya has quit [Ping timeout: 245 seconds]
Hannibal_Smith has joined #ocaml
Haudegen has quit [Ping timeout: 256 seconds]
tianon has quit [Read error: Connection reset by peer]
shinnya has joined #ocaml
tianon has joined #ocaml
kakadu has joined #ocaml
dav has quit [Ping timeout: 252 seconds]
dav_ has joined #ocaml
mcclurmc has joined #ocaml
Haudegen has joined #ocaml
Nahra has joined #ocaml
johnelse is now known as johnel_away
pii4 has quit [Quit: [-.-]...]
mcclurmc has quit [Ping timeout: 255 seconds]
johnel_away is now known as johnelse
pii4 has joined #ocaml
ghostpl_ has joined #ocaml
milosn has quit [Ping timeout: 256 seconds]
tianon has quit [Read error: Connection reset by peer]
tianon has joined #ocaml
ghostpl_ has quit [Ping timeout: 272 seconds]
freling has quit [Read error: Connection reset by peer]
freling has joined #ocaml
octachron has joined #ocaml
keen__________30 has joined #ocaml
keen__________29 has quit [Ping timeout: 245 seconds]
Hannibal_Smith has quit [Remote host closed the connection]
tianon has quit [Read error: Connection reset by peer]
tianon has joined #ocaml
mengu has quit [Remote host closed the connection]
mcclurmc has joined #ocaml
ghostpl_ has joined #ocaml
AltGr has left #ocaml [#ocaml]
mcclurmc has quit [Ping timeout: 264 seconds]
slash^ has joined #ocaml
tianon has quit [Read error: Connection reset by peer]
tianon has joined #ocaml
ollehar has joined #ocaml
Submarine has quit [Remote host closed the connection]
tianon has quit [Read error: Connection reset by peer]
tianon has joined #ocaml
ollehar has quit [Remote host closed the connection]
ollehar has joined #ocaml
govg has joined #ocaml
lordkryss has joined #ocaml
mengu has joined #ocaml
mengu has quit [Remote host closed the connection]
mengu has joined #ocaml
mengu has joined #ocaml
ZenMatt has joined #ocaml
<ZenMatt> Hi folks, anyone with experience in implementing binary search trees in ocaml?
mcclurmc has joined #ocaml
<lyxia> I think it starts with type 'a tree = Leaf | Node of 'a * 'a tree * 'a tree
<ZenMatt> that's right, I'm looking to create a function where I can pass it a list of something like [L. R, L, L, R]
psy_ has quit [Ping timeout: 272 seconds]
<lyxia> Ok
<ZenMatt> and will return a bool depending on whether said address, after traversing L -> R -> L -> L -> R, exists or not
<ZenMatt> but I struggle to think how it can be done
sdothum has joined #ocaml
mcclurmc has quit [Ping timeout: 244 seconds]
<lyxia> Pattern match on the tree and the path and see what you should do in each case.
milosn has joined #ocaml
milosn has quit [Read error: Connection reset by peer]
<ZenMatt> oh this is much better than what I had come up with
<ZenMatt> thank you
milosn has joined #ocaml
Haudegen has quit [Ping timeout: 265 seconds]
tianon has quit [Read error: Connection reset by peer]
tianon has joined #ocaml
xificurC has joined #ocaml
testcocoon has quit [Quit: Coyote finally caught me]
testcocoon has joined #ocaml
larhat has joined #ocaml
Hannibal_Smith has joined #ocaml
cesar_ has joined #ocaml
milosn has quit [Read error: Connection reset by peer]
cesar_ is now known as Guest45996
milosn has joined #ocaml
milosn has quit [Read error: Connection reset by peer]
Haudegen has joined #ocaml
axiles has quit [Quit: Quitte]
Guest45996 has quit [Ping timeout: 256 seconds]
milosn has joined #ocaml
tianon has quit [Read error: Connection reset by peer]
tianon has joined #ocaml
Bhavya has quit [Quit: Quit the channel]
mcclurmc has joined #ocaml
_andre has joined #ocaml
mengu has quit [Remote host closed the connection]
mcclurmc has quit [Ping timeout: 252 seconds]
<companion_cube> o/
<reynir> \o
ZenMatt has quit [Ping timeout: 246 seconds]
milosn has quit [Read error: Connection reset by peer]
tnguyen has quit [Ping timeout: 272 seconds]
milosn has joined #ocaml
tianon has quit [Read error: Connection reset by peer]
tianon has joined #ocaml
ygrek_ has quit [Ping timeout: 255 seconds]
freling has quit [Quit: Leaving.]
badkins has joined #ocaml
milosn has quit [Ping timeout: 256 seconds]
TheLemonMan has joined #ocaml
s1n4 has joined #ocaml
<mahem1> __/\______\0/___
tianon has quit [Read error: Connection reset by peer]
tianon has joined #ocaml
freling has joined #ocaml
mcclurmc has joined #ocaml
Algebr has quit [Ping timeout: 252 seconds]
milosn has joined #ocaml
mcclurmc has quit [Ping timeout: 264 seconds]
govg has quit [Ping timeout: 252 seconds]
Hannibal_Smith has quit [Quit: Leaving]
Tchi_ has joined #ocaml
Tchi__ has joined #ocaml
fraggle__ has joined #ocaml
Tchi_ has quit [Ping timeout: 246 seconds]
olauzon has joined #ocaml
k1000 has joined #ocaml
govg has joined #ocaml
milosn has quit [Ping timeout: 264 seconds]
cesar_ has joined #ocaml
<MercurialAlchemi> oh dear, more owebl "goodness"
cesar_ is now known as Guest8731
<tane> who's in charge of that project? :)
<MercurialAlchemi> eatonphil
<Drup> I sort of chuckle at "ocaml, meet web" n_n
<Drup> we should totally recruit him to do the eliom tutorials, though
<MercurialAlchemi> well, I think he has a good sense of marketing
<Drup> exactly
<MercurialAlchemi> if his technical choices were half as good, it would be a killer framework
<Drup> well, he's an ocaml beginner
<Drup> that's okay
<MercurialAlchemi> well
<MercurialAlchemi> I think a beginner in general
<MercurialAlchemi> fork at every request?
<Drup> he's just a bit presomptuous about the quality of his production, maybe
<companion_cube> MercurialAlchemi: well, it's what Apache has done for years, isn't it?
<MercurialAlchemi> companion_cube: was there a life before prefork?
Guest8731 has quit [Ping timeout: 256 seconds]
tianon has quit [Read error: Connection reset by peer]
<companion_cube> I don't know much about this stuff
tianon has joined #ocaml
siddharthv is now known as siddharthv_away
<MercurialAlchemi> I mean, AFAIK you have the threadpool and the process pool versions of Apache, and that's it
verthandi has joined #ocaml
<MercurialAlchemi> maybe back when dinosaurs were roaming the Earth, Apache forked at every request, but that's hardly the technical direction to take
<nicoo> MercurialAlchemi: What is owebl?
<MercurialAlchemi> wise people learn from other people's mistakes, and all that
<MercurialAlchemi> nicoo: it's an OCaml web framework made by an enthusiastic, well-intentioned guy
<Drup> I would argue the technical direction is not to fork at all
<MercurialAlchemi> but somewhat naive
<Drup> this way, you have mirage-compat and you slap a load balancer on the front
<ousado> one has to be able to understand other peoples mistakes to learn from them
<nicoo> Yeah, just saw the reddit post
<MercurialAlchemi> Drup: so plain lwt?
<Drup> yes
<Drup> you have to put a load balancer to scale to multiple machine anyway
<Drup> the multithread solution is not a scaling one
<companion_cube> that might not be a goal?
<companion_cube> I suppose forking is a really really simple concurrency model for web servers
<MercurialAlchemi> Drup: frankly, you want as much mileage of your single-box solution before you get forced to do multi-boxes
milosn has joined #ocaml
<nicoo> The meetowebl.com website is rather slick, though.
<MercurialAlchemi> I imagine that lwt+process pool would work decently
<MercurialAlchemi> nicoo: we agreed that the author had a gift for marketing and presentation
<Drup> MercurialAlchemi: except you usually don't spend much time in the area where multiprocess is enough but you need only one machine
<nicoo> MercurialAlchemi: Yes, I was just voicing my agreement on that part
<Drup> MercurialAlchemi: either your website is really small (monoprocess is far enough) or it's not (and it's really not enough)
<companion_cube> if you have your DB on some machines, and forking processes on other machines?
<Drup> the DB is another question :p
<companion_cube> I mean, it should work quite well, many websites work this way with slow languages
rand000 has joined #ocaml
<companion_cube> no, it's an important question too
<Drup> sure, but it's unrelated to "do I multiprocess"
<companion_cube> sure, if you have a Lwt-aware DB library
<MercurialAlchemi> Drup: I'm not sure you can just decide that it doesn't matter
<MercurialAlchemi> if all you're doing is CRUD, you're probably right
<Drup> anyway, gtg.
<MercurialAlchemi> but if handling a request is more process intensive, multi-process would make a difference
<MercurialAlchemi> CPU-intensive, even
<MercurialAlchemi> companion_cube: I'll point out that slower languages use caching a lot, though
<MercurialAlchemi> (and faster ones as well, obviously)
<ousado> why wouldn't lwt be able to do multi-process?
mcclurmc has joined #ocaml
ghostpl_ has quit [Remote host closed the connection]
<flux> I think it would and perhaps even rock for that purpose (ie. n:m threading)
<MercurialAlchemi> don't think lwt has a process pool solution out-of-the-box like python's multiprocessing
<flux> but does the oc4mc already do n:m threading?
<flux> (probably not)
idegen has joined #ocaml
<MercurialAlchemi> oc4mc?
<flux> ocaml for multicore
<ousado> well, OK, not out of the box
<MercurialAlchemi> oh
<companion_cube> MercurialAlchemi: it would be nice indeed, if Lwt proposed an easy way to multiprocess
<companion_cube> with some shared memory, blablabla
<flux> there's a slight chance that lots of Lwt-based code implicitly assumes there is no concurrency
<ousado> just forwarding the socket to another process would be good enough
<MercurialAlchemi> flux: no idea, but it's an experimental compiler which AFAIK only works with bytecode
<flux> so perhaps it would be to have something like Nslwt that would be based on Lwt ;-)
<Drup> I saw something for lwt
lordkryss has quit [Quit: Connection closed for inactivity]
<MercurialAlchemi> companion_cube: yeah, that'd be neat
<Drup> similar to Async's thing
<flux> I think Apple's Grand Central Dispatch would be something to aspire
<flux> but I don't know if it would work well in practice
milosn has quit [Read error: Connection reset by peer]
<flux> but it would, as I understand it, mostly fit the Lwt model
<flux> so you have all these threads a scheduler chooses fragments to execute on all available cores
<Drup> flux: that's what stephen dolan want's to do in ocaml multicore
<flux> in addition Lwt could choose to spin up new cores should it happen so that all threads are busy and new work arrives
<flux> drup, cool
<MercurialAlchemi> er, spin up cores?
<Drup> he calls them "fibers"
<flux> oops, spin up threads
<MercurialAlchemi> you mean system threads?
<flux> I mean, even more threads than just the number of cores
<companion_cube> what is the current count of ocaml multicore attempts?
<companion_cube> I feel like it's really high
<MercurialAlchemi> (I'd buy software that spins up cores :) )
<Drup> MercurialAlchemi: "Marshal" /me dies
<flux> mercurialalchemi, buy from ibm.. ;)
<Drup> MercurialAlchemi: but yes
<MercurialAlchemi> companion_cube: are they being processed in //?
<MercurialAlchemi> Drup: well, yeah, no shared memory here
<MercurialAlchemi> what's the problem with marshal apart from that, though?
mcclurmc has quit [Remote host closed the connection]
<Drup> it's slow
<Drup> pipe + marshall is really really slow
<MercurialAlchemi> are there any faster serialization schemes for abitrary objects?
<MercurialAlchemi> (and I think that's what unison is using, and unison seems fast enough...)
<Drup> any other serialization scheme is actually probably slower
<MercurialAlchemi> figured
<Drup> well, it depends a lot how much data you have to put in the pipes
<Drup> but if it's non trivial
<MercurialAlchemi> so it's not necessarily a bad choice if you have to have serialization
<Drup> your multicore solution is probably going to be slower.
milosn has joined #ocaml
<MercurialAlchemi> Drup: in the context of a webserver, if all you're exchange is a request record, it may not be that bad, no?
tianon has quit [Read error: Connection reset by peer]
tianon has joined #ocaml
govg has quit [Ping timeout: 265 seconds]
tnguyen has joined #ocaml
milosn has quit [Ping timeout: 250 seconds]
yminsky has quit [Quit: Connection closed for inactivity]
ghostpl_ has joined #ocaml
tianon has quit [Read error: Connection reset by peer]
tianon has joined #ocaml
<Drup> MercurialAlchemi: except when the content is big, like a file :p
<Drup> (but yes)
kushal has quit [Ping timeout: 264 seconds]
milosn has joined #ocaml
<MercurialAlchemi> Drup: well, yeah, but you can work around that, just dump the body somewhere on disk and hand over the location to the process
<MercurialAlchemi> serializing large things is not fast with anything anyway
<MercurialAlchemi> but still, working with shared memory would be quite faster
<ousado> you can sendmsg the socket instead
<flux> in principle, it's messages in the wire anyway :)
<flux> with some caching..
idegen has left #ocaml [#ocaml]
<MercurialAlchemi> ousado: depends, you don't want to block your main process because your worker is too busy to read
<ousado> err, non-blocking io?
kushal has joined #ocaml
TheLemonMan has quit [Quit: "It's now safe to turn off your computer."]
gasche has quit [Read error: Connection reset by peer]
milosn has quit [Read error: Connection reset by peer]
tianon has quit [Read error: Connection reset by peer]
milosn has joined #ocaml
tianon has joined #ocaml
milosn has quit [Read error: Connection reset by peer]
psy_ has joined #ocaml
milosn has joined #ocaml
milosn has quit [Read error: Connection reset by peer]
ghostpl_ has quit [Remote host closed the connection]
ghostpl_ has joined #ocaml
s1n4 has quit [Ping timeout: 272 seconds]
ghostpl_ has quit [Remote host closed the connection]
ghostpl_ has joined #ocaml
ghostpl_ has quit [Remote host closed the connection]
ghostpl_ has joined #ocaml
ghostpl_ has quit [Remote host closed the connection]
ghostpl_ has joined #ocaml
cesar_ has joined #ocaml
tianon has quit [Read error: Connection reset by peer]
tianon has joined #ocaml
tianon has quit [Changing host]
tianon has joined #ocaml
cesar_ is now known as Guest99922
Guest99922 has quit [Ping timeout: 256 seconds]
waqas has joined #ocaml
waqas has left #ocaml [#ocaml]
govg has joined #ocaml
shinnya has quit [Ping timeout: 256 seconds]
darkf has quit [Ping timeout: 265 seconds]
verthandi has quit [Quit: ERC (IRC client for Emacs 25.0.50.1)]
tianon has quit [Read error: Connection reset by peer]
tianon has joined #ocaml
ghostpl_ has quit [Remote host closed the connection]
ghostpl_ has joined #ocaml
ollehar1 has joined #ocaml
fraggle_ has quit [Remote host closed the connection]
fraggle__ has quit [Read error: Connection reset by peer]
psy_ has quit [Read error: Connection reset by peer]
tianon has quit [Read error: Connection reset by peer]
tianon has joined #ocaml
pobivan has quit [Ping timeout: 245 seconds]
pobivan_ has joined #ocaml
lordkryss has joined #ocaml
psy_ has joined #ocaml
badkins has quit [Remote host closed the connection]
ptc has joined #ocaml
kdef has joined #ocaml
fraggle_ has joined #ocaml
cdidd has quit [Ping timeout: 252 seconds]
ptc has quit [Ping timeout: 264 seconds]
ptc has joined #ocaml
badon has joined #ocaml
octachron has quit [Remote host closed the connection]
ptc has quit [Ping timeout: 272 seconds]
cdidd has joined #ocaml
johnelse is now known as johnel_away
johnel_away has quit [Remote host closed the connection]
<Drup> ollehar "it deserves" ?
nullcat_ has joined #ocaml
nullcat_ has quit [Client Quit]
nullcat has joined #ocaml
jwatzman|work has joined #ocaml
jwatzman|work has quit [Read error: Connection reset by peer]
badon has quit [Ping timeout: 246 seconds]
cesar_ has joined #ocaml
cesar_ is now known as Guest39024
<ollehar1> Drup: sorry
<Drup> well, you can't drop that without details.
tianon has quit [Read error: Connection reset by peer]
milosn has joined #ocaml
<Drup> If you think it's unpractical crap, I would really like to know why.
tianon has joined #ocaml
<Drup> (that's a serious question, I'm really interested :D)
Guest39024 has quit [Ping timeout: 256 seconds]
ghostpl_ has quit [Remote host closed the connection]
Submarine has joined #ocaml
govg has quit [Quit: leaving]
ghostpl_ has joined #ocaml
<MercurialAlchemi> "... is a mix between WordPress best practices..." -> ^_^
<MercurialAlchemi> this broke my sarcasm detector
olauzon has quit [Quit: olauzon]
matthewhill has joined #ocaml
matthewhill has quit [Client Quit]
<Drup> MercurialAlchemi: my sarcasm detector is broken since I saw someone talk seriously about "ruby's reliability".
nullcat has quit [Quit: My Mac has gone to sleep. ZZZzzz…]
badkins has joined #ocaml
<MercurialAlchemi> technically, by itself it's pretty harmless
uris77 has joined #ocaml
<MercurialAlchemi> unfortunately, it makes eval() based tricks all too easy
<MercurialAlchemi> then people write DRY unreadable horrors, and monkey-patch to hell and back
<MercurialAlchemi> at least the Python community is usually more sensible
<ollehar1> ocsigen doesn't seem to implement any of the usual web idioms
<ollehar1> MVC, seperation of concerns, ORM
<ollehar1> and the code looks like...
<Drup> macaque is not an orm ?
<Drup> ocsigen doesn't enforce how your MVC is done, it's a bit different than not allowing it.
Algebr has joined #ocaml
<ollehar1> So there's no standard way of doing MVC in Ocsigen?
<MercurialAlchemi> ollehar1: something like Flask doesn't enforce MVC either
<ollehar1> well...
<ollehar1> there should be a "this is usually how we do it"
<ollehar1> a framework culture, if you will.
<ollehar1> or framework idioms.
<Drup> there is a usual way, yes
<Drup> using react, basically
<Drup> but it's not really MVC, just FRP
Denommus has joined #ocaml
<Drup> If you look at MVC as done by most frameworks, it's basically a spagetti of handler and callbacks. We can do that implicitely with the FRP stuff
<ollehar1> OK
<ollehar1> Good.
<Drup> we never call it MVC because that's not MVC.
<Drup> it would be closer to a producer-consumer organization
tianon has quit [Read error: Connection reset by peer]
tianon has joined #ocaml
dav has joined #ocaml
<Drup> I'm still wondering why you said what you said, though. :)
badkins_ has joined #ocaml
<Denommus> hi, what's the discussion? :-)
<MercurialAlchemi> on the other hand, you need to learn react
<Drup> MercurialAlchemi: indeed, but react is awesome
<ollehar1> In any case
<MercurialAlchemi> no doubt
<ollehar1> If owebl will be a little more conventional web framework, I wouldn't mind.
<Drup> MercurialAlchemi: in most cases, you have a react-like integrated in each framework
<MercurialAlchemi> but my understanding of it is fuzzy at best
dsheets has quit [Ping timeout: 255 seconds]
<Denommus> MercurialAlchemi: I found it quite intuitive
dav_ has quit [Ping timeout: 252 seconds]
<MercurialAlchemi> well, I get the idea of having events, signals and steps
<Drup> MercurialAlchemi: in particular, angular is really as it's core a react written in javascript with some doubtful semantic choices.
<Drup> (and callbacks, everywhere)
<ollehar1> Ocsigen has a huge conceptual overhead.
<MercurialAlchemi> I'm just not sure of how to arrange all that in a coherent way
<Drup> ollehar1: I agree
<ollehar1> But yeah
<ollehar1> If there were better docs, I'd read them!
badkins has quit [Ping timeout: 272 seconds]
<Drup> ollehar1: why are http://ocsigen.org/tuto/4.2/manual/application not good ?
<Drup> it doesn't look modern enough ?
<MercurialAlchemi> and I have no idea of why you'd use React.E.fix for, for instance
<Drup> MercurialAlchemi: basically never :D
<MercurialAlchemi> eh, it was in the breakout example
<MercurialAlchemi> I was trying to read the .ml in the train the other day
<MercurialAlchemi> unfortunately, while there are sections with extensive comments, it's replete with single-letter variables
<MercurialAlchemi> which, I'm sure, make complete sense to the author
MrScout has joined #ocaml
<ollehar1> Drup: Guess I got put off by HTML in code
<ollehar1> Will have a closer look.
<Drup> ollehar1: the thing is, I occasionally see comments like the one you did, and similarly, I don't really have arguments, only vague impressions, so I would really like to know where the impression comes from.
lewis1711 has joined #ocaml
<lewis1711> don't suppose anyone else here uses ubuntu and has opam 1.2 working? the opam in ubuntu is thoroughly broken. there's a PPA, but it seems to be down or inactive, as I can't get packages from it
<lewis1711> ah screw it I'll just compile it.. let's shave some yaks
<ollehar1> OK, I'll try be more constructive, just need to install stuff
lewis1711 has quit [Client Quit]
<Drup> lewis1711: live in opam dev ! :D
ollehar1 has quit [Quit: ollehar1]
lewis1711 has joined #ocaml
<Denommus> MercurialAlchemi: React.E.fix is for when you have two recursively dependent events
<Denommus> MercurialAlchemi: in GUI programming, that rarely ever happens
<Denommus> MercurialAlchemi: it's more common in game programming (where you may have your velocity deriving from your acceleration, and your acceleration being reduced if you have a big velocity)
tianon has quit [Read error: Connection reset by peer]
tianon has joined #ocaml
kdef has quit [Ping timeout: 264 seconds]
<MercurialAlchemi> hmm
Hannibal_Smith has joined #ocaml
ghostpl_ has quit [Remote host closed the connection]
uris77 has quit [Quit: leaving]
<MercurialAlchemi> Denommus: so how would you define your velocity and acceleration using fix?
ptc has joined #ocaml
<Drup> I'm not sure using that for a game is a great idea
<lewis1711> ahhh, now ocaml core dumps when I start it. I"ve done a great job with utop in ubuntu
<Drup> You can't drive react's "tick" really, so you won't be able to control precisely what's happening.
<Drup> lewis1711: what did you tried to compile by yourself ?
<lewis1711> Drup, nope, I grabbed the .deb files of opam 1.2.1 from the ppa site manually, since the ppa was broken
<MercurialAlchemi> (I think in general, what I miss is an example of how you design a larger application AND separate your logic from the effectful - I don't like the idea of having half your application state being made of signals)
matason has quit [Quit: Later!]
<Drup> MercurialAlchemi: define large
<Drup> lewis1711: what did you do to make ocaml coredump ._.
<Drup> (monster !)
<MercurialAlchemi> Drup: we're talking about ocaml, maybe 1kloc
<Drup> I have an example
<lewis1711> Drup, I have no clue. if I do "eval `opam config env`", it doesn't crash... even though I thought I had already yak-shaved that into my bashrc or whatever
<Drup> you could probably find a better one, but I don't know any
<lewis1711> oh new opam, time to opam init
<Drup> hum, no, you shouldn't have to
<lewis1711> that fixed it. for anyone following along to my exciting saga.
<Drup> I have no idea what happened x)
<Drup> MercurialAlchemi: in particular, all the event/signal wiring is defined here : https://github.com/OCamlPro/ocp-index/blob/master/src/browserMain.ml#L788-L801
<MercurialAlchemi> Drup: thx
<Drup> the good thing with FRP is that you can define the various parts completely independently
<Drup> and all the wiring/boilerplate is done at the same place
<Drup> If you follow that, it's relatively clear to know what's happening
<Drup> (obviously, if you don't, it's a fucking mess to debug)
<Denommus> Drup: I didn't mean to imply React is usable for games :-D
octachron has joined #ocaml
<Denommus> Drup: I guess continous, arrowized FRP is much better for that (like Netwire)
<Drup> Denommus: not even mentioning the efficiency question
<MercurialAlchemi> Drup: no doubt, though event-based systems are not necessarily easy
<Drup> which is rather critical for the core game engine
<Denommus> Drup: I just wanted to provide an example of a recursively defined signal
<Drup> right :)
Algebr has quit [Remote host closed the connection]
<Drup> It would be good if you could export the underlying spagetti graph of a given React program
<Drup> like what was done for Lwt
Haudegen has quit [Ping timeout: 244 seconds]
<Denommus> MercurialAlchemi: I have an example of recursively defined arrow in Netwire here (though is not runnable because I lost the library code in a broken hard drive): https://gist.github.com/Denommus/648f0a1bc4b6cb3f6bf3
<Denommus> MercurialAlchemi: the "loop" in velocity is somewhat similar to React.S.fix
seangrove has joined #ocaml
tianon has quit [Read error: Connection reset by peer]
martintrojer has quit [Max SendQ exceeded]
tianon has joined #ocaml
ontologiae has joined #ocaml
jwatzman|work has joined #ocaml
struktured has quit [Ping timeout: 265 seconds]
martintrojer has joined #ocaml
MrScout has quit [Ping timeout: 256 seconds]
matason has joined #ocaml
badon has joined #ocaml
Gama11_ has joined #ocaml
<Denommus> Drup: wouldn't it be interesting to have a library similar to Netwire in OCaml, with continous time and arrow-based semantics?
ghostpl_ has joined #ocaml
<Drup> I never looked at netwire, so I can't really answer
<Drup> you now about froc, right ?
<Denommus> not really
Gama11 has quit [Ping timeout: 250 seconds]
Nahra has quit [Remote host closed the connection]
<Drup> hum, froc is still monadic, not arrow-based
MrScout has joined #ocaml
Haudegen has joined #ocaml
<Denommus> Drup: is it based on continous time, though?
<Drup> not sure what that even means in the context of signals/events, tbh.
<Denommus> why am I writing continous all the time?
<Denommus> *continuous
<Denommus> Drup: React's approach is discrete: the graph is only "updated" when there is some external event happening
<Drup> sure, that's what makes it at least not completely inefficient.
<Denommus> Drup: yes, I completely understand. But that makes it not viable for games, where there's an update of state continuously, even when there aren't external events
kakadu has quit [Quit: Page closed]
<Drup> you mean you want a value to be defined for each time ?
<Denommus> maybe. I don't quite get how is the most efficient implementation of continuous-time FRP
<Drup> No, let's just talk semantic-wise
<Drup> the difference between events and signals, in react, is that signals have a value for each time while events have a value only for specific times.
<Denommus> instead of providing something like React's React.E.create and React.S.create, Netwire provides a function that must be called for each iteration, where you push the events that should be computed for the current iteration
<Drup> I see
<Drup> so it's step based
tnguyen has quit [Ping timeout: 246 seconds]
Anarchos has joined #ocaml
<Denommus> precisely
<Drup> I wonder if you could emulate that with http://erratique.ch/software/react/doc/React.Step.html
<Denommus> Drup: how would you push the events to the current step?
<Anarchos> Drup is React based on the HDR of Daniel Le Métayer ?
<Drup> Anarchos: no idea
<Drup> Denommus: React.execute
snikkers has quit [Remote host closed the connection]
<Drup> Step.execute*
<Drup> Denommus: if you look at E.create and E.signal
<Drup> the push functions take a step as optional argument
<Drup> E.create and S.create*
<Drup> so you could technically forcefully drive the update steps.
<Denommus> Drup: ah. So maybe it's possible, indeed. But I don't think React was made for such a thing. An experiment would be interesting, nevertheless
snikkers has joined #ocaml
<Drup> clearly, React is not exactly suited
<Denommus> Drup: although I think OCaml would be even better for Netwire-like AFRP, given the strict evaluation (Netwire does a lot of monadic magic to properly evaluate everything without space or time leaks)
<Drup> and I'm pretty sure you could make something much more efficient by applying this hypothesis
tianon has quit [Read error: Connection reset by peer]
<Denommus> although representing Arrows on OCaml must be quite a task...
<Drup> funilly, when I was in first year of master, I implemented a minimal arrow library without overloading
tianon has joined #ocaml
mcclurmc has joined #ocaml
<Drup> just after discovering arrows
<Drup> it was absolutely horrible to use, because of the lack of overloading, of course
<Drup> but no, it's not difficult to implement
<Drup> as long as you keep it *not* general purpose
dsheets has joined #ocaml
badon has quit [Disconnected by services]
badon_ has joined #ocaml
<Denommus> Drup: you mean like React is monadic without actually implementing a Monad sig?
<Drup> the big issue you will face is the absence of operators that works both on functions and your specific arrow instance
<Drup> yes
badon_ is now known as badon
<Denommus> when OCaml gets typeclasses making that general purpose will become easier, probably, won't it?
<Drup> or even like Lwt, where you clearly implement a Monad sig, but you never tried to do anything with other monads :)
<Drup> yes
badon has quit [Client Quit]
<Denommus> heh
<Denommus> I guess I'll try my hand at it, then. Wish me luck
cesar_ has joined #ocaml
cesar_ is now known as Guest9562
martintrojer has quit [Max SendQ exceeded]
Hannibal_Smith has quit [Ping timeout: 244 seconds]
martintrojer has joined #ocaml
Hannibal_Smith has joined #ocaml
Guest9562 has quit [Ping timeout: 256 seconds]
axiles has joined #ocaml
martintrojer has quit [Max SendQ exceeded]
larhat has quit [Quit: Leaving.]
martintrojer has joined #ocaml
martintrojer has quit [Max SendQ exceeded]
<MercurialAlchemi> I liked the lazy resume one the best
martintrojer has joined #ocaml
<Drup> I'm quite fond of the asm^W javascript one
octachron has quit [Quit: Leaving]
<Denommus> I loved the Schrodinger cat evaluation one
nullcat has joined #ocaml
claudiuc has joined #ocaml
claudiuc has quit [Remote host closed the connection]
claudiuc has joined #ocaml
slash^ has quit [Read error: Connection reset by peer]
martintrojer has quit [Max SendQ exceeded]
martintrojer has joined #ocaml
tianon has quit [Read error: Connection reset by peer]
tianon has joined #ocaml
ptc has quit [Ping timeout: 252 seconds]
MrScout has quit [Remote host closed the connection]
olauzon has joined #ocaml
MrScout has joined #ocaml
<MercurialAlchemi> Denommus: that was very garfield
tnguyen has joined #ocaml
ptc has joined #ocaml
<Denommus> I'm screaming like a little girl now: https://ro-che.info/ccc/21
<cmtptr> please keep it down srsly
<Denommus> okay
<haesbaert> is there any place I can get a list of tags for ocamlbuild ?
ggole has quit []
<Drup> ocamlbuild -documentation
nullcat has quit [Ping timeout: 250 seconds]
<haesbaert> ahhhhnnnnnn
<haesbaert> thx
<Drup> beware
<Drup> it's not complete
ptc has quit [Ping timeout: 248 seconds]
<Drup> it's lacking dynamically generated stuff, and so on
<haesbaert> it's kinda painfull to read maybe I'll just stick with command line options
<Drup> and it's not expressed in term of tags, but in terms of rules
<Drup> which is annoying
ptc has joined #ocaml
Tchi__ has quit [Ping timeout: 246 seconds]
lewis1711 has quit [Ping timeout: 250 seconds]
mengu has joined #ocaml
mcclurmc has quit [Remote host closed the connection]
mcclurmc has joined #ocaml
_andre has quit [Quit: leaving]
mcclurmc has quit [Remote host closed the connection]
kakadu has joined #ocaml
tianon has quit [Read error: Connection reset by peer]
MrScout has quit [Remote host closed the connection]
tianon has joined #ocaml
lewis1711 has joined #ocaml
mcclurmc has joined #ocaml
kushal has quit [Ping timeout: 256 seconds]
shinnya has joined #ocaml
<Denommus> Drup: any idea on when OCaml will have typeclasses?
<Drup> Nope.
<Drup> but you can try it ! "opam switch 4.02.0+modular-implicit"
Choups314 has joined #ocaml
lordkryss has quit [Quit: Connection closed for inactivity]
<haesbaert> hmm I'm failing at finding the cflags tag for ocamlbuild
<Choups314> Bonjour
kushal has joined #ocaml
<Choups314> Oops it's an english channel ?
<Drup> Yes it is. The french channel is #ocaml-fr
<Choups314> Ok sorry ;)
Haudegen has quit [Ping timeout: 252 seconds]
TheLemonMan has joined #ocaml
icicled has joined #ocaml
<Choups314> How can I interact with ocamldebug when the program is running ? (It focus the console with a prompt .. and I cannot set breakpoints before the program is loaded)
lewis1711 has quit [Ping timeout: 250 seconds]
tianon has quit [Quit: brb, updating image]
tianon has joined #ocaml
tianon has quit [Read error: Connection reset by peer]
tianon has joined #ocaml
Algebr has joined #ocaml
Haudegen has joined #ocaml
badon has joined #ocaml
mcclurmc has quit [Remote host closed the connection]
mengu__ has joined #ocaml
mengu has quit [Ping timeout: 272 seconds]
MrScout has joined #ocaml
MrScout_ has joined #ocaml
MrScout has quit [Read error: No route to host]
claudiuc has quit [Ping timeout: 265 seconds]
<Anarchos> Choups314 load your program, set the breakpoint ; runs the program.
Algebr has quit [Ping timeout: 264 seconds]
Sorella has quit [Quit: Connection closed for inactivity]
<Choups314> Anarchos, I couldn't because the modules were not loaded yet. But I found the solution : "goto 0"
tianon has quit [Read error: Connection reset by peer]
tianon has joined #ocaml
<smondet> Drup: what's the status on ocaml-lmdb?
<smondet> (sqlite got on my nerves once too much …)
<Drup> untouched since you last asked :D
Sorella has joined #ocaml
<smondet> does it work as is? is there anything you think is really missing?
<Drup> hum, I remember pushing a todo file, but apparently I didn't
<Drup> ah! I commited but didn't push
<Drup> smondet: there you go, see the readme
<Drup> it works, but on the dev version of lmdb, and there is no nice cursor interface
<Drup> now that the new ctypes version is out, I should retry the last point of the todo list
<smondet> why? what is wrong with the dynamic version?
<Drup> unnecessary libffi magic.
cesar_ has joined #ocaml
cesar_ is now known as Guest78570
<Drup> smondet: I'm rather happy with the parts of the interface I did, but if you have comments, shoot :)
freling has quit [Quit: Leaving.]
Guest78570 has quit [Ping timeout: 256 seconds]
badkins_ has quit [Read error: Connection reset by peer]
struktured has joined #ocaml
<smondet> Drup: the API looks good to me. But yeah, I need a way to iterate. And they use `flock()` which scares me (that will randomly break when someone puts a DB file on an NFS mount)
<Drup> what kind of iteration do you need to do ?
<Drup> the issue with the cursor interface is that the raw lmdb thing is both very flexible, and insane.
<Drup> but adding a very limited iter function is very easy.
<smondet> go through all the key-values for a given collection (which I agree can be implemented on top of the current API)
paddymahoney has joined #ocaml
paddymahoney has quit [Max SendQ exceeded]
<Drup> so iter.
<Drup> (and no, you can't do that with the current Lmdb module)
<smondet> (I meant you can put all the keys of interest in a value for which you know the key, so get that one, unserialize, and List.iter :) )
<Drup> urg
<Drup> Nope.
<Drup> smondet: do you only need iter : (key -> value -> unit) -> db -> unit ?
ollehar1 has joined #ocaml
<smondet> What I would need is to implement the module type in Trakeva, so be able to go through a subset of the keys (“collections”, or a given prefix, etc)
<Drup> right, so you do need the fancy cursor API
tianon has quit [Read error: Connection reset by peer]
mengu__ has quit [Remote host closed the connection]
tianon has joined #ocaml
kdef has joined #ocaml
claudiuc has joined #ocaml
Algebr has joined #ocaml
oriba has joined #ocaml
<Drup> smondet: would you need the multiple stuff ?
<smondet> I don't know yet :) Still evaluating options
<Drup> the issue with lmdb is that the interface is really awfully unsafe
<smondet> (and right now cannot compile ocaml-lmdb, but seems to be a ctypes problem)
<Drup> basically, you have configuration flags that influence which flags you can enable on the operations later on
<Drup> smondet: better now ?
tianon has quit [Read error: Connection reset by peer]
tianon has joined #ocaml
<smondet> oh, indeed, I had a `ctypes.foreign` ocamlfind package, but not the `ctypes-foreign` opam package...
<Drup> yes, change in ctypes 0.4
olauzon_ has joined #ocaml
<smondet> cool, now I can play with ocaml-lmdb (which compiled fine with the Lmdb in `brew` → 0.9.14)
<Drup> it's possible they released more versions :D
olauzon has quit [Ping timeout: 250 seconds]
olauzon_ is now known as olauzon
larhat has joined #ocaml
<smondet> Drup: ah yes, the dynamic thing, with the wrong version fails later :D Dl.DL_error "dlsym(RTLD_DEFAULT, mdb_version): symbol not found".
<Drup> right.
<Drup> smondet: you understand why I want static stuff now ? ;)
<Drup> (and a cppo layer)
freling has joined #ocaml
pobivan_ has quit [Quit: pobivan_]
olauzon has quit [Quit: olauzon]
olauzon has joined #ocaml
dav has quit [Ping timeout: 246 seconds]
dav has joined #ocaml
MrScout_ has quit [Remote host closed the connection]
tane has quit [Quit: Verlassend]
AlexRussia has quit [Ping timeout: 250 seconds]
xificurC has quit [Ping timeout: 252 seconds]
freling has quit [Quit: Leaving.]
<kakadu> Why I can't do something like this?
<kakadu> type aux_info
<kakadu> include Comb.STREAM with type t := aux_info*string
<Drup> only a name after :=
<Drup> not a type expression
tianon has quit [Read error: Connection reset by peer]
<kakadu> Why this restriction was introduced?
tianon has joined #ocaml
<Drup> it's the natural semantic for what ":=" is doing
<Drup> which is basically "replace a name by another name"
MrScout has joined #ocaml
MrScout has quit [Remote host closed the connection]
<Drup> there is an ticket on mantis where jacque garigues explains why it would be unsound to put anything else.
MrScout has joined #ocaml
ptc has quit [Quit: My MacBook Pro has gone to sleep. ZZZzzz…]
ptc has joined #ocaml
<kakadu> okay, thanks
Submarine has quit [Quit: Leaving]
<smondet> Drup: BTW why did you go for the dev version of lmdb?
<Drup> I figured it would be easier to work, since I would just need to add cppo on top
<Drup> it may have been a wrong move :x
matason has quit [Ping timeout: 264 seconds]
* Anarchos is lost in all his module/functor instantiation graph .
<Drup> smondet: note that I don't actually request the dev version
<Drup> I request a version that implements all the function I declared :D
mcclurmc has joined #ocaml
<lpaste> Anarchos pasted “module mess” at http://lpaste.net/129893
ericwa has joined #ocaml
badkins has joined #ocaml
mengu has joined #ocaml
rand000 has quit [Quit: leaving]
lewis1711 has joined #ocaml
AlexRussia has joined #ocaml
MercurialAlchemi has quit [Ping timeout: 244 seconds]
mengu has quit [Ping timeout: 245 seconds]
freling has joined #ocaml
freling has quit [Client Quit]
Choups314 has quit [Quit: Leaving]
dav_ has joined #ocaml
dav has quit [Ping timeout: 255 seconds]
lewis1711 has quit [Quit: Ex-Chat]
lewis1711 has joined #ocaml
cesar_ has joined #ocaml
Gama11_ has quit [Read error: Connection reset by peer]
cesar_ is now known as Guest51902
tnguyen has quit [Quit: tnguyen]
seangrov` has joined #ocaml
seangrove has quit [Quit: bah]
seangrove has joined #ocaml
seangrove has quit [Remote host closed the connection]
seangrov` has quit [Remote host closed the connection]
seangrove has joined #ocaml
Guest51902 has quit [Ping timeout: 256 seconds]
ptc has quit [Ping timeout: 246 seconds]
ptc has joined #ocaml
Anarchos has quit [Quit: Vision[0.9.7-H-20140108]: i've been blurred!]
tianon has quit [Read error: Connection reset by peer]
tianon has joined #ocaml
Simn has quit [Quit: Leaving]
Hannibal_Smith has quit [Remote host closed the connection]
moei has quit [Quit: Leaving...]
ptc has quit [Ping timeout: 255 seconds]
TheLemonMan has quit [Quit: "It's now safe to turn off your computer."]
mcclurmc has quit [Remote host closed the connection]
ollehar1 has quit [Quit: ollehar1]
olauzon has quit [Quit: olauzon]
dav_ has quit [Ping timeout: 248 seconds]
dav has joined #ocaml
kakadu has quit [Remote host closed the connection]
JuggleTux has quit [Ping timeout: 252 seconds]
moei has joined #ocaml
JuggleTux has joined #ocaml
AlexRussia has quit [Ping timeout: 264 seconds]
tianon has quit [Read error: Connection reset by peer]
tianon has joined #ocaml
nullcat has joined #ocaml
hellome has joined #ocaml
Algebr has quit [Remote host closed the connection]
Algebr has joined #ocaml
lewis1711 has quit [Ping timeout: 250 seconds]
dav has quit [Ping timeout: 264 seconds]
nullcat has quit [Quit: My Mac has gone to sleep. ZZZzzz…]
<haesbaert> I'm still confused with Lwt_main.run
<haesbaert> am I allowed to use lwt before calling it ?
<Drup> sure
dav has joined #ocaml
<haesbaert> so it's fine to setup some threads and then call Lwt_main.run (Lwt.join [..])
<Drup> yes, very fine.
<Drup> (it's even the right way :D)
<haesbaert> thanks, now it feels correct :D
AlexRussia has joined #ocaml
tianon has quit [Read error: Connection reset by peer]
tianon has joined #ocaml
AlexRussia has quit [Ping timeout: 264 seconds]
ghostpl_ has quit [Remote host closed the connection]
mcclurmc has joined #ocaml
<Denommus> ok, Netwire does a good amount of monadic magic only to step the session
madroach has quit [Ping timeout: 264 seconds]
ontologiae has quit [Ping timeout: 248 seconds]
madroach has joined #ocaml
mcclurmc has quit [Ping timeout: 256 seconds]
tianon has quit [Read error: Connection reset by peer]
tianon has joined #ocaml
<oriba> Is there somewhere an explanation about Bytes vs. String? The situation is not completely clear to me.
<Drup> bytes = string, until you pass the -safe-string
<Drup> then bytes != string and string is not mutable
AlexRussia has joined #ocaml
swgillespie has joined #ocaml
ghostpl_ has joined #ocaml
<Drup> dsheets: what are you using tower for ?
ghostpl_ has quit [Ping timeout: 250 seconds]