< 1199059720 0 :ehird`_!unknown@unknown.invalid PRIVMSG #esoteric :foo<-{n->{i->n++i}} < 1199059735 0 :ehird`_!unknown@unknown.invalid PRIVMSG #esoteric :foo<-\n.\i.n++i < 1199059938 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :Main :: 0 < 1199059938 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric : = RNode 4 1 0 < 1199059938 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric : = RNode 4 2 0 < 1199059938 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :RNode n t p = RNode 0 n t p < 1199059938 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :RNode m m t p :: p < 1199059939 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :RNode n m t p :: #node n t -> RNode n+1 m t p < 1199059943 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :eight! < 1199059957 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :...close in complexity to the hypercube 8| < 1199059978 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :what a verbose lang, i need those shorthands... < 1199060123 0 :Slereah!unknown@unknown.invalid PRIVMSG #esoteric :What's ASCII 96? `? < 1199060130 0 :Slereah!unknown@unknown.invalid PRIVMSG #esoteric :Doesn't appear on my chart. < 1199060192 0 :ehird`_!unknown@unknown.invalid PRIVMSG #esoteric :oklopol! how would you like to help devise a language even more concise than oklotalk < 1199060206 0 :ehird`_!unknown@unknown.invalid PRIVMSG #esoteric :with only one goal: tiny code < 1199060213 0 :ehird`_!unknown@unknown.invalid PRIVMSG #esoteric :well, tiny code that can be written fast :-) < 1199060303 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :starting on what basis? < 1199060338 0 :ehird`_!unknown@unknown.invalid PRIVMSG #esoteric :oklopol: hm, insanity < 1199060346 0 :ehird`_!unknown@unknown.invalid PRIVMSG #esoteric :or: functions, mainly, i guess < 1199060350 0 :ehird`_!unknown@unknown.invalid PRIVMSG #esoteric :functions and mutations < 1199060373 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :typing makes things concise because it allows for massive overloading. < 1199060394 0 :ehird`_!unknown@unknown.invalid PRIVMSG #esoteric :ok then < 1199060396 0 :ehird`_!unknown@unknown.invalid PRIVMSG #esoteric :type inference? < 1199060402 0 :ehird`_!unknown@unknown.invalid PRIVMSG #esoteric :or dynamic typing < 1199060419 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :hmm < 1199060450 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :well, definately not explicit typing :) < 1199060471 0 :ehird`_!unknown@unknown.invalid PRIVMSG #esoteric :ofc < 1199060476 0 :ehird`_!unknown@unknown.invalid PRIVMSG #esoteric :type inference could be fun < 1199060476 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :yep < 1199060485 0 :ehird`_!unknown@unknown.invalid PRIVMSG #esoteric :you could build up a huge knowledge base of info about functions < 1199060495 0 :ehird`_!unknown@unknown.invalid PRIVMSG #esoteric :it could know more about how a function behaves than you do :P < 1199060501 0 :ehird`_!unknown@unknown.invalid PRIVMSG #esoteric :but then type inference can get complex < 1199060506 0 :ehird`_!unknown@unknown.invalid PRIVMSG #esoteric :also, less possibility for operator abuse < 1199060519 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :indeed, never tried implementing it though < 1199060529 0 :ehird`_!unknown@unknown.invalid PRIVMSG #esoteric :so... dynamic typing? < 1199060537 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :prolly < 1199060541 0 :ehird`_!unknown@unknown.invalid PRIVMSG #esoteric :ok < 1199060550 0 :ehird`_!unknown@unknown.invalid PRIVMSG #esoteric :let's get some sort of grammar < 1199060557 0 :ehird`_!unknown@unknown.invalid PRIVMSG #esoteric :we want prefix, binary, and postfix operators < 1199060562 0 :ehird`_!unknown@unknown.invalid PRIVMSG #esoteric :also N-ary binaries < 1199060564 0 :ehird`_!unknown@unknown.invalid PRIVMSG #esoteric :that is < 1199060566 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :hehe < 1199060568 0 :ehird`_!unknown@unknown.invalid PRIVMSG #esoteric :ARG op ARG ARG ... < 1199060578 0 :ehird`_!unknown@unknown.invalid PRIVMSG #esoteric :i don't think ARG ARG ... op ARG ARG ..., though < 1199060581 0 :ehird`_!unknown@unknown.invalid PRIVMSG #esoteric :that would be confusing < 1199060602 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :perhaps. < 1199060613 0 :ehird`_!unknown@unknown.invalid PRIVMSG #esoteric :what usage would that have < 1199060620 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :asdf i remember i came up with a language some time ago, but i forgot what it was.... < 1199060626 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :how do you parse arg op arg arg? < 1199060721 0 :ehird`_!unknown@unknown.invalid PRIVMSG #esoteric :dunno < 1199060723 0 :ehird`_!unknown@unknown.invalid PRIVMSG #esoteric :K does it < 1199060810 0 :ehird`_!unknown@unknown.invalid PRIVMSG #esoteric :oklopol: instead of thinking about that < 1199060821 0 :ehird`_!unknown@unknown.invalid PRIVMSG #esoteric :oklopol: let's just say: prefix, postfix, binary < 1199060832 0 :ehird`_!unknown@unknown.invalid PRIVMSG #esoteric :arg op arg arg would be arg op (arg arg), i.e. second arg a list < 1199060836 0 :ehird`_!unknown@unknown.invalid PRIVMSG #esoteric :so < 1199060843 0 :ehird`_!unknown@unknown.invalid PRIVMSG #esoteric :what about the 'function' operator < 1199060855 0 :ehird`_!unknown@unknown.invalid PRIVMSG #esoteric :i think: [] < 1199060885 0 :ehird`_!unknown@unknown.invalid PRIVMSG #esoteric :[_+1] or [x;x+1] < 1199060888 0 :ehird`_!unknown@unknown.invalid PRIVMSG #esoteric :oklopol: good so far? < 1199060916 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :seems to work. < 1199060930 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :but that's a given since there's no sidestep from K :P < 1199060937 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :K does it? huh < 1199060942 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :i don't think so... < 1199060945 0 :ehird`_!unknown@unknown.invalid PRIVMSG #esoteric :ok, now let's define two functions over lists < 1199060949 0 :ehird`_!unknown@unknown.invalid PRIVMSG #esoteric :specifically, map and fold < 1199060953 0 :ehird`_!unknown@unknown.invalid PRIVMSG #esoteric :\ is fold < 1199060961 0 :ehird`_!unknown@unknown.invalid PRIVMSG #esoteric :/ is map < 1199060964 0 :ehird`_!unknown@unknown.invalid PRIVMSG #esoteric :Postfix operators < 1199060977 0 :ehird`_!unknown@unknown.invalid PRIVMSG #esoteric :func\ is a function f < 1199060982 0 :ehird`_!unknown@unknown.invalid PRIVMSG #esoteric :f called with a list does fold over that list with func < 1199060985 0 :ehird`_!unknown@unknown.invalid PRIVMSG #esoteric :same for / but with map < 1199060991 0 :ehird`_!unknown@unknown.invalid PRIVMSG #esoteric :+\1 2 3 -> 6 < 1199061003 0 :ehird`_!unknown@unknown.invalid PRIVMSG #esoteric :+/(1 2) (3) -> (3) (3) < 1199061015 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :that works as long as you can't change the meaning of \ during the program < 1199061025 0 :ehird`_!unknown@unknown.invalid PRIVMSG #esoteric :yes, and? < 1199061026 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :well, as long as it always is a postfix oper. < 1199061031 0 :ehird`_!unknown@unknown.invalid PRIVMSG #esoteric :it is < 1199061036 0 :ehird`_!unknown@unknown.invalid PRIVMSG #esoteric :x/ and x\ < 1199061042 0 :ehird`_!unknown@unknown.invalid PRIVMSG #esoteric :+\1 2 3 is really: < 1199061044 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :well, i mean if you want to make your own postfixors. < 1199061046 0 :ehird`_!unknown@unknown.invalid PRIVMSG #esoteric :(+\) 1 2 3 < 1199061072 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :if you can't make them, then the separation into postfix operators is useless and the terminology of K can be used < 1199061079 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :verbs & proverbs < 1199061081 0 :ehird`_!unknown@unknown.invalid PRIVMSG #esoteric :[_+2]/1 2 3 -> 3 4 5 < 1199061082 0 :ehird`_!unknown@unknown.invalid PRIVMSG #esoteric :oklopol: you can < 1199061088 0 :ehird`_!unknown@unknown.invalid PRIVMSG #esoteric :oklopol: you can define all kinds of ops < 1199061100 0 :ehird`_!unknown@unknown.invalid PRIVMSG #esoteric :[x;x+2]/1 2 3 -> 3 4 5 < 1199061107 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :yes, well in that case, those need to be type checked at compile time. < 1199061119 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :which somewhat rules out dynamic typing < 1199061119 0 :ehird`_!unknown@unknown.invalid PRIVMSG #esoteric :nah < 1199061121 0 :ehird`_!unknown@unknown.invalid PRIVMSG #esoteric :dynamic typing < 1199061122 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :no? < 1199061136 0 :ehird`_!unknown@unknown.invalid PRIVMSG #esoteric :/, \ use their arg as a func < 1199061145 0 :ehird`_!unknown@unknown.invalid PRIVMSG #esoteric :if it's a number, the interpreter balks out < 1199061150 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :it will change parsing if you change a postfix operator into a prefix one. < 1199061172 0 :ehird`_!unknown@unknown.invalid PRIVMSG #esoteric :how does k handle this < 1199061191 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :i don't think proverbs are first class < 1199061199 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :although i don't *know* < 1199061230 0 :ehird`_!unknown@unknown.invalid PRIVMSG #esoteric :ok, well then parsing can be changed at runtime < 1199061230 0 :ehird`_!unknown@unknown.invalid PRIVMSG #esoteric ::D < 1199061233 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :*adverbs < 1199061235 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :not proverbs < 1199061242 0 :ehird`_!unknown@unknown.invalid PRIVMSG #esoteric :compiling will probably be possible with some tricks < 1199061261 0 :ehird`_!unknown@unknown.invalid PRIVMSG #esoteric :like no matter what an op is compiled as prefix,postfix,infix depending on how its used < 1199061266 0 :ehird`_!unknown@unknown.invalid PRIVMSG #esoteric :when multiple choices, both are tried < 1199061271 0 :ehird`_!unknown@unknown.invalid PRIVMSG #esoteric :and it is resolved at runtime < 1199061301 0 :ehird`_!unknown@unknown.invalid PRIVMSG #esoteric :oklopol: should we have pattern matching? < 1199061305 0 :ehird`_!unknown@unknown.invalid PRIVMSG #esoteric :and if so, what syntax < 1199061338 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :hmmm < 1199061349 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :uhhh K-tree <3 < 1199061368 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :i *have* to get my hands on a K interp or make one myself... < 1199061370 0 :ehird`_!unknown@unknown.invalid PRIVMSG #esoteric :echo 'define k-tree' | ehirdtalk < 1199061379 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :heh < 1199061397 0 :ehird`_!unknown@unknown.invalid PRIVMSG #esoteric :upi can get a free K interpreter from Kx < 1199061399 0 :ehird`_!unknown@unknown.invalid PRIVMSG #esoteric :as in beer < 1199061411 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :what? < 1199061419 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :*-up, or what's upi? < 1199061428 0 :ehird`_!unknown@unknown.invalid PRIVMSG #esoteric :you < 1199061436 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :xD < 1199061443 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :oh, heh < 1199061508 0 :ehird`_!unknown@unknown.invalid PRIVMSG #esoteric :hm < 1199061511 0 :ehird`_!unknown@unknown.invalid PRIVMSG #esoteric :kx.com is confusing < 1199061512 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :pattern matching can make things more concise, definitely, the problem is the kind of iterative programming K does is much more comcise < 1199061512 0 :ehird`_!unknown@unknown.invalid PRIVMSG #esoteric :no info abotu K < 1199061513 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :*concise < 1199061557 0 :ehird`_!unknown@unknown.invalid PRIVMSG #esoteric :oh well < 1199061558 0 :ehird`_!unknown@unknown.invalid PRIVMSG #esoteric :http://www.nsl.com/misc/k/kwin.zip < 1199061560 0 :ehird`_!unknown@unknown.invalid PRIVMSG #esoteric :there's your interpreter < 1199061582 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :i'm actually on ubuntu. < 1199061646 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :lol thank you xchat, there's no way to copypaste that into my url without the kwin.zip part xD < 1199061651 0 :ehird`_!unknown@unknown.invalid PRIVMSG #esoteric :klin then < 1199061677 0 :ehird`_!unknown@unknown.invalid PRIVMSG #esoteric :now WHERE is my goddamn interpreter for os x < 1199061833 0 :ehird`_!unknown@unknown.invalid PRIVMSG #esoteric :http://www.kx.com/download/download.htm sdfhsdfoijsdfoihsdf no k interpreter < 1199061862 0 :ehird`_!unknown@unknown.invalid PRIVMSG #esoteric :anyway < 1199061865 0 :ehird`_!unknown@unknown.invalid PRIVMSG #esoteric :explain k-trees, oklopol < 1199061934 0 :ehird`_!unknown@unknown.invalid PRIVMSG #esoteric :anyway. fact:[*1|_] < 1199061940 0 :ehird`_!unknown@unknown.invalid PRIVMSG #esoteric :there's a factorial < 1199061972 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :whellll the k-tree is a tree < 1199061978 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :which holds the vars < 1199061991 0 :ehird`_!unknown@unknown.invalid PRIVMSG #esoteric :helpful < 1199062005 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :the point is you can do scopes explicitly in a fun fashion by executing something in a lower branch < 1199062079 0 :ehird`_!unknown@unknown.invalid PRIVMSG #esoteric :so how do i use a k-tree in place of pattern matching < 1199062095 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :umm... there's no "a k-tree" < 1199062099 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :there's only one k-tree < 1199062101 0 :ehird`_!unknown@unknown.invalid PRIVMSG #esoteric :ok < 1199062106 0 :ehird`_!unknown@unknown.invalid PRIVMSG #esoteric :how do i use it in place of pattern matching < 1199062114 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :depends what you mean. < 1199062122 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :ohhhhh < 1199062136 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :when i said "k-tree <3", it had nothing to do with pattern matching. < 1199062201 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :uhhh < 1199062203 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :k < 1199062203 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :+ < 1199062205 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :erlang < 1199062206 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric := < 1199062208 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :sex. < 1199062231 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :kinda like pi calculus, but... less calculus'y :-) < 1199062257 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :something involving a linda-like global tuplespace < 1199062258 0 :ehird`_!unknown@unknown.invalid PRIVMSG #esoteric :so, oklopol... < 1199062264 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :what? :) < 1199062265 0 :ehird`_!unknown@unknown.invalid PRIVMSG #esoteric :how should we do conditionals/pattern matching/whatever < 1199062284 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :ah, well, *that* i don't know. < 1199062292 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :all i know is, k+erlang, maybe? < 1199062293 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric ::)) < 1199062312 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :i have no idea what that even means, i just know it's awesome. < 1199062342 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :actually, i should learn linda, since i just know it has the global tuplespace, and that's awesome :P < 1199062358 0 :ehird`_!unknown@unknown.invalid PRIVMSG #esoteric ::/ < 1199062372 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :sorry for not being helpful, my brain isn't good at anything non-random ideas thinking at this hour. < 1199062389 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :i'd need longer vacations to get used to the fact i sleep during the day :) < 1199062407 0 :ehird`_!unknown@unknown.invalid PRIVMSG #esoteric :hm the evaluation model of our language is still pretty standard < 1199062418 0 :ehird`_!unknown@unknown.invalid PRIVMSG #esoteric :maybe there's a way to make code more consice, by completely changing it < 1199062514 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :well, you could make it point-free, and add lots of high-order functions :)) < 1199062524 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :i'm going to sleep soon < 1199062527 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :too many smileys. < 1199062528 0 :ehird`_!unknown@unknown.invalid PRIVMSG #esoteric :heh < 1199062533 0 :ehird`_!unknown@unknown.invalid PRIVMSG #esoteric :point-free code isn't consicer though < 1199062546 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :not really, no < 1199062547 0 :ehird`_!unknown@unknown.invalid PRIVMSG #esoteric :certainly not quicker to write either < 1199062556 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :certainly not, no < 1199062558 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric ::)) < 1199062614 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :oklotalk isn't hard to win, since i've let a lot of stuff out i originally had, for lessening obscurity :< < 1199062651 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :so, the language < 1199062666 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :if the aim is for conciseness, i'd start with examples < 1199062684 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :i mean, examples of programs we want to be concise. < 1199062712 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :it's pretty simple to find a language that would be most concise for doing a certain kind of job < 1199062733 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :well, ofc not *the most concise one* < 1199062745 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :but, like, very. < 1199062821 0 :ehird`_!unknown@unknown.invalid PRIVMSG #esoteric :aim is for conciseness and speed to write < 1199062887 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :well, one way to be concise is to leave more stuff for the interp to figure out < 1199062900 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :make it a bit more declarative < 1199062913 0 :ehird`_!unknown@unknown.invalid PRIVMSG #esoteric :ok < 1199062917 0 :ehird`_!unknown@unknown.invalid PRIVMSG #esoteric :example? < 1199062930 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :one way to do this would indeed be the tuple space, i think... although that is only a feeling, since i haven't explored it that rigorously.. < 1199062933 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :hmm < 1199062952 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :well, i can give you extreme examples, ones that are fully declarative... < 1199063003 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :like ![{a [[1, 3, 5], [2, 4]] < 1199063635 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :rec is a lower precedence high-order function that applies current function recursively for every item in a list < 1199063642 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :in this case the two halves of the list < 1199063701 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :, is a low precedence function that works as a data flow controller, it takes the output of the last thingie and gives it to the next. this could just be done using normal application, but i think the precedences may provide more conciseness with a comma oper. < 1199063748 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :zipx takes a function and a list of lists, and always zips the value the function gives from all the heads of the lists given to it as a list, and concatenates one at a time < 1199063775 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :these are all very basic functions, so i think that could be made 8 or 10 chars. < 1199063790 0 :ehird`_!unknown@unknown.invalid PRIVMSG #esoteric :this is not declarative < 1199063806 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :nope. < 1199063807 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :just an idea. < 1199063821 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :the declarative one i had was less concise :P < 1199063831 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :list splicing is sooooo mucho fun < 1199063847 0 :ehird`_!unknown@unknown.invalid PRIVMSG #esoteric :anyway: [$_\2,!] < 1199063851 0 :ehird`_!unknown@unknown.invalid PRIVMSG #esoteric :hmm < 1199063853 0 :ehird`_!unknown@unknown.invalid PRIVMSG #esoteric :anyway < 1199063856 0 :ehird`_!unknown@unknown.invalid PRIVMSG #esoteric :what is that < 1199063857 0 :ehird`_!unknown@unknown.invalid PRIVMSG #esoteric :is that a sorter < 1199063865 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :what is what < 1199063931 0 :ehird`_!unknown@unknown.invalid PRIVMSG #esoteric :anyway < 1199063938 0 :ehird`_!unknown@unknown.invalid PRIVMSG #esoteric :here's a quicksort idea: < 1199064002 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :'\_2,)#<< < 1199064035 0 :ehird`_!unknown@unknown.invalid PRIVMSG #esoteric :hm < 1199064036 0 :ehird`_!unknown@unknown.invalid PRIVMSG #esoteric :wait < 1199064043 0 :ehird`_!unknown@unknown.invalid PRIVMSG #esoteric :tell me the syntax for car and cdr < 1199064046 0 :ehird`_!unknown@unknown.invalid PRIVMSG #esoteric :one-char, prefix < 1199064074 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :i use . and : usually < 1199064132 0 :ehird`_!unknown@unknown.invalid PRIVMSG #esoteric :ok < 1199064287 0 :ehird`_!unknown@unknown.invalid PRIVMSG #esoteric :qs^naive:[l:r:(). :?_<2[_][p:#_ ?_/2. [:_int->bool when a bool is expected. < 1199064960 0 :ehird`_!unknown@unknown.invalid PRIVMSG #esoteric :how about we define a problem domain to work on < 1199064963 0 :ehird`_!unknown@unknown.invalid PRIVMSG #esoteric :then base the language on that < 1199064977 0 :ehird`_!unknown@unknown.invalid PRIVMSG #esoteric :let's think low-level: what essentially are most algorithmic programs? < 1199064984 0 :ehird`_!unknown@unknown.invalid PRIVMSG #esoteric :Let's take the factorial. < 1199064991 0 :ehird`_!unknown@unknown.invalid PRIVMSG #esoteric :Isn't it a map? < 1199064997 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :yeah < 1199064999 0 :ehird`_!unknown@unknown.invalid PRIVMSG #esoteric :An infinite map. < 1199065003 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :yarrrr < 1199065006 0 :ehird`_!unknown@unknown.invalid PRIVMSG #esoteric :So.. < 1199065017 0 :ehird`_!unknown@unknown.invalid PRIVMSG #esoteric :If [] is a mapping, < 1199065023 0 :ehird`_!unknown@unknown.invalid PRIVMSG #esoteric :[x=y. x=y] etc < 1199065031 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :hmmm < 1199065034 0 :ehird`_!unknown@unknown.invalid PRIVMSG #esoteric :then < 1199065036 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :[] is a mapping? < 1199065040 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :errr < 1199065040 0 :ehird`_!unknown@unknown.invalid PRIVMSG #esoteric :we can algorithmically define how to look up a key < 1199065045 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :what kinda mapping, now? < 1199065083 0 :ehird`_!unknown@unknown.invalid PRIVMSG #esoteric :fact = [_<2 = 1; n = n * fact(n-1)] < 1199065087 0 :ehird`_!unknown@unknown.invalid PRIVMSG #esoteric :do you see? < 1199065093 0 :ehird`_!unknown@unknown.invalid PRIVMSG #esoteric :it's just a dictionary, mapping, hash table, thing < 1199065097 0 :ehird`_!unknown@unknown.invalid PRIVMSG #esoteric :but you can define keys algorithmically < 1199065104 0 :ehird`_!unknown@unknown.invalid PRIVMSG #esoteric :and they are lazily called upon < 1199065109 0 :ehird`_!unknown@unknown.invalid PRIVMSG #esoteric :fact(n-1) is just a table lookup < 1199065116 0 :ehird`_!unknown@unknown.invalid PRIVMSG #esoteric :a function is just a table < 1199065117 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :well yeah, that's how oklotalk would do it < 1199065121 0 :ehird`_!unknown@unknown.invalid PRIVMSG #esoteric :no < 1199065123 0 :ehird`_!unknown@unknown.invalid PRIVMSG #esoteric :because it's still a function < 1199065128 0 :ehird`_!unknown@unknown.invalid PRIVMSG #esoteric :it's still called and returned from, etc < 1199065134 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :? < 1199065139 0 :ehird`_!unknown@unknown.invalid PRIVMSG #esoteric :let's put it this way < 1199065142 0 :ehird`_!unknown@unknown.invalid PRIVMSG #esoteric :there are no functions < 1199065146 0 :ehird`_!unknown@unknown.invalid PRIVMSG #esoteric :_<2 isn't a pattern match as such < 1199065146 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :oklotalk doesn't differentiate between lists and functions... < 1199065151 0 :ehird`_!unknown@unknown.invalid PRIVMSG #esoteric :it doesn't match on an 'argument' < 1199065164 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :i see, it's the same thing, essentially, though? < 1199065166 0 :ehird`_!unknown@unknown.invalid PRIVMSG #esoteric :it simply states that in the fact table, lookups < 2 = 1 < 1199065170 0 :ehird`_!unknown@unknown.invalid PRIVMSG #esoteric :that is: it's a hash table < 1199065175 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :yes, a function < 1199065176 0 :ehird`_!unknown@unknown.invalid PRIVMSG #esoteric :you don't 'execute and match' < 1199065180 0 :ehird`_!unknown@unknown.invalid PRIVMSG #esoteric :you 'lookup' < 1199065189 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :that's exactly how functions do it, pattern match and return. < 1199065190 0 :ehird`_!unknown@unknown.invalid PRIVMSG #esoteric :please understand the philisophical difference < 1199065194 0 :ehird`_!unknown@unknown.invalid PRIVMSG #esoteric :no < 1199065204 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :how' < 1199065206 0 :ehird`_!unknown@unknown.invalid PRIVMSG #esoteric :please think about it < 1199065215 0 :ehird`_!unknown@unknown.invalid PRIVMSG #esoteric :it's a different way of thinking about it < 1199065219 0 :ehird`_!unknown@unknown.invalid PRIVMSG #esoteric :instead of factorial being an algorithm < 1199065223 0 :ehird`_!unknown@unknown.invalid PRIVMSG #esoteric :it's just a lookup table: < 1199065233 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :yes, exactly the idea behind pattern matching. < 1199065246 0 :ehird`_!unknown@unknown.invalid PRIVMSG #esoteric :[0 = 1; 1 = 1; 2 = 2; 3 = 6; 4 = 24; ...] < 1199065252 0 :ehird`_!unknown@unknown.invalid PRIVMSG #esoteric :don't think of it as matching < 1199065253 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :but, oklotalk does exactly what you're thinking there, makes function basically an infinite list. < 1199065257 0 :ehird`_!unknown@unknown.invalid PRIVMSG #esoteric :think of it as all keys are evaluated already < 1199065258 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :or a hashmap < 1199065265 0 :ehird`_!unknown@unknown.invalid PRIVMSG #esoteric :don't think of fact(n) matching < 1199065265 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :yes, the oklotalk way. < 1199065268 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :period. < 1199065271 0 :ehird`_!unknown@unknown.invalid PRIVMSG #esoteric :just think of it looking up an already infinite table < 1199065283 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :yes, the *exact* idea behind oklotalk's functions. < 1199065293 0 :ehird`_!unknown@unknown.invalid PRIVMSG #esoteric :no, because you don't reason about it like a function < 1199065301 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :k. < 1199065302 0 :ehird`_!unknown@unknown.invalid PRIVMSG #esoteric :you reason about it like a pre-computed table < 1199065308 0 :ehird`_!unknown@unknown.invalid PRIVMSG #esoteric :like everything is constant < 1199065309 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :ah, kinda like in oklotalk. < 1199065315 0 :ehird`_!unknown@unknown.invalid PRIVMSG #esoteric :kind of, but not exactly < 1199065325 0 :ehird`_!unknown@unknown.invalid PRIVMSG #esoteric :oklotalk still makes you think about calling and returning, etc < 1199065361 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :yes, it lets you do that if you want, i'm just saying that's nothing new, pattern matching is equivalent to that... < 1199065389 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :except for the possible built-in functions that might handle it differently, but you can do that for functions too < 1199065395 0 :ehird`_!unknown@unknown.invalid PRIVMSG #esoteric :yes, the method is equiv < 1199065397 0 :ehird`_!unknown@unknown.invalid PRIVMSG #esoteric :the reasoning isn't < 1199065401 0 :ehird`_!unknown@unknown.invalid PRIVMSG #esoteric :we're thinking about this abstractly < 1199065427 0 :ehird`_!unknown@unknown.invalid PRIVMSG #esoteric :if we think of just looking everything up in tables that have always been constant and calculated, with that stuff just as syntactic sugar, our primitives etc. will be different < 1199065430 0 :ehird`_!unknown@unknown.invalid PRIVMSG #esoteric :and perhaps fruitful < 1199065454 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :well yeah, that provides for interesting, infinite lazy lists < 1199065464 0 :ehird`_!unknown@unknown.invalid PRIVMSG #esoteric :tables < 1199065465 0 :ehird`_!unknown@unknown.invalid PRIVMSG #esoteric :not lists < 1199065467 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :but haskell already has those, and you can even use them exactly like lists < 1199065476 0 :ehird`_!unknown@unknown.invalid PRIVMSG #esoteric :fact = [hello = 4] < 1199065480 0 :ehird`_!unknown@unknown.invalid PRIVMSG #esoteric :fact(hello) < 1199065481 0 :ehird`_!unknown@unknown.invalid PRIVMSG #esoteric :4 < 1199065482 0 :ehird`_!unknown@unknown.invalid PRIVMSG #esoteric :well < 1199065484 0 :ehird`_!unknown@unknown.invalid PRIVMSG #esoteric :"hello" < 1199065484 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :with a look-up table like that, with random-access type indexing, it's very hard to be lazy. < 1199065486 0 :ehird`_!unknown@unknown.invalid PRIVMSG #esoteric :and fact("hello") < 1199065489 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :actually... no < 1199065504 0 :ehird`_!unknown@unknown.invalid PRIVMSG #esoteric :oklopol: the implementation wouldn't be lazy, it'd do it via pattern-matching if needed, but it's a method of thinking < 1199065506 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :well, tables, hashmaps. < 1199065521 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :functions < 1199065522 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :. < 1199065531 0 :Slereah!unknown@unknown.invalid PRIVMSG #esoteric :Success! < 1199065537 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :Slereah: good for ya :) < 1199065546 0 :Slereah!unknown@unknown.invalid PRIVMSG #esoteric :I have made an ASCII-ish code for that BF interpreter. < 1199065568 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :ehird`_: i'm just saying i'm afraid it's not really a new way of thinking. < 1199065568 0 :Slereah!unknown@unknown.invalid PRIVMSG #esoteric :Let's try those big BF programs now. < 1199065588 0 :ehird`_!unknown@unknown.invalid PRIVMSG #esoteric :oklopol: but as the only basis for a language < 1199065591 0 :ehird`_!unknown@unknown.invalid PRIVMSG #esoteric :oklopol: and it is slightly < 1199065603 0 :ehird`_!unknown@unknown.invalid PRIVMSG #esoteric :oklopol: but yeah, give me an example program in it... quicksort is a mapping of lists to lists, obviously < 1199065608 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :at least not to me... done lots of thinking on different ways to specify infinite lists < 1199065683 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :ehird`_: example program in what? < 1199065692 0 :ehird`_!unknown@unknown.invalid PRIVMSG #esoteric :qs = [[] = []; [x] = [x]; x:[...,p,...] = stuff] < 1199065694 0 :ehird`_!unknown@unknown.invalid PRIVMSG #esoteric :note the mapping thing < 1199065699 0 :ehird`_!unknown@unknown.invalid PRIVMSG #esoteric :have to go in 5 mins < 1199065736 0 :mtve!unknown@unknown.invalid QUIT :"Terminated with extreme prejudice - dircproxy 1.0.5" < 1199065748 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :ACTION notes < 1199065800 0 :ehird`_!unknown@unknown.invalid PRIVMSG #esoteric :the question is < 1199065802 0 :ehird`_!unknown@unknown.invalid PRIVMSG #esoteric :what is stuff < 1199065821 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :looked interesting how you specified the p there < 1199065991 0 :ehird`_!unknown@unknown.invalid PRIVMSG #esoteric :oh well, tomorrow i shall define a concise language :P < 1199066000 0 :ehird`_!unknown@unknown.invalid PRIVMSG #esoteric :specifically, a write-only but productive one < 1199066015 0 :ehird`_!unknown@unknown.invalid PRIVMSG #esoteric :i.e. you can hack on it easily, but you cannot actually take a definition and look at it properly :P < 1199066032 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :yeah < 1199067335 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :ehird`_: i think with my current semantics, quicksort would be /2;A B:C,AB,',JnB < 1199067390 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :it's not very concise, because i haven't yet made that much splitting facilities, but anyhow, just in case you feel like competing :) < 1199067449 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :now sleep -> < 1199067590 0 :ehird`_!unknown@unknown.invalid NICK :ehiird|sleeep < 1199067590 0 :ehiird|sleeep!unknown@unknown.invalid NICK :ehird|sleeep < 1199067599 0 :ehird|sleeep!unknown@unknown.invalid PART #esoteric :? < 1199067633 0 :ehirdsleep!n=ehird@user-5440bd6b.wfd77a.dsl.pol.co.uk JOIN :#esoteric < 1199067882 0 :Slereah!unknown@unknown.invalid PRIVMSG #esoteric :Apparently, the full interpreter works okay, but at turtle speed. < 1199068146 0 :Slereah!unknown@unknown.invalid PRIVMSG #esoteric :Wish I knew how to optimise code. < 1199068361 0 :bsmntbombdood!unknown@unknown.invalid PRIVMSG #esoteric :wish i was more stupid < 1199068541 0 :Slereah!unknown@unknown.invalid PRIVMSG #esoteric :Let's trade! < 1199068737 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :bsmntbombdood: why? < 1199068835 0 :bsmntbombdood!unknown@unknown.invalid PRIVMSG #esoteric :dunno < 1199068904 0 :Slereah!unknown@unknown.invalid PRIVMSG #esoteric :Ah. There's an error in the - instruction. < 1199068935 0 :Slereah!unknown@unknown.invalid PRIVMSG #esoteric :Let's see if the programs run better! < 1199068969 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :bsmntbombdood: why? < 1199068973 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :whoops-. < 1199068974 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :'/,)#< merge sort < 1199068975 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :a:B,',\# < 1199069523 0 :Slereah!unknown@unknown.invalid PRIVMSG #esoteric :ACTION tries the Mandelbrot program < 1199069537 0 :Slereah!unknown@unknown.invalid PRIVMSG #esoteric :Which is pretty stupid, since it's already slow on a normal BF interpreter. < 1199069562 0 :pikhq!unknown@unknown.invalid PRIVMSG #esoteric :Oooh! I know! Try it on dbfi! < 1199069612 0 :Slereah!unknown@unknown.invalid PRIVMSG #esoteric :What, an interpreter on an interpreter on an interpreter? < 1199069624 0 :Slereah!unknown@unknown.invalid PRIVMSG #esoteric :Are you a fan of recursion by any change? < 1199069638 0 :Slereah!unknown@unknown.invalid PRIVMSG #esoteric :*ce < 1199069766 0 :Slereah!unknown@unknown.invalid PRIVMSG #esoteric :I'll just leave the Mandelbrot running his night. < 1199069802 0 :Slereah!unknown@unknown.invalid PRIVMSG #esoteric :If it works, I think I can say that the interpreter works okay. < 1199069832 0 :Slereah!unknown@unknown.invalid PRIVMSG #esoteric :... or! < 1199069862 0 :Slereah!unknown@unknown.invalid PRIVMSG #esoteric :Maybe I should try Lost Kingdom instead, which IIRC execute faster than Mandelbrot on a usual BF interpreter. < 1199069934 0 :pikhq!unknown@unknown.invalid PRIVMSG #esoteric :Lost Kingdom, for all it's size, is fairly quick usually. < 1199069999 0 :Slereah!unknown@unknown.invalid PRIVMSG #esoteric :I assume that it's because, unlike Mandelbrot, the text output without a bajillion other steps before. < 1199070072 0 :pikhq!unknown@unknown.invalid PRIVMSG #esoteric :Yeah. < 1199070115 0 :Slereah!unknown@unknown.invalid PRIVMSG #esoteric :See? I only had to wait 2 minutes before it asks me if I want to enable long room descriptions! < 1199070133 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :all factorials in a list: "1::Il,)&*" < 1199070150 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :to take one specifically is a bit harder ;) < 1199070174 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :i can't sleep, this language is hunting me :< < 1199070177 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :retry -> < 1199070259 0 :Slereah!unknown@unknown.invalid PRIVMSG #esoteric :In your dream? < 1199070275 0 :Slereah!unknown@unknown.invalid PRIVMSG #esoteric :Is it some sort of BrainFreddy? < 1199070591 0 :Slereah!unknown@unknown.invalid PRIVMSG #esoteric :Blah. Either the next step is taking forever, or the input has some problem. < 1199071262 0 :Slereah!unknown@unknown.invalid PRIVMSG #esoteric :Oh bloody hell. < 1199071269 0 :Slereah!unknown@unknown.invalid PRIVMSG #esoteric :The CH function prints CH now. < 1199071274 0 :Slereah!unknown@unknown.invalid PRIVMSG #esoteric :Forgot that exception < 1199071336 0 :Slereah!unknown@unknown.invalid PRIVMSG #esoteric :ROT13 works okay now! < 1199072037 0 :faxathisia!n=more@amcant.demon.co.uk JOIN :#esoteric < 1199073467 0 :Slereah!unknown@unknown.invalid QUIT :Read error: 110 (Connection timed out) < 1199073483 0 :Slereah!n=Test4@82.126.22.128 JOIN :#esoteric < 1199075458 0 :slereah_!n=Test4@82.126.22.128 JOIN :#esoteric < 1199075791 0 :Slereah!unknown@unknown.invalid QUIT :Read error: 110 (Connection timed out) < 1199076346 0 :slereah_!unknown@unknown.invalid NICK :Slereah < 1199078100 0 :pikhq!unknown@unknown.invalid PRIVMSG #esoteric :ACTION goes into a full-on panic < 1199081489 0 :bsmntbombdood!unknown@unknown.invalid PRIVMSG #esoteric :? < 1199081499 0 :pikhq!unknown@unknown.invalid PRIVMSG #esoteric :No xkcd. < 1199081520 0 :bsmntbombdood!unknown@unknown.invalid PRIVMSG #esoteric :hrm < 1199086782 0 :puzzlet!unknown@unknown.invalid PRIVMSG #esoteric :what < 1199086783 0 :calamari!unknown@unknown.invalid QUIT :"Leaving" < 1199087109 0 :bsmntbombdood!unknown@unknown.invalid PRIVMSG #esoteric :no xkcd < 1199087285 0 :Sgeo!n=Anonymou@ool-18bf68ca.dyn.optonline.net JOIN :#esoteric < 1199087300 0 :Sgeo!unknown@unknown.invalid PRIVMSG #esoteric :Hi all < 1199087310 0 :faxathisia!unknown@unknown.invalid PRIVMSG #esoteric :hi < 1199087326 0 :Sgeo!unknown@unknown.invalid PRIVMSG #esoteric :pikhq, heads up: The "domain installation check" function probably won't accept arguments < 1199087334 0 :Sgeo!unknown@unknown.invalid PRIVMSG #esoteric :I'm probably going to change it < 1199087344 0 :Sgeo!unknown@unknown.invalid PRIVMSG #esoteric :pikhq, how's work on the psox.pebble lib going? < 1199087436 0 :Sgeo!unknown@unknown.invalid PRIVMSG #esoteric :ok, so pikhq's away < 1199087999 0 :clog!unknown@unknown.invalid QUIT :ended < 1199088000 0 :clog!unknown@unknown.invalid JOIN :#esoteric < 1199088269 0 :Sgeo!unknown@unknown.invalid PRIVMSG #esoteric :ACTION monologues < 1199088292 0 :faxathisia!unknown@unknown.invalid PRIVMSG #esoteric :ACTION wonders if this is a good idea for language design < 1199088312 0 :faxathisia!unknown@unknown.invalid PRIVMSG #esoteric :pick a random algorithm and stick it in a while loop -- add syntax < 1199088979 0 :Sgeo!unknown@unknown.invalid PRIVMSG #esoteric :Hm, it's easy for BF to receive a LBYTES as a STRING and a STRING as an LBYTES, but difficult for the conversion to be performed on the tape.. < 1199091352 0 :Sgeo!unknown@unknown.invalid PRIVMSG #esoteric :Which makes me wonder if I should add a function that just returns whatever was given to it.. < 1199091359 0 :Sgeo!unknown@unknown.invalid PRIVMSG #esoteric :hm, maybe not < 1199091362 0 :Sgeo!unknown@unknown.invalid PRIVMSG #esoteric :G'night all < 1199092392 0 :oerjan!n=oerjan@hagbart.nvg.ntnu.no JOIN :#esoteric < 1199092409 0 :Sgeo!unknown@unknown.invalid QUIT :Read error: 110 (Connection timed out) < 1199093569 0 :slereah_!n=Test4@82.126.22.128 JOIN :#esoteric < 1199094572 0 :Slereah!unknown@unknown.invalid QUIT :Read error: 110 (Connection timed out) < 1199097332 0 :johnl_!i=johnl@johnl.org JOIN :#esoteric < 1199097428 0 :johnl!unknown@unknown.invalid QUIT :Read error: 104 (Connection reset by peer) < 1199097782 0 :johnl_!unknown@unknown.invalid QUIT :Remote closed the connection < 1199100325 0 :sebbu!n=sebbu@ADijon-152-1-14-67.w83-194.abo.wanadoo.fr JOIN :#esoteric < 1199100602 0 :oerjan!unknown@unknown.invalid QUIT :"leaving" < 1199101023 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :faxathisia: i see you've found the recipe for making perfert esolangs without any effort, we can now bury this chan and go on with our lives :) < 1199101089 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :also, you weren't here when i did the graphica spec stub, so i'll paste it assuming you don't read the logs. < 1199101174 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :http://www.vjn.fi/pb/p123363511.txt < 1199101238 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :not sure if that helps at all, i've been told my bnf sucks ass < 1199101264 0 :faxathisia!unknown@unknown.invalid PRIVMSG #esoteric :In general BNF kind of stucks < 1199101274 0 :faxathisia!unknown@unknown.invalid PRIVMSG #esoteric :well actually i'm wrong < 1199101285 0 :faxathisia!unknown@unknown.invalid PRIVMSG #esoteric :I just personally don't like because it's not execyutable < 1199101296 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :not executable? < 1199101321 0 :faxathisia!unknown@unknown.invalid PRIVMSG #esoteric :A lot of times I've seen a languages syntax written in BNF.. then had to write a parser < 1199101328 0 :faxathisia!unknown@unknown.invalid PRIVMSG #esoteric :wishing I could just run the BNF instead :/ < 1199101413 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :i don't think it'd be hard to automatically make a parser just based on a bnf < 1199101429 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :don't the parser creator do just that? < 1199101444 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :yacc or whaddyacallit... < 1199101499 0 :sebbu2!unknown@unknown.invalid QUIT :Read error: 110 (Connection timed out) < 1199101509 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :would be interesting to have a language where a bnf would correspond to a logic program describing the parser. < 1199101525 0 :faxathisia!unknown@unknown.invalid PRIVMSG #esoteric ::o < 1199101527 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :but, where semantics might actually be more complicated < 1199101541 0 :faxathisia!unknown@unknown.invalid PRIVMSG #esoteric :maybe you could just define the ::= operator in prolog < 1199101548 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric ::D < 1199101552 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :that would own < 1199101557 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :actually... < 1199101580 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :parsing via bnf is basically just trying a branch and backtracking... < 1199101589 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :it might actually be simple < 1199101608 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :i don't actually know prolog that well < 1199101621 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :now did you read the spec? :-) < 1199101631 0 :faxathisia!unknown@unknown.invalid PRIVMSG #esoteric :no :p < 1199101632 0 :faxathisia!unknown@unknown.invalid PRIVMSG #esoteric :ACTION is now < 1199101864 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :gotta leave soon < 1199101875 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :in fact, need to shower in exactly 6 minutes. < 1199101901 0 :faxathisia!unknown@unknown.invalid PRIVMSG #esoteric :ACTION thinks implicit nested lisp is very cool < 1199101920 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :(which always signifies a leave of course, since i rarely shower when i'm alone :P) < 1199101933 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :yeah, i think the expression syntax is great :o < 1199101996 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :it's not fully nested lisp, since you can still do stuff like 5+(+ 4-2 5*7)*3 < 1199102035 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :i'm not actually sure whether you can just do infix alone with my current implementation... would be kinda sucky if you couldn't :P < 1199102059 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :although, the way you're supposed to use that, is by using infix for simple expressions, and sexps for the rest. < 1199102067 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :oh, right, it's not lisp, just sexp. < 1199102077 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :there's a term for it < 1199102627 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :okay, wtf... i have *not* written this code... < 1199102642 0 :faxathisia!unknown@unknown.invalid PRIVMSG #esoteric :hehe < 1199102654 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :i was splitting a list by the last occurrence of an element < 1199102660 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :so... < 1199102676 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :l.index(reversed(s)), where s was what was used as the pivot < 1199102679 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :wtf xD < 1199102703 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :and l was the list to split < 1199102737 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :it's kinda sad if you can't do that with the built-ins in python :\ < 1199102751 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :i don't know of a way, but then again i don't know much built-ins < 1199102798 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :in general, i don't understand why there's always so little basic operations like this in the language < 1199102814 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :there's usually just map, reduce and filter, in some form < 1199102824 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :and a zip < 1199102912 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :plus, these are things that help you program, immensely in some cases, but they're very high-level, people will just use a less generic solution if something like that isn't supplied < 1199102938 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :i feel it's the language disegners duty to add more list support < 1199102945 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :i'm gonna mail the python people -> < 1199102978 0 :faxathisia!unknown@unknown.invalid PRIVMSG #esoteric :ACTION doesn't really know python < 1199102989 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :"we already have that, in a module, idiot" "hey, no one in their right mind is gonna import a module." *no answer* < 1199102991 0 :faxathisia!unknown@unknown.invalid PRIVMSG #esoteric :I just feel that I won't learn anything from getting good at python < 1199103022 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :well, after doing c++, python was a great relief < 1199103033 0 :faxathisia!unknown@unknown.invalid PRIVMSG #esoteric :I can imagine :p < 1199103042 0 :sebbu!unknown@unknown.invalid QUIT :Read error: 113 (No route to host) < 1199103046 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :stuff that i actually carefully had to plan and write for days, is trivial in python < 1199103064 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :stuff that i actually *do* in python, i would never even imagine doing in c++. < 1199103110 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :you're a haskellor, then? < 1199103120 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :that might just be a guess < 1199103139 0 :faxathisia!unknown@unknown.invalid PRIVMSG #esoteric :last program I wrote is in haskell < 1199103158 0 :faxathisia!unknown@unknown.invalid PRIVMSG #esoteric :I wouldn't say that though, I still haven't found my language :) < 1199103158 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :what was that? < 1199103167 0 :faxathisia!unknown@unknown.invalid PRIVMSG #esoteric :implementation of the reversible langauge Janus < 1199103171 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :ah < 1199103232 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :haskell gets a bit verbose with side-effectful stuff in my experience < 1199103239 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :but most likely i just suck. < 1199103281 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :i should try making something less opengl'y and i might actually learn it < 1199103310 0 :faxathisia!unknown@unknown.invalid PRIVMSG #esoteric :first thing I did in haskell used OpenGL < 1199103340 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :or something where i actually have some experience with a language i know... i was doing a circuit drawing program < 1199103372 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :it gets quite complex if you make it good < 1199103376 0 :faxathisia!unknown@unknown.invalid PRIVMSG #esoteric :I'm probably totally wrong so I'll phase this differently, < 1199103392 0 :faxathisia!unknown@unknown.invalid PRIVMSG #esoteric :I just use haskell to write langauges < 1199103397 0 :faxathisia!unknown@unknown.invalid PRIVMSG #esoteric :since it's great for that < 1199103411 0 :faxathisia!unknown@unknown.invalid PRIVMSG #esoteric :(I was going to say that's what it's best for but I couldn't really know that) < 1199103447 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :i've actually found multiple favorite languages, erlang, K and haskell are probably the languages i'd most like to use daily < 1199103459 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :i've never even *tried* erlang/K though :P < 1199103463 0 :faxathisia!unknown@unknown.invalid PRIVMSG #esoteric :haha < 1199103478 0 :faxathisia!unknown@unknown.invalid PRIVMSG #esoteric :I think J is a bit like K.. I liked J a lot < 1199103483 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :yep < 1199103485 0 :faxathisia!unknown@unknown.invalid PRIVMSG #esoteric :never actually looked at K < 1199103541 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :the funny thing is, i don't even like python really... < 1199103548 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :K owns < 1199103551 0 :Sgeo!n=Anonymou@ool-18bf68ca.dyn.optonline.net JOIN :#esoteric < 1199103557 0 :faxathisia!unknown@unknown.invalid PRIVMSG #esoteric :Me neither ^_^ < 1199103563 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :and i just love erlang < 1199103572 0 :Sgeo!unknown@unknown.invalid PRIVMSG #esoteric :Hi all < 1199103576 0 :Sgeo!unknown@unknown.invalid PRIVMSG #esoteric :ACTION didn't get any sleep < 1199103578 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :yeah, but i program at least 100 lines of python every day :) < 1199103580 0 :Sgeo!unknown@unknown.invalid PRIVMSG #esoteric ::( < 1199103598 0 :Sgeo!unknown@unknown.invalid PRIVMSG #esoteric :ACTION should update some stuff on the PSOX spec < 1199103600 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :yesterday some 250 < 1199103605 0 :faxathisia!unknown@unknown.invalid PRIVMSG #esoteric :Have you read the doc about how erlang was conceived (via Prolog)? < 1199103613 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :nope < 1199103623 0 :faxathisia!unknown@unknown.invalid PRIVMSG #esoteric :ah.. I'll see if I can find it, this is a great paper < 1199103625 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :do link, although i'm leaving now -> < 1199103640 0 :Sgeo!unknown@unknown.invalid PRIVMSG #esoteric :Ok, WHY TF is MemoServ looking like it's replying in #haskell ? < 1199103689 0 :faxathisia!unknown@unknown.invalid PRIVMSG #esoteric :http://www.erlang.se/publications/prac_appl_prolog.ps < 1199103719 0 :Sgeo!unknown@unknown.invalid PRIVMSG #esoteric :ACTION goes to write an example for reading in a STRING and turning it into an LBYTES < 1199104142 0 :Hiato!n=Administ@dsl-245-15-242.telkomadsl.co.za JOIN :#esoteric < 1199104174 0 :Hiato!unknown@unknown.invalid PRIVMSG #esoteric :Just stopping by for two things: Firstly, everyone, have a great new year! :D < 1199104213 0 :Hiato!unknown@unknown.invalid PRIVMSG #esoteric :Secondly: Full0.8tt.org is down (for reasons unknown to me) so use http://full0.freehostia.com < 1199104228 0 :Hiato!unknown@unknown.invalid PRIVMSG #esoteric :anyway, cheers < 1199104239 0 :Hiato!unknown@unknown.invalid PRIVMSG #esoteric :and have a good new year (if you haven't already ;) ) < 1199104245 0 :Hiato!unknown@unknown.invalid QUIT :Client Quit < 1199104503 0 :Sgeo!unknown@unknown.invalid PRIVMSG #esoteric :+>,[<.>.,]. < 1199104516 0 :tejeez!n=tejeez@dsl-lhtgw2-fea7dc00-42.dhcp.inet.fi JOIN :#esoteric < 1199104522 0 :Sgeo!unknown@unknown.invalid PRIVMSG #esoteric :Hi tejeez < 1199104523 0 :Sgeo!unknown@unknown.invalid PRIVMSG #esoteric :+>,[<.>.,]. < 1199104779 0 :Sgeo!unknown@unknown.invalid PRIVMSG #esoteric :And the reverse is: ,[,.,]. < 1199104814 0 :faxathisia!unknown@unknown.invalid PRIVMSG #esoteric :ah I see < 1199104835 0 :faxathisia!unknown@unknown.invalid PRIVMSG #esoteric :+>,[<.>.,].,[,.,]. = ,[.,]. ? < 1199104846 0 :faxathisia!unknown@unknown.invalid PRIVMSG #esoteric :er sorry < 1199104850 0 :faxathisia!unknown@unknown.invalid PRIVMSG #esoteric :of course not.. < 1199104861 0 :faxathisia!unknown@unknown.invalid PRIVMSG #esoteric :I'd need to take the output from one into the other < 1199104876 0 :RedDak!n=dak@host37-87-dynamic.6-87-r.retail.telecomitalia.it JOIN :#esoteric < 1199104888 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :oh, right, faxathisia: also wanna comment the spec :D < 1199104900 0 :Sgeo!unknown@unknown.invalid PRIVMSG #esoteric :Note that the ",[,.,]." assumes there are no NULs in the body of the LBYTES. If there are, it can't exactly be turned into a STRING, because STRINGs are NUL-terminated < 1199104929 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :that was a question. < 1199104988 0 :faxathisia!unknown@unknown.invalid PRIVMSG #esoteric :oklopol: It seems fine < 1199104999 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :good. < 1199105023 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :i'll add lists and suchas in the spec and make it my first esowiki donation < 1199105058 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :although it's not *that* esoteric < 1199105341 0 :tesseracter!unknown@unknown.invalid QUIT :calvino.freenode.net irc.freenode.net < 1199105341 0 :faxathisia!unknown@unknown.invalid QUIT :calvino.freenode.net irc.freenode.net < 1199105344 0 :puzzlet!unknown@unknown.invalid QUIT :calvino.freenode.net irc.freenode.net < 1199105345 0 :sekhmet!unknown@unknown.invalid QUIT :calvino.freenode.net irc.freenode.net < 1199105345 0 :Possum!unknown@unknown.invalid QUIT :calvino.freenode.net irc.freenode.net < 1199105345 0 :Sgeo!unknown@unknown.invalid QUIT :calvino.freenode.net irc.freenode.net < 1199105346 0 :oklopol!unknown@unknown.invalid QUIT :calvino.freenode.net irc.freenode.net < 1199105346 0 :bsmntbombdood!unknown@unknown.invalid QUIT :calvino.freenode.net irc.freenode.net < 1199105346 0 :GregorR!unknown@unknown.invalid QUIT :calvino.freenode.net irc.freenode.net < 1199105346 0 :cherez!unknown@unknown.invalid QUIT :calvino.freenode.net irc.freenode.net < 1199105348 0 :Overand!unknown@unknown.invalid QUIT :calvino.freenode.net irc.freenode.net < 1199105349 0 :RedDak!unknown@unknown.invalid QUIT :calvino.freenode.net irc.freenode.net < 1199105351 0 :pikhq!unknown@unknown.invalid QUIT :calvino.freenode.net irc.freenode.net < 1199105353 0 :dbc!unknown@unknown.invalid QUIT :calvino.freenode.net irc.freenode.net < 1199105354 0 :cmeme!unknown@unknown.invalid QUIT :calvino.freenode.net irc.freenode.net < 1199105354 0 :slereah_!unknown@unknown.invalid QUIT :calvino.freenode.net irc.freenode.net < 1199105356 0 :lifthrasiir!unknown@unknown.invalid QUIT :calvino.freenode.net irc.freenode.net < 1199105356 0 :lament!unknown@unknown.invalid QUIT :calvino.freenode.net irc.freenode.net < 1199105356 0 :weilawei!unknown@unknown.invalid QUIT :calvino.freenode.net irc.freenode.net < 1199105356 0 :SimonRC!unknown@unknown.invalid QUIT :calvino.freenode.net irc.freenode.net < 1199105432 0 :Sgeo!n=Anonymou@ool-18bf68ca.dyn.optonline.net JOIN :#esoteric < 1199105432 0 :slereah_!n=Test4@82.126.22.128 JOIN :#esoteric < 1199105432 0 :faxathisia!n=more@amcant.demon.co.uk JOIN :#esoteric < 1199105432 0 :oklopol!n=ville@194.251.103.33 JOIN :#esoteric < 1199105432 0 :puzzlet!n=puzzlet@147.46.241.160 JOIN :#esoteric < 1199105432 0 :cherez!n=cherez@CPE-69-76-143-134.kc.res.rr.com JOIN :#esoteric < 1199105432 0 :bsmntbombdood!n=gavin@75-166-162-55.hlrn.qwest.net JOIN :#esoteric < 1199105432 0 :GregorR!n=gregor@c-24-22-4-68.hsd1.mn.comcast.net JOIN :#esoteric < 1199105432 0 :dbc!n=daniel@130-94-161-238-dsl.hevanet.com JOIN :#esoteric < 1199105432 0 :tesseracter!n=tesserac@pool-72-70-237-75.spfdma.east.verizon.net JOIN :#esoteric < 1199105432 0 :SimonRC!n=sc@fof.durge.org JOIN :#esoteric < 1199105432 0 :weilawei!n=weilawei@pool-72-70-237-75.spfdma.east.verizon.net JOIN :#esoteric < 1199105432 0 :cmeme!n=cmeme@boa.b9.com JOIN :#esoteric < 1199105432 0 :sekhmet!n=pez@wilug/madlug/sekhmet JOIN :#esoteric < 1199105432 0 :lifthrasiir!n=lifthras@haje8.kaist.ac.kr JOIN :#esoteric < 1199105432 0 :Possum!n=possum@pool-71-180-26-32.tampfl.fios.verizon.net JOIN :#esoteric < 1199105432 0 :Overand!i=overand@pdpc/supporter/active/Overand JOIN :#esoteric < 1199105432 0 :lament!n=lament@S010600110999ad06.vc.shawcable.net JOIN :#esoteric < 1199105469 0 :RedDak!n=dak@host37-87-dynamic.6-87-r.retail.telecomitalia.it JOIN :#esoteric < 1199105469 0 :pikhq!n=pikhq@209.248.124.243 JOIN :#esoteric < 1199105626 0 :Sgeo!unknown@unknown.invalid PRIVMSG #esoteric :re < 1199108774 0 :jix!n=jix@dyndsl-085-016-236-035.ewe-ip-backbone.de JOIN :#esoteric < 1199109023 0 :Sgeo!unknown@unknown.invalid PRIVMSG #esoteric :Is (.*?)((?<=(?:[^\x00]|\A)(?:\x00\x00\x00)*)\x00)) an expensive regex? < 1199109024 0 :Sgeo!unknown@unknown.invalid PRIVMSG #esoteric :Hi jix < 1199109036 0 :Sgeo!unknown@unknown.invalid PRIVMSG #esoteric :ACTION isn't even sure if that regex would work < 1199109042 0 :Sgeo!unknown@unknown.invalid PRIVMSG #esoteric :But it looks expensive :/ < 1199109499 0 :Sgeo!unknown@unknown.invalid PRIVMSG #esoteric :"look-behind requires fixed-width pattern" < 1199109972 0 :Sgeo!unknown@unknown.invalid PRIVMSG #esoteric :ACTION comes up with what looks like a much simpler regex < 1199109979 0 :Sgeo!unknown@unknown.invalid PRIVMSG #esoteric :((?:[^\x00]|\x00{3})*)(\x00.*) < 1199110056 0 :Sgeo!unknown@unknown.invalid PRIVMSG #esoteric :((?:[^\x00]|\x00{3})*)(\x00.*)? < 1199110079 0 :Sgeo!unknown@unknown.invalid PRIVMSG #esoteric :Nope < 1199110104 0 :Sgeo!unknown@unknown.invalid PRIVMSG #esoteric :((?:[^\x00]|\x00{2}.)*)(\x00.*)? < 1199110163 0 :Sgeo!unknown@unknown.invalid PRIVMSG #esoteric :Close < 1199110302 0 :Sgeo!unknown@unknown.invalid PRIVMSG #esoteric :((?:[^\x00]|\x00{2}.?)*)(\x00.*)? < 1199110313 0 :Sgeo!unknown@unknown.invalid PRIVMSG #esoteric :Since the ? after the . is greedy, that should work < 1199110317 0 :Sgeo!unknown@unknown.invalid PRIVMSG #esoteric :ACTION hopes so < 1199110323 0 :Sgeo!unknown@unknown.invalid PRIVMSG #esoteric :Tests seem to show that it works < 1199110735 0 :Sgeo!unknown@unknown.invalid PRIVMSG #esoteric :ACTION changes it to ((?:[^\x00]|\x00{2}(?:.|\Z))*)(\x00.*)? < 1199111384 0 :Sgeo!unknown@unknown.invalid PRIVMSG #esoteric :Bye all < 1199112383 0 :Slereah!n=Test4@82.126.22.128 JOIN :#esoteric < 1199112411 0 :Sgeo!unknown@unknown.invalid QUIT :Read error: 110 (Connection timed out) < 1199113410 0 :slereah_!unknown@unknown.invalid QUIT :Read error: 110 (Connection timed out) < 1199114343 0 :jix!unknown@unknown.invalid QUIT :Nick collision from services. < 1199114351 0 :jix!n=jix@dyndsl-091-096-053-013.ewe-ip-backbone.de JOIN :#esoteric < 1199118404 0 :oerjan!n=oerjan@hagbart.nvg.ntnu.no JOIN :#esoteric < 1199118802 0 :Slereah!unknown@unknown.invalid PRIVMSG #esoteric :Oh hell. < 1199118820 0 :Slereah!unknown@unknown.invalid PRIVMSG #esoteric :One whole night, and the Mandelbrot has barely printed two lines. < 1199118936 0 :Slereah!unknown@unknown.invalid PRIVMSG #esoteric :Well, they're correct at least. < 1199120024 0 :faxathisia!unknown@unknown.invalid PRIVMSG #esoteric :What do you mean correct? < 1199120056 0 :Slereah!unknown@unknown.invalid PRIVMSG #esoteric :Well, the first two lines are the same than the one on any BF interpreter. < 1199120075 0 :faxathisia!unknown@unknown.invalid PRIVMSG #esoteric :ahh :D < 1199120095 0 :faxathisia!unknown@unknown.invalid PRIVMSG #esoteric :I thought you were about to have computed the mandelbrot set or something (apprently) impossible like that < 1199120135 0 :faxathisia!unknown@unknown.invalid PRIVMSG #esoteric :(I never read a proof of that which I understood though, so I can only assume the result is true) < 1199120166 0 :Slereah!unknown@unknown.invalid PRIVMSG #esoteric :Just the mandelbrot.b program. < 1199120972 0 :slereah_!n=Test4@82.126.22.128 JOIN :#esoteric < 1199121657 0 :RedDak!unknown@unknown.invalid QUIT :Remote closed the connection < 1199122040 0 :Slereah!unknown@unknown.invalid QUIT :Read error: 110 (Connection timed out) < 1199123453 0 :jix!unknown@unknown.invalid QUIT :"Guten Rutsch!" < 1199126531 0 :calamari!n=calamari@ip24-255-58-134.tc.ph.cox.net JOIN :#esoteric < 1199126953 0 :ehirdsleep!unknown@unknown.invalid PRIVMSG #esoteric :hello < 1199126956 0 :ehirdsleep!unknown@unknown.invalid NICK :ehird < 1199127303 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :bf question: >*N[<*N...code...>*N]<*N is a common idiom, right? < 1199128608 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :oerjan: I think i'd be better off if i formally stated BF syntax then worked from that < 1199128613 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :+-><,. are verbatim < 1199128634 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :[ parses many, recursively, up to the first ] given to it < 1199128639 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :everything else is ignored < 1199128653 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :So. < 1199128664 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :parse :: String -> [BF] < 1199128673 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :parseLoop :: String -> [BF] < 1199128676 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :oerjan: I believe that is correct. < 1199128684 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :the problem is you were doing the ignoring in the wrong function, basically < 1199128693 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :oerjan: However, that involves the recursion stuff < 1199128706 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :where as you are saying the haskelly way is to return (one, whatsleft) instead of [all] < 1199128756 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :subparsers need to return what's left for the bigger parser to know where to continue < 1199128807 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :right < 1199128810 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :so < 1199128818 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :parse :: String -> [BF] < 1199128828 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :parseOne :: String -> [(BF, String)] < 1199128833 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :um no < 1199128840 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :returning only [] or [(one, rest)] < 1199128841 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :-> ([BF], String) < 1199128847 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :no, parse >ONE< < 1199128848 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :oh wait < 1199128854 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :and, parseOne "" = [] < 1199128863 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :so: parseOne :: String -> [(BF, String)] < 1199128873 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :parseLoop :: String -> [BF] < 1199128875 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :what about parseOne (']':_) ? >:) < 1199128884 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :no, wait < 1199128889 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :wait. i'll write this down < 1199128916 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :there is an alternative. -> (Maybe BF, String) < 1199128939 0 :faxathisia!unknown@unknown.invalid PRIVMSG #esoteric :You could extract the haskell code from http://d.hatena.ne.jp/ku-ma-me/20070813 < 1199128949 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :oerjan: isn't Maybe for fails? < 1199129013 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :sure < 1199129036 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :and that parseOne "" would be a failure < 1199129049 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :i guess so < 1199129057 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :but it'd be a failure guaranteed to happen every parse :-) < 1199129064 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :http://hpaste.org/4733 this is right < 1199129076 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :hm, should i write it top-down like that? < 1199129080 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :or should i do it down-up < 1199129081 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :but the subtle point is not _that_ case, but the case " ]..." < 1199129097 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :hm yes < 1199129100 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :since parseLoop will not see it < 1199129111 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :instead parseOne will and signal an error < 1199129115 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :that is puzzling, oerjan. < 1199129126 0 :faxathisia!unknown@unknown.invalid PRIVMSG #esoteric :something like let bf '<' = [BFBack] ; bf '>' = ... ; _ = bf _ = [] in concatMap bf < 1199129138 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :the Maybe version works better then < 1199129156 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :you can return (Nothing, rest) for failure < 1199129170 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :i think my brain is being haskellstretched here < 1199129182 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :BFBack? < 1199129184 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :oh < 1199129185 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :i see < 1199129190 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :and then parseLoop will know that no command was found, but it might still be that it has reached a ] < 1199129213 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :[19:27:13] concatMap f = foldr ((++) . f) [] < 1199129217 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :i don't think i get that < 1199129227 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :concatMap f lst < 1199129228 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :is < 1199129233 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :map f lst < 1199129237 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :joined together with ++ < 1199129239 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :am i right < 1199129242 0 :faxathisia!unknown@unknown.invalid PRIVMSG #esoteric :concatMap = concat . map < 1199129256 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :the Prelude definition is just concatMap f l = concat (map f l) < 1199129263 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :wow, a whole 2 keystrokes saved, faxathisia < 1199129267 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :(report that is) < 1199129286 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :=<< saves more < 1199129305 0 :faxathisia!unknown@unknown.invalid PRIVMSG #esoteric :(That is how I'd do it http://rafb.net/p/DnYi0s42.txt ) < 1199129322 0 :faxathisia!unknown@unknown.invalid PRIVMSG #esoteric :(Which is probably horrendously slow or something) < 1199129323 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :faxathisia: that won't work for loops < 1199129331 0 :faxathisia!unknown@unknown.invalid PRIVMSG #esoteric :I know < 1199129336 0 :faxathisia!unknown@unknown.invalid PRIVMSG #esoteric :I only did +-<> < 1199129399 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :uhh i can handle non-loops just fine < 1199129427 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :however, that definition does look quite elegant < 1199129429 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :so i shall expand on it < 1199129429 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :ehird: that paste looks fine < 1199129449 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :and i usually do top-down too < 1199129451 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :oerjan: Q: is faxathisia's even capable of handling loops? < 1199129465 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :a concatMap on single characters? no. < 1199129471 0 :faxathisia!unknown@unknown.invalid PRIVMSG #esoteric :ehird: No, I only did +-<> < 1199129490 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :oerjan: yes good point :p < 1199129492 0 :faxathisia!unknown@unknown.invalid PRIVMSG #esoteric :add to data , BFWhile | BFEnd or something < 1199129499 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :faxathisia: that's not parsing < 1199129500 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :that's lexing < 1199129507 0 :faxathisia!unknown@unknown.invalid PRIVMSG #esoteric :if you want BFLoop [BFStmts] < 1199129510 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :and seperate parsing/lexing is archaic < 1199129526 0 :faxathisia!unknown@unknown.invalid PRIVMSG #esoteric :then I (personally, though it may not be the best way), you would lex and parse seperately < 1199129534 0 :faxathisia!unknown@unknown.invalid PRIVMSG #esoteric :s/you // < 1199129548 0 :faxathisia!unknown@unknown.invalid PRIVMSG #esoteric :what do you mean archaic? I found it to simplify code a lot < 1199129565 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :it's 70s-style < 1199129572 0 :faxathisia!unknown@unknown.invalid PRIVMSG #esoteric :hehe < 1199129576 0 :faxathisia!unknown@unknown.invalid PRIVMSG #esoteric :Is that bad? < 1199129584 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :oerjan: http://hpaste.org/4733 parseMany is actually superflous isn't it? < 1199129603 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :since it would not be useful to parseOne or parseLoop, and parse can replace 'outer' usages it might have < 1199129604 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :should be identical to parseLoop < 1199129608 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :no < 1199129610 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :parseLoop handles ] < 1199129616 0 :faxathisia!unknown@unknown.invalid PRIVMSG #esoteric :I mean you can always go parse = parseLoop . lex < 1199129629 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :oerjan: parseLoop isn't about haskell loops < 1199129710 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :i had the idea you could pass a Bool that told if you were inside a loop or not < 1199129715 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :then you can unify them < 1199129729 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :and the caller no longer needs to check < 1199129763 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :oh, passing a boolean < 1199129768 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :that's what my scheme code does < 1199129769 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :but.. < 1199129773 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :it's kind of unhaskelly. < 1199129776 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :imo. < 1199129778 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :it just looks ugly. < 1199129779 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric : parse :: String -> [BF] parse "" = [] parse s = p:(parse s') where (p, s') = parseOne s < 1199129784 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :hmm, pretend that's 3 lines < 1199129803 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :hm wait, i don't check for Maybe BF there < 1199129814 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :wait, that's OK < 1199129819 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :because it'll never occur < 1199129824 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :so parseOne :: String -> (BF, String) < 1199129830 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :i think it is easier to have parseMany and parseLoop separate then < 1199129842 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :parseLoop would call parseMany < 1199129852 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :wait, it might < 1199129854 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :I do need Maybe < 1199129858 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :and itself just do the boundary [ ] checking < 1199129903 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :note that Maybe is almost the same as my suggestion to parse comment chars into NOPs < 1199129909 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :oerjan: parseMany would see the ] and say 'HAY UNBALANCKD' < 1199129911 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :parse :: String -> [BF] parse s = case parseOne s of (Just p, s') -> p:(parse s') _ -> [] < 1199129917 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :it's just that the NOP is not included in the BF type itself < 1199129974 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :ehird: the problem with doing that is you duplicate code < 1199129983 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :instead, let parseMany do no checking < 1199129992 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :oerjan: so how do i choke on unbalanced ]s < 1199129998 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :and let the caller check the boundaries < 1199130043 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :parseLoop calls parseMany and checks that the remainder starts with ] < 1199130055 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :parse calls parseMany and checks that the remainder is empty < 1199130093 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :parseOne ( _ :s) = (Nothing, s) < 1199130095 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :that is right? < 1199130110 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :um... < 1199130116 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :just asking. < 1199130121 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :otherwise comment handling could f up < 1199130137 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :you could let parseOne skip comments < 1199130147 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :parseOne ( _ :s) = parseOne s < 1199130158 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :so, the only time i use Nothing is: < 1199130159 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :parseOne "" = (Nothing, "") < 1199130171 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :also for ] < 1199130179 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :but only those two < 1199130224 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :ok < 1199130245 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :parseOne ('[':s) = < 1199130262 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :btw it may be more efficient for parseMany to collect the commands in reverse, tail recursively. Parsec's many uses this trick to avoid stack blowup < 1199130315 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :ehird: = parseLoop s, essentially < 1199130350 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :KRRR! Wrong! < 1199130355 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :pparseLoop :: String -> ([BF], String) < 1199130360 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :parseOne :: String -> (Maybe BF, String) < 1199130372 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :hm right a little wrapping needed < 1199130392 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :i don't see how i can stuff [BF] into a Maybe BF < 1199130393 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric ::D < 1199130404 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :ergo: my parser architechture is b0rketh! again! < 1199130418 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :ACTION hopes you're joking < 1199130464 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric := let (bfs, s') = parseLoop s in (Just (Loop bfs), s') < 1199130567 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :oh < 1199130568 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :duh < 1199130568 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :of course < 1199130568 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :heh < 1199130604 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :parseOne (']':s) = fail "KRRRRRRRRRRRRRRRRRR!" < 1199130619 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :er no < 1199130640 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :s/fail/error < 1199130649 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :especially not that < 1199130655 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :what then < 1199130667 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric := (Nothing, ']:s) < 1199130675 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :er, = (Nothing, ']':s) < 1199130706 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :ok, that spirals my current parse into an inf loop < 1199130708 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric ::-) < 1199130710 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :parse "]" -> ..... < 1199130720 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric : (Nothing, s') -> parse s' < 1199130723 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :that's why < 1199130733 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :oerjan: This is where parseMany comes in? < 1199130743 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :could be < 1199130747 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric ::D < 1199130759 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :ok, base case: parseMany "" = ([], "") < 1199130772 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :fine < 1199130799 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :parseMany s = let (p, s') = parseOne s in p:(parseMany s') < 1199130803 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :+ extra checking < 1199130831 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :parseMany s = case parseOne s of < 1199130840 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :(Nothing, ']':_) -> error "KRRRRRRRRRRRRRRR!" < 1199130842 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :right? < 1199130854 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :no!!! < 1199130858 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric ::( < 1199130860 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :parseMany should _never_ check < 1199130890 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :it is called both by parse and parseLoop. it does not _know_ whether a ] or end-of-file is allowed < 1199130897 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :only the caller does < 1199130930 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :-> ([], ']':_) < 1199130948 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :er, not quite < 1199130962 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :whatever actually remains < 1199130990 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :parseMany :: String -> ([BF], String) parseMany "" = ([], "") parseMany s = case parseOne s of (Just p, s') -> let (p', s'') = parseMany s' in (p:p', s'') (Nothing, s') -> ([], s') < 1199131023 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :yay < 1199131043 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :i remember when type declarations scared me! :-P < 1199131054 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :it was the arg -> arg -> ... -> result, i got that when i got that everything was curried in haskell < 1199131064 0 :pikhq!unknown@unknown.invalid QUIT :Read error: 110 (Connection timed out) < 1199131129 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :oerjan: guess i'd better rework 'parse' for parseMany now < 1199131133 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :oerjan: confuzzling < 1199131308 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric : parse :: String -> [BF] parse s = case parseMany s of (p, "") -> p ([], ']':_) -> error "KRRRRRRRRRRRRRRRRRRNK!" ([], _) -> error "wtf" < 1199131314 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :oerjan: i wonder when wtf occurs < 1199131340 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :hm indeed < 1199131395 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :oh well, time to write parseLoop i guess < 1199131424 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :*Main> parse "+]+<" *** Exception: /Users/ehird/Code/Frainbuck/Frainbuck.hs:(33,10)-(36,35): Non-exhaustive patterns in case < 1199131438 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :that's parse s = case parseMany s of < 1199131454 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :oh right < 1199131455 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :*Main> parse "+]+<" *** Exception: wtf ([Add 0 1],"]+<") < 1199131461 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :ofc < 1199131465 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :that first [] should just be _ < 1199131468 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :yep < 1199131483 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :now to figure out parseLoop < 1199131497 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :it'll look / a lot/ like parse < 1199131540 0 :pikhq!n=pikhq@209.248.124.243 JOIN :#esoteric < 1199131542 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :oerjan: then i'll use some kind of monad to do lines/columns < 1199131603 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :as you wish < 1199131813 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :oerjan: note to future self. functional parsers are not happy fluffy. < 1199131863 0 :faxathisia!unknown@unknown.invalid PRIVMSG #esoteric :Parsec makes functional parsers good! < 1199131870 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :yes! but i'm not usinkg parsec < 1199131970 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :oerjan: http://hpaste.org/4734 < 1199132044 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :hm... you don't need the parseMany "" case < 1199132052 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :correct < 1199132079 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :ok, now you teach me about the State monad! or whatveer i'm meant to use here < 1199132081 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric ::D < 1199132125 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :ouch < 1199132136 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :tee hee < 1199132144 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :ACTION wants to shout for Cale < 1199132164 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :i have you trap'd < 1199132174 0 :faxathisia!unknown@unknown.invalid PRIVMSG #esoteric :There is a great doc a bout monad transformers you might use < 1199132178 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :although you _could_ still use the explicit Int passing from yesterday < 1199132190 0 :faxathisia!unknown@unknown.invalid PRIVMSG #esoteric :http://uebb.cs.tu-berlin.de/~magr/pub/Transformers.en.html < 1199132215 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :faxathisia: Optimus isPrime < 1199132229 0 :faxathisia!unknown@unknown.invalid PRIVMSG #esoteric :lol < 1199132245 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :<_< < 1199132253 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :oerjan: not as pretty though < 1199132254 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric ::P < 1199132258 0 :faxathisia!unknown@unknown.invalid PRIVMSG #esoteric :you should consider using state transformer instead of state directly though I think < 1199132277 0 :faxathisia!unknown@unknown.invalid PRIVMSG #esoteric :cause then you can use IO or whatever inside the middle if you didn't think you needed to before < 1199132279 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :StateTransformer Vehicle Robot < 1199132284 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :ok,. i'll stop with the transformer puns < 1199132339 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :well as long as you use the overloaded functions changing the monad later is easy < 1199132380 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :the main work is monadizing the code in the first place... < 1199132432 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :i'm scared < 1199132915 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :oerjan: i must know! :P < 1199132916 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :ehird: http://hpaste.org/4734#a1 < 1199132926 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :just one function < 1199132939 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :without even looking more it's scary < 1199132939 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric ::P < 1199132951 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :anyway, i dont' see how i can plug two ints into that < 1199132955 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric ::| < 1199132975 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :you start by changing to type MM = State (Int,Int) < 1199133013 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :then your monadic code can use the put/get commands to get the tuple < 1199133028 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :*to access < 1199133042 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :what does MM stand for? < 1199133043 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :and what would an example parseOne look like? < 1199133055 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :MyMonad :) < 1199133083 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :groan < 1199133084 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric ::P < 1199133092 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :well without the line/col handling most of the lines would just add a return < 1199133099 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :so what would parseOne look like? < 1199133099 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :i'm betting: ugly < 1199133105 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :with linecol < 1199133134 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :i think you would want to add a helper function < 1199133144 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :oh dear < 1199133144 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric ::P < 1199133157 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :hm actually... < 1199133296 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :most of the lines would need to advance the column by 1, so make a helper function for doing that and returning the argument < 1199133327 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :oerjan: do you think this is cleaner than shoving around l and c? :) < 1199133395 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :well the alternative is adding a lot of extra parameters < 1199133404 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :just l and c < 1199133407 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :that's 2 < 1199133472 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :hm < 1199133476 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :addOneColAndSucceed < 1199133478 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :that's an ugly name ;) < 1199133492 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :yeah a bit long < 1199133508 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :but anyhow here's how to define it: < 1199133527 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :oh i meant for my parameter passing < 1199133528 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric ::| < 1199133533 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :do you think i should use a monad? < 1199133548 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :addOneColAndSucceed result = do addOneCol; return result < 1199133568 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :addOneCol = do (l,c) <- get; put (l,c+1) < 1199133588 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :ok fine! i'll go with monads :P < 1199133597 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :hmm, LineColumnMonad? < 1199133601 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :that's a crap name :P < 1199133614 0 :faxathisia!unknown@unknown.invalid PRIVMSG #esoteric :LineColumnMonad for BF? < 1199133625 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :oerjan: parse is still String -> [BF] right? < 1199133627 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :faxathisia: for error reporting < 1199133630 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :actually there's a simpler definition: < 1199133639 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :addOneCol = modify (second (+1)) < 1199133640 0 :faxathisia!unknown@unknown.invalid PRIVMSG #esoteric :oo < 1199133654 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :though you need import Control.Arrow for second < 1199133655 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :faxathisia: this is meant to be the #1 ideal every-optimization multiple-backend brainfuck compiler :-) < 1199133658 0 :faxathisia!unknown@unknown.invalid PRIVMSG #esoteric :ACTION is now confused why you aren't using Parsec < 1199133659 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :we need nice things! < 1199133670 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :because it would report [abc at EOF not the position of the [ < 1199133682 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :yeah i imagined parse would be outside the monads < 1199133684 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :oerjan: how can i import that? < 1199133688 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :should i just import second? < 1199133690 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :or just all of it < 1199133699 0 :faxathisia!unknown@unknown.invalid PRIVMSG #esoteric :you can annotate your datatypes wityh the column positions < 1199133701 0 :faxathisia!unknown@unknown.invalid PRIVMSG #esoteric :(with parsec) < 1199133704 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :import Control.Arrow (second) if you want just that < 1199133749 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :oerjan: got a better name fort aOCAS? < 1199133773 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :also, how do i get the monad implicitly passed to addOneCol? < 1199133776 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :that is, what is their types < 1199133786 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :addOneCol :: MM () < 1199133800 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :i see < 1199133801 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :addOneColAndSucceed :: a -> MM a < 1199133806 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :so i implicitly grab the caller's monad? < 1199133812 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :figuratively < 1199133828 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :well to be completely general: < 1199133883 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :addOneCol :: (Num b, MonadState (a,b) m) => m () < 1199133885 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :i think < 1199133903 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :i uh think i'll stick to my definition < 1199133904 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :hehehe < 1199133908 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :what's => < 1199133915 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :that's the type that would be inferred < 1199133942 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :=> separates class contexts from the type proper < 1199133957 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :oh-kay < 1199133963 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :i have learning to do < 1199133964 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric ::-) < 1199133971 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :it's a good thing a bf compiler will be mostly functional < 1199134099 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :oerjan: got a bettter addoM-/andsM-/ name? < 1199134128 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :hm... < 1199134139 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :shifting? < 1199134168 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :shiftOneing < 1199134169 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric ::P < 1199134173 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :don't think so < 1199134182 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :advancing? < 1199134210 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :it only advances one though < 1199134307 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :hm... my idea was that it should be short since you need to add it to all those lines < 1199134329 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :good point < 1199134334 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :advancing it is < 1199134353 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :LineColumnMonad is a bit verbose too < 1199134372 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :(i wouldn't care but most haskell code i've seen has been very concise [but still readable]) < 1199134378 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :and plain advance for the places you just pass a [ or so < 1199134393 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :should you not put spaces in tuple seperators? < 1199134408 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :er very optional < 1199134418 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :talking about style here < 1199134448 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :probably < 1199134460 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :a bit air never hurts < 1199134502 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :probably put them in or probably not < 1199134509 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :'cause ghci prints them -- and lists -- without spaces < 1199134551 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :hm right the official show definitions don't use them < 1199134605 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :but neither does it use newlines... < 1199134614 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :haha, that is a good point < 1199134636 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :oerjan: i'm goign for LineColumnMonad since i cannot think of something smaller < 1199134651 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :Plus I have M-/ < 1199134652 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric ::-) < 1199134676 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :very well < 1199134682 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :hm... < 1199134684 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :Parser < 1199134703 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :not really a parser monad though < 1199134706 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :it doesn't hold parser stuff < 1199134709 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :indeed < 1199134728 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :PosMonad < 1199134799 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :YAEY < 1199134824 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :i'm suprised haskell is implementable, actually < 1199134828 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :let alone compilable < 1199134835 0 :faxathisia!unknown@unknown.invalid PRIVMSG #esoteric :Why? < 1199134846 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :it's got more 'oh-god-how-can-you-implement-that-sanely' stuff than oklotalk < 1199134849 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :just really powerful stuff < 1199134870 0 :faxathisia!unknown@unknown.invalid PRIVMSG #esoteric :oh yeah < 1199134876 0 :faxathisia!unknown@unknown.invalid PRIVMSG #esoteric :lazyness keeps freaking me out < 1199134900 0 :faxathisia!unknown@unknown.invalid PRIVMSG #esoteric :isInfixOf needle haystack = any (isPrefixOf needle) (tails haystack) < 1199134901 0 :faxathisia!unknown@unknown.invalid PRIVMSG #esoteric :this is insane < 1199134925 0 :faxathisia!unknown@unknown.invalid PRIVMSG #esoteric :like in any strict language.. that would be ridiculous < 1199134945 0 :faxathisia!unknown@unknown.invalid PRIVMSG #esoteric :I think it's got the same complexity as any dynamic programming version you'd do in a strict language though < 1199134955 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :laziness at first made me thought they had intelligent gnomes compiling it < 1199134961 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :'ah, we need to evaluate just this bit!' < 1199134978 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :in a particle accellerator, which is why its' fast :-) < 1199134988 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :complete laziness isn't that hard < 1199134994 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :yeah < 1199135003 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :but it appears it, before you study it low-level < 1199135016 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :i.e. continuations are 'WTF' until you just think: 'copy of the call stack' < 1199135152 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :do advance; return x < 1199135156 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :is there a nicer way of writing that? < 1199135159 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :i.e. without the ; :-) < 1199135163 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :well, without adding a new line < 1199135168 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :because that just makes it very thin < 1199135177 0 :faxathisia!unknown@unknown.invalid PRIVMSG #esoteric :@undo do advance; return x < 1199135181 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :advance >> return x < 1199135190 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :@help < 1199135196 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :oerjan is a cyborg lambdabot! < 1199135201 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :I AM NOT LAMBDABOT < 1199135206 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :that was pure coincidence < 1199135210 0 :faxathisia!unknown@unknown.invalid PRIVMSG #esoteric :lol! < 1199135212 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :suuuure < 1199135212 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :CYBORG < 1199135359 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :oerjan: i never need advance on its own < 1199135365 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :so i'm refactoring it into advancing < 1199135376 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :wait, did i just say refactoring when talking abotu haskell < 1199135380 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :please forgive me < 1199135386 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :no need < 1199135393 0 :faxathisia!unknown@unknown.invalid PRIVMSG #esoteric :uh haskell is great when you refactor < 1199135396 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :no need for what < 1199135401 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :faxathisia: yes, but the terminology :-) < 1199135405 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :for forgiveness < 1199135415 0 :faxathisia!unknown@unknown.invalid PRIVMSG #esoteric :Haskell is in fact, 100% Enterprise Ready < 1199135419 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :i think Philippa used it just earlier today < 1199135426 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :ACTION tries and figures out where 'where' should go to satisfy the compiler's rules < 1199135434 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :well someone on #haskell did < 1199135438 0 :faxathisia!unknown@unknown.invalid PRIVMSG #esoteric :I usually use 2 spaces but I'm probably weird < 1199135445 0 :faxathisia!unknown@unknown.invalid PRIVMSG #esoteric :well I wrote a brainfuck parser anyway, would you like to see it? < 1199135450 0 :faxathisia!unknown@unknown.invalid PRIVMSG #esoteric :(It's kind of stupid) < 1199135454 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :Forthers say 'factoring' because forth is so awesome they only ever have to do it once! ;) < 1199135460 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :faxathisia: maybe. < 1199135533 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :so, oerjan, how do i retrieve (line, col)? < 1199135538 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :get < 1199135542 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :yaey < 1199135547 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :(line, col) <- get < 1199135619 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :ACTION thinks ehird must have used monadic (probably IO) code before, things seem to go easier than he expected < 1199135643 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :eh, i've used it for the toy read-line-then-print-one stuff in YAHT < 1199135648 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :so i was familiar with the basic syntax < 1199135655 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :but i didn't have trouble in the first place :-)_ < 1199135682 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :i guess that syntax may somehow be the _most_ familiar part of haskell to some < 1199135682 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :http://hpaste.org/4735 my error message generating code is fugly :) < 1199135697 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :i should have a reportError function < 1199135700 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :so i would do: < 1199135705 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :reportError "Unmatched [" < 1199135708 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :and it would add that stuff < 1199135748 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :indeed, so just take that do expression and refactor it :) < 1199135754 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :say, oerjan, if parseMany returns monad stuff, how do I wrap it out of that in parse? < 1199135787 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :right. that is Monad specific < 1199135809 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :in this case, runState or evalState < 1199135818 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :i'm, uh, excited < 1199135818 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :which < 1199135818 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric ::P < 1199135837 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :depends on whether you need the line/col at the end < 1199135844 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :well you probably shouldn't < 1199135845 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :nope, not right now < 1199135847 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :so evalState < 1199135862 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :evalState (parseMany s) -> tuple? < 1199135873 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :drop the parens < 1199135885 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :oh wait no < 1199135894 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :i mean add the initial (line, col) < 1199135900 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :hey, i'm using monads now - so i can use 'fail' < 1199135902 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :right? < 1199135904 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :in reportError < 1199135905 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :indeed < 1199135908 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :although, parse uses fail < 1199135914 0 :faxathisia!unknown@unknown.invalid PRIVMSG #esoteric :Wouldn't use throwError? < 1199135919 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :can i partly use monads in a function? < 1199135924 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :and then return an unwrapped value < 1199135931 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :throwError doesn't take a String < 1199135932 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :faxathisia: ? why < 1199135943 0 :faxathisia!unknown@unknown.invalid PRIVMSG #esoteric :oh I'm sorry < 1199135944 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :i mean, it's failure if there are unmatched []s < 1199135948 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :fail = throwError . strMsg for most error monads < 1199135950 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :not something you can recover from or anyting < 1199136013 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :sure some monads can be unwrapped < 1199136018 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :like State < 1199136022 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :yaey < 1199136040 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :so if i have some code with fail calls etc in and then want to unwrap the state and return that, what's my approximate skeleton? < 1199136070 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :um what do you mean, fail is monadic < 1199136073 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :yes < 1199136079 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :what i'm saying is < 1199136086 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :'parse' ,the top-level parsing function < 1199136093 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :you said would just return [BF] probably, outside of the monads < 1199136101 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :if you want it to < 1199136102 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :but it does the unmatched-] checking < 1199136112 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :which will use my reportError < 1199136114 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :which will use fail... < 1199136128 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :yep so do that checking still inside the monad i guess < 1199136148 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :so what would my code skeleton look like? < 1199136152 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :hm... < 1199136194 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :(to mirror fail, i have reportError :: PosMonad => String -> PosMonad a -- that is right?) < 1199136217 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :parse s = flip evalState (1,1) $ do (p,s) <- parseMany < 1199136249 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :oerjan: now THAT is haskell < 1199136262 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :but where's my 'case' to handle errors < 1199136262 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric ::-) < 1199136268 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric : case s of (_, "") -> return p < 1199136286 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :argh < 1199136295 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric : case s of "" -> return p < 1199136308 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :right i get it now < 1199136336 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :grr, i do hate 80-columns < 1199136340 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :i just used the flip to avoid putting the whole do in parentheses :) < 1199136367 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :the worst part of being over 80 columns: < 1199136371 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :i'm only 1 over < 1199136382 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :well you can shrink the width < 1199136383 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :this is the problem with off-side languages :P < 1199136402 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :ofc why i'm sticking to such an archaic limit nobody knows < 1199136413 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :the do doesn't need to be on the same line as $ < 1199136429 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :good point < 1199136437 0 :faxathisia!unknown@unknown.invalid PRIVMSG #esoteric :ACTION usually sticks the $ directly under the = < 1199136442 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :there, that's nice < 1199136446 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :(actually there are many ways of rearranging it) < 1199136478 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric : The last statement in a 'do' construct must be an expression < 1199136484 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :blargifarg < 1199136495 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :that's from < 1199136497 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :oh < 1199136497 0 :faxathisia!unknown@unknown.invalid PRIVMSG #esoteric :How about, return $ case s of "" -> p < 1199136498 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :my indentation < 1199136504 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :off by ONE < 1199136512 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :faxathisia: he want fail inside the case < 1199136514 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :faxathisia: can't, need that unwrapping stuff < 1199136516 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :*wants < 1199136522 0 :faxathisia!unknown@unknown.invalid PRIVMSG #esoteric :WHich fail? < 1199136528 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :well, syntax < 1199136529 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :for the other option < 1199136529 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :err < 1199136532 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :parseError < 1199136533 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric ::-) < 1199136537 0 :faxathisia!unknown@unknown.invalid PRIVMSG #esoteric :oh I didn't know there wa snothe < 1199136538 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :whcih uses fail < 1199136564 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :i didn't finish the function because ehird said he got the rest < 1199136564 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :now to figure out parseOne ('\n':s) = < 1199136567 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :oh, that's simple < 1199136584 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :modify (first (+1)) :-) < 1199136593 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :er not quite < 1199136600 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :you also want to reset the column < 1199136610 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :err, ok < 1199136611 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :yes < 1199136612 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric ::-) < 1199136617 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :modify (\(l,_) -> (l+1,1)) < 1199136632 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :or wait... < 1199136633 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :wow, er, that's impressive.. i didn't know you could patternmatch lambdas < 1199136639 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :oklopol: you'd like that! < 1199136649 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :modify ((+1) *** const 1) < 1199136657 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :damn < 1199136659 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :what's *** < 1199136660 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :if you like the arrow operators :) < 1199136676 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :another Control.Arrow thing < 1199136681 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :qwiz: < 1199136688 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :parseOne ('\n':s) = do modify ((+1) *** const 1); return (parseOne s) < 1199136691 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :remove the ; < 1199136695 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :let me try... < 1199136697 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :f *** g = first f >>> second g by default < 1199136715 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :parseOne ('\n':s) = modify ((+1) *** const 1) >> parseOne s < 1199136732 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :er, return (parseOne s) < 1199136733 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :JACKPOT < 1199136762 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric : Not in scope: type constructor or class `State' < 1199136764 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :ono < 1199136769 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :what do i need to import? :P < 1199136795 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :hm, i wonder if ghc can tell me < 1199136809 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :eh i'll guess < 1199136811 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :Control.Monad.State < 1199136820 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :YOU WIN AGAIN < 1199136823 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric ::D < 1199136855 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :although lambdabot's @hoogle and @index would also work < 1199136856 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric : Type constructor `PosMonad' used as a class In the type `(PosMonad m) => String -> m a' < 1199136861 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :i guess i need Monad m, right? < 1199136868 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :no < 1199136869 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :(for parseError, i based it on fail's type) < 1199136878 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :ok maybe < 1199136898 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :heh < 1199136908 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :i was just trying to make it PosMonad only < 1199136911 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :since it retrieves line,col < 1199136927 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :that would be just String -> PosMonad a < 1199136929 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :ah < 1199136933 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :thank you < 1199136933 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric ::P < 1199136971 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :you also should have the option of using :t to ask what ghc infers as its type < 1199136992 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :(remove any declaration first) < 1199137019 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :hm: < 1199137021 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric : _ -> parseError "Unmatched [" < 1199137023 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :gives me < 1199137024 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :Parse error in pattern < 1199137032 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :heh < 1199137042 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :previous 2 lines: < 1199137045 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :parseLoop s = do (p, s') <- parseMany s < 1199137045 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric : case s' of ']':s'' -> return (p, s'') < 1199137052 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :with correct indentation < 1199137052 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :heh < 1199137089 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :and _ is directly under ']' ? < 1199137095 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :(the ' that is) < 1199137141 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :bastard < 1199137143 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :one character off < 1199137159 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :there should be a haskell-blinkenlights-mode < 1199137164 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :that blinks red things like that < 1199137212 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric : Couldn't match expected type `(Maybe BF, String)' against inferred type `PosMonad (Maybe BF, String)' In the first argument of `return', namely `(parseOne s)' < 1199137218 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :talking about: < 1199137219 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :parseOne ('\n':s) = modify ((+1) *** const 1) >> return (parseOne s) < 1199137229 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :oh. drop the return < 1199137257 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :i did < 1199137259 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :parseOne is already monadic < 1199137267 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :oh < 1199137269 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :then it gives me < 1199137274 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :another error ,tjat looks the same < 1199137274 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :doh :-) < 1199137282 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :parseOne (_:s) = advancing (parseOne s) < 1199137287 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :obviously i need some kind of trick here < 1199137307 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :advancing () >> parseOne s < 1199137317 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :you needed advance anyhow :) < 1199137353 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :oerjan: no use of advance there < 1199137362 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :advance = advancing () < 1199137368 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :essentially < 1199137372 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :ah, good point < 1199137373 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :ok then < 1199137397 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :Loading package mtl-1.0 ... linking ... done. < 1199137400 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :WHAT DID IT DO THERE :O < 1199137415 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :monad transformer library < 1199137421 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric ::O < 1199137423 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :includes Control.Monad.State < 1199137425 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :anyway, my parser works brilliantly < 1199137434 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :yay < 1199137460 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :a clear, monadic-error-handling, 43 line brainfuck parser in nice-looking haskell < 1199137469 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :it should be required reading < 1199137469 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric ::P < 1199137475 0 :faxathisia!unknown@unknown.invalid PRIVMSG #esoteric :ah well you've really beaten me < 1199137479 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :well, this line looks a bit ugly: < 1199137481 0 :faxathisia!unknown@unknown.invalid PRIVMSG #esoteric :Let's see? < 1199137483 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric : fail (x ++ " at line " ++ (show line) ++ ", column " ++ < 1199137484 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric : (show col) ++ ".") < 1199137489 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :because of the (show col) ... line < 1199137492 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :ok, faxathisia < 1199137500 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :i'll jsut paste ll my current code < 1199137505 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :you don't need the parentheses around (show col) < 1199137526 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :and you can replace the ones after fail with $ < 1199137550 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :what about show line < 1199137552 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :are its parens needed? < 1199137557 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :no < 1199137582 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :ok then < 1199137586 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :http://hpaste.org/4739 < 1199137591 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :note, i didn't count lines before "type PosMonad = ..." < 1199137595 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :since that's the parser bit < 1199137749 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :oh wait < 1199137771 0 :faxathisia!unknown@unknown.invalid PRIVMSG #esoteric :it ends early? < 1199137772 0 :faxathisia!unknown@unknown.invalid PRIVMSG #esoteric :parseError "Unmatched [" < 1199137787 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :nope < 1199137792 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :that's the whole parser < 1199137814 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :there are still some errors in the line/col handling < 1199137820 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :yes oerjan < 1199137825 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :*Main> parse "]" *** Exception: Unmatched ] at line 1, column 2. < 1199137837 0 :faxathisia!unknown@unknown.invalid PRIVMSG #esoteric :shall I annotate mine? < 1199137837 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :this is because i advance while still doing ']':s < 1199137842 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :i just need to replace advancing with return < 1199137845 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :faxathisia: sure < 1199137852 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :right that's the first error < 1199137860 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :the other? < 1199137874 0 :faxathisia!unknown@unknown.invalid PRIVMSG #esoteric :http://hpaste.org/4739#a1 < 1199137880 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :actually... < 1199137893 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :you are failing to advance on [ where you should < 1199137902 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :__ = __ -- This entire file is sort of stupid < 1199137905 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :what the HELL is that, faxathisia < 1199137908 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :it scares me < 1199137911 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :i think it's supposed to < 1199137912 0 :faxathisia!unknown@unknown.invalid PRIVMSG #esoteric :lol < 1199137917 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :also jeez < 1199137925 0 :faxathisia!unknown@unknown.invalid PRIVMSG #esoteric :*Main> :t let __ = __ in __ < 1199137926 0 :faxathisia!unknown@unknown.invalid PRIVMSG #esoteric :let __ = __ in __ :: t < 1199137931 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :your code looks like what someone who saw yacc output tried to write in a cleaner form in haskell < 1199137946 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :oh jeez you use parsec < 1199137977 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :also mine has more optimization slots in the types < 1199137978 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric ::P < 1199137989 0 :faxathisia!unknown@unknown.invalid PRIVMSG #esoteric :Mine doesn't even optimize correctly < 1199137995 0 :faxathisia!unknown@unknown.invalid PRIVMSG #esoteric :It does a half assed job and gives up < 1199138008 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :mine does no optimization... just is possible to < 1199138013 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :i'm going to write a backend first, THEN optimize < 1199138047 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :ehird: in the loop code you don't advance on [ and ]. moreover i think the unmatched error will give the end-of-file position < 1199138048 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :oerjan: for various section headers of my compiler, should i use {- Optimization -}? < 1199138051 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :i.e. multiline comment < 1199138062 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :why not < 1199138070 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :you are right about the unmatched EOF < 1199138071 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric ::( < 1199138086 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :parseError needs to take params < 1199138102 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :actually < 1199138107 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :how do i remember the position in the first place < 1199138110 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric ::| shit < 1199138123 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :with get < 1199138134 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :oh. yes. < 1199138139 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :i need to do it in parseOne though < 1199138141 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :otherwise i'd have to -1 < 1199138147 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :hm? < 1199138153 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :wait, no < 1199138154 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :you are right < 1199138162 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :blargh, parseLoop needs to call advance < 1199138181 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :golly, 'do advance\nstuff' looks ugly :-) < 1199138202 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :parseLoop s (PosMonad (l, c)) -- right? < 1199138210 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :called as parseLoop s get < 1199138231 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :huh? < 1199138255 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :no < 1199138298 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :just do the get inside parseLoop i think < 1199138312 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :oh, right < 1199138557 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :oerjan: faxathisia: http://hpaste.org/4724#a1 all good < 1199138562 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :apart from the 'advance' line on its own < 1199138567 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :doesn't look very good < 1199138567 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric ::P < 1199138659 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :well you can sneak it before parseMany with >> < 1199138666 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :assuming you still don't like ;'s < 1199138692 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :that's actually a good idea < 1199138701 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :since i am getting the result of an advance-parse < 1199138702 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :or something < 1199138706 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :i think you still have one advance too little < 1199138711 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :for the final ] < 1199138721 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :yep < 1199138725 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :*Main> parse "[][" *** Exception: Unmatched [ at line 1, column 2. < 1199138736 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :fixed < 1199138772 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :oerjan: http://hpaste.org/4724#a2 tada < 1199138780 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :i really like that code < 1199138789 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :it's the cleanest code i've ever written, methinks :P < 1199138793 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :i like haskell, i think < 1199138875 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :oerjan: for the backend stuff < 1199138887 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :i'm going to make a: Target String, type < 1199138891 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :and write things like < 1199138901 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :compile (Target "C") p = ... < 1199138910 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :compile (Target "i386") p = ... < 1199138913 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :or is that yuck :P < 1199138940 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :oh not necessarily < 1199138956 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :some people would even define datatypes for Line and Col < 1199138979 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :prevents them being mixed up with other kinds of Ints < 1199138987 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :or each other < 1199138989 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :yeah, i think that's not very important < 1199138997 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :i was just thinking about Target only having a string < 1199139001 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :instead of like < 1199139006 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :data Target = C | I386 < 1199139007 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :or something < 1199139015 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :maybe the latter would be preferable < 1199139016 0 :faxathisia!unknown@unknown.invalid PRIVMSG #esoteric :That seems better < 1199139027 0 :faxathisia!unknown@unknown.invalid PRIVMSG #esoteric :you don't have to go compile (Target _) = error < 1199139062 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :class Target a where ...; instance Target C where... :) < 1199139070 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :haha, oerjan wins i think < 1199139106 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :oerjan: is there a haskell command-line option parsing lib? < 1199139112 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :that allows the code for a given target to be kept together < 1199139120 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :yes < 1199139128 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :System.Console.GetOpt, iirc < 1199139143 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :is it anything like gnu getopt? SAY NO :P < 1199139155 0 :faxathisia!unknown@unknown.invalid PRIVMSG #esoteric :based on.. < 1199139161 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :faxathisia: aieeeeee < 1199139170 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :"This library provides facilities for parsing the command-line options in a standalone program. It is essentially a Haskell port of the GNU getopt library." < 1199139171 0 :faxathisia!unknown@unknown.invalid PRIVMSG #esoteric :it seems to work ok though < 1199139178 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :how cRUEL < 1199139196 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :oh wow that example is ugly :| < 1199139210 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :you also have getArgs for doing it your own way :) < 1199139222 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :oerjan: yes, but option parsing is non-trivial :P < 1199139225 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :--longarg=x < 1199139227 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :--longarg x < 1199139231 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :-s x < 1199139233 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :-sx < 1199139233 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :etc < 1199139241 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :-- --literal < 1199139246 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :- --also-literal < 1199139280 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :that sounds like "option parsing is non-trivial if you want to be GNU-compatible, and I hate GNU, so I want that" < 1199139290 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :haha < 1199139297 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :well, gnu long options can be useful :| < 1199139303 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :i just hate gnu getopt's C interface! < 1199139303 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :it's horrid < 1199139313 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :admittedly though if i use an option a lot i use its short form 100% < 1199139324 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :really i'll only have two options < 1199139329 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :--arch and --output < 1199139331 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :aka -a and -o < 1199139343 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :oh well the haskell interface may be different < 1199139355 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :looked a bit crazy < 1199139355 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :but OK < 1199139369 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :hm, damn: i will need to write a mapping of name->class < 1199139383 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :oerjan: hashtable/map/whatever String->uh...ClassClass < 1199139386 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :er < 1199139387 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :InstanceClass < 1199139388 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric ::-) < 1199139390 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :no wait < 1199139392 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :String->Target < 1199139393 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :i think. < 1199139402 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :what's the shortest syntax to create one? i don't know of any < 1199139425 0 :faxathisia!unknown@unknown.invalid PRIVMSG #esoteric :deriving Read -- I guess < 1199139445 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :ACTION points at Data.Map < 1199139457 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :actually < 1199139460 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :shouldn't i just do < 1199139466 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :targetFor "c" = C < 1199139469 0 :faxathisia!unknown@unknown.invalid PRIVMSG #esoteric :Yes < 1199139470 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :hm oh that may be awkward for classes < 1199139473 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :targetFor "i386" = I386 < 1199139473 0 :faxathisia!unknown@unknown.invalid PRIVMSG #esoteric :but that's not the shortest :p < 1199139480 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :faxathisia: i can do a case < 1199139487 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :targetFor n = case n of < 1199139496 0 :faxathisia!unknown@unknown.invalid PRIVMSG #esoteric :what you just wrote is better than a case imo < 1199139524 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :i guess, but it's not really pattern matching is it? so maybe it's not appropriate(oerjan?) < 1199139533 0 :faxathisia!unknown@unknown.invalid PRIVMSG #esoteric :it is pattern matching < 1199139533 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :hmm, /me wonders how to downcase a string < 1199139540 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :targetFor "C" == targetFor "c" :-) < 1199139547 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :map toLower < 1199139561 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :(Data.Char) < 1199139566 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :oerjan: for that i do need a case don't i < 1199139570 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :i can't do that in a pattern match < 1199139572 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :without a guard < 1199139573 0 :faxathisia!unknown@unknown.invalid PRIVMSG #esoteric :It's a nested pattern match like Cons 'i' (Cons '3' (Cons '8' (Cons '6' Nil))) < 1199139613 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :targetFor :: String -> Either String Target -- that's right if i want to return a "Unknown target", yes? < 1199139618 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :lookup (map toLower t) [("c",C),etc.] < 1199139628 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :using a list < 1199139630 0 :faxathisia!unknown@unknown.invalid PRIVMSG #esoteric :Unknown String < 1199139633 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :hm < 1199139635 0 :faxathisia!unknown@unknown.invalid PRIVMSG #esoteric :in your data ? < 1199139636 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :a case seems nicer to me < 1199139645 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :faxathisia: huh? < 1199139692 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :Either is fine < 1199139705 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :indeed it's a monad, with fail = Left < 1199139717 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :Hm you know I'll just use 'fail' < 1199139719 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :much simpler < 1199139720 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric ::P < 1199139725 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :Hmm < 1199139729 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :But what monad would that be! < 1199139737 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :ANd why is a function called targetFor being monadic! < 1199139744 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :Much better: < 1199139747 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :Maybe Target < 1199139753 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :OK so maybe is a monad < 1199139756 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric ::< but hey < 1199139758 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :Maybe is a monad too, with fail = const Nothing :D < 1199139774 0 :faxathisia!unknown@unknown.invalid PRIVMSG #esoteric :data Target = C | I386 | Unknown String < 1199139782 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :faxathisia: ew, no < 1199139782 0 :faxathisia!unknown@unknown.invalid PRIVMSG #esoteric :but I would just error .. I mean what else are you going to do ? < 1199139790 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric : targetFor :: String -> Maybe Target < 1199139794 0 :faxathisia!unknown@unknown.invalid PRIVMSG #esoteric :why is that ew but Maybe isn?T < 1199139794 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :targetFor n = case map toLower n of < 1199139798 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric : "c" -> Just C < 1199139799 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric : _ -> Nothing < 1199139806 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :faxathisia: eh, because it's not about the type < 1199139807 0 :faxathisia!unknown@unknown.invalid PRIVMSG #esoteric :I would make it targetFor :: String -> Target < 1199139808 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :it's about the function < 1199139863 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :Maybe is fine < 1199139929 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :oerjan: class Target a where < 1199139934 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :do i put my type declarations in there? < 1199140185 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric ::| < 1199140194 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :um < 1199140223 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :no, method declarations < 1199140242 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :ok, you lost me < 1199140253 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :i know haskell's class/method/instance isn't real OOP, it just shares the names < 1199140255 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :so: do explain < 1199140301 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :class Target a should declare the types of the functions that every instance of Target needs to define < 1199140313 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :oh, i may have misunderstood you < 1199140339 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :it's similar to Java interfaces < 1199140361 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :java, don't say that in front of me < 1199140365 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :however, i get your point < 1199140386 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :i don't /quite/ see ow i'm going to distinguish between different target's functions thoiugh < 1199140389 0 :faxathisia!unknown@unknown.invalid PRIVMSG #esoteric :You don't like Java??? < 1199140405 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :you may use data instead if you like < 1199140428 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :the difference is how the definitions for each target are grouped < 1199140435 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :(well, one difference) < 1199140460 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :with data, each function must be defined together, for all its targets < 1199140488 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :with class, each target must be defined together, with all its functions < 1199140503 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :i think perhaps i need an example < 1199140504 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric ::-) < 1199140518 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :ouch < 1199140562 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :haha < 1199140564 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :i am evil < 1199140575 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :well, like that compile function you had < 1199140594 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :with data, you would define cases: < 1199140610 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :compile C prog = ... < 1199140633 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :compile I386 prog = ... < 1199140637 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :all together < 1199140652 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :ys < 1199140653 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :yes < 1199140659 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :hm wait < 1199140678 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :oerjan: ooh, one thing.. < 1199140686 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :is Char a unicode char? < 1199140689 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :yes < 1199140709 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :because the C backend could be outputting unicode C (which is a Good Thing)... but an i386 backend needs binary! < 1199140710 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :but most I/O functions truncate to 8 bits < 1199140713 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :So how should I define that in Target? < 1199140749 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :an encoding method perhaps? < 1199140802 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :confuzzled < 1199140836 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :i think maybe data is simpler for a start < 1199140869 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :aww < 1199140874 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :but class is nicer looking :P < 1199140892 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :a backend will always be generating either a tring or a binary string < 1199140899 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :i just need to encode that in compile's type < 1199140982 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :encoding :: a -> String -> String < 1199140992 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :where a is the class parameter < 1199140993 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :hmm < 1199140994 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :what does that do < 1199141009 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :shouldn't it be "compile" < 1199141013 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :wait, what DOES that do < 1199141015 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :what is 'encoding' < 1199141039 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :a final pass that encodes the String if necessary < 1199141103 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :excuse me, i'll be going out to watch the fireworks < 1199141108 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :is there a binary string type in haskell? < 1199141109 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :back in a while < 1199141114 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :hmm, wait, it should just be [Byte] < 1199141118 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :assuming haskell has [Byte] < 1199141145 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :actually Char is used for most simple I/O. for bigger things there is ByteString < 1199141162 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :which is not actually a list type, and extremely optimized < 1199141173 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :cu < 1199141258 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :bye :-) < 1199141682 0 :SimonRC!unknown@unknown.invalid PRIVMSG #esoteric :so, where's this code that isbeing disgust < 1199141687 0 :SimonRC!unknown@unknown.invalid PRIVMSG #esoteric :*discussed < 1199141692 0 :SimonRC!unknown@unknown.invalid PRIVMSG #esoteric :*cussed < 1199141694 0 :SimonRC!unknown@unknown.invalid PRIVMSG #esoteric :;-) < 1199141721 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :in an emacs buffer < 1199141723 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :pointing to a file < 1199141786 0 :SimonRC!unknown@unknown.invalid PRIVMSG #esoteric :right, so HTF are people looking at it? < 1199141837 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :SimonRC: my various pastes in here and to hpaste < 1199141880 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :ACTION decides fireworks are highly overrated anyhow, especially when you've neglected to eat in advance < 1199141922 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :oerjan: write a haskell/libcaca (Are there bindings?) ascii-art-fireworks program < 1199141925 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric ::P < 1199141935 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :generate the sounds algorithmically < 1199141952 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :only thing is by the time you can run it it'll be too late for fireworks... < 1199141957 0 :pikhq_!n=pikhq@209.248.124.243 JOIN :#esoteric < 1199141981 0 :SimonRC!unknown@unknown.invalid PRIVMSG #esoteric :ehird: I think that even foru your program it is worth using Parsec < 1199141996 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :SimonRC: it's already working 100% perfectly < 1199142002 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :and parsec would report unmatched [s at EOF < 1199142003 0 :SimonRC!unknown@unknown.invalid PRIVMSG #esoteric :for clarity etc < 1199142006 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :not at the line/col of the [ < 1199142016 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :mine is perfectly ok looking :P < 1199142020 0 :SimonRC!unknown@unknown.invalid PRIVMSG #esoteric :actually, you can make it work either way < 1199142026 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :meh, whatever < 1199142028 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :ACTION still thinks you could fool parsec with try ... <|> ... somehow < 1199142028 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :it's done now. < 1199142046 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :Question: is there an unwords that instead does newlines? < 1199142059 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :unlines < 1199142066 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :strangely enough :D < 1199142076 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :HAPPY NEW YEAR!!!!!!!!!!!!!!!!!!!!!!! < 1199142094 0 :ehird!unknown@unknown.invalid PART #esoteric :? < 1199142102 0 :ehird!n=ehird@user-5440bd6b.wfd77a.dsl.pol.co.uk JOIN :#esoteric < 1199142106 0 :SimonRC!unknown@unknown.invalid PRIVMSG #esoteric :I spy a Scandanavian < 1199142115 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :where? < 1199142116 0 :pikhq!unknown@unknown.invalid QUIT :Nick collision from services. < 1199142119 0 :pikhq_!unknown@unknown.invalid NICK :pikhq < 1199142120 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :you cannot prove it! < 1199142123 0 :SimonRC!unknown@unknown.invalid PRIVMSG #esoteric :oerjan: you, surely? < 1199142127 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :i could be - south african! < 1199142128 0 :ehird!unknown@unknown.invalid NICK :ehird` < 1199142136 0 :ehird`!unknown@unknown.invalid PRIVMSG #esoteric :it is just that, < 1199142142 0 :ehird`!unknown@unknown.invalid PRIVMSG #esoteric :my c header etc < 1199142143 0 :SimonRC!unknown@unknown.invalid PRIVMSG #esoteric :only people from wierd places like Scandanavia use TZ+0100 at this time of year < 1199142148 0 :ehird`!unknown@unknown.invalid PRIVMSG #esoteric :is multiple lines, and having \ns in one long line < 1199142150 0 :ehird`!unknown@unknown.invalid PRIVMSG #esoteric :o using ++ < 1199142152 0 :ehird`!unknown@unknown.invalid PRIVMSG #esoteric :would be ugly :-) < 1199142169 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :you mean SA is on daylight saving? < 1199142188 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :what? < 1199142199 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :we don't have daylight saving here < 1199142200 0 :SimonRC!unknown@unknown.invalid PRIVMSG #esoteric :everyone on the net that is not American is Britsh or Scandanavian < 1199142202 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :now < 1199142204 0 :SimonRC!unknown@unknown.invalid PRIVMSG #esoteric :there are no others! < 1199142220 0 :SimonRC!unknown@unknown.invalid PRIVMSG #esoteric ::roll: < 1199142230 0 :ehird`!unknown@unknown.invalid PRIVMSG #esoteric :question < 1199142238 0 :ehird`!unknown@unknown.invalid PRIVMSG #esoteric :is it possible to 'save myself' from sigsegv in a c program? < 1199142247 0 :ehird`!unknown@unknown.invalid PRIVMSG #esoteric :i'm considering expanding the tape on segfaults :-) < 1199142255 0 :ehird`!unknown@unknown.invalid PRIVMSG #esoteric :which should be more efficient than checking every move < 1199142304 0 :pikhq!unknown@unknown.invalid QUIT :"leaving" < 1199142318 0 :ehird`!unknown@unknown.invalid PRIVMSG #esoteric :i know you can trap sigsegv < 1199142321 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :oh and btw it's scand-I-navian < 1199142323 0 :ehird`!unknown@unknown.invalid PRIVMSG #esoteric :but can you break back out of the handler to the program? < 1199142376 0 :pikhq!n=pikhq@209.248.124.243 JOIN :#esoteric < 1199142379 0 :SimonRC!unknown@unknown.invalid PRIVMSG #esoteric :hmm < 1199142423 0 :ehird`!unknown@unknown.invalid PRIVMSG #esoteric :(because if so, that would be FREAKIN' AWESOME) < 1199142428 0 :ehird`!unknown@unknown.invalid PRIVMSG #esoteric :and the C code should be /really damn fast/ < 1199142437 0 :ehird`!unknown@unknown.invalid PRIVMSG #esoteric :whcih is the idea! < 1199142492 0 :SimonRC!unknown@unknown.invalid PRIVMSG #esoteric :I am told that gdb can do it < 1199142501 0 :ehird`!unknown@unknown.invalid PRIVMSG #esoteric :i'm not gdb < 1199142504 0 :ehird`!unknown@unknown.invalid PRIVMSG #esoteric ::P < 1199142506 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :hm actually are you guaranteed that the sigsegv happens exactly when you go beyond the array boundary? what if you instead scramble malloc data first? < 1199142510 0 :ehird`!unknown@unknown.invalid PRIVMSG #esoteric :anyway gdb does crazy asm stuff < 1199142511 0 :SimonRC!unknown@unknown.invalid PRIVMSG #esoteric :maybe grep the gdb sources for "SIGSEGV" < 1199142521 0 :ehird`!unknown@unknown.invalid PRIVMSG #esoteric :oerjan: hmm, i didn't quite understand < 1199142522 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :ACTION has no actual idea < 1199142548 0 :ehird`!unknown@unknown.invalid PRIVMSG #esoteric :tape[345897345893] when tape is length 2 /should/ cause SIGSEGV < 1199142561 0 :SimonRC!unknown@unknown.invalid PRIVMSG #esoteric :I assume that he is arranging to have an invalid page at the end of the tape < 1199142573 0 :ehird`!unknown@unknown.invalid PRIVMSG #esoteric :hmm < 1199142573 0 :ehird`!unknown@unknown.invalid PRIVMSG #esoteric :The library offers a rather nice "free" dynamic memory allocation feature for running brainfuck code. < 1199142573 0 :ehird`!unknown@unknown.invalid PRIVMSG #esoteric :It works through page protection mechanism and catching of SIGSEGV signals. < 1199142577 0 :ehird`!unknown@unknown.invalid PRIVMSG #esoteric :http://savannah.nongnu.org/projects/libbf < 1199142579 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :oh well if you can carefully align things... < 1199142589 0 :ehird`!unknown@unknown.invalid PRIVMSG #esoteric :SimonRC: as soon as i figure out how to do that. yep! < 1199142593 0 :ehird`!unknown@unknown.invalid PRIVMSG #esoteric :should just be powers-of-two < 1199142593 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :ACTION already mentioned he has no actual idea, right? < 1199142615 0 :ehird`!unknown@unknown.invalid PRIVMSG #esoteric :this technique reminds me of the Cheney-on-the-MTA Scheme->C compilation stuff < 1199142631 0 :ehird`!unknown@unknown.invalid PRIVMSG #esoteric :you just let the stack grow and grow, and if you go too high, trash loads of stuff and continue < 1199142649 0 :ehird`!unknown@unknown.invalid PRIVMSG #esoteric :here, you jsut let the pointer grow and grow, and if you go too high and signal an error, expand the tape and continue < 1199142653 0 :ehird`!unknown@unknown.invalid PRIVMSG #esoteric :"just in time" < 1199142730 0 :SimonRC!unknown@unknown.invalid PRIVMSG #esoteric :Actually a good way to cope would be to ask the OS to lazily mmap 16 EB of zeros < 1199142762 0 :pikhq!unknown@unknown.invalid QUIT :"leaving" < 1199142770 0 :SimonRC!unknown@unknown.invalid PRIVMSG #esoteric :I think you can just ask linux to mmap /dev/zero for that effect < 1199142793 0 :SimonRC!unknown@unknown.invalid PRIVMSG #esoteric :linux mmaps lazily < 1199142870 0 :ehird`!unknown@unknown.invalid PRIVMSG #esoteric :i run on os x, which is a bsd variant < 1199142880 0 :ehird`!unknown@unknown.invalid PRIVMSG #esoteric :bsd is very conservative, so i doubt tricks like that will work < 1199142890 0 :ehird`!unknown@unknown.invalid PRIVMSG #esoteric :(this is a good thing: i want portable code, to as big as degree as possible) < 1199142907 0 :pikhq!n=pikhq@209.248.124.243 JOIN :#esoteric < 1199142944 0 :pikhq!unknown@unknown.invalid QUIT :Client Quit < 1199143038 0 :ehird`!unknown@unknown.invalid PRIVMSG #esoteric :SimonRC: i'm wondering how i could really assure to as much a degree as possible that i have an invalid page at the end < 1199143042 0 :ehird`!unknown@unknown.invalid PRIVMSG #esoteric :i'm not sure just one trick will work < 1199143049 0 :pikhq!n=pikhq@209.248.124.243 JOIN :#esoteric < 1199143111 0 :SimonRC!unknown@unknown.invalid PRIVMSG #esoteric :maybe you can ask something to be mmapped non-readable < 1199143115 0 :SimonRC!unknown@unknown.invalid PRIVMSG #esoteric :I don't know really < 1199143199 0 :ehird`!unknown@unknown.invalid PRIVMSG #esoteric :seems so < 1199143201 0 :ehird`!unknown@unknown.invalid PRIVMSG #esoteric :if you haev int prot = 0 < 1199143203 0 :ehird`!unknown@unknown.invalid PRIVMSG #esoteric :third arg < 1199143224 0 :SimonRC!unknown@unknown.invalid PRIVMSG #esoteric :however, I don't know how to make it occur right at the end of the other thing < 1199143233 0 :SimonRC!unknown@unknown.invalid PRIVMSG #esoteric :unless you can ask for an address < 1199143236 0 :ehird`!unknown@unknown.invalid PRIVMSG #esoteric :yes < 1199143240 0 :SimonRC!unknown@unknown.invalid PRIVMSG #esoteric :oh dear... < 1199143241 0 :SimonRC!unknown@unknown.invalid PRIVMSG #esoteric :ACTION goes < 1199143247 0 :ehird`!unknown@unknown.invalid PRIVMSG #esoteric :void * < 1199143248 0 :ehird`!unknown@unknown.invalid PRIVMSG #esoteric : mmap(void *addr, size_t len, int prot, int flags, int fd, off_t offset); < 1199143255 0 :SimonRC!unknown@unknown.invalid PRIVMSG #esoteric :ACTION goes. < 1199143257 0 :ehird`!unknown@unknown.invalid PRIVMSG #esoteric :bye. < 1199143258 0 :ehird`!unknown@unknown.invalid PRIVMSG #esoteric ::) < 1199143270 0 :ehird`!unknown@unknown.invalid PRIVMSG #esoteric :wait, fuck, it's really almost 2008 < 1199143278 0 :ehird`!unknown@unknown.invalid PRIVMSG #esoteric :2008. the number looks weird. < 1199143289 0 :ehird`!unknown@unknown.invalid PRIVMSG #esoteric :i might not release anything in 2008, just so i don't get that horrible number tied to it < 1199143320 0 :ehird`!unknown@unknown.invalid PRIVMSG #esoteric :bsmntbombdood: you know you said no code for libbf? < 1199143327 0 :ehird`!unknown@unknown.invalid PRIVMSG #esoteric :http://cvs.savannah.nongnu.org/viewvc/libbf/?root=libbf code, bitch. < 1199143379 0 :ehird`!unknown@unknown.invalid PRIVMSG #esoteric :http://cvs.savannah.nongnu.org/viewvc/libbf/libbf_interpreter_dynalloc.c?root=libbf&view=markup yow, that's some heavy stuff < 1199143579 0 :pikhq!unknown@unknown.invalid QUIT :Read error: 104 (Connection reset by peer) < 1199143646 0 :bsmntbombdood!unknown@unknown.invalid PRIVMSG #esoteric :? < 1199143650 0 :bsmntbombdood!unknown@unknown.invalid PRIVMSG #esoteric :libbf? < 1199143655 0 :pikhq!n=pikhq@209.248.124.243 JOIN :#esoteric < 1199143669 0 :ehird`!unknown@unknown.invalid PRIVMSG #esoteric :bsmntbombdood: you said about it's dynamic allocation stuff < 1199143673 0 :ehird`!unknown@unknown.invalid PRIVMSG #esoteric :bsmntbombdood: using sigsegv < 1199143678 0 :ehird`!unknown@unknown.invalid PRIVMSG #esoteric :and said 'damn no code' < 1199143681 0 :bsmntbombdood!unknown@unknown.invalid PRIVMSG #esoteric :oh < 1199143684 0 :bsmntbombdood!unknown@unknown.invalid PRIVMSG #esoteric :cool < 1199143688 0 :bsmntbombdood!unknown@unknown.invalid PRIVMSG #esoteric :like a year ago :P < 1199143713 0 :bsmntbombdood!unknown@unknown.invalid PRIVMSG #esoteric :ACTION orgasmums < 1199143731 0 :bsmntbombdood!unknown@unknown.invalid PRIVMSG #esoteric :holy crap that's a lot of code < 1199143919 0 :bsmntbombdood!unknown@unknown.invalid PRIVMSG #esoteric :1.6 megabytes?! < 1199144009 0 :ehird`!unknown@unknown.invalid PRIVMSG #esoteric :look at that one file i showed you... < 1199144014 0 :ehird`!unknown@unknown.invalid PRIVMSG #esoteric :that's the feature you were looking for < 1199144018 0 :ehird`!unknown@unknown.invalid PRIVMSG #esoteric :fukcing crazy code < 1199144020 0 :ehird`!unknown@unknown.invalid PRIVMSG #esoteric :i'll never understand it < 1199144026 0 :ehird`!unknown@unknown.invalid PRIVMSG #esoteric :it's like kernel code < 1199144029 0 :ehird`!unknown@unknown.invalid PRIVMSG #esoteric :well, more like libc code < 1199144032 0 :ehird`!unknown@unknown.invalid PRIVMSG #esoteric :like malloc or something < 1199144159 0 :bsmntbombdood!unknown@unknown.invalid PRIVMSG #esoteric :man < 1199144185 0 :ehird`!unknown@unknown.invalid PRIVMSG #esoteric :f addr is non-zero, it is used as a hint to the system. (As a conve- < 1199144185 0 :ehird`!unknown@unknown.invalid PRIVMSG #esoteric : nience to the system, the actual address of the region may differ from < 1199144185 0 :ehird`!unknown@unknown.invalid PRIVMSG #esoteric : the address supplied.) < 1199144189 0 :ehird`!unknown@unknown.invalid PRIVMSG #esoteric :fucking mmap < 1199144192 0 :ehird`!unknown@unknown.invalid PRIVMSG #esoteric :i don't want a 'hint' < 1199144195 0 :ehird`!unknown@unknown.invalid PRIVMSG #esoteric :that doesn't guarantee this will work < 1199144231 0 :bsmntbombdood!unknown@unknown.invalid PRIVMSG #esoteric :i might not be able to understand it < 1199144245 0 :ehird`!unknown@unknown.invalid PRIVMSG #esoteric :see what i mean :P < 1199144307 0 :ehird`!unknown@unknown.invalid PRIVMSG #esoteric :[ehird:~/Code/Frainbuck] % ./test < 1199144308 0 :ehird`!unknown@unknown.invalid PRIVMSG #esoteric :fuck: Operation not supported by device < 1199144313 0 :ehird`!unknown@unknown.invalid PRIVMSG #esoteric :that's what i get for doing perror("fuck") < 1199144379 0 :ehird`!unknown@unknown.invalid PRIVMSG #esoteric :bsmntbombdood: any other bright ideas for more speedy reallocation than just checkig all the time? :-) < 1199144413 0 :bsmntbombdood!unknown@unknown.invalid PRIVMSG #esoteric :catching sigv is the only way < 1199144420 0 :bsmntbombdood!unknown@unknown.invalid PRIVMSG #esoteric :*segv < 1199144473 0 :ehird`!unknown@unknown.invalid PRIVMSG #esoteric :bsmntbombdood: somehow i doubt it's possible to do the catching segv without that mass of crap :P < 1199144588 0 :ehird`!unknown@unknown.invalid PRIVMSG #esoteric :hm < 1199144591 0 :ehird`!unknown@unknown.invalid PRIVMSG #esoteric :gnu libc manual < 1199144591 0 :ehird`!unknown@unknown.invalid PRIVMSG #esoteric : size_t page_size = (size_t) sysconf (_SC_PAGESIZE); < 1199144593 0 :ehird`!unknown@unknown.invalid PRIVMSG #esoteric :is that portable? < 1199144639 0 :bsmntbombdood!unknown@unknown.invalid PRIVMSG #esoteric :fuck if i know