gildor changed the topic of #ocaml to: Discussions about the OCaml programming language | http://caml.inria.fr/ | OCaml 3.12.1 http://bit.ly/nNVIVH
<pippijn> that is probably expressive enough
<wmeyer> pippijn: I've heard about Ur. Did anybody try it?
<pippijn> not really, I just looked at the documentation for half an hour
<wmeyer> pippijn: same here :)
<wmeyer> ssbr_: pippijn Yes, I concur just don't catch the exception!
emmanuelux has quit [Remote host closed the connection]
mel0on` has joined #ocaml
<wmeyer> Ok, folks, I really need rest, before the weekend, happy coding
<pippijn> good night
larhat has quit [Quit: Leaving.]
<ssbr_> bahahahaha
<ssbr_> I don't think DS.find can raise this exception. It explicitly catches it itself, and calls a function that also doesn't raise it
<ssbr_> I think find is supposed to either find the element in the disjoint set, if it's there, or else create a new element containing this value.
roha has joined #ocaml
roha has quit [Ping timeout: 245 seconds]
ulfdoz has quit [Read error: Operation timed out]
ulfdoz has joined #ocaml
letrec has joined #ocaml
mjonsson has joined #ocaml
r126f_ has quit [Quit: leaving]
rixed has quit [Read error: Operation timed out]
rixed has joined #ocaml
BiDOrD_ has joined #ocaml
BiDOrD has quit [Ping timeout: 245 seconds]
smerz has quit [Remote host closed the connection]
Tobu_ has joined #ocaml
Tobu has quit [Ping timeout: 272 seconds]
<ssbr_> ohhh, that's all one function. One big honking 80 line function
<ssbr_> and I thought it was in a module ha ha ha ha.
<ssbr_> Uh. OK, I need some help here. There are two functions defined with the same name: http://bpaste.net/show/z2FIjCi0MJPB9skMTz3O/
<ssbr_> This is a direct copy-paste from the source, there's nothing in-between those two definitions
<ssbr_> am I missing something? Why would someone do this?
<thelema_> ssbr_: old implementation, new implementation?
<ssbr_> thelema_: is the first function definition accessible from anywhere, or overridden?
<thelema_> no, the first function definition is only accessible from within the second
<ssbr_> and the second doesn't even call it
<thelema_> which doesn't seem to use it
<ssbr_> this should teach me for trying to make changes while learning about the codebase. Reverting to a point where it would make sense to try deleting this function is taking a while
jarray52 has joined #ocaml
<jarray52> what command does one use in place of open Batteries_uni for ocaml .ml files that are going to be compiled?
<jarray52> my scripts work fine, but I can't compile them. The commands that do the importing are #use "topfind";; #require "batteries";; open Batteries_uni;;
sgnb has quit [Read error: Connection reset by peer]
sgnb has joined #ocaml
<_habnabit> jarray52, just drop the # directives
<_habnabit> jarray52, i.e. just open Batteries_uni
roconnor_ has quit [Ping timeout: 248 seconds]
<ssbr_> I am learning the hard way that sometimes it is more readable to include type declarations
<ssbr_> it is not enjoyable to go digging through 15 different functions just to find the type of parameter x
<ssbr_> (and why the heck is this value named "x", "m", "k", "p", and "r". Those names say nothing! Yargh!)
<_habnabit> ssbr_, tuareg-mode for emacs lets you find the type of the expression under the point
<ssbr_> _habnabit: ... well crap
<_habnabit> you could also hack it into whatever editor you're using
<ssbr_> that would've saved me so much time
<_habnabit> you just need to compile with the -annot option
<_habnabit> it'll generate an .annot file that shows all the types
<ssbr_> oh, is that all?
<_habnabit> yeah
<ssbr_> it might be easier just to look at the file myself, as long as it's sanely formatted
<_habnabit> it's ... machine-readable
<ssbr_> ugh
<_habnabit> you might as well take a look
<ssbr_> retraining hands is impossible, I swear. I don't know how people switch to emacs.
<_habnabit> people start with emacs
<ssbr_> _habnabit: eh, I've tried learning emacs before. I'll just see if anyone wrote a kate plugin for this, and if not, write one myself
<_habnabit> (I did)
<ssbr_> _habnabit: well, I tried both emacs and vim when I first learned Python, IIRC
<ssbr_> gave up after a lot of pain.
<_habnabit> I mean when I was first editing files in unix :p
<ssbr_> sure, but then you didn't start in unix
<ssbr_> I started on windows. We have editing conventions over there that are not like emacs whatsoever.
<_habnabit> before that it was just word processing, if that counts
rixed has quit [Ping timeout: 240 seconds]
rixed has joined #ocaml
<ssbr_> ugh this is really frustrating
<ssbr_> not part of kate and no easy way to make it part of kate
<ssbr_> I can only find stuff for emacs and vim
<_habnabit> why's it difficult to add to kate?
<ssbr_> _habnabit: because they removed the thing that lets you run console commands easily, and the plugin interface is C-only and practically undocumented
<ssbr_> also requires knowledge of Qt and KDE
<_habnabit> haha, fun
<_habnabit> but, wait, you wouldn't have to run a command
<_habnabit> you just need to read from a file
<ssbr_> _habnabit: there is a command which I could run that'd quickly read the annot for me
<ssbr_> it's designed for being called from text editors that can run commands in the shell and give you the output
<_habnabit> aha
<ssbr_> e.g. thanks to this program (er, it's called annot), you can really easily get this in TextMate
<_habnabit> what about sublime text 2
<ssbr_> what about it?
<_habnabit> I've heard that's good
<ssbr_> the only feature I care about is .annot support
<ssbr_> also being remotely similar to a graphical editor made after everyone standardized the usual keybinds (C-c for copy, C-z for undo, C-s for save, etc.)
<_habnabit> well, textmate is pretty okay
<ssbr_> Isn't that OS-X only?
<_habnabit> yep!
<ssbr_> I'm on Ubuntu atm
<ssbr_> the only other editor I can find with .annot support is http://home.gna.org/cameleon/chamo.en.html
<ssbr_> except it appears to be an emacs-like editor.
<ssbr_> (i.e. crazy nonsensical mnemonic keybinds)
<ssbr_> Maybe I'll try asking the kate channel if there's something I'm missing. *sigh*.
mjonsson has quit [Remote host closed the connection]
<jarray52> _habnabit: I dropped the # directives and changed open Batteries_uni to open batteries_uni. Then, I ran the command: ocamlc -I +batteries_uni -o hello hello.ml
<_habnabit> jarray52, eh, no, it's still `open Batteries_uni`
<_habnabit> don't lowercase it
<_habnabit> also, you should be using ocamlbuild
<jarray52> ocamlbuild -I +batteries_uni -o hello hello.ml?
<_habnabit> wildly guessing is kind of not in your best interest
<_habnabit> don't do that
<_habnabit> in this case, you would do `ocamlbuild -use-ocamlfind -tag package(batteries) hello.native`
<jarray52> _habnabit: I will checkout the tutorial. The command line you gave gives the following error: bash: syntax error near unexpected token `('
<_habnabit> oh, put it in quotes
<jarray52> _habnabit: It doesn't like that either.
<_habnabit> 'it'?
<jarray52> ocamlbuild
<_habnabit> you're going to have to be more specific if you want to get help. pastebin the error message.
<jarray52> In other words, 'ocamlbuild -use-ocamlfind -tag package("batteries") hello.native' gives bash: syntax error near unexpected token `('
<_habnabit> 'package(batteries)'
ssbr has joined #ocaml
<jarray52> "ocamlbuild -use-ocamlfind -tag 'package(batteries)' hello.native" gives me the ocamlbuild usage instructions suggesting it isn't welformed commandline for ocamlbuild.
<_habnabit> a summary isn't very useful. pastebin the error message.
<_habnabit> also, what version of ocaml do you have?
<jarray52> I believe Ocaml version 3.11.2
<_habnabit> okay, this is new in 3.12
<_habnabit> how did you install it?
<jarray52> sudo apt-get install ocaml
<_habnabit> ah, well
<_habnabit> let me strip the project-specific code out of this myocamlbuild
<jarray52> _habnabit: It's okay. I'll read the ocamlbuild documents tomorrow.
<jarray52> _habnabit: Thanks for your help.
<_habnabit> you'll still need this
<jarray52> _habnabit: the wife wants me to goto bed...
<_habnabit> haha, okay
<jarray52> _habnabit: Thanks.
<_habnabit> ping me tomorrow and i'll link you
<jarray52> _habnabit: Thanks.
jarray52 has left #ocaml []
letrec has quit [Ping timeout: 255 seconds]
tmaedaZ has quit [Read error: Connection reset by peer]
Cyanure has joined #ocaml
tmaedaZ has joined #ocaml
Submarine has joined #ocaml
Submarine has quit [Changing host]
Submarine has joined #ocaml
roconnor_ has joined #ocaml
Cyanure has quit [Ping timeout: 248 seconds]
err404 has joined #ocaml
everyonemines has joined #ocaml
Snark has joined #ocaml
everyonemines has quit [Quit: Leaving.]
GPHemsley has quit [Ping timeout: 260 seconds]
roha has joined #ocaml
larhat has joined #ocaml
roconnor__ has joined #ocaml
roconnor_ has quit [Ping timeout: 245 seconds]
<pippijn> how do people manage common myocamlbuild code for multiple projects?
GPHemsley has joined #ocaml
GPHemsley has quit [Changing host]
GPHemsley has joined #ocaml
iZsh has joined #ocaml
ftrvxmtrx__ has joined #ocaml
ftrvxmtrx_ has quit [Ping timeout: 260 seconds]
roha has quit [Ping timeout: 240 seconds]
roha has joined #ocaml
roha has quit [Remote host closed the connection]
Kakadu has joined #ocaml
Kakadu has quit [Client Quit]
Kakadu has joined #ocaml
oriba has joined #ocaml
Kakadu has quit [Quit: Konversation terminated!]
oriba has quit [Read error: Connection reset by peer]
Kakadu has joined #ocaml
Kakadu has quit [Read error: Connection reset by peer]
Kakadu has joined #ocaml
cruxeternus has quit [Quit: leaving]
<wmeyer> Hi
Submarine has quit [Remote host closed the connection]
emmanuelux has joined #ocaml
cyphase has quit [Read error: Connection reset by peer]
roha has joined #ocaml
ftrvxmtrx__ has quit [Ping timeout: 244 seconds]
jamii has joined #ocaml
ftrvxmtrx__ has joined #ocaml
larhat has quit [Quit: Leaving.]
<mrvn> Declaring the types of your data structures is the hardest thing when programming a game. Half of the time I spend changing the types to support new things.
<adrien> void* ftw!
<mrvn> Hmm, void*, that reminds me that I wanted to build the shallow option module.
<mrvn> "The C function can return an arbitrary long integer..." That is an arbitrary (long integer). Can't one formulate that better?
emmanuelux has quit [Read error: Connection reset by peer]
gnuvince has quit [Ping timeout: 272 seconds]
<mrvn> What is custom.compare_ext(v1, v2) for?
<Kakadu> mrvn: What game does you create?
<mrvn> Kakadu: Settler
<Kakadu> mrvn: like `Settlers'?
<mrvn> yes
<Kakadu> very interesting
<Kakadu> game for PC or for browser?
<mrvn> pc
roha has quit [Ping timeout: 250 seconds]
roha has joined #ocaml
smerz has joined #ocaml
<mrvn> How do I deserialize a singleton custom block? I don't want the marshal object to allocate a new block. It has to use a preallocated static one.
<thelema_> custom blocks are supposed to deserialize to the location given by the marshal routine
<mrvn> thelema_: yeah, that's the problem.
<thelema_> if they deserialize to a fixed location... I guess they could do that and return 0 as the size of what they deserialized
<mrvn> thelema_: then the structure containing the value wouldn't get the data
<thelema_> I thought you wanted to put the data being unmarshaled somewhere other than the value created by unmarshal
jamii has quit [Ping timeout: 260 seconds]
<mrvn> type t = { x : custom; }
<mrvn> If I deserialize that then the x has to become a pointer to my static custom block.
<thelema_> then return 4 (or 8) bytes of data with the pointer to your static custom block
<mrvn> thelema_: Then I get a custom block with a pointer to my static custom block. Not the same thing.
<thelema_> you want a record with a pointer to your static custom block
<thelema_> doesn't marshal handle the record part automatically?
<mrvn> I have a record with a pointer to my static custom block. When I marshal that and unmarshal it then it should again be a record with a pointer to my static custom block, not a freshly allocated one.
<mrvn> thelema_: sure, the record is just a record, marshal would handle that
<mrvn> could be a tuple or just a value too.
<thelema_> isn't the void* dst the pointer to the x field?
<thelema_> (in deserialize)
<mrvn> I thought it would point to the data portion of a custom block allocated by marshal
<thelema_> hmmm...
snearch has joined #ocaml
<mrvn> "This user-provided function is responsible for reading back the data written by the serialize operation, using the deserialize_... functions defined in <caml/intext.h> and listed below. It must then rebuild the data part of the custom block and store it at the pointer given as the dst argument. Finally, it returns the size in bytes of the data part of the custom block."
<thelema_> if that's the case, then you're right, you can't do what you want.
snearch has quit [Read error: Connection reset by peer]
<mrvn> Any idea about compare_ext?
snearch has joined #ocaml
<thelema_> you're right, I was thinking you had access to one level lower. There's no way to go backwards, afaik
<thelema_> compare ext is for comparing a custom block value to an unboxed integer
<thelema_> this is useful for things like zarith that are custom blocks, but implement integers
<mrvn> thelema_: like let t = M.make () in t < 1?
<thelema_> yes
<thelema_> well, almost
<thelema_> it's apparently possible to have a type that's sometimes a custom block and sometimes an unboxed integer
<thelema_> which is zarith's trick
<thelema_> but the runtime will end up having to compare a custom block with an unboxed integer sometimes
<thelema_> so it calls this function
<mrvn> so something like M.make x = if x < 10 then Obj.magic x else make_custom x?
<thelema_> yes, like that.
<thelema_> external of_int: int -> t = "%identity" (* it's magic... *)
<thelema_> hmm... external neg: t -> t = neg@ASM
<thelema_> interesting - I hadn't seen @ASM before
<mrvn> thelema_: seems like a bad hack of the module that has nothing to do in the compiler
<thelema_> ah, it is a .mlp - indicating it'll be pre-processed before compilation
<mrvn> assert (Marshal.from_string (Marshal.to_string s []) 0 == s)
<mrvn> Shouldn't that fail?
<mrvn> never mind. s is just an int.
<mrvn> Fatal error: exception Invalid_argument("output_value: abstract value (outside heap)")
<mrvn> Damn, I think I'm creating the static custom block wrong.
roconnor__ is now known as roconnor
<mrvn> Can anything outside the caml heap be marshaled?
<flux> I'm in the understanding "no"
<mrvn> damn. That scratches the whole idea.
<mrvn> any way to get some unmovable objects on the ocaml heap?
<flux> well, by doing that lablgtk does.. prevent compaction.. but..
<mrvn> urgs, that is totaly insane
<flux> can't you have an ocaml value representing the C value, an indirection that could be marshalled?
<mrvn> sure. but how do I make that unmovable?
jarray52 has joined #ocaml
<mrvn> Can I register a block of memory as ocaml heap?
<flux> well, almost, you can register C values as ocaml GC roots, but I don't think that affects the movability or marshalling thing per se
<jarray52> _habnabit: I was asking about compiling an ocaml program that used batteries yesterday. The command was 'ocamlbuild -use-ocamlfind -tag 'package(batteries)' hello.native'
<jarray52> ocamlbuild doesn't recognize the option -use-ocamlfind
<adrien> ocaml 3.12.0 or ocaml 3.12.1 required
<jarray52> adrien: I'm running version 3.11.2. Is there a way to compile (or build) a program that uses batteries_uni with 3.11.2?
cdidd has quit [Ping timeout: 250 seconds]
<adrien> I don't know for the specifics but there is a myocamlbuild.ml file that will use ocamlfind
<adrien> it shouldn't be too hard to find
<_habnabit> save that as myocamlbuild.ml, then `ocamlbuild -tag pkg_batteries hello.native`
<wmeyer> mvrn: Of course to marshal the value you need a runtime information of that
<jarray52> _habnabit: Why is this so difficult? I'm just trying to compile a simple program that uses the line open Batteries_uni as its first line.
<mrvn> wmeyer: which I have
<_habnabit> what about this do you think is difficult?
<_habnabit> this is a one-time cost, which is easily amortized by the number of times you'll run ocamlbuild
<wmeyer> mvrn: OK, I see..
<jarray52> _habnabit: Your instructions are simple, but I'm using your script, which is 163 lines.
<_habnabit> yep.
<jarray52> _habnabit: Isn't there a simple command line build command that specifies the batteries_uni path?
<_habnabit> there is! your ocamlbuild just doesn't support it.
<_habnabit> so this adds that support.
jamii has joined #ocaml
cdidd has joined #ocaml
<jarray52> _habnabit: That works. Thanks.
<mrvn> I think I need a module for small ints that are used as index to arrays. Would be nice to have them as dependent type to the actual array size. Ideas?
<jarray52> thelema_: Thanks.
<mrvn> thelema_: That doesn't give me a compile time check that an index is within bounds though. It only garanties the search intervals it itself creates are within bounds.
<thelema_> you want a compile time check for constant size arrays and constant indices?
<mrvn> I would like to have type tiny = Zero | One | Two type small = tiny | Three | Four let get : ('a, 'b) my_array -> (tiny | small as 'a) -> 'b =
<mrvn> thelema_: yes
<mrvn> I have a small number of fixed size arrays
<thelema_> can't do (tiny | small)
<mrvn> yeah, that's the problem.
<mrvn> I don't want to do let index = function `Zero -> 0 | `One -> 1 | `Two -> 2 ... and use [< `Zero | `One ] types.
<thelema_> type tiny = T0 | T1 | T2 type small = S0 | S1 | S2 | S3 | S4
<thelema_> fwiw, array bounds checks are heavily optimized by CPUs
<mrvn> thelema_: still can't do tiny | small
<thelema_> correct, use one or the other
<mrvn> I have functions that display an image out of an array. They should work with tiny and small arrays.
<thelema_> Array.unsafe_get
<mrvn> I don't care about the speed but the compile time checks
<thelema_> ah, then use functors
<thelema_> to get the type tiny or small for your functions
<mrvn> urgs, that would duplicate some code.
<thelema_> or use a private int that's verified on construction to be within the range you want
<mrvn> that would be a runtime check
<thelema_> hmmm, constants for small ints... but you need two types and you want the same set of indexing constants?
<thelema_> well, overlapping sets
<mrvn> hah, found the bug: max last frame instead of min last frame
<thelema_> yes, max and min are surprisingly tricky
<mrvn> Caused my tree image to be always fully grown until frame grows to big and then it failed.
jarray52 has left #ocaml []
fraggle_ has quit [Ping timeout: 252 seconds]
jamii has quit [Ping timeout: 245 seconds]
<flux> I find it especially mind-consuming using max and min for clamping values to a range. it feels counter-intuitive to me to write min 1.0 (max 0.0 n)
fraggle_ has joined #ocaml
<mrvn> flux: let clip lower upper x = min upper (max lower x)
roha has quit [Remote host closed the connection]
<mrvn> My forester has a green hat. Now what should a woodcutter look like?
<flux> brown hat?-)
<flux> btw, have you looked on the net for free game graphics? unless you feel artistically inclined, of course :)
<mrvn> flux: I looked a bit but those are pretty hard to search for
Se7en has joined #ocaml
nosuni has joined #ocaml
<nosuni> Qrntz: here i am
<Se7en> Qrntz: me too
<nosuni> yes
<Se7en> people here kinda have weird names, don't they
<Qrntz> I am filled with great joy
<nosuni> don't awake them
<nosuni> they are idling
<Se7en> how to take lessons
eni has joined #ocaml
<pippijn> flux: I always feel that way
Kakadu has quit [Quit: Konversation terminated!]
<pippijn> flux: about clamping with max and min
ftrvxmtrx__ has quit [Ping timeout: 272 seconds]
ftrvxmtrx__ has joined #ocaml
<pippijn> how do people manage common myocamlbuild code for multiple projects?
<pippijn> rules and stuff
jarray52 has joined #ocaml
<pippijn> when I install a tool, I would like to also install rules that aid the use of that tool in ocamlbuild
<adrien> hmm?
<adrien> which particular rules does it need?
<pippijn> %.foo -> %.ml
<pippijn> for footool
<adrien> /usr/share/doc/footool ?
<pippijn> hm?
<adrien> you'd like people to be able to do what to use footool?
<pippijn> I'd like people to be able to install footool and then put .foo files into their source tree and have the rules to build .ml files from them
<adrien> automagic?
<pippijn> or semi magic
<adrien> semi magic: put the code that has to be copied in /usr/share/doc/footool
<adrien> semi magic: put the code that has to be copied in /usr/share/doc/footool/example_myocamlbuild.ml
<pippijn> oh, then they have to copy it
<adrien> automagic, use cmake
<pippijn> meh.
<pippijn> cmake?
<adrien> iirc you can have some kind of plugin stuff
<pippijn> yes, you can
<adrien> which half sucks
<pippijn> isn't oasis and ocamlbuild the thing now?
<adrien> but no automagic plugins
<adrien> and hopefully it'll stay like that
<pippijn> why?
<adrien> you've never try to find out how cmake was locating libraries on windows I guess
<pippijn> I don't use windows
<pippijn> or cmake
<adrien> the need is really limited
<pippijn> I use autoconf, and I can link .m4 files into my source tree and know exactly what code is doing the library search
<pippijn> or doing whatever
<adrien> if someone cannot copy a file and edit a couple lines of ocaml, then there's something else which is going wrong
<pippijn> copying has the disadvantage that updates have to be done manually, as well
<adrien> if you use your own library-search code, you deserve to be spanked
<adrien> but I guess you don't =)
<pippijn> it's just about rules
<adrien> do you plan to have many updates? and updates to the way things are built sound quite major
<wmeyer> pippijn: It can be done, more less easily with ocamlbuild
<wmeyer> pippijn: I was duing some weired building of ml trhough camlp4 (as a target) and js with symlinking
<pippijn> adrien: at the beginning, yes
<pippijn> and you never know
<wmeyer> pippijn: I don't know what is the exact problem
<adrien> don't overengineer; see when the issue arises
<adrien> and if your tool is incorrectly called (bad command-line), it'll probably spit out a pretty explicit error
<pippijn> almost every project I will ever make will use footool
Xizor has joined #ocaml
<adrien> do you plan _that_ many incompatible updates? and what is footool btw?
gnuvince has joined #ocaml
<pippijn> an error message generator for menhir
<adrien> you're going to use menhir in every project of yours?
<pippijn> many
<adrien> ok
<pippijn> the point is that if I make 1 update, even if it's backward compatible, I want all my projects to benefit from whatever changed
<adrien> also, some kind of common place for rules could be a good thing but then, something standard
Tobu_ has quit [Ping timeout: 248 seconds]
<wmeyer> Unison is great :)
<adrien> pippijn: do you use oasis?
<adrien> or autotools
<adrien> (for these projects)
eni has quit [Quit: .]
<pippijn> oasis for all my ocaml projects (currently not many, but hopefully in the future)
<adrien> then you can probably use the configure step and a template to do what you want
<adrien> well
<adrien> to me, that sounds pretty simple and not really obfuscated
<adrien> you could have a postconf rule that does the work you need (up to you to think of the specific)
<adrien> specifics*
<wmeyer> pippijn: that could help you https://github.com/danmey/Dom_react/blob/master/myocamlbuild.ml - not advetsing anything
<wmeyer> pippijn: If you want an automatic dependency tracking - I can dig it for you too
<pippijn> adrien: this is exactly what it's useful for
<pippijn> adrien: I have my own .byte -> .js rule
<pippijn> adrien: if js_of_ocaml installed a rule somewhere in a global place, I could import it (explicitly)
<wmeyer> pippijn: You can just import a module with some convention
<wmeyer> pippijn: Rules operate on side effects so you might want to apply a unit functor
<pippijn> wmeyer: yes, that's my plan
<wmeyer> pippijn: So once you say open OCamlbuild_jsrules
<wmeyer> pippijn: but I agree, it's not very common to use it that way. Other build systems implicitly encouraging rules and extensibility, ocamlbuild in contrast favors declarative specifications
<pippijn> dispatch (Ocamlbuild_combine.dispatch [Ocamlbuild_js.dispatch; Ocamlbuild_footool.dispatch; ...])
<pippijn> or something like that
<wmeyer> pippijn: we could have something that allows to combine them in more natural way
<wmeyer> pippijn: e.g. register with side effects
<wmeyer> pippijn: yes
gnuvince has quit [Ping timeout: 272 seconds]
<wmeyer> pippijn: Ocamlbuild has an idea of single project self contained scripts (if ever they are needed)
<wmeyer> pippijn: Possibly oasis could lift it to the right direction
<pippijn> self contained
<wmeyer> pippijn: It generates myocamlbuild anyway
gnuvince has joined #ocaml
<pippijn> well, that's nice, but if you need an external tool in the first place, then why not import rules from that, as well?
<wmeyer> pippijn: Question to maintainers of the tool? :)
<pippijn> by the way, can oasis install plain modules (as opposed to libraries)?
<pippijn> menhir does that, with ocamlc -pack or something
<mrvn> install them how?
<wmeyer> pippijn: Of cours I would like to see as a part of install the %.foo -> %.bar rule - I think the mindset was always that ocamlbuild is relativelu small thing that
<pippijn> it packs several modules into a MenhirLib module
<mrvn> pippijn: A module or a pack is a library.
<pippijn> ok
<pippijn> but there is no support for packs in oasis?
<wmeyer> pippijn: There is (same project)
<mrvn> hmm, not? Damn, I wanted to use that.
<pippijn> wmeyer: in oasis?
<mrvn> .oO(now is there or isn't there? )
<wmeyer> pippijn: Yes that's an oasis project
<pippijn> oh
<pippijn> good
<pippijn> maybe I can oasis-ise menhir, then
<wmeyer> pippijn: but packs are limited - in fact we need namespaces
<wmeyer> pippijn: but yes they are useful more less
<pippijn> namespaces
<mrvn> wmeyer: where namespaces would be like modules but the submodules can come from multiple places?
<wmeyer> mrvn: Yes, can be chosen, renamed, grouped with specific rules, and they are first class in ocaml
Tobu has joined #ocaml
<wmeyer> mrvn: and they play well with other tools - ocamldep and ocamldoc in particular
<mrvn> New svreenshot: http://mrvn.homeip.net/map/foo.png
<pippijn> wishful thinking
<wmeyer> pippijn: :)
<mrvn> problem there is how to handle conflicts. What order will modules have?
<wmeyer> mrvn: they are many details that would need to be well thought - you are right
<wmeyer> mrvn: Side effect is one, conflicts are another
<jarray52> Is there a functional in Ocaml that allows me to apply a function to every pair of elements in a list?
<mrvn> And as for reordering just make your own module and include whatever you need.
<wmeyer> mrvn: some project use plain cpp #define for that
<mrvn> jarray52: List.iter (fun (x,y) -> ()) list
<mrvn> jarray52: or do you want to merge even and odd items?
<wmeyer> mrvn: but packing is not only puprose of namespaces, sometimes you want to pack functors of rename the modules inside
<wmeyer> mrvn: I suppose this what they did in SML many years ago http://www.smlnj.org/doc/CM/index.html
nimred_ has quit [Quit: leaving]
<jarray52> mrvn: if my list is [1;2;3;4;5], I want the function applied to all 25 pairs of elements
<wmeyer> jarray52: Combine two List.map
<mrvn> let pairwise f list = List.iter (fun x -> List.iter (fun y -> f x y) list) list
<wmeyer> jarray52: let foo f lst = List.map (fun el -> List.map (f el) lst) lst
<wmeyer> where f is of type 'a -> 'a -> 'b
<wmeyer> jarray52: as mrvn says - I curried one argument and used map instead of iter, for the educational purposes probably his version is better
<jarray52> wmeyer: Both solutions were good... I'm still absorbing the answer...
<mrvn> And new video: http://mrvn.homeip.net/map/foo.ogg. Units evade better now.
<mrvn> wmeyer: with map you get a 'a list list back
snearch has quit [Quit: Verlassend]
<wmeyer> mrvn: yes, probably you want to List.concat afterwards - missed that
<wmeyer> mrvn: Are they on beer festival :-)
<mrvn> sorry, no brewery yet.
<mrvn> brewery: takes wheat and water and produces beer: need well, bucket, bucket carrier, farm, farmer, growing wheat, reaped wheat, wheat carrier, beer casket, beer carrier, tavern, beer drinking tux in tavern.
<mrvn> still some way in the future.
<wmeyer> mrvn: Or a local shop with beer.
<mrvn> and create beer out of thin air?
<wmeyer> mrvn: Maybe you can do some sort of minecraft approach the community can build all the brewery dependencies
<mrvn> first I need the code to support it. Still haven't made the buildings do something.
<mrvn> I'm currently working on the code so that the buildings find their worker (tux with green/red hat) and the worker then goes to the building and enter sit.
<mrvn> s/ s/s /
<mrvn> I think I need a global Marketplace for that which then keeps track of the surplus workers and items or the demand for workers and items depending of which it is.
<pippijn> buildings find a worker?
<mrvn> pippijn: if there is a worker then the worker should go to the building, otherwise find the tool to make a worker, find a idle walker near the tool, have him pick it up and become a worker and then goto building.
ftrvxmtrx__ has quit [Ping timeout: 240 seconds]
Tobu has quit [Quit: No Ping reply in 180 seconds.]
Tobu has joined #ocaml
<mrvn> pippijn: generally a building has some inputs and some outputs. The inputs create demand for something (e.g. wheat and water) and carriers will stack up to 8 of each in front of the building. If there are enough items stacked (e.g. 1 wheat + 1 water) the worker will leave the brewery, pick up the items and put them into the brewery, brew some beer and then carry the beer to the output where it will produce supply.
Kakadu has joined #ocaml
ftrvxmtrx has joined #ocaml
emmanuelux has joined #ocaml
Tobu has quit [Ping timeout: 248 seconds]
Kakadu has quit [Quit: Konversation terminated!]
Tobu has joined #ocaml
jarray52 has left #ocaml []
wmeyer has quit [Remote host closed the connection]
ftrvxmtrx has quit [Ping timeout: 272 seconds]
ftrvxmtrx has joined #ocaml
roha has joined #ocaml
Snark has quit [Quit: Quitte]
Xizor has quit [Ping timeout: 260 seconds]
<emias> 
<mrvn> [B[B
Tobu has quit [Ping timeout: 248 seconds]
err404 has quit [Remote host closed the connection]
Se7en2 has joined #ocaml
Se7en has quit [Ping timeout: 248 seconds]
wmeyer has joined #ocaml
Se7en2 has quit [Changing host]
Se7en2 has joined #ocaml
Se7en2 is now known as Se7en
Tobu has joined #ocaml
larhat has joined #ocaml
larhat has left #ocaml []
<pippijn> 
<pippijn> 
<pippijn> 
<pippijn> 
<adrien> up up
<mrvn> and away
<pippijn> down down
<adrien> left right
<pippijn> 
<adrien> good night
<pippijn> heh :)
<pippijn> [4~
<pippijn> "the end"
<mrvn> You have a sad feeling for a moment...
chambart has joined #ocaml
Se7en has left #ocaml []
cdidd has quit [Read error: Operation timed out]
roha has quit [Ping timeout: 272 seconds]
Kynes` has joined #ocaml
Se7en has joined #ocaml
<wmeyer> anybody up
Se7en has quit [Read error: Connection reset by peer]
<_habnabit> nobody
<wmeyer> it's sunday, come on, the sunrise on caml is best on sunday :)