nikki93 has quit [Remote host closed the connection]
Neros has quit [Read error: Operation timed out]
cesar_ has joined #ocaml
cesar_ is now known as Guest62219
mcclurmc has joined #ocaml
mcclurmc has quit [Remote host closed the connection]
Guest62219 has quit [Ping timeout: 246 seconds]
mcclurmc has joined #ocaml
csakatoku has quit [Remote host closed the connection]
ggole has joined #ocaml
mcclurmc has quit [Remote host closed the connection]
ggole has quit [Ping timeout: 246 seconds]
nikki93 has joined #ocaml
nikki93 has quit [Remote host closed the connection]
nikki93 has joined #ocaml
tulloch has quit [Ping timeout: 264 seconds]
ggole has joined #ocaml
csakatoku has joined #ocaml
tulloch has joined #ocaml
nikki93 has quit [Remote host closed the connection]
tulloch has quit [Ping timeout: 264 seconds]
nikki93 has joined #ocaml
tulloch has joined #ocaml
mcclurmc has joined #ocaml
tulloch has quit [Ping timeout: 272 seconds]
mcclurmc has quit [Ping timeout: 264 seconds]
cricri has joined #ocaml
cricri_ has quit [Ping timeout: 245 seconds]
mcclurmc has joined #ocaml
ygrek_ has quit [Ping timeout: 272 seconds]
csakatoku has quit [Remote host closed the connection]
csakatoku has joined #ocaml
manizzle has joined #ocaml
csakatoku has quit [Remote host closed the connection]
csakatoku has joined #ocaml
WraithM has quit [Ping timeout: 248 seconds]
Simn has joined #ocaml
WraithM has joined #ocaml
cesar_ has joined #ocaml
cesar_ is now known as Guest82960
manizzle has quit [Remote host closed the connection]
manizzle has joined #ocaml
rand000 has joined #ocaml
Guest82960 has quit [Ping timeout: 265 seconds]
mcclurmc has quit [Remote host closed the connection]
Kueken_2 is now known as Kueken
gour has joined #ocaml
nikki93 has quit [Remote host closed the connection]
tulloch has joined #ocaml
ygrek_ has joined #ocaml
csakatok_ has joined #ocaml
tulloch has quit [Ping timeout: 264 seconds]
csakatoku has quit [Ping timeout: 246 seconds]
wormphlegm has quit [Ping timeout: 272 seconds]
ttamttam has joined #ocaml
mcclurmc has joined #ocaml
cesar_ has joined #ocaml
chambart has joined #ocaml
cesar_ is now known as Guest15289
baz_ has joined #ocaml
mcclurmc has quit [Ping timeout: 245 seconds]
tulloch has joined #ocaml
chambart has quit [Remote host closed the connection]
w0rm_x has joined #ocaml
tulloch has quit [Ping timeout: 245 seconds]
csakatok_ has quit [Remote host closed the connection]
csakatoku has joined #ocaml
w0rm_x has left #ocaml []
csakatoku has quit [Ping timeout: 252 seconds]
djcoin has joined #ocaml
wormphlegm has joined #ocaml
wormphlegm has quit [Ping timeout: 272 seconds]
Guest15289 has quit [Remote host closed the connection]
csakatoku has joined #ocaml
NoNNaN has quit [Remote host closed the connection]
cago has joined #ocaml
zpe has joined #ocaml
mika1 has joined #ocaml
mika1 has quit [Read error: Connection reset by peer]
AltGr has joined #ocaml
mika1 has joined #ocaml
BitPuffin has joined #ocaml
BitPuffin has quit [Read error: Operation timed out]
nikki93 has joined #ocaml
ocp has joined #ocaml
osa1 has quit [Ping timeout: 272 seconds]
rwmjones_afk is now known as rwmjones
mcclurmc has joined #ocaml
Fnar has quit [Ping timeout: 246 seconds]
Fnar has joined #ocaml
mcclurmc has quit [Ping timeout: 245 seconds]
baz_ has quit [Remote host closed the connection]
Kakadu has joined #ocaml
tulloch has joined #ocaml
tulloch has quit [Ping timeout: 240 seconds]
thomasga has joined #ocaml
csakatoku has quit [Remote host closed the connection]
csakatoku has joined #ocaml
csakatoku has quit [Ping timeout: 272 seconds]
wormphlegm has joined #ocaml
baz_ has joined #ocaml
paolooo has joined #ocaml
paolooo_ has joined #ocaml
ollehar has joined #ocaml
jonludlam has joined #ocaml
csakatoku has joined #ocaml
wormphlegm has quit [Ping timeout: 245 seconds]
paolooo has quit [Ping timeout: 250 seconds]
csakatoku has quit [Remote host closed the connection]
csakatoku has joined #ocaml
csakatoku has quit [Remote host closed the connection]
csakatoku has joined #ocaml
csakatoku has quit [Ping timeout: 264 seconds]
csakatoku has joined #ocaml
dsheets_ has quit [Ping timeout: 245 seconds]
cesar_ has joined #ocaml
cesar_ is now known as Guest92787
csakatoku has quit [Remote host closed the connection]
Guest92787 has quit [Ping timeout: 252 seconds]
csakatoku has joined #ocaml
kyrylo has joined #ocaml
paolooo_ has quit [Quit: Page closed]
csakatoku has quit [Read error: Connection reset by peer]
csakatoku has joined #ocaml
rand000 has quit [Ping timeout: 264 seconds]
_5kg has quit [Ping timeout: 252 seconds]
BitPuffin has joined #ocaml
_5kg has joined #ocaml
csakatoku has quit [Remote host closed the connection]
csakatoku has joined #ocaml
mcclurmc has joined #ocaml
skchrko has quit [Quit: Leaving]
vanh` has joined #ocaml
csakatoku has quit [Ping timeout: 245 seconds]
mcclurmc has quit [Ping timeout: 248 seconds]
tulloch has joined #ocaml
thomasga has quit [Quit: Leaving.]
csakatoku has joined #ocaml
thomasga has joined #ocaml
avsm has joined #ocaml
avsm has quit [Client Quit]
tulloch has quit [Ping timeout: 272 seconds]
avsm has joined #ocaml
dsheets_ has joined #ocaml
avsm has quit [Client Quit]
adrien_oww has joined #ocaml
adrien_o1w has quit [Ping timeout: 272 seconds]
wormphlegm has joined #ocaml
<Kueken>
So I want to write an ocaml system monitor tool as a learning exercise and because I hate conky? Are there any libraries already there that would make getting system info like processor capacity and temperature etc easier?
vanh` has quit [Quit: ERC Version 5.3 (IRC client for Emacs)]
wormphlegm has quit [Ping timeout: 245 seconds]
csakatoku has quit [Remote host closed the connection]
csakatoku has joined #ocaml
csakatoku has quit [Ping timeout: 272 seconds]
<sgnb>
Kueken: easier than what? reading in /sys and /proc ?
kyrylo has quit [Ping timeout: 245 seconds]
<Kueken>
sgnb, more like if a lib already exists that does it so I don't re-invent something already existing.
csakatoku has joined #ocaml
<sgnb>
I would have a look at how similar software is implemented, but I doubt there is an existing library with OCaml bindings
<Kueken>
sgnb, so just reading and parsing /proc is the way to go?
<Kueken>
I thought maybe a set of system calls would exist
<sgnb>
Kueken: if you don't want to spend too much time on this, I would say so
<gasche>
I think on a linux host I would *still* start by reading/writing /proc, but that could still be inspiration
<Kueken>
gasche, extunix is a library?
<sgnb>
yes
<Kueken>
Hmm
<Kueken>
It seems to be a module for low level unix system stuff?
<gasche>
yes
<gasche>
most of which you shouldn't need
<gasche>
but if at some point you think "oh, I wish I could do this system call", you should look into ExtUnix and possibly send a patch there
<Kueken>
Ah yes.
<Kueken>
And apc is moe an actual system monitor than a library for doing so right?
tulloch has joined #ocaml
<Kueken>
I intend to mostly make a command line tool whic queries system data
mchqwerty has joined #ocaml
<gasche>
yes, apc is a graphic monitor
tulloch has quit [Ping timeout: 240 seconds]
mort___ has joined #ocaml
nikki93 has quit [Remote host closed the connection]
bjorkintosh has quit [Ping timeout: 265 seconds]
mcclurmc has joined #ocaml
mcclurmc has quit [Ping timeout: 248 seconds]
nikki93 has joined #ocaml
csakatoku has quit [Remote host closed the connection]
rand000 has joined #ocaml
_andre has joined #ocaml
tulloch has joined #ocaml
Kueken has quit [Disconnected by services]
nikki93 has quit [Remote host closed the connection]
Lajjla has joined #ocaml
wormphlegm has joined #ocaml
wormphlegm has quit [Ping timeout: 252 seconds]
cesar_ has joined #ocaml
cesar_ is now known as Guest58135
Guest58135 has quit [Ping timeout: 265 seconds]
mort___ has quit [Quit: Leaving.]
mort___ has joined #ocaml
kthl has joined #ocaml
talzeus has quit [Remote host closed the connection]
Neros has joined #ocaml
mcclurmc has joined #ocaml
talzeus has joined #ocaml
tulloch has quit [Ping timeout: 240 seconds]
thomasga has quit [Quit: Leaving.]
rand000 has quit [Ping timeout: 245 seconds]
mcclurmc has quit [Ping timeout: 248 seconds]
rand000 has joined #ocaml
thomasga has joined #ocaml
tulloch has joined #ocaml
tulloch has quit [Ping timeout: 240 seconds]
ygrek_ has quit [Ping timeout: 272 seconds]
thomasga has quit [Quit: Leaving.]
avsm has joined #ocaml
nikki93 has joined #ocaml
kthl` has joined #ocaml
thomasga has joined #ocaml
wormphlegm has joined #ocaml
kthl has quit [Ping timeout: 272 seconds]
nikki93 has quit [Ping timeout: 245 seconds]
talzeus has quit [Remote host closed the connection]
Kakadu has quit [Ping timeout: 250 seconds]
zpe_ has joined #ocaml
zpe_ has quit [Remote host closed the connection]
zpe_ has joined #ocaml
kthl`` has joined #ocaml
wormphlegm has quit [Read error: Operation timed out]
osa1 has joined #ocaml
zpe__ has joined #ocaml
zpe_ has quit [Read error: Operation timed out]
zpe has quit [Ping timeout: 246 seconds]
zpe__ has quit [Remote host closed the connection]
zpe has joined #ocaml
kthl` has quit [Ping timeout: 272 seconds]
jayprich has joined #ocaml
ttamttam has quit [Quit: ttamttam]
mort___ has quit [Quit: Leaving.]
sbidin` has joined #ocaml
* jayprich
"drops pin"
thomasga has quit [Quit: Leaving.]
mfp has quit [Quit: Leaving]
breakds has joined #ocaml
zzz_ has joined #ocaml
zzz_` has quit [Ping timeout: 272 seconds]
_andre has quit [Quit: Lost terminal]
_andre has joined #ocaml
mfp has joined #ocaml
mcclurmc has joined #ocaml
djcoin has quit [Quit: WeeChat 0.4.1]
mcclurmc has quit [Ping timeout: 248 seconds]
bjorkintosh has joined #ocaml
t0yv0 has joined #ocaml
rwmjones has quit [Ping timeout: 246 seconds]
thomasga has joined #ocaml
cesar_ has joined #ocaml
cesar_ is now known as Guest5750
rwmjones has joined #ocaml
tulloch has joined #ocaml
jayprich has left #ocaml []
Guest5750 has quit [Ping timeout: 245 seconds]
darkf has quit [Quit: Leaving]
tulloch has quit [Ping timeout: 245 seconds]
Xenasis has joined #ocaml
tulloch has joined #ocaml
Yoric has joined #ocaml
csakatoku has joined #ocaml
tulloch has quit [Ping timeout: 246 seconds]
breakds has quit [Remote host closed the connection]
csakatoku has quit [Remote host closed the connection]
<Lajjla>
The book eal world Ocaml seems to use a 'Float' module, googling fo it seems to imply that it's rather obscure but it has useful functions like Float.of_string, any way to install it with opam?
<companion_cube>
it must be included in Core
<companion_cube>
since RWO is based on core
<flux>
standard ocaml has float_of_string, though
<flux>
but sure, it's nice to have the organized under Float
tulloch has joined #ocaml
mcclurmc has joined #ocaml
<mrvn>
let float_of_string s = Scanf.sscanf "%f" s (fun x -> x)
<Drup>
mrvn: the built in float_of_string is not good enough for you ?
<flux>
also there was the word "like"
<flux>
the builtin functions are most just put into Pervasives :)
<flux>
of course, grepping for 'float' from Pervasives can find them for you
<mrvn>
where is the fun in that?
<mrvn>
It's nice to have a module for every arithmetic type though so you can make functors over it.
<Drup>
mrvn: please, once and for all, keep in mind that you are helping newbies, most of the time.
<mrvn>
sorry, wasn't helping. just commenting
<Drup>
indeed, you weren't.
* mrvn
goes back watching the compiler compile.
kthl``` has joined #ocaml
<Lajjla>
companion_cube, hmm, it works in utop but using ocaml itsleef interactively with a script gives me 'erorr, unbound module core'
kthl`` has quit [Ping timeout: 246 seconds]
ygrek_ has joined #ocaml
wormphlegm has joined #ocaml
<companion_cube>
Lajjla: to make it work, you need to 1/ install core (opam install core) 2/ compile with core
<Lajjla>
companion_cube, well core is in installed, and compile with core?
<companion_cube>
I think RWO probably explains how to do that in some "setup" introductory section
<Lajjla>
THis is an intereactive session
<companion_cube>
ah, so you must #require "core";; or something
<Lajjla>
YEah, I tried that and then it complains about an unknown directive require
<Lajjla>
To be more exact, I have a file x.ml with a single function in it and I'm running ocaml.ml to try to see if the function works
<thomasga>
opam config setup —ocamlinit
<Lajjla>
At keast I'm tying to but it complains about all this stuff
<Lajjla>
let me see
<Lajjla>
Same stuff, unbound module core
tulloch has quit [Ping timeout: 246 seconds]
<Lajjla>
Or is it impossible to use core with an interactive session?
tulloch has joined #ocaml
<companion_cube>
Lajjla: try #use "topfind";; in your ocaml first
paolooo has joined #ocaml
<companion_cube>
if it succeeds, then #require "core";; should succeed too (if core is installed)
<Lajjla>
"cannot find file topfind"
<Lajjla>
topfind works in utop by the way
<Lajjla>
All this stuff works in utop, just not in an interactive ocaml session wherein I have defined a function to test
paolooo_ has joined #ocaml
<companion_cube>
oh, I suspect you use a systemwide ocaml, whereas utop is the opam version
<Lajjla>
Hmm
<Lajjla>
As in there are two different ones installed?
<companion_cube>
or it's a path problem
<Lajjla>
I read that opam installs in your home instead of in /
<companion_cube>
yes
talzeus has joined #ocaml
<companion_cube>
that's why you need to "eval $( opam config env)"
<companion_cube>
so that the path is properly set to ~/.opam
strobegen has quit [Quit: Leaving.]
paolooo has quit [Ping timeout: 250 seconds]
<Lajjla>
The thing told me to do do that but with backticks and I did
<Lajjla>
Just did it again, this time with $( ... ), still the same thig, cannot find file topfind
<smondet>
Lajjla: so if you have the system-wide ocaml and you want to use it with opam's ocamlfind (the #use "topfind" thing)
<smondet>
you need to call: ocaml -I $OCAML_TOPLEVEL_PATH
<smondet>
where OCAML_TOPLEVEL_PATH has been set by eval `opam config env`
kthl```` has joined #ocaml
strobegen has joined #ocaml
kthl``` has quit [Ping timeout: 252 seconds]
skchrko has joined #ocaml
<Lajjla>
smondet, nope, same error, echoing $OCAML_TOPLEVEL_PATH gives me '/home/laj/.opam/4.01.0/lib/toplevel'
<smondet>
if it is ".opam/4.01.0/
<smondet>
you're not using the system-wide ocaml
<smondet>
what does "which ocaml" give you?
ollehar has quit [Quit: ollehar]
<Lajjla>
smondet /home/laj/.opam/4.01.0/bin/ocaml
<Lajjla>
But I got core to work now, don't ask me why, but ExtLib still doesn't work
<Lajjla>
It works in utop but not in ocaml
<Lajjla>
Nevermind, got that too
osa1 has quit [Quit: Konversation terminated!]
WraithM_ has joined #ocaml
mchqwerty has quit [Quit: Odcházím]
<sgnb>
maurer: what do you mean by "The situation is worse than the cabal/os package manager situation"?
cesar_ has joined #ocaml
cesar_ is now known as Guest26584
skchrko has quit [Ping timeout: 264 seconds]
<adrien_oww>
where?
sbidin` has quit [Quit: ERC Version 5.3 (IRC client for Emacs)]
Guest26584 has quit [Ping timeout: 272 seconds]
<maurer>
sgnb: The packages which tend to be present in the OS package managers arefrequently out of date / incompatible with the new stuff, and can take >1yr in some cases to receive bugfixes
<mrvn>
or just hours.
<Drup>
maurer: like what ?
ollehar has joined #ocaml
<sgnb>
ocaml itself, for example
<maurer>
Drup: There was a bug in the batteries hashtable delete for a while - got fixed pretty quick in batteries proper, as of a few months ago the fix wasn't in debian
<Drup>
yeah
<Drup>
*debian*
<mrvn>
maurer: did you make one?
<mrvn>
(debian package)
<maurer>
well, the guy in question when I said that was talking about using apt-get to install stuff
<sgnb>
well, updating ocaml in debian is painful because it breaks everything
<maurer>
mrvn: no, because for our research grant we were required to make a thing that ran on debian stable
<sgnb>
but updating individual library is usually straightforward
ollehar has quit [Client Quit]
<maurer>
mrvn: so we build batteries into our app instead
<sgnb>
ah
<sgnb>
of course, if you restrict to debian stable... but the problem is not specific to ocaml
<mrvn>
maurer: you can still make a debian package and do a Non-Maintainer-Upload
<maurer>
sgnb: Never said it was.
Neros has quit [Ping timeout: 245 seconds]
<maurer>
sgnb: All I was trying to do was to tell a haskell guy why he should probably try to install from opam over apt-get :(
<Lajjla>
smondet, ehh is '~/.opam/4.01.0/lib/toplevel' supposed to ocntain only one file 'topfind'?
<mrvn>
That a batteries with a broken Hashtbl.delete got into stable in the first place is a problem. Shows a lack of good unit tests in batteries.
<sgnb>
well, whatever you do with opam can be done with dpkg so it sounds strange to involve opam when debian is an imposed platform
<sgnb>
however, using dpkg needs root privileges so this alone might be a reason to use opam depending on circumstances
<mrvn>
The advantage of apt/dpkg is that it installed the right C libraries and keeps them at the right version.
<sgnb>
indeed
ollehar has joined #ocaml
<mrvn>
Mixing package management systems usualy isn't a good idea.
rand000 has quit [Ping timeout: 264 seconds]
<sgnb>
C libraries and third-party tools (I remember needing installing m4 explicitly when using opam)
<adrien_oww>
with ocaml at least, it's safe :P
skchrko has joined #ocaml
<adrien_oww>
won't work :)
<mrvn>
adrien_oww: if by work you mean your apps suddenly stop working because some lib got updated.
<smondet>
Lajjla: I dependes on what you have installed for that switch (if you have ocamlfind installed "topfind" should be there I think)
<Lajjla>
smondet so topfind and nothing more is fine?
<Lajjla>
I had the idea that librariers were in there or something
<adrien_oww>
mrvn: with static linking and checksums on ABI, you're pretty safe
<mrvn>
adrien_oww: C libs are statically linked
<mrvn>
not
<adrien_oww>
not?
<adrien_oww>
yeah
<adrien_oww>
I was mostly joking :)
<sgnb>
no, C libs are not statically linked
<mrvn>
All the ocaml stuff will be in opam, that part is save.
<sgnb>
C stubs are
<smondet>
Lajjla: that's what I have, only topfind, but other libraries may install stuff specific to the toplevel
<sgnb>
so if a C library is updated in an ABI-incompatible way, even OCaml binaries will crash
<sgnb>
(or hopefully fail to start)
<mrvn>
sgnb: in Debian they will refuse to start because the lib won't be there.
<Lajjla>
smondet, hmm, do you otherwise know how to load an x.ml module into utop?
<smondet>
Lajjla: usually packages install in <switch>/lib/<package> , <switch>/lib/toplevel is for the toplevel-only scripts
<sgnb>
mrvn: if things are done right :-) which is not technically enforced by the toolchain AFAICT
<mrvn>
sgnb: Debian is verry good there. Better than any other distribution.
<Lajjla>
smondet, no I mean an x.ml file which I creatd myself which sits n a random directory
<Lajjla>
Basically to test if the functions I defined in it work
<sgnb>
mrvn: I know :-)
<smondet>
→ #use "x.ml";; ?
* mrvn
just uses cut&paste for testing.
<Drup>
mrvn, sgnb : I don't :D
ollehar has quit [Quit: ollehar]
amirmc has joined #ocaml
ollehar has joined #ocaml
gour has quit [Disconnected by services]
gour_ has joined #ocaml
gour_ is now known as gour
thomasga has quit [Ping timeout: 246 seconds]
thomasga has joined #ocaml
Kakadu has joined #ocaml
w0rm_x has joined #ocaml
cesar_ has joined #ocaml
cesar_ is now known as Guest76060
talzeus has quit [Read error: Connection reset by peer]
cago has left #ocaml []
mika1 has quit [Quit: Leaving.]
paolooo_ has quit [Quit: Page closed]
Yoric has quit [Ping timeout: 245 seconds]
mcclurmc has quit [Remote host closed the connection]
ollehar has quit [Quit: ollehar]
ygrek_ has quit [Ping timeout: 272 seconds]
BiDOrD_ has joined #ocaml
Kakadu_ has joined #ocaml
BiDOrD has quit [Ping timeout: 260 seconds]
sgnb has quit [Remote host closed the connection]
BitPuffin has quit [Ping timeout: 245 seconds]
<smondet>
Lajjla: yes "#use" looks in the current directory and in every directory declared with "#directory", you can give any path
shinnya has joined #ocaml
sgnb has joined #ocaml
mcclurmc has joined #ocaml
ocp has quit [Ping timeout: 248 seconds]
tane has joined #ocaml
Kakadu has quit [Quit: Page closed]
Kakadu_ has quit []
ygrek_ has joined #ocaml
Guest76060 has quit [Remote host closed the connection]
tulloch has quit [Read error: Connection reset by peer]
nikki93 has joined #ocaml
cesar_ has joined #ocaml
cesar_ is now known as Guest88458
baz_ has quit [Remote host closed the connection]
tulloch has joined #ocaml
Guest88458 has quit [Remote host closed the connection]
nikki93 has quit [Ping timeout: 272 seconds]
t0yv0 has quit [Quit: Page closed]
kthl```` has quit [Ping timeout: 272 seconds]
jzelinskie has quit [Ping timeout: 260 seconds]
skchrko has quit [Quit: Leaving]
Yoric has joined #ocaml
jzelinskie has joined #ocaml
t0yv0 has joined #ocaml
kthl```` has joined #ocaml
ygrek_ has quit [Ping timeout: 246 seconds]
jbrown has quit [Remote host closed the connection]
Arsenik has joined #ocaml
adr has joined #ocaml
zpe has quit [Remote host closed the connection]
zpe has joined #ocaml
Kakadu has joined #ocaml
adr has quit [Quit: Quitte]
zpe has quit [Ping timeout: 240 seconds]
tulloch has quit [Read error: Connection reset by peer]
boogie has joined #ocaml
kthl```` has left #ocaml []
osa1_ has joined #ocaml
ericbmerritt has joined #ocaml
tristan__ has joined #ocaml
jonludlam has quit [Ping timeout: 252 seconds]
avsm has quit [Quit: Leaving.]
avsm has joined #ocaml
Xenasis has quit [Remote host closed the connection]
tulloch has joined #ocaml
kyrylo has joined #ocaml
contempt has quit [Ping timeout: 252 seconds]
contempt has joined #ocaml
avsm has quit [Ping timeout: 272 seconds]
boogie has quit [Remote host closed the connection]
amirmc has quit [Quit: Leaving.]
AltGr has left #ocaml []
mfp has quit [Read error: Connection reset by peer]
contempt has quit [Remote host closed the connection]
contempt has joined #ocaml
paolooo has joined #ocaml
anderse has joined #ocaml
contempt has quit [Ping timeout: 245 seconds]
contempt has joined #ocaml
Xenasis has joined #ocaml
paolooo_ has joined #ocaml
paolooo has quit [Ping timeout: 250 seconds]
mfp has joined #ocaml
dsheets_ has quit [Read error: Operation timed out]
contempt has quit [Ping timeout: 252 seconds]
contempt has joined #ocaml
anderse has quit [Ping timeout: 272 seconds]
contempt has quit [Ping timeout: 240 seconds]
contempt has joined #ocaml
manizzle has quit [Ping timeout: 264 seconds]
zpe has joined #ocaml
<ddosia>
Hi. I am learning ocaml and found some things that I could not understand
<ddosia>
it is allow to pass negative integers as well
<ddosia>
and result will be 1.
<Drup>
you would throw an exception ?
<ddosia>
I would
<Drup>
It's not a bad idea, and it would be acceptable too. As I said, it depends of what you are doing
<ddosia>
Imagine that I have complex logic to calculate some math, and for some reason there error and negative number passed there
<bernardofpc>
you could also have +- infinities for fact
<tristan__>
ddosia: welcome fellow Erlanger ;)
<ddosia>
Drup: agree, it depends. But when I write arm in function which accepts only positive integers I get compiler's warning
<Drup>
ddosia: but it would make the code bigger to handler that, and introduce the concept of exception, whereas it's only a very short snipper for very new beginners
<ddosia>
tristan__: _07
<Drup>
handle* snippet*
<technomancy>
yeah, don't take tutorial code as an example of robust idiomatic real-world code
BitPuffin has joined #ocaml
<technomancy>
especially not when the goal of the tutorial is to cover X concepts in 100 lines =)
<ddosia>
So in erlang I just handle right clauses and let it fail in wrong clauses. In OCaml compiler complains "this pattern-matching is not exhaustive"
<Drup>
it's a warning, not an error
<ddosia>
Still, what should I do? I cant just skip this warning or shut it up
contempt has quit [Ping timeout: 245 seconds]
<Drup>
and you shouldn't.
<ddosia>
And I prefer not to have any compiler complains to feel safety
<flux>
some people think you should enumerate all possibilities, to guard avoid not handling the possible future new enumeration
<flux>
if you are not one of those people you can add | _ -> failwith "oops"
<tristan__>
flux: which is foreign to an erlang in many cases
<tristan__>
but yes, ddosia you dont'w ant to do that in ocaml
<ddosia>
Could somebody give me idiomatic OCaml example of factorial functions, which will fail if negative integer is passed as value?
contempt has joined #ocaml
<tristan__>
depending on how you want to use the function you could reutrn None for a negative number, return an error, throw an exception
paolooo_ has quit [Quit: Page closed]
<ddosia>
This None and Some things I still could not understand. But htis is metter of time and practice
<technomancy>
ddosia: it's like when you return {ok, X} in erlang
<technomancy>
except the compiler can help you with it
<tristan__>
yup, thats what I was about ot say :)
<technomancy>
probably my favourite thing about ocaml
<Drup>
ddosia: do you know about exception already ?
<ddosia>
Drup: I will, just need to clarify couple of things
contempt has quit [Ping timeout: 240 seconds]
<Drup>
This is a solution, but it presents a major disadvantage : you need to explicitly handle the fact that it returns an option
<Drup>
and sometimes, you don't want to do that
w0rm_x has left #ocaml []
<Drup>
in the case of fact, I don't think it's a good idea
<ddosia>
Drup: could you point me, what the error there?
contempt has joined #ocaml
<Drup>
the type error comes from the fact that fact returns a "int option" and you try to multiply it
<Drup>
(end of line 3)
<ddosia>
Ahh, I need to handle that with match?
<Drup>
yes
<ddosia>
I see
mfp has quit [Ping timeout: 245 seconds]
kyrylo has quit [Ping timeout: 272 seconds]
<Drup>
also, in your code, you test if it's positive each loop, and handle it that way
<Drup>
you can avoid that by using an auxiliary function, that will do the looping
<ddosia>
could I somehow put there: | k when k > 1 && is_integer k -> k * fac (k - 1) ?
<Drup>
and check it before using this auxiliary function
<flux>
(is_integer?)
<Drup>
is_integer wouldn't work
<ddosia>
flux: I am just inventing a way to check that this is int not an option
<Drup>
because k is always an integer, that's the other part of the multiplication who has an issue ;)
kyrylo has joined #ocaml
<flux>
ddosia, ah. well k <> None works, but actually you would write it like | Some k when k -> 1 .., but in the line before you say k is not an option value, so that's a no
<Drup>
and also, int option doesn't magically became an int if you check if it's "Some X"
<flux>
in your case it would make sense indeed to have k always be an integer, not integer option
<flux>
it's the return value that would be integer option
<flux>
case in point: it is true that 5 = 5, and also Some 5 = Some 5, but it is a compile error to have Some 5 = 5
<ddosia>
hmmm
<ddosia>
I believe that such complexity will give compiler advantage to optimize my code and prove it's correctness
contempt has quit [Ping timeout: 264 seconds]
<flux>
I like to think it's for the benefit of the programmer
contempt has joined #ocaml
<Drup>
less debuging = less headache = happy programmer.
<ddosia>
Could somebody help me with that pastebin to fix that? So it will return option int ?
_andre has quit [Quit: leaving]
boogie has joined #ocaml
<Drup>
I would advice for another way
<Drup>
1) write a "bad" fact function
<Drup>
2) encapsulate this bad fact function in a good one, that will do all the checking
<Drup>
(we can try to fix your function "do everything in on go" after, if you really want to)
manizzle has joined #ocaml
mfp has joined #ocaml
contempt has quit [Ping timeout: 246 seconds]
<ddosia>
no, I ll try as you suggest
contempt has joined #ocaml
cthuluh has quit [Ping timeout: 245 seconds]
ollehar has joined #ocaml
cthuluh has joined #ocaml
NoNNaN has joined #ocaml
ulfdoz has joined #ocaml
contempt has quit [Ping timeout: 248 seconds]
TDJACR has quit [Ping timeout: 245 seconds]
mort___ has joined #ocaml
<ddosia>
Drup: I wrote bad_fac function which works. Bud I could not figure out how to wrap it around with option? http://pastebin.com/wjpm6B2R
<ddosia>
It is seems that I some how need to convert k from option int to int
contempt has joined #ocaml
<Drup>
"Some bad_fac k" -> you should write "Some (bad_fact k)"
boogie has quit [Remote host closed the connection]
<ddosia>
Ah, thanks
<ddosia>
Ok I will learn further, thanks for your help
<Drup>
(as a bonus point, this is more efficient than your original version)
tulloch has quit [Ping timeout: 272 seconds]
contempt has quit [Ping timeout: 252 seconds]
TDJACR has joined #ocaml
contempt has joined #ocaml
mcclurmc has quit [Remote host closed the connection]
<tristan__>
does ocaml not have anything for working with Option in a cleaner way..
dsheets_ has joined #ocaml
<Drup>
tristan__: not in the standard library. you can find that in some other general purpose libraries, lik Batteries and Core.
<technomancy>
ISTR some libs having monadic option functions
contempt has quit [Ping timeout: 240 seconds]
<tristan__>
ah ok, I'll have to look at those
<tristan__>
was thinking in haskell could put it together with fmap and <*>
<tristan__>
or lift
<Drup>
you can find Option.map in those libraries
contempt has joined #ocaml
<technomancy>
yeah I wish Option.map came out of the box
<technomancy>
but Core is just a different box
<Drup>
technomancy: Batteries is not :p
shinnya has quit [Ping timeout: 246 seconds]
<tristan__>
not in Core2 either?
<Drup>
tristan__: Core2 ?
<tristan__>
jane street Core
contempt has quit [Ping timeout: 245 seconds]
contempt has joined #ocaml
<mrvn>
What does Option.map do?
<Drup>
mrvn: fun f -> function Some x -> f x | None -> None
<Drup>
tristan__: sure, that's the "Core" we were talking about. And yes, you have an Option module in it with all the goodies
<tristan__>
ooo
<Drup>
don't ask me were, I don't know Core and I find it's a huge mess.
<Drup>
I know it's somewhere, that's all.
<mrvn>
Drup: not "Some (f x)"?
<Drup>
mrvn: yeah, sure, typo.
kyrylo has quit [Ping timeout: 252 seconds]
ggole has quit []
tane has quit [Quit: Verlassend]
contempt has quit [Ping timeout: 245 seconds]
contempt has joined #ocaml
cricri_ has joined #ocaml
mcclurmc has joined #ocaml
adr has joined #ocaml
cricri has quit [Ping timeout: 264 seconds]
contempt has quit [Ping timeout: 240 seconds]
contempt has joined #ocaml
adr has quit [Client Quit]
davekong has quit []
boogie has joined #ocaml
contempt has quit [Ping timeout: 240 seconds]
contempt has joined #ocaml
tulloch has joined #ocaml
contempt has quit [Ping timeout: 246 seconds]
contempt has joined #ocaml
contempt has quit [Ping timeout: 272 seconds]
jonludlam has joined #ocaml
contempt has joined #ocaml
contempt has quit [Ping timeout: 265 seconds]
contempt has joined #ocaml
<ddosia>
> The concatenation operator is provided as part of the Perva
<ddosia>
sives module, which is automatically opened in every OCaml program.
<ddosia>
what does it mean?
<bernardofpc>
Pervasives is something like "stdlib"
<bernardofpc>
being "opened" means that you don't need to prefix any function of it to use
<mrvn>
Pervasives is a collection of usefull stuff that has nowhere else to go
<ddosia>
is it means that "^" is not part of the ocaml's syntax?
<Drup>
ddosia: no, it's a regular operator
<bernardofpc>
it's a function, and because it has only funny simbols in its name, it's an infix operator
<Drup>
(in particular, you can redefine it, if you really want)
<bernardofpc>
you could define all kinds of useful "operators" with that syntax
<bernardofpc>
(what is the state of + ?)
<Drup>
bernardofpc: same for +, and every other operator
<Drup>
the only exceptions are the "named" operator, like "lxor"
<bernardofpc>
if I have a module Foo with operator +, how can I use it ?
<bernardofpc>
a Foo.+ b ?
<Drup>
Foo.(a + b)
<Drup>
(local open is magic :p)
<Drup>
you can redefined alphanum operators that already exists, but they are hardcoded in the parser
nikki93 has quit [Remote host closed the connection]
<mrvn>
Too bad infix operators don't work with module name prefix: 1 M.( + ) 2;;
<Drup>
it's like that in haskell
<Drup>
and it's horrible to read
<Drup>
M.(1 + 2) is far better
contempt has quit [Ping timeout: 248 seconds]
<mrvn>
Why doesn't M.+ 1 2;; work?
contempt has joined #ocaml
<Drup>
mrvn: + 1 2 doesn't work either,
<Drup>
M.(+) 1 2 does work
<mrvn>
but there it is an infix. M.+ is not.
<Drup>
it is infix
<mrvn>
mut I guess that parses as (M.) (+)
<mrvn>
s/mut/but/
<Drup>
but the parser accept only "char operators" in infix position
<Drup>
and M is not one of those
tulloch has quit [Ping timeout: 265 seconds]
<Drup>
operator chars*
<mrvn>
What was M.( + ) before local modules?
<Drup>
M.(+) is not a local open
<mrvn>
sure about that? Would work as that and not make it a special case.
<Drup>
I'm not completly sure, but I strongly believe so
contempt has quit [Ping timeout: 264 seconds]
<mrvn>
I see no reason to make it special. Works fine as local open.
<Drup>
it was here before local open
contempt has joined #ocaml
<mrvn>
module M = struct end;; let foo x y = x + y;;
<mrvn>
# M.(foo) 1 2;;
<mrvn>
- : int = 3
<mrvn>
# M.(+) 1 2;;
<mrvn>
Error: Unbound value M.+
<mrvn>
Drup: you seem to be right.
<mrvn>
# M.( (+) ) 1 2;;
<mrvn>
- : int = 3
BiDOrD_ has quit [Ping timeout: 246 seconds]
<asmanur>
M.(+) does not make any sense as a local open as + is not a valid expression
<mrvn>
yeah, I realised that. M.((+)) is the corrent syntax
<Drup>
or M.(+) :D
<Drup>
for + in M, of course
ulfdoz has quit [Ping timeout: 264 seconds]
BiDOrD has joined #ocaml
contempt has quit [Ping timeout: 245 seconds]
contempt has joined #ocaml
ocp has joined #ocaml
<ddosia>
type point2d = { x : float; y : float };;
<ddosia>
# let p = { x = 3.; y = -4. };;
<ddosia>
val p : point2d = {x = 3.; y = -4.}
<ddosia>
how the heck compiler knows that I want point2d there?
<mrvn>
because of the label.
<ddosia>
what label?
<mrvn>
x
<ddosia>
could I have type point2d = { x : float; y : float };; and type point222d = { x : float; y : float };; same time?
<mrvn>
yes
<Drup>
uuh, not exactly
<mrvn>
the second shadows the first so you have a hard time creating one
gour has quit [Quit: WeeChat 0.4.2]
<Drup>
exactly.
<mrvn>
type point2d = { x : float; y : float };; let make2d x y = {x;y};; type point222d = { x : float; y : float };; let make222d x y = {x;y};;
<ddosia>
I am still not sure, could I end with such situation then I have my own point2d and other module have it's own
<bitbckt>
it's better to have a module Point2d and Point222d, each with a type t.
<ddosia>
and there will be clash
<mrvn>
ddosia: if you open the other module then sure
<ddosia>
dx_xb
<Drup>
bitbckt: actually, not necesserally. it's far better with the last version of ocaml
<mrvn>
The recent ocaml has some magic to detect such cases and warn about it or pick the right one.
<bitbckt>
Drup: in general, I remain of that opinion. Even with the latest changes.
<ddosia>
every record with to fields, first with label x and second with label y is clash with each otheres?
<ddosia>
*two
<mrvn>
ddosia: every record with label x will clash, less in recent versions
contempt has quit [Ping timeout: 245 seconds]
<ddosia>
boom
<ddosia>
thats pretty wired
<bitbckt>
... only if you open those modules. Don't open many modules.
<mrvn>
same as "let x = 1 let x = 2"
<nicoo>
ddosia: It isn't : how would the compiler guess what you mean ?
<mrvn>
or open M open N with both M and N having type t
<ddosia>
I consider this as a hashtable with named fields
<bitbckt>
it's more like a struct.
contempt has joined #ocaml
<ddosia>
why two hashtables should clash with each other
<ddosia>
it is like say that you may have only one class with field named "x"
<Drup>
ddosia: records are not at al like hashtbl
<mrvn>
and only one variable named x
<nicoo>
ddosia: What happens is that the compiler cannot be sure you mean “this value is an “hashtable” of type X
<nicoo>
(and the analogy with hashtbl feels weird)
<ddosia>
compiler could put type mark in each record
<ddosia>
lake this is record foo, and this is a record bar
<mrvn>
ddosia: let x = 1 let x = 2 let y = x. Should y be 1?
<ddosia>
and allow to have any number of fields with same names
<bitbckt>
if the type were encoded in the runtime representation, that wouldn't be statically safe... OCaml is not Erlang.
<mrvn>
you are allowed to have the same name.
boogie has quit [Remote host closed the connection]
<ddosia>
is type point2d = ... simmilar to let x =...
<ddosia>
so I actually not create a "type" but a "variable" named point2d?
<mrvn>
ddosia: youi create labels for the record fieds. which are like bindings of values.
<mrvn>
type r = { a:int; b:int; } is like let a = OFFSET(0) and b = OFFSET(1)
contempt has quit [Ping timeout: 245 seconds]
contempt has joined #ocaml
ollehar has quit [Ping timeout: 272 seconds]
contempt has quit [Ping timeout: 272 seconds]
Simn has quit [Ping timeout: 252 seconds]
Simn has joined #ocaml
contempt has joined #ocaml
t0yv0 has quit [Quit: Page closed]
ocp has quit [Quit: Leaving.]
contempt has quit [Ping timeout: 246 seconds]
contempt has joined #ocaml
tulloch has joined #ocaml
nikki93 has joined #ocaml
kyrylo has joined #ocaml
contempt has quit [Ping timeout: 272 seconds]
contempt has joined #ocaml
nikki93 has quit [Ping timeout: 245 seconds]
<Drup>
ddosia: I think all those questions will answer by themself when you will be use to it
<Drup>
ddosia: an advantage of record, as they are in ocaml, is that you can do "let f a = a.x"
<Drup>
and the compiler willl deduce that a is of the type "point"
<Drup>
because the field x is unique
<Drup>
(almost)
boogie has joined #ocaml
boogie has quit [Read error: Connection reset by peer]
<mrvn>
A good rule with records is to either pick unique names or put the thing in a module.
contempt has quit [Ping timeout: 272 seconds]
mcclurmc has quit [Remote host closed the connection]
contempt has joined #ocaml
mcclurmc has joined #ocaml
darkf has joined #ocaml
wolfnn has quit [Ping timeout: 272 seconds]
contempt has quit [Ping timeout: 272 seconds]
Kakadu has quit [Quit: Konversation terminated!]
contempt has joined #ocaml
<ddosia>
If arrays are more compact in terms of memory comparable to lists and have constant access time why could I choose lists?
<technomancy>
ddosia: arrays are mutable
<bitbckt>
SLLs have constant prepend time.
<bitbckt>
data structure choices aren't made in a vacuum.
<mrvn>
arrays don't grow or shrink
<ddosia>
Is there any capabilities to auto balance my programm execution across different CPU's cores?
contempt has quit [Ping timeout: 265 seconds]
boogie has joined #ocaml
<Drup>
the simple answer is no
<Drup>
there is a complicated answer, though
contempt has joined #ocaml
<ddosia>
Drup: if it is not bother you could you say few words or give some link to read about this subject?
manizzle has quit [Remote host closed the connection]
manizzle has joined #ocaml
<mrvn>
ddosia: since only one core is used there is no need to balance. :)
contempt has quit [Ping timeout: 245 seconds]
<technomancy>
ddosia: there are experimental ocaml runtimes that have concurrent GCs, but nothing solid enough for mainline yet
<technomancy>
concurrent GC with acceptable performance is incredibly difficult; it has only been implemented well a handful of times
klltkr has quit [Read error: Connection reset by peer]
<technomancy>
like, in the whole world
contempt has joined #ocaml
ulfdoz has joined #ocaml
<ddosia>
mrvn: I am not quite understood. When I want to write ocaml program with some concurrency inside does it means that in terms of OS it will still be on one core (as a scheduler)?
<technomancy>
it means hope you like fork+exec =)
<mrvn>
ddosia: mostly. There is a global lock that any thread running ocaml code must hold.
<mrvn>
You can have many threads running C code but only one doing ocaml.
<mrvn>
at a time
strobegen has quit [Quit: Leaving.]
contempt has quit [Ping timeout: 246 seconds]
<ddosia>
because of scheduler?
<mrvn>
because of GC
contempt has joined #ocaml
<ddosia>
nice. I mostly look at ocaml as complement to my erlang nodes thus possible I could live with that
<technomancy>
ddosia: yeah, I came to the same conclusion. different tools for different problems.
<mrvn>
I think a good concurrent GC will needs compiler support. Have it flag functions that will share data between cores and those that don't and such.
<bitbckt>
the compiler (and runtime) support is mostly write barrier correctness.
<ddosia>
what do you think about haskell in this perspective? I heard there are a lot of clever ideas
<bitbckt>
data sharing isn't typically a problem for a concurrent GC, unless it's thread-local.
<bitbckt>
(the GC is TL, that is)
<mrvn>
bitbckt: but you have write barriers for the local core and write barriers across cores.
<bitbckt>
they aren't core-local.
<mrvn>
if a function creates a record and then modifies it before it can ever be shared between threads then the write barrier is only local
<bitbckt>
the execution context of the store which fires a write barrier is largely irrelevant in (again) all by thread-local GC.
<bitbckt>
it doesn't need to be fired.
<bitbckt>
write barrier ellision on initializing stores is a special case.
<bitbckt>
but has nothing to do with what core the code is executing on.
<ddosia>
also, is there any large contributors in ocaml development as say ericsson in erlang
<bitbckt>
Jane Street.
contempt has quit [Ping timeout: 272 seconds]
mort___ has quit [Quit: Leaving.]
contempt has joined #ocaml
<smondet>
ddosia: there are many libraries for parallel (or distributed) processing Parmap, Functory, OCamlnet, async_parallel, ...
tulloch has quit [Ping timeout: 272 seconds]
Neros has joined #ocaml
contempt has quit [Ping timeout: 272 seconds]
contempt has joined #ocaml
contempt has quit [Ping timeout: 245 seconds]
saml has quit [Remote host closed the connection]
contempt has joined #ocaml
<Drup>
bitbckt: the ocaml fork about parallele doesn't have a concurent GC
<Drup>
bitbckt: it only allows to have a shared memory between processus and have a reentrant runtime
<Drup>
in pratice, it allows to do message-passing concurency in a very simple way, and without the cost of serialization
<Drup>
the work is finished but not yet integrated into the main compiler
WraithM_ has quit [Ping timeout: 265 seconds]
<bitbckt>
Drup: I didn't say it did.
<Drup>
bitbckt: ah, sorry, it was for technomancy
ollehar has joined #ocaml
<mrvn>
In a concurrent GC how do you catch values in registers?
<bitbckt>
typically, the compiler emits a map of offset in each stack frame and live registers containing references.
<bitbckt>
alternatively, a GC safepoint could flush registers to the stack.
<bitbckt>
the latter is a bit slower, obviously.
contempt has quit [Ping timeout: 272 seconds]
<mrvn>
well, every allocation is a safepoint.
<bitbckt>
semantically, yes.
<bitbckt>
but not in practice.
contempt has joined #ocaml
<mrvn>
it's what ocaml does now.
<bitbckt>
yes.
<mrvn>
problem there is that that prevent preemption. I don't like that.
<bitbckt>
in order to permit preemption, safepoints inside the runtime must wait for acknowledgement.
<bitbckt>
for instance, hotspot write protects a page and inserts bangs at safepoint opportunities.
<technomancy>
Drup: cool; I didn't realize that. there are multiple attempts at concurrency though, right?
<Drup>
probable
<technomancy>
but that one is the most likely to land in the mainline
<mrvn>
bitbckt: if you have to wait for acknowledgement then it isn't preemption
<bitbckt>
the underlying pthread is preemptively scheduled; safepoints are not preempting.
<bitbckt>
there really isn't any need for them to be. loop backedges and funcalls are sufficiently frequent.
<bitbckt>
(those are additional safepoint opportunities)
<mrvn>
except when they aren't there and the thread blocks everything.
contempt has quit [Ping timeout: 245 seconds]
<bitbckt>
really, that doesn't happen in practice.
<bitbckt>
code loops, allocates, calls a function or calls into the runtime with frequency.
<mrvn>
look at a mandelbrot fractal. Nice little inner loop that shouldn't do any allocation at all.
contempt has joined #ocaml
<bitbckt>
loop.
<bitbckt>
backedges are safepoint polls.
<mrvn>
there is no safepoint in there
<bitbckt>
not in OCaml, but there would have to be if it had a conc. GC.
<bitbckt>
just like in Hotspot and other runtimes with one.
<bitbckt>
perhaps that's the disconnect between us.
<mrvn>
if you dump everthing to memory every iteration that will be horribly slow.
<bitbckt>
why would you do that? the dump should only happen if the poll traps.
<bitbckt>
which it wouldn't, if there's no allocation.
<bitbckt>
anyhow, to your point: OCaml doesn't currently work this way, because it doesn't need to without a more advanced GC.
contempt has quit [Ping timeout: 245 seconds]
contempt has joined #ocaml
<mrvn>
does ocamlopt emit dwarf debug stuff?
<bitbckt>
not on trunk. there's a branch with some support.
cricri has joined #ocaml
cricri_ has quit [Ping timeout: 246 seconds]
contempt has quit [Ping timeout: 252 seconds]
contempt has joined #ocaml
contempt has quit [Ping timeout: 265 seconds]
jbrown has joined #ocaml
contempt has joined #ocaml
tulloch has joined #ocaml
contempt has quit [Ping timeout: 246 seconds]
contempt has joined #ocaml
contempt has quit [Ping timeout: 272 seconds]
contempt has joined #ocaml
ulfdoz has quit [Ping timeout: 272 seconds]
contempt has quit [Ping timeout: 246 seconds]
contempt has joined #ocaml
mehdid has quit [Quit: Lost terminal]
mcclurmc has quit [Remote host closed the connection]
BitPuffin has quit [Ping timeout: 272 seconds]
nikki93 has joined #ocaml
tulloch has quit [Ping timeout: 264 seconds]
Neros has quit [Ping timeout: 245 seconds]
osa1 has joined #ocaml
jonludlam has quit [Remote host closed the connection]
nikki93 has quit [Ping timeout: 246 seconds]
osa1_ has quit []
imran_sr has quit [Ping timeout: 252 seconds]
<ddosia>
could somebody share expirience how to indent ocaml source files with vim? I have installed ocp-indent, set this as an external indent tool, but there couple of nuances I need to ask
<Drup>
I think ocp-indent + vim need an external add-on
<ddosia>
Vim by default do indentation of ocaml files, but after I compare this with ocp-indent with different presets I see differences
<ddosia>
And I want to use community acceptable indentation from the very begining
<Drup>
ocp-indent is quite a common tool now
madroach has quit [Ping timeout: 264 seconds]
yminsky has joined #ocaml
<ddosia>
Drup: I put switch on ocp-indent inside of the vim, and it works when I select a block and don indent
nikki93 has joined #ocaml
<ddosia>
but when I do regular activity, like new line, it put cursor not on the right place
madroach has joined #ocaml
<Drup>
ddosia: ok. I know there was some issues before, and that def-lkb has some stuff on that
<Lajjla>
Is there some kind of idiom for let ... in let ... in let ... in let ... in ...
<Lajjla>
Similar to how scheme has let* for the same?