smkl changed the topic of #ocaml to: OCaml 3.07 ! -- Archive of Caml Weekly News: http://pauillac.inria.fr/~aschmitt/cwn, A tutorial: http://merjis.com/richj/computers/ocaml/tutorial/, A free book: http://cristal.inria.fr/~remy/cours/appsem, Mailing List (best ml ever for any computer language): http://caml.inria.fr/bin/wilma/caml-list
<Axioplase> ++
Axioplase has quit ["[BX] Mr. Peanut uses BitchX. Shouldn't you?"]
Nate1975 has quit [Remote closed the connection]
slashvar has quit [calvino.freenode.net irc.freenode.net]
slashvar has joined #ocaml
The-Fixer has quit ["Goodbye"]
mattam_ has joined #ocaml
mattam has quit [Nick collision from services.]
mattam_ is now known as mattam
Nutssh has joined #ocaml
shawn has quit [Read error: 54 (Connection reset by peer)]
The-Fixer has joined #ocaml
karryall has quit ["."]
<pattern> is there a way to tell whether i've loaded my code in to the toplevel via "#use" vs running it from the command line? checking the value of Sys.interactive doesn't do what i want
<Nutssh> Have your code print out 'code loaded' when it is loaded ''print_string "COde loaded"; flush stdout;;''
<pattern> no, i mean i want to tell, in the code, that whether it has been loaded in the toplevel via "#use" or on the command line
<pattern> i want to take different actions if it's loaded in the toplevel via "#use", vs on the commandline
<Smerdyakov> Why?
<pattern> because when i load my code with #use in the toplevel i often do so so that i can manually play with some of the functions i've defined... whereas when i run it from the commandline i want it to use those functions in a way i've already programmed
<pattern> don't know if i'm making myself clear
<Riastradh> You're not.
<pattern> heh
<pattern> ok... let's say i have a routine foo, which sorts a list of integers... and i have a main routine which reads stdin and then sorts it using foo...
<pattern> when i run my program from the command line it will go ahead and run the main routine which will wait for stuff on stdin
<pattern> however, when i load my code via "#use" in the toplevel i might not want my program to read from stdin... i might just want to manually feed the foo function a list of integers
<pattern> but it will go ahead and read from stdin anyway
<pattern> that's why i want to be able to tell whether i've loaded my code in the toplevel via "#use", or whether it's running from the commandline
<pattern> so i can evaluate my main routine or not
<pattern> i guess i could put all of my functions in to a seperate file from the main routine
<pattern> and just "#use" that seperate file
<pattern> that's probably the simplest
<Smerdyakov> That sounds like the right way to do it.
<pattern> good excuse to finally learn how modules work
Nutssh has quit [Read error: 60 (Operation timed out)]
Swynndla has joined #ocaml
shawn has joined #ocaml
Kinners has joined #ocaml
housetier has quit ["#breaks @ irc.highteq.de"]
Kinners has left #ocaml []
buggs^z has joined #ocaml
buggs has quit [Read error: 110 (Connection timed out)]
The-Fixer has quit [Read error: 60 (Operation timed out)]
Hipo has quit ["leaving"]
The-Fixer has joined #ocaml
The-Fixer has quit ["Goodbye"]
jdmarshall has joined #ocaml
jdmarshall has quit ["no reason"]
jdmarshall has joined #ocaml
wazze has quit ["Ein Dieb ist jemand, der die Angewohnheit hat, Dinge zu finden, bevor andere Leute sie verlieren"]
ironfroggy has joined #ocaml
<ironfroggy> what is ocaml intended for?
<pattern> it's a general purpose language
<ironfroggy> the syntax looks weird. but ive heard many good things about it.
<pattern> yeah, it's cool
<ironfroggy> im a c++/python guy myself
<pattern> and the syntax will become natural in no time
<ironfroggy> i might give a try
<ironfroggy> after i sleep
<Swynndla> ironfroggy, there is an ocaml tutorial written specifically for c programmers
ironfroggy has quit ["The Speaking Gun has uncreated me with the backwards word of God."]
<pattern> i heard it taught a more imperative style
<Swynndla> it does teach some of that too ... the author even says there are instances when using a while loop is better
<Swynndla> but for me (and my background) it's the best ocaml tutorial on the web ... best I've found ... really tries to explain some stuff
<pattern> i've tried to stay as far away from imperative ocaml programming as i can, until i feel i have a good grasp of functional programming
<Swynndla> pattern, that sounds like a wise idea
__DL__ has joined #ocaml
__DL__ has quit [Read error: 54 (Connection reset by peer)]
__DL__ has joined #ocaml
__DL__ has quit [Client Quit]
jdmarshall has quit ["ChatZilla 0.9.35 [Mozilla rv:1.5/20031007]"]
ott has joined #ocaml
<ott> re all
<Maddas> I never liked that one
Demitar has joined #ocaml
<Swynndla> Maddas, yea I did ... that's also very good
<Swynndla> 2nd best :P
<Swynndla> but different things suit different people from different backgrounds
<pattern> there're a bunch of others too...
<Swynndla> oic
<Swynndla> cool
<ejt> if it's functional programming you're after I really recommend you try and find a copy of 'Introduction to Functional Programming' Richard Bird, Philip Wadler
Swynndla has quit ["Leaving"]
<pattern> ejt, does that use ocaml?
<ejt> no
<ejt> so it's probably better that you get it from a library
<pattern> cool, i'll check it out
karryall has joined #ocaml
The-Fixer has joined #ocaml
karryall has left #ocaml []
karryall has joined #ocaml
ott has left #ocaml []
<pattern> according to http://caml.inria.fr/ocaml/numerical.html "The polymorphic comparisons =, <, compare, etc, return incorrect results when one of the arguments is a float NaN (``Not a Number'')."
<pattern> but this was written in 2002
<pattern> is it still true?
<teratorn> try it?
<karryall> there was a recent thread about it on caml-list
<pattern> searches for "nan" and ieee on the list archives didn't turn up anything relevant
buggs^z is now known as buggs
<pattern> # let nan = 0.0 /. 0.0 ;;
<pattern> val nan : float = nan.
<pattern> # 5.0 = nan ;;
<pattern> - : bool = false
<pattern> # 5.0 < nan ;;
<pattern> - : bool = false
<karryall> you're not very good at searching then
<pattern> # 5.0 > nan ;;
<pattern> - : bool = false
<pattern> well, this looks promising
<pattern> karryall, i just used the standard search form at http://pauillac.inria.fr/bin/wilma/caml-list
<pattern> thanks, karryall
<karryall> the problem is rather with functions like min
<karryall> # min 3. nan ;;
<karryall> - : float = 3.
<karryall> # min nan 3. ;;
<karryall> - : float = nan.
<pattern> yeah, i see that in the message
<pattern> what a mess
<karryall> :) indeeed
housetier has joined #ocaml
<pattern> what is a "total order"? (as in "Doesn't the polymorphic comparison have to be a total order?")
<pattern> thanks, mellum
<pattern> "strange things can happen with "nan" used as set elements or map keys"
<pattern> this doesn't sound good
<mellum> Well, don't do that, then
<pattern> so, basically, it means that you should always check to see if a float is a nan before populating an array of floats
<mellum> No. When they say "set elements or map keys", they mean "set elements or map keys"
<pattern> and a set is an array, righ?
<mellum> No.
<pattern> what is it?
<mellum> Something from the "Set" module.
<pattern> ahh
<pattern> and maps are in the "Map" module, i gather
<pattern> ok, well, i think i'll be staying away from those for a while anyway
<pattern> hmmm...
<pattern> well, since underflow, overflow or division by zero are the ways you can get nans, then maybe one solution is to redefine all the mathematical operators to raise exceptions instead :)
<pattern> or, rather, for them all to check for nans upon every floating point op and then raise an exception
<pattern> lots of overhead, but saves you from doing the same thing yourself in your code
<karryall> pattern: that's difficult to do
<karryall> in theory it's possible to configure the FPU so that a SIGFPE signal is raised on floating point exceptions
<pattern> yeah, i read about that
<pattern> but it's not portable
<karryall> but this is a synchronous signal and the caml runtime cannot deal with it
<pattern> so, in lieu of that why not rewrite each op to check for nan when dealing with floats? why would this be difficult?
<pattern> or maybe there could even be a seperate set of "nan safe" ops/functions
<pattern> that throw exception upon encountering/generating a nan
<karryall> I think that would be very cumbersome if every fp operation could possibly raise an exception
<pattern> yeah, lots of overhead
<pattern> but it could be done
<pattern> and would be worth it for someone who had to be sure none of his floats were nans, and would wind up writing his own code to do just this anyway
<pattern> it could be in a seperate nan-safe module, maybe
<karryall> I think it's way better to check for nans (or fp exceptions) at a few places in the code
<pattern> i know i'll probably need this sort of functionality, as i deal with a lot of floats
<pattern> how in just a few places?
<pattern> once you start performing mathematical operations with nans they can easily propagate if you're not careful
<pattern> and that could destroy a lot of data
<karryall> FPU status flag
<pattern> but that's not portable, according to xavier leroy
<pattern> so ocaml doesn't use it
<karryall> you clear the flag ; then perfom FP computation and then check the flag
<karryall> that's C99 portable
<mellum> If you want to do lots of FP computation, Ocaml is probably not the right language anyway
<karryall> it's easy to add it as a small library
<pattern> "The IEEE standard specifies both behaviors: return nan or cause a
<pattern> floating-point trap, and says that there should be an API to choose
<pattern> the desired behavior. Most processors implement the two behaviors,
<pattern> controlled by some status bit somewhere."
<karryall> I've already done it actually in ocamlgsl
<pattern> "he first problem is that there is no standard C API to select the desired behavior (even ISO C 99 isn't terribly clear on this). So, everyone stays in the "nans, no traps" mode."
<pattern> mellum, don't say that! :((((
<karryall> that's true but anyway you don't want traps because the runtime cannot properly deal with SIGFPE
<pattern> yeah, xavier followed up with that same observation
<pattern> so, that leads us back to reimplementing all the fp ops/functions
<karryall> a check with a higher-order function is way better I think
<karryall> val check_for_underflow : (float -> float) -> float -> float
<karryall> for instance
<karryall> and it would raise an exception on underflow
<pattern> ok, i'll buy that
<pattern> good solution
<pattern> or just check for nan
<karryall> well that's different
<pattern> it is different, but just as effective, no?
<karryall> I mean under/overflow is different from nan
<pattern> yes, of course
<pattern> though underflow and overflow result in a nan
<karryall> no
<pattern> oh, i misread the docs in pervasives
<pattern> you can also get infinity and neg_infinity
<pattern> well, you can raise a different exception for each
<pattern> but you could still use one function
yangsx has joined #ocaml
yangsx has quit [Read error: 54 (Connection reset by peer)]
<Demitar> karryall, pattern: IIRC the native and byte-code compilers differ at some point where the native compiler gives a nan and the byte-code raises an exception. It might have changed now and I don't remember when those things happened, but it's probably worth verifying.
<karryall> Demitar: there's *integer* division by zero which raise an exception in the bc compiler and signal with the native compiler
<Demitar> Ah, that would be it.
<karryall> the ocamlopt-program exits with a "Floating point exception" message, which is kind of misleading
<pattern> heh
cjohnson has quit ["brb"]
<karryall> mouarf
<karryall> Due to an incorrect mail filtering rule recently triggered by a
<karryall> software update on INRIA's mail exchangers, all messages posted to
<karryall> caml-list@inria.fr the last week or so were not distributed to the
<karryall> list, and were actually lost.
<mattam> hehe
<Banana> that's what you get for dist-upgrading a machine that works fine.
Nutssh has joined #ocaml
maihem has joined #ocaml
Axioplase has joined #ocaml
<Axioplase> Hi
<Banana> hello.
<Axioplase> i have (again) some trouble :)
<Axioplase> though i suddenly have an idea :)
<Axioplase> hum same problem...
<Nutssh> ?
<Axioplase> i have an function that parses a list, and removes every integer that verifies ((e mod i)=0). It works great for the first one that verifies it. the others won't be removed.
<mellum> Use List.filter.
<Axioplase> myfunc: let rec test e l = match l with | []->[] | i::r-> if (e mod i=0) then (test e r) else i::(test e r);;
<Axioplase> I'd like to understand where/why I am wrong...
<gl> i mod e, I guess
<whee> you might want to even look at the source for List.filter in stdlib/list.ml, which may be helpful
<Axioplase> pff.. just saw that :)
<Axioplase> whee i'll consider it when I can do whatever i want with caml, would it be tough to do... (when i feel at ease with ML...)
<whee> Axioplase: well, List.filter looks much like what you just wrote, except generalized
<gl> axioplase as whee and mellum said, try this : let f e = List.filter (function x -> x mod e = 0)
<gl> oh, didn't read you
karryall has quit ["\o/ weekend"]
Nutssh has quit ["Client exiting"]
Nutssh has joined #ocaml
cjohnson has joined #ocaml
housetier has quit [Read error: 104 (Connection reset by peer)]
sproctor has joined #ocaml
slashvar has quit [calvino.freenode.net irc.freenode.net]
maihem has quit [calvino.freenode.net irc.freenode.net]
shawn has quit [calvino.freenode.net irc.freenode.net]
gl has quit [calvino.freenode.net irc.freenode.net]
cjohnson has quit [calvino.freenode.net irc.freenode.net]
Nutssh has quit [calvino.freenode.net irc.freenode.net]
voltron has quit [calvino.freenode.net irc.freenode.net]
mellum has quit [calvino.freenode.net irc.freenode.net]
drWorm has quit [calvino.freenode.net irc.freenode.net]
The-Fixer has quit [calvino.freenode.net irc.freenode.net]
mattam has quit [calvino.freenode.net irc.freenode.net]
smkl has quit [calvino.freenode.net irc.freenode.net]
Smerdyakov has quit [calvino.freenode.net irc.freenode.net]
bernard has quit [calvino.freenode.net irc.freenode.net]
TheDracle has quit [calvino.freenode.net irc.freenode.net]
phubuh has quit [calvino.freenode.net irc.freenode.net]
cmeme has quit [calvino.freenode.net irc.freenode.net]
Etaoin has quit [calvino.freenode.net irc.freenode.net]
Banana has quit [calvino.freenode.net irc.freenode.net]
skylan has quit [calvino.freenode.net irc.freenode.net]
Riastradh has quit [calvino.freenode.net irc.freenode.net]
whee has quit [calvino.freenode.net irc.freenode.net]
Maddas has quit [calvino.freenode.net irc.freenode.net]
sproctor has quit [calvino.freenode.net irc.freenode.net]
hf_ has quit [calvino.freenode.net irc.freenode.net]
Defcon7 has quit [calvino.freenode.net irc.freenode.net]
Hadaka has quit [calvino.freenode.net irc.freenode.net]
farizeo has quit [calvino.freenode.net irc.freenode.net]
ejt has quit [calvino.freenode.net irc.freenode.net]
themus has quit [calvino.freenode.net irc.freenode.net]
Demitar has quit [calvino.freenode.net irc.freenode.net]
buggs has quit [calvino.freenode.net irc.freenode.net]
teratorn has quit [calvino.freenode.net irc.freenode.net]
Axioplase has quit [calvino.freenode.net irc.freenode.net]
rox has quit [calvino.freenode.net irc.freenode.net]
anpanman has quit [calvino.freenode.net irc.freenode.net]
lam has quit [calvino.freenode.net irc.freenode.net]
pattern has quit [calvino.freenode.net irc.freenode.net]
wax has quit [Read error: 104 (Connection reset by peer)]
axolotl has joined #ocaml
TheDracle has joined #ocaml
Smerdyakov has joined #ocaml
bernard has joined #ocaml
sproctor has joined #ocaml
cjohnson has joined #ocaml
Nutssh has joined #ocaml
Axioplase has joined #ocaml
maihem has joined #ocaml
The-Fixer has joined #ocaml
Demitar has joined #ocaml
buggs has joined #ocaml
shawn has joined #ocaml
mattam has joined #ocaml
slashvar has joined #ocaml
hf_ has joined #ocaml
drWorm has joined #ocaml
gl has joined #ocaml
rox has joined #ocaml
Defcon7 has joined #ocaml
Hadaka has joined #ocaml
farizeo has joined #ocaml
teratorn has joined #ocaml
phubuh has joined #ocaml
cmeme has joined #ocaml
Etaoin has joined #ocaml
pattern has joined #ocaml
lam has joined #ocaml
skylan has joined #ocaml
smkl has joined #ocaml
anpanman has joined #ocaml
Riastradh has joined #ocaml
Banana has joined #ocaml
themus has joined #ocaml
ejt has joined #ocaml
Maddas has joined #ocaml
whee has joined #ocaml
voltron has joined #ocaml
mellum has joined #ocaml
pattern has quit [Read error: 110 (Connection timed out)]
pattern has joined #ocaml
clog has joined #ocaml
det has joined #ocaml
steele has joined #ocaml
CosmicRay has joined #ocaml
<CosmicRay> simple beginner stupid question here: how do I open a file for reading and writing in OCaml?
<CosmicRay> (O_RDWR in Unix or "r+b" in C)
<Smerdyakov> Hm. There might not be a way using the OCaml Standard Library.
<CosmicRay> ouch.
<CosmicRay> that would seem to suck in a pretty big way.
<teratorn> I've a hard time believing that's right
<Smerdyakov> I don't think I've ever opened in a file in read/write mode in any language.
<CosmicRay> it is a very common thing to do.
<teratorn> not really
<Banana> never seen that.
<teratorn> I can't recall every doing it, now that I think about it.
<teratorn> *ever
<CosmicRay> imagine a database server, would you really re-open a file every time you update a record?
<teratorn> CosmicRay: doesn't make it common :)
<CosmicRay> anytime you need to both read and update a file it's done
<CosmicRay> heh
<Smerdyakov> For a database server, you would mmap a file.
<Smerdyakov> Or manipulate the hard drive directly.
<CosmicRay> possibly. but I'm not ready to know how to do *that* in ocaml :-)
<Riastradh> You use the C FFI to call mmap().
<Nutssh> Smerdyakov: You can do it with open_file --- see Pervasives. There's also Unix.
<Smerdyakov> Nutssh, ah, but it's CosmicRay's question. :)
<CosmicRay> and manipulating the hard drive directly would mean opening the block device O_RDWR :-)
<Nutssh> Ocaml also has mmap BigArray.Genarray.map_file
det has quit [kornbluth.freenode.net irc.freenode.net]
<CosmicRay> I cannot find open_file in the Pervasives manual
<CosmicRay> nor in pervasives.ml
det has joined #ocaml
<Nutssh> Sorry. open_in // open_out
<Smerdyakov> Nutssh, he wants the same file opened for reading _and_ writing.
<steele> CosmicRay: it's openfile in the Unix module
<CosmicRay> steele: will that prevent me from using the standard libary functions on it though?
<CosmicRay> ahh.. I open it, then I use both in_channel_of_descr and out_channel_of_descr?
<CosmicRay> on the same descriptor?
<Nutssh> Yes. But keep in mind that the two share state, for instance, file position.
<CosmicRay> yes. I desire that behavior.
<CosmicRay> thanks
<CosmicRay> oh, how does one give an octal integer?
<CosmicRay> (a literal)
<sproctor> printf?
<CosmicRay> no, I need an integer
<CosmicRay> to pass to Unix.openfile
<CosmicRay> ie, 0644 in C
<sproctor> oh.
rox has quit [Read error: 104 (Connection reset by peer)]
<Banana> 0o775
<CosmicRay> ah.
<CosmicRay> thanks
<Banana> 0x for hexa and 0b for binary.
* Smerdyakov boo's OCaml for using integers to indicate modes.
<Smerdyakov> The SML Basis uses a datatype. :P
<Banana> yeah that's weird.
<CosmicRay> 0o644 is a hell of a lot shorter than some crap like O_USERRD | O_USERWR | O_USEREX | O_GROUPRD | O_GROUPWR | O_OTHERRD |
<CosmicRay> etc.
<Banana> they have a datatype for open_flag
<CosmicRay> yeah but the bitfields of that one are not standardized.
<CosmicRay> plus you rarely specify more than 2 or 3 options.
rox has joined #ocaml
The-Fixer has quit ["Goodbye"]
<teratorn> CosmicRay: it could easily use a string.
<CosmicRay> but why, when the octal version is both standard and easily checked programatically?
<teratorn> readability
<Riastradh> The octal version incomprehensible.
<Riastradh> 'Yeah, let's compress all hope for readability away into three characters!'
<CosmicRay> no it's not, 0o644 clearly means user read/write and read-only for everyone else :-)
<CosmicRay> This is the Unix module after all :-)
<Riastradh> I can never remember which is which.
<teratorn> oh hmm
<CosmicRay> there are 4 digits. The first is the setuid/setgid/flag one. After that are user, group, world.
<Riastradh> No, I can never remember which flag is which.
<CosmicRay> oh. man 2 chmod. :-)
<Riastradh> ...or you could just use self-explanatory names.
<CosmicRay> ... and wind up having to key in 50 characters to do what I did with 3.
<CosmicRay> there are self-explanatory names, see man 2 chmod. I bet the Unix module even exposes them.
<Riastradh> Go use Perl, sadist.
<CosmicRay> pfft
<CosmicRay> them's fighting words :-
<CosmicRay> I switched to Python from Perl some years back
<CosmicRay> ok another stupid question. How do I read a file into a list, each element of which is one line of the file?
<CosmicRay> seems this is a common thing but I can't quite figure out how to make it properly tail-recursive without getting the elements in the reverse order.
<Riastradh> You can reverse it when you're done.
<CosmicRay> yeah I suppose but that just sounds inefficient
<CosmicRay> also I can't figure out how to deal with the end of file exception properly.
<Riastradh> Whether you write it tail-recursively or non-tail-recursively, you're going to have to allocate intermediate storage.
<Riastradh> try ... with End_of_file -> handle it here
<Riastradh> You're going to end up using the heap for your intermediate storage at some point if the file's big enough, or you'll get a stack overflow (some language implementations will copy the stack to the heap if it gets too big, but I think not OCaml).
<CosmicRay> that's assuming it's not tail-recursive, of course.
<CosmicRay> obviously I want to avoid that.
<Riastradh> If it _is_ tail-recursive, you'll be allocating intermediate cons cells in the heap that consist of the list you're going to reverse at the end.
<CosmicRay> "cons cells"?
<CosmicRay> you just mean that I'm using 2x the memory I would in C or something?
<Riastradh> If you did it in C you'd probably keep stretching a big array.
<CosmicRay> what's the other alternative here then... arrays won't work since I don't know the size in advance..
<mattam> vectors or read the file twice.
<Riastradh> You could read it all into one huge string, and then split that string along the newlines.
<Riastradh> No matter how you do it you're going to have to allocate intermediate storage.
<Riastradh> Cons cells, by the way, are the cells that 'x::y' creates. (the :: operator is pronounced 'cons')
<CosmicRay> isn't that just a list that it creates?
<CosmicRay> ie, doesn't it just add x to the head of the linked list y?
<Riastradh> CosmicRay, 'cons cell' is a name for each link.
<CosmicRay> ah.
<CosmicRay> gotcha.
<mattam> One thing you can do in C is build a linked list on the fly while keeping the head of it somewhere, you can't in ocaml if you're not using references.
<Nutssh> CosmicRay: Don't obsess about performance. Write it, *then* profile.
<Riastradh> You could implement your own mutable list structure.
<steele> mattam: you could use some Obj.* as in http://caml.inria.fr/archives/200301/msg00264.html, but ..
<Riastradh> type 'a mylist = Nil | Cons of 'a * 'a mylist ref
<CosmicRay> Nutssh: I agree. I'm just asking questions to learn here. I'm only reading 20 lines so it's not going to be a big deal.
<Riastradh> You could even write it non-tail-recursively there.
<CosmicRay> Nutssh: I'm just trying to convert some code from Python to the OCaml Way and see how I like it.
<Nutssh> Also, List.reverse isn't going to be slow. amortized, its a constant time/element.
<CosmicRay> yeah but the point is not to learn a more complex version of Perl :-)
<Riastradh> Write something that works first.
<Riastradh> Then make it work simply & understandably.
<Riastradh> Then profile it.
<CosmicRay> what module would I look for something that splits apart strings? Ie, "jgoerzen:1000:foo" -> ["jgoerzen"; "1000"; "foo"]
<Riastradh> You can skip step three if you don't need the speed.
<CosmicRay> Riastradh: I agree. This is just an exercise :-)
<mattam> CosmicRay: Str probably, or String for very basic manipulations.
<Demitar> CosmicRay, I doubt "converting" code straight from python is a great idea (at least if you code python like I do). The paradigms are a tad far apart. But don't let that stop you. :)
<CosmicRay> I know. By converting I mean "write someting in OCaml whose result is the same as my Python code."
<CosmicRay> I do not, for instance, use any form of recursion in Python but I'm already talking about tail-recursion here :-)
<Demitar> In python I leverage the dynamic typing, in ocaml I leverage the rich static typing. :)
<CosmicRay> heh
<CosmicRay> how do I open Std? open extlib.Std doesn't quite seem to do it
<Smerdyakov> All module names begin with capital letters, so there can't be a module named extlib.
<CosmicRay> well it creates a subdir...
<Smerdyakov> What?
<CosmicRay> /usr/lib/ocaml/3.07/extlib/std.*
<CosmicRay> instead of /usr/lib/ocaml/3.07/std.* where the standard modules are
<Smerdyakov> You just refer to the module Std.
<Smerdyakov> No prefix required if it's loaded.
<CosmicRay> ahh...
<CosmicRay> #use "topfind";;
<CosmicRay> #require "extlib";;
<CosmicRay> open Std;;
* CosmicRay senses a need to updte some of the tutorials
farizeo has quit [Read error: 104 (Connection reset by peer)]
Nutssh has left #ocaml []
Iorek has joined #ocaml
det has quit [Read error: 110 (Connection timed out)]
<pattern> what does #require do?
<pattern> and is there a list of all the # directives somewhere?
<pattern> well, i found the # directives
<pattern> but #require isn't one of them
<CosmicRay> I don't know.
<CosmicRay> something to do with topfind maybe.
<pattern> did you actually use #require?
<pattern> <CosmicRay> #require "extlib";;
<pattern> did you do that?
<pattern> "Most important, there is a new directive #require for the same purpose"
<pattern> that's from the topfind docs
<pattern> ok, so now i see
wazze has joined #ocaml
<CosmicRay> yes, I did use it.
CosmicRay has quit ["Client exiting"]
karryall has joined #ocaml
malte has joined #ocaml
<malte> hi, i'm having trouble doing make world for ocaml 3.0.7 :(
<malte> i get "File "odoc_sig.ml", line 1302, characters 16-17: Syntax error"
<malte> any ideas?
door has joined #ocaml
<karryall> 3.07 or 3.07+2 ?
* door is malte
<door> wait, ill check
malte has left #ocaml []
<door> 3.07pl2 says the tar ball
<karryall> well that's weird then, it builds ok for me
<karryall> did you have a look at odoc_sig.ml, line 1302, characters 16-17 ?
<door> print_DEBUG "Eléments du module:"; <- that's the line
<karryall> hum
<karryall> shouldn't it skip this line ?
<karryall> what's the command line ?
<door> i have no idea, being totally new to ocaml :)
<door> 2 sej
<door> sec
<door> ../ocamlcomp.sh -pp './remove_DEBUG' -I ../parsing -I ../utils -I ../typing -I ../driver -I ../bytecomp -I ../tools -I ../toplevel/ -I ../stdlib -I ../otherlibs/str -I ../otherlibs/dynlink -I ../otherlibs/unix -I ../otherlibs/num -I ../otherlibs/graph -warn-error A -c odoc_sig.ml
<karryall> yes, remove_DEBUG should filter those lines
<door> could i just comment it out perhaps?
<door> still.. strange that remove_DEBUG won't work
<karryall> you have an UTF-8 locale, don't you ?
<door> yeah
<door> does that matter? :/
<karryall> remove_DEBUG is a sed: I guess sed doesn't like utf-8
<karryall> try LC_ALL=C make world
<door> ok, seems to work. stupid sed :/
<door> thanks :-)
<door> i suppose it might have to do with the fact that i'm using utf8 but those files are encoded with iso?
<karryall> yes
<karryall> (I'll mail the maintainer about this)
<door> ok, thanks
blueshoe has joined #ocaml