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