ChanServ changed the topic of #ocaml to: Discussions about the OCaml programming language | http://caml.inria.fr/ | http://www.ocaml.org | OCaml 4.01.0 announce at http://bit.ly/1851A3R | Logs at http://irclog.whitequark.org/ocaml
FreeArtMan has joined #ocaml
jprakash has quit [Quit: leaving]
tobiasBora__ has quit [Quit: Konversation terminated!]
FreeArtMan has quit [Ping timeout: 264 seconds]
philtor has quit [Ping timeout: 240 seconds]
jwatzman|work has quit [Quit: jwatzman|work]
dsturnbull has joined #ocaml
mcclurmc has joined #ocaml
racycle has quit [Quit: ZZZzzz…]
mcclurmc has quit [Ping timeout: 250 seconds]
malo has quit [Remote host closed the connection]
philtor_ has joined #ocaml
philtor_ has quit [Ping timeout: 240 seconds]
philtor_ has joined #ocaml
Algebr` has joined #ocaml
dotfelix has joined #ocaml
dotfelix has quit [Read error: Connection reset by peer]
mcclurmc has joined #ocaml
mcclurmc has quit [Ping timeout: 240 seconds]
<Algebr`> so if we do type foo = {bar:string}, this {} doesn't have a name, but the type system will still know that items of {bar:string} are of type foo?
<Drup> what do you mean by "this {} doesn't have a name" ?
<Algebr`> there isn't a handle on it
<Algebr`> how can I refer to it?
<Drup> "{}" doesn't exist, and it existed, it would be exactly equivalent to ()
<Drup> if it*
<Drup> so, not sure what you want here
alpounet has quit [Remote host closed the connection]
<Drup> Algebr`: do you mean "this record", by chance ? =')
<Algebr`> Drup: type is strange to me. I could do type foo = Bar | Car, or I can do type foo = {first:string;second:int}, but given the latter I can't do type foo = {first:string} | {second:int}
<Drup> imagine you had a foo element
<Drup> (as you defined it just now)
<Drup> let's take x of type foo, what would x.string do ?
<Drup> x.first*
<Algebr`> it would give back the string that first was initialized with
<Drup> but what if it's on the right side of "{first:string} | {second:int}" ?
<Algebr`> you mean like {first:string} | {first:int}?
<Drup> "|" is a disjunction, either a foo is of the left kind or the right kind
<Algebr`> but the accessors are all unique
<Drup> and ?
<Drup> the issue is not the uniquness
<Drup> the issue is that having something like "{first:string} | {second:int}" is unsafe
<Algebr`> y
<Algebr`> I'm not seeing how that's unsafe.
<Drup> because you can do "let x = {second = 3} in x.first"
<Drup> it is, according to type system, correct
<Drup> but it will obviously fail at runtime, there is no field "first" in x
<Algebr`> oh shit, yes I see now
<Drup> note that haskell people did this mistake, and are still biting their fingers at it.
q66 has quit [Quit: Leaving]
<Drup> if you want a record inside a sum type, you can do it like that :
<Drup> type foo = { foo : string }
<Algebr`> ah, I just thought of what I was trying to say earlier. in haskell, I also have record types, i.e. data Person = Male {name::String}, but in ocaml, I just have type person = {name:string}, so I don't need a constructor to refer to the {name:string}? the type system just sees that this record is of this type?
<Drup> type bar = Bar of foo
<Drup> yes
<Drup> the compiler will try to disambiguate if there is an ambiguity in the field
<Algebr`> but this wouldn't make sense, right? Bar of {foo:string}
<Drup> no, it doesn't
<Drup> for example, if you have "type person = {name : string ; age : int} and building = {name:string; heigh : int}"
<Drup> {name = "Martin" ; age = 2 } is not ambiguous
<Drup> but "let f x = x.name" is ambiguous
<Drup> the compiler will infer the first one (but emit a warning that it disambiguated something) and yell at you on the second case
<Drup> actually, in the straighforward case, it will not yell, it will just take the last defined
<Drup> (you can make it yell on more involved examples)
dotfelix has joined #ocaml
dotfelix has quit [Read error: Connection reset by peer]
dotfelix has joined #ocaml
dotfelix has quit [Read error: Connection reset by peer]
nirvdrum has quit [Remote host closed the connection]
badon has joined #ocaml
jao has joined #ocaml
jao has quit [Changing host]
jao has joined #ocaml
tidren has joined #ocaml
Algebr` has quit [Ping timeout: 240 seconds]
tidren has quit [Remote host closed the connection]
tidren has joined #ocaml
mcclurmc has joined #ocaml
manizzle has quit [Ping timeout: 250 seconds]
mcclurmc has quit [Ping timeout: 264 seconds]
tidren has quit [Remote host closed the connection]
tidren has joined #ocaml
philtor_ has quit [Ping timeout: 240 seconds]
tidren has quit [Remote host closed the connection]
ygrek has joined #ocaml
<bernardofpc> tobiasBor> And in something like Printf.sprintf "%5d" 5, is it possible to fill with 0 instead of spaces ? -> "%05d"
mcclurmc has joined #ocaml
johnnydiabetic has joined #ocaml
mcclurmc has quit [Ping timeout: 256 seconds]
fold has quit [Ping timeout: 250 seconds]
alpounet has joined #ocaml
alpounet has quit [Ping timeout: 245 seconds]
jao has quit [Ping timeout: 240 seconds]
tidren has joined #ocaml
shinnya has quit [Ping timeout: 255 seconds]
johnnydiabetic has quit [Quit: Goodbye]
tidren has quit [Remote host closed the connection]
axiles has joined #ocaml
mcclurmc has joined #ocaml
mcclurmc has quit [Ping timeout: 245 seconds]
Simn has joined #ocaml
waneck_ has quit [Ping timeout: 264 seconds]
ebzzry has joined #ocaml
pgomes has joined #ocaml
michael_lee has joined #ocaml
tidren has joined #ocaml
alpounet has joined #ocaml
hhugo has joined #ocaml
alpounet has quit [Ping timeout: 255 seconds]
tidren has quit [Remote host closed the connection]
ollehar has joined #ocaml
slash^ has joined #ocaml
Hannibal_Smith has joined #ocaml
Kakadu has joined #ocaml
pjdelport has joined #ocaml
mcclurmc has joined #ocaml
mcclurmc has quit [Ping timeout: 250 seconds]
slash^ has quit [Read error: Connection reset by peer]
parcs has quit [Ping timeout: 240 seconds]
parcs has joined #ocaml
rand000 has joined #ocaml
tidren has joined #ocaml
<whitequark> Drup: ping
rand000 has quit [Quit: leaving]
tane has joined #ocaml
pgomes has quit [Quit: Leaving]
zpe has joined #ocaml
zpe has quit [Remote host closed the connection]
mcclurmc has joined #ocaml
tidren has quit [Remote host closed the connection]
mcclurmc has quit [Ping timeout: 255 seconds]
martintrojer has quit [Ping timeout: 240 seconds]
martintrojer has joined #ocaml
pgomes has joined #ocaml
def-lkb has joined #ocaml
def-lkb is now known as def`
zpe has joined #ocaml
pminten has joined #ocaml
pgomes has quit [Ping timeout: 245 seconds]
mcclurmc has joined #ocaml
mcclurmc has quit [Ping timeout: 255 seconds]
CcxCZ has quit [Read error: No route to host]
zpe_ has joined #ocaml
zpe has quit [Ping timeout: 245 seconds]
zpe_ has quit [Remote host closed the connection]
helino has joined #ocaml
slash^ has joined #ocaml
<helino> Hi, I'm learning OCaml and was wondering if there is a way to use a string as out_channel?
<Kakadu> Printf.sprintf?
<helino> so I can pass a string_channel (or something similar) to a function when testing, and then pass out_channel when in production
<def`> helino: not with channels, but with Format you can
<helino> def`: thanks! (reading the doc right now for Format)
<axiles> helino: you can use the type Format.formatter
<orbitz> I take it you'er trying to seamleslsy make I/O go to a user OR to a string, right helino ?
<def`> (Format.formatter is a higher-level abstraction, it allows for instance to specify the layout of messages, but it is only suitable for text data)
<helino> orbitz: yes, so I can pass something (a channel? formatter?) to a function that does not care about what kind of channel it is printing on
<orbitz> helino: IMO, it's better to always work with strings, and then move the decision of what to do with that string up a level.
<helino> btw, I'm fine with using things from Core as well (I'm reading the Real World Ocaml book and managed to get Core installed correctly)
<orbitz> the cost semantics become much clearer there. Which may or may not be important to you
<helino> orbitz: yeah, that is a good idea!
<helino> the cost semantics are not that important right now, I'm just learning the language and the tools atm :)
<helino> thanks everyone for your help, really appreciate it!
<helino> btw, is there a way in utop to get the documentation for a function?
ygrek has quit [Ping timeout: 240 seconds]
Hannibal_Smith has quit [Quit: Sto andando via]
pgomes has joined #ocaml
<orbitz> helino: i don't think so. I think Merlin can somehow. Genearlly the type is sufficient to know what a function does once you start to understandthe type system
<def`> orbitz: no, sadly Merlin can't at that time. the situation with documentation annotations in ocaml is a bit messy right now
<helino> ok, thanks
<Unhammer> :/
<Unhammer> do packages sometimes install some offline docs anywhere though?
slash^ has quit [Ping timeout: 255 seconds]
<Unhammer> to answer myself: seems menhir puts a manual in ~/.opam/system/doc, but e.g. core installs no docs there
<Unhammer> … which needs a rerun of bibtex …
slash^ has joined #ocaml
alpounet has joined #ocaml
shinnya has joined #ocaml
BitPuffin has quit [Ping timeout: 250 seconds]
zpe has joined #ocaml
ssbr has quit [Read error: Connection reset by peer]
zpe has quit [Ping timeout: 240 seconds]
hhugo has quit [Quit: Leaving.]
ygrek has joined #ocaml
helino has quit [Quit: leaving]
q66 has joined #ocaml
Eyyub has quit [Ping timeout: 260 seconds]
alpounet has quit [Remote host closed the connection]
alpounet has joined #ocaml
tobiasBora has joined #ocaml
alpounet_ has joined #ocaml
<tobiasBora> I've two question about cmdliner : first is it possible to define a non optional positional argument ? In the doc I can read :
<tobiasBora> *Hello
alpounet has quit [Read error: Connection reset by peer]
<tobiasBora> Arg.(value & pos 0 string "Revolt!" & info [] ~docv:"MSG" ~doc)
thomasga has joined #ocaml
<tobiasBora> And that gives a default value to pos, but I don't want to give a default value.
hhugo has joined #ocaml
alpounet_ is now known as alpounet
michael_lee has quit [Ping timeout: 245 seconds]
michael_lee has joined #ocaml
<def`> tobiasBora: make it an option, choose None as default, handle error case after parsing?
<whitequark> no, not quite
<whitequark> use required instead of value
<whitequark> rather than handling error case
<def`> ah, right
BitPuffin has joined #ocaml
hefner has quit [Quit: Ex-Chat]
pgomes has quit [Quit: Leaving]
Gonzih has joined #ocaml
saarin has quit [Ping timeout: 264 seconds]
rand000 has joined #ocaml
manizzle has joined #ocaml
<tobiasBora> whitequark: Something like that : Arg.(required & pos 0 (some ~none string) None & info [] ~docv:"MSG" ~doc) ?
<whitequark> just (some string)
<whitequark> but yes
ggole has joined #ocaml
<tobiasBora> The none is usefull to specify an error message if it's forgotten no ?
<tobiasBora> Ok great thank you !
<whitequark> oh, right
<ggole> Interesting trick
<ggole> I've done the let op = assert false thing quite a bit
<ggole> Er, let op x = assert false
<Drup> whitequark: pong
zpe has joined #ocaml
zpe has quit [Ping timeout: 255 seconds]
trojrozec has quit [Quit: ZNC - http://znc.in]
<whitequark> Drup: I'm thinking on possible design options for deriving and don't really like either of them
<whitequark> thought 1: do you think I should split [@@deriving] into separate annotations?
<whitequark> there's certain elegance in being able to write [@@deriving Show, Eq { opt=true }, Compare], but I'm not sure if it's that important
<Drup> No
<whitequark> ok
<whitequark> good, one less thing to bikeshed about. bikeshedding absolutely kills my productivity.
<Drup> :D
<tobiasBora> Cmdliner is really amazing...
hexo has joined #ocaml
<whitequark> thought 2: maybe I could use something like a front pass by ppx_deriving that converts "type a [@@deriving X, Y]" into "type a;;[%%deriving.X type a];;[%%deriving.Y type a];;"
<Drup> one consistent deriving mechanism across the whole ocaml ecosystem would really be a fantastic thing, let's not fragment it before even beginning :p
<whitequark> which would make them independent and yet keep the property that they error out if not included
<whitequark> well
<whitequark> Drup: structuring the mechanism in a way that forces the plugin authors to present a consistent user interface was something I had in mind
<whitequark> but I'm not sure how accepting the OCaml ecosystem is of such measures
<Drup> yeah, I noticed
<whitequark> seeing e.g. the absurd abundance of buildsystems
<Drup> I think it's a good thing
<whitequark> ok
<whitequark> then I probably should proceed with my original design unchanged
<whitequark> btw, regarding dynlinking, all the files required to make custom combined rewriters are already available
<whitequark> you have the .cmx of ppx_deriving and .cmx of the plugins
<whitequark> just need to link them together
<Drup> regarding the idea to transform @@ into multiple %%
<Drup> I'm not completly sure we want them to error-out if not included, actually
<whitequark> oh?
<whitequark> why?
<whitequark> I find it extremely unhelpful, a message saying that a method show_a doesn't exist
<whitequark> and there is no let show_a = ... anywhere
hexo is now known as shallow
<Drup> You can put a warning
<whitequark> hm, in principle
<Drup> let's say I define a datatype Foo, and I would like to allow people to derive it in Json (because I know my use base like Json) but I don't want the hard dependency on YoJson
<tobiasBora> I've something I can't manage to do with cmdliner, do you know if it's possible to deal with named argument ? (my function has many argument)
<Drup> tobiasBora: in wich way ?
<Drup> whitequark: I could say "ok, if ppx_deriving_yojson" is here, I derive, otherwise, I do not, and just ignore this deriving
<whitequark> Drup: oh, so, conditional compilation
<Drup> It's also consistent with the fact that unknown @@ are ignored
<whitequark> I think it's a good thing to have
<whitequark> the latter I don't really like
<whitequark> it means that it is easier to misplace an annotation than not
<Drup> misplace ?
<whitequark> especially on records; both { foo [@bar] : int } and { foo : int [@bar] } are valid
darkf has quit [Quit: Leaving]
<whitequark> (in deriving it usually makes sense to look for the latter, but not always)
<whitequark> and if an accidentally omitted @bar doesn't immediately lead to an error... you're in a world of pain
<tobiasBora> Drup: In this example : let chorus_t = Term.(pure chorus $ msg1 $ msg2);; the chorus function is supposed to be like this : "let chorus msg1 msg2 = ...". Can I do a similar thing with named arguments if chorus is defined like this : "let chorus ~msg1 ~msg2 = ..." and be like this independant of the order of the arguments ?
<Drup> tobiasBora: a type is not the same with named arguments, so no
<Drup> whitequark: by the latter, you mean "otherwise, I do not, and just ignore this deriving " ?
<mrvn> can one write the $ so it takes a function as first aregument and a named argument as second and applies that?
<Drup> no
<mrvn> (~a:'a -> 'b) -> ~a:'a -> 'b
<whitequark> Drup: well yes
<Drup> mrvn: that works only for the named argument a
<whitequark> 1) the annotation may belong to other library (this mostly affects typos)
<whitequark> 2) it's just not practical to look at *every* node's annotations
<mrvn> Drup: yeah. it needs a meta name
<tobiasBora> Yes, but I can modify Term, it's not a problem, for example with something like Term.(pure chorus $ ("name_arg1", msg1) $ ("name_arg2", msg2)...) ). But I really don't know if it's possible (I think no)
<Drup> tobiasBora: no, you can't
<tobiasBora> Ok thank you.
<Drup> whitequark: I'm not sure to see the issue
<whitequark> Drup: say in Protobuf, I have a [@encoding] annotation
<whitequark> which affects public API of the application and therefore is very important
<Drup> oh, lightweight annotation, not in the "deriving" name scope
<whitequark> a [@encdoing] annotation or [@encoding] annotation in wrong place will be silently ignored
<whitequark> and the code will still likely build
<Drup> huuum
<Drup> isn't there a compiler warning about that anyway ?
<whitequark> no.
<Drup> eeehh
<whitequark> there should be.
<whitequark> brb mantis
<Drup> yes there should, clearly
<Drup> and I would argue it should be enabled by default
thomasga has quit [Ping timeout: 245 seconds]
q66 has quit [Quit: Leaving]
q66 has joined #ocaml
<Drup> If we have a enable by default warning, I think it's almost a non-issue
<Drup> so, when a deriving sees [@@deriving Foo, Bar, Baz]
<whitequark> "a deriving" ?
<Drup> the deriving library*
Anarchos has joined #ocaml
<Drup> it tries to find everyone he knows, expand them and remove them from the list, and let the other ones unchanged, to trigger the warning
q66 has quit [Remote host closed the connection]
<whitequark> mmm, no.
<whitequark> the warning will point to unmodified source
<Drup> huum, indeed, so deriving itself should warn "hey, this one is not present, so I leave it alone" ?
bjorkintosh has quit [Ping timeout: 272 seconds]
<whitequark> I think it should just have an option
<whitequark> e.g. [@@deriving Show] errors out in absence of Show
<Drup> {optionnal = true} ?
<whitequark> [@@deriving Show { optional = true }] doesn't derive it if it's absent
<whitequark> yeh
<whitequark> hivemind :p
<Drup> except I can't spell english :D
<Drup> seems like a good plan to me
pminten has quit [Remote host closed the connection]
<whitequark> I shalt commenceth
q66 has joined #ocaml
<whitequark> oh so, what I really wanted to ask
<whitequark> how much work did you do on Eq?
<whitequark> I'd like to merge it or something
<Drup> not much, not worth viewing
bjorkintosh has joined #ocaml
<whitequark> I've finished the first approximation for Show
<Drup> I saw, yes
<whitequark> it's so far non-parametric
<whitequark> thought I'd do Eq
<whitequark> I think I want Show, Eq, Compare, Protobuf, Json for first demo release
<Drup> sounds good
<whitequark> wanna contribute? :3
<Drup> It should also be enough to recognize patterns in the code and provide some helper functions
<whitequark> yes, that's the main reason
<whitequark> I want to make something like Ppx_deriving_host.Arg
hhugo has quit [Quit: Leaving.]
<whitequark> my ideal deriving+plugins environment rejects all invalid annotations one way or another, and does it strictly
<whitequark> this requires some plumbing.
<Drup> some little helper function to handle in an unified way poly and non-poly variant my be nice, too
<whitequark> I think that's not possible
<Drup> might*
<whitequark> non-poly has the venerable tuple hack
<Drup> yeah .. ~_~
<whitequark> and poly has this thing where it's defined like [ `A of & b & c ]
WraithM has quit [Ping timeout: 250 seconds]
<whitequark> I think they're different enough to be handled separately
<Drup> hum, ok
<whitequark> hrm, int32 doesn't have Int32.equal?
<Drup> none have ...
<whitequark> oh, not even String
<Drup> it's annoying as hell
<whitequark> bleargh.
<whitequark> does OCaml specialize (=) : string -> string -> bool?
<whitequark> or similar others
<Drup> hence yesterday's question about providing them
<whitequark> right
<Drup> whitequark: the only way I found to specialize them is : "let eq typ = [%expr let f (x : [%e typ]) (y : [%e typ]) = x = y in f ] in"
<Drup> (that's mostly the only thing I did for the Eq deriving, I figured that out but didn't go further :p
slash^ has quit [Read error: Connection reset by peer]
<ggole> Can't you use String.compare?
<ggole> Same with Int{32,64}
<Drup> seems like a unnecessary additional test.
<ggole> Compared to what?
<Drup> compare to equal
<ggole> Seems like the same amount of work to me
<Drup> the compiler do have a dedicated equality function for all each basic type, we should has well used it
<Drup> -d
<ggole> Can't disagree
<Drup> meh, can't english this morning :(
<ggole> Did you mean the extra test is Foo.compare == 0?
<Drup> yes
<ggole> You have to do that anyway to map from bool to condition code
<whitequark> hmm, right
<whitequark> so I think I'll use compare
zpe has joined #ocaml
<whitequark> hm, for deriving Compare I need something like a short-circuiting fold
<ggole> Hand-rolled recursive func?
<ggole> ...minus the hands, I guess
<Drup> I fear you will have to write it your self :p
zpe has quit [Ping timeout: 264 seconds]
<whitequark> maybe just a tree of match statements
hhugo has joined #ocaml
<ggole> By the way, what do you do for function values? Die with an error message?
<Drup> Do you have any other sensible proposition ?
<ggole> Sensible, no. :)
<Drup> :p
<whitequark> you could say [@eq.compare (==)]
q66 has quit [Quit: Leaving]
<ggole> Thorny subject, really
<Drup> the eq.compare annotation might be nice anyway, to handle external abstract types
<whitequark> yes. it will defer comparison of F.t to F.compare_t by default
gal_bolle has joined #ocaml
<Drup> shame we can't test by introspection if compare_t or compare is available
<Drup> (because in a good amount of library, the function is simply "compare")
<whitequark> I think I'll simply make a heuristic
<whitequark> if the type is called "t", the function will have no suffix
<whitequark> otherwise, it's _typename
<Drup> ahah :D
<whitequark> as long as this convention is not *forced* on you, I think it's very helpful
<Drup> same for the generated compare function ?
<ggole> That does seem close to what people would actually do.
<Drup> yep
_0xAX has joined #ocaml
<def`> t -> compare, other -> compare_other is ± what Core's with compare does
thomasga has joined #ocaml
racycle has joined #ocaml
racycle has quit [Ping timeout: 240 seconds]
numeo is now known as Anon736
<ggole> Hmm, strings do seem to be specialised (in 4.02)
Anon736 is now known as numeo
<ggole> And Int32
gal_bolle has quit [Quit: Konversation terminated!]
q66 has joined #ocaml
q66 has quit [Remote host closed the connection]
q66 has joined #ocaml
<mrvn> Anyone want to help me write an freeciv AI in ocaml from scratch?
pgomes has joined #ocaml
avsm has joined #ocaml
zpe has joined #ocaml
zpe has quit [Ping timeout: 250 seconds]
michael_lee has quit [Ping timeout: 240 seconds]
racycle has joined #ocaml
michael_lee has joined #ocaml
racycle has quit [Ping timeout: 245 seconds]
_0xAX has quit [Remote host closed the connection]
fold has joined #ocaml
rand000 has quit [Quit: leaving]
hhugo has quit [Quit: Leaving.]
gal_bolle has joined #ocaml
tobiasBora has quit [Ping timeout: 240 seconds]
philtor_ has joined #ocaml
gal_bolle has quit [Ping timeout: 240 seconds]
zpe has joined #ocaml
tobiasBora has joined #ocaml
zpe has quit [Ping timeout: 240 seconds]
tobiasBora has quit [Read error: No route to host]
tobiasBora has joined #ocaml
NoNNaN has joined #ocaml
philtor_ has quit [Ping timeout: 240 seconds]
hhugo has joined #ocaml
tobiasBora has quit [Ping timeout: 240 seconds]
avsm has quit [Quit: Leaving.]
thomasga has quit [Ping timeout: 240 seconds]
shinnya has quit [Ping timeout: 240 seconds]
gal_bolle has joined #ocaml
zpe has joined #ocaml
demonimin has quit [Ping timeout: 240 seconds]
pminten has joined #ocaml
zpe has quit [Ping timeout: 256 seconds]
tobiasBora has joined #ocaml
Hannibal_Smith has joined #ocaml
testcocoon has quit [Quit: Coyote finally caught me]
shallow is now known as wao`
slash^ has joined #ocaml
testcocoon has joined #ocaml
Anarchos has quit [Quit: Vision[0.9.7-H-20140108]: i've been blurred!]
thomasga has joined #ocaml
BitPuffin has quit [Ping timeout: 255 seconds]
tidren has joined #ocaml
tobiasBora has quit [Ping timeout: 240 seconds]
dapz has joined #ocaml
dapz has quit [Max SendQ exceeded]
q66 has quit [Remote host closed the connection]
q66 has joined #ocaml
pminten has quit [Remote host closed the connection]
Anarchos has joined #ocaml
alpounet has quit [Remote host closed the connection]
zpe has joined #ocaml
zpe has quit [Ping timeout: 245 seconds]
tidren has quit [Remote host closed the connection]
tidren has joined #ocaml
_0xAX has joined #ocaml
alpounet has joined #ocaml
<Drup> ocp-build is annoying =__=
divyanshu has joined #ocaml
racycle has joined #ocaml
zapu has joined #ocaml
thomasga has quit [Read error: Connection reset by peer]
tani has joined #ocaml
thomasga has joined #ocaml
tane has quit [Ping timeout: 260 seconds]
<whitequark> yes.
hhugo has quit [Quit: Leaving.]
dapz has joined #ocaml
thomasga has quit [Ping timeout: 250 seconds]
thomasga has joined #ocaml
thomasga1 has joined #ocaml
thomasga has quit [Read error: Connection reset by peer]
racycle has quit [Quit: ZZZzzz…]
pjdelport has quit [Quit: Connection closed for inactivity]
tani has quit [Quit: Verlassend]
<jpdeplaix> Drup: nobody use it anyway :D
<Drup> except I'm developing something in ocp-index :/
dapz has quit [Quit: My MacBook Pro has gone to sleep. ZZZzzz…]
dapz has joined #ocaml
Nahra has quit [Remote host closed the connection]
pgomes has quit [Ping timeout: 260 seconds]
tidren has quit [Remote host closed the connection]
zpe has joined #ocaml
hhugo has joined #ocaml
hhugo has quit [Client Quit]
dapz has quit [Quit: My MacBook Pro has gone to sleep. ZZZzzz…]
zpe has quit [Ping timeout: 240 seconds]
fold has quit [Ping timeout: 264 seconds]
<whitequark> Drup: just use my fork
<whitequark> with OASIS
michael_lee has quit [Quit: Ex-Chat]
<Drup> bah, it works, it's just annoying
Gonzih has quit [Ping timeout: 264 seconds]
bo1 has joined #ocaml
BitPuffin has joined #ocaml
_0xAX has quit [Remote host closed the connection]
ygrek has quit [Ping timeout: 260 seconds]
dapz has joined #ocaml
gal_bolle has quit [Ping timeout: 240 seconds]
<algoriddle> by the way: ocp-build, ocamlbuild, obuild, oasis... is it some sort of rite of passage for a budding ocaml hacker to devise a new build system?
dapz has quit [Quit: My MacBook Pro has gone to sleep. ZZZzzz…]
<algoriddle> which one is preferred by the experts here?
dapz has joined #ocaml
<Drup> you actually forgot a numerous amount of build systems :]
<Drup> and oasis isn't really a build system, it's using ocamlbuild for the building part
<algoriddle> indeed, I am a bit confused
<Drup> I prefer oasis, and I wrote a tutorial about it http://ocaml.org/learn/tutorials/setting_up_with_oasis.html
hto has joined #ocaml
<Drup> feel free to yell^W make remarks if you don't find it clear enough :3
<algoriddle> excellent, I will read through that, thanks
ygrek has joined #ocaml
parcs has quit [Remote host closed the connection]
pgomes has joined #ocaml
hto has quit [Quit: Lost terminal]
parcs has joined #ocaml
gal_bolle has joined #ocaml
hto has joined #ocaml
philtor_ has joined #ocaml
omqal has joined #ocaml
fold has joined #ocaml
zpe has joined #ocaml
omqal has quit [Quit: omqal]
zpe has quit [Ping timeout: 245 seconds]
yacks has quit [Quit: Leaving]
BitPuffin has quit [Ping timeout: 240 seconds]
manizzle has quit [Ping timeout: 250 seconds]
yacks has joined #ocaml
hto has quit [Quit: Lost terminal]
avsm has joined #ocaml
alpounet has quit [Remote host closed the connection]
alpounet has joined #ocaml
BitPuffin has joined #ocaml
thomasga1 has quit [Ping timeout: 240 seconds]
alpounet has quit [Remote host closed the connection]
alpounet has joined #ocaml
divyanshu has quit [Ping timeout: 264 seconds]
divyanshu has joined #ocaml
alpounet has quit [Ping timeout: 264 seconds]
ygrek has quit [Ping timeout: 245 seconds]
Eyyub has joined #ocaml
hhugo has joined #ocaml
shinnya has joined #ocaml
omqal has joined #ocaml
avsm has quit [Quit: Leaving.]
rand000 has joined #ocaml
zpe has joined #ocaml
Kakadu has quit [Remote host closed the connection]
dapz has quit [Quit: My MacBook Pro has gone to sleep. ZZZzzz…]
Kakadu has joined #ocaml
zpe has quit [Ping timeout: 240 seconds]
dapz has joined #ocaml
pgomes has quit [Quit: Leaving]
dapz has quit [Quit: My MacBook Pro has gone to sleep. ZZZzzz…]
dapz has joined #ocaml
axiles has quit [Remote host closed the connection]
waneck has joined #ocaml
cdidd has quit [Ping timeout: 264 seconds]
hhugo has quit [Quit: Leaving.]
gal_bolle has quit [Quit: Konversation terminated!]
philtor_ has quit [Ping timeout: 264 seconds]
ggole has quit []
Simn has quit [Quit: Leaving]
slash^ has quit [Read error: Connection reset by peer]
divyanshu has quit [Ping timeout: 255 seconds]
cdidd has joined #ocaml
Hannibal_Smith has quit [Quit: Sto andando via]
divyanshu has joined #ocaml
divyanshu has quit [Ping timeout: 256 seconds]
divyanshu has joined #ocaml
avsm has joined #ocaml
pjdelport has joined #ocaml
djur has joined #ocaml
divyanshu has quit [Ping timeout: 250 seconds]
Anarchos has quit [Quit: Vision[0.9.7-H-20140108]: i've been blurred!]
Algebr` has joined #ocaml
<Algebr`> I don't understand how to read this part of a map's type signature, [ `Duplicate_key of string | `Ok of 'a StringMap.t ]
divyanshu has joined #ocaml
<Algebr`> What was the ` mean?
divyanshu has quit [Client Quit]
<Algebr`> Is it saying its a list of Foos or Bars?
q66 has quit [Remote host closed the connection]
q66 has joined #ocaml
Algebr` has quit [Quit: ERC Version 5.3 (IRC client for Emacs)]
wao` is now known as shallowest
waneck has quit [Ping timeout: 255 seconds]
shinnya has quit [Ping timeout: 240 seconds]
<algoriddle> regarding (polymorphic) variants: is there a rule of thumb when to use the polymorphic kind?
BitPuffin has quit [Ping timeout: 256 seconds]
<mrvn> when you must
waneck has joined #ocaml
<algoriddle> ok, when is that? (sorry, I'm still a newbie)
<Drup> you will learn when :p
shinnya has joined #ocaml
<Drup> (basically, don't try to use it)
divyanshu has joined #ocaml
<Drup> It's this kind of super powerful feature that shot both way. :p
<algoriddle> that's what I thought, but reading various projects, they seem to be used rather frequently though.
<Drup> Sure, they are super powerful :p
<mrvn> try not using them and the type system will tell you when you hit the wall.
<djur> is there a good resource about common practices/conventions for doing unit testing in OCaml?
<algoriddle> ok, that works for now. my type-fu is not good enough to properly understand the use case yet.
divyanshu has quit [Ping timeout: 245 seconds]
<Drup> algoriddle: don't worry, it will come in due time
Kakadu has quit [Quit: Konversation terminated!]
<Drup> djur: I suppose you could read oUnit's documentation
BitPuffin has joined #ocaml
divyanshu has joined #ocaml
racycle has joined #ocaml
fold has quit [Ping timeout: 250 seconds]
divyanshu has quit [Ping timeout: 264 seconds]
divyanshu has joined #ocaml
Nahra has joined #ocaml
divyanshu has quit [Ping timeout: 260 seconds]
divyanshu has joined #ocaml
zpe has joined #ocaml
demonimin has joined #ocaml
manizzle has joined #ocaml
avsm has quit [Quit: Leaving.]
zpe has quit [Ping timeout: 256 seconds]
q66 has quit [Remote host closed the connection]
q66 has joined #ocaml
q66 has quit [Remote host closed the connection]
q66 has joined #ocaml
racycle has quit [Quit: ZZZzzz…]
q66 has quit [Remote host closed the connection]
q66 has joined #ocaml
alpounet has joined #ocaml
darkf has joined #ocaml
alpounet has quit [Remote host closed the connection]
alpounet has joined #ocaml
rand000 has quit [Quit: leaving]
alpounet has quit [Remote host closed the connection]
zpe has joined #ocaml
divyanshu has quit [Quit: Computer has gone to sleep.]
zpe has quit [Ping timeout: 256 seconds]
arquebus has joined #ocaml
divyanshu has joined #ocaml
madroach has quit [Ping timeout: 250 seconds]
dsheets has joined #ocaml
arquebus has quit [Quit: Konversation terminated!]
madroach has joined #ocaml
NoNNaN has quit [Remote host closed the connection]
NoNNaN has joined #ocaml
pjdelport has quit [Quit: Connection closed for inactivity]
dsheets has quit [Ping timeout: 245 seconds]
divyanshu has quit [Quit: Computer has gone to sleep.]
fold has joined #ocaml
omqal has quit [Ping timeout: 256 seconds]
divyanshu has joined #ocaml
onr has joined #ocaml
divyanshu has quit [Quit: Computer has gone to sleep.]