< 1278892800 0 :siduxgor!unknown@unknown.invalid PRIVMSG #esoteric :lucidalise: Exactly! < 1278892814 0 :CakeProphet!unknown@unknown.invalid PRIVMSG #esoteric :hahaha. youtube fungot is my new favorite. < 1278892815 0 :fungot!unknown@unknown.invalid PRIVMSG #esoteric :CakeProphet: of course. seriously, read description :) haha, this movie or hitman? ( watching smoz tuck his tail) this song < 1278892845 0 :zzo38!unknown@unknown.invalid PRIVMSG #esoteric :fungot: This is not a movie? < 1278892846 0 :fungot!unknown@unknown.invalid PRIVMSG #esoteric :zzo38: hey guys! check out second from disaster on discovery channel, minus the french are surrender monkeys, nuff said. < 1278892861 0 :CakeProphet!unknown@unknown.invalid PRIVMSG #esoteric :calamari: okay. so custom asm? < 1278892873 0 :calamari!unknown@unknown.invalid PRIVMSG #esoteric :CakeProphet: okay < 1278892891 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :!haskell main = loop 1; loop n = do putStr (' ':show n); hFlush stdout; < 1278892900 0 :zzo38!unknown@unknown.invalid PRIVMSG #esoteric :^style -1 < 1278892901 0 :fungot!unknown@unknown.invalid PRIVMSG #esoteric :Not found. < 1278892906 0 :CakeProphet!unknown@unknown.invalid PRIVMSG #esoteric :our asm will essentially need to be a simple register machine with some hardware operations I think? < 1278892913 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :!haskell import System.IO; main = loop 1; loop n = do putStr (' ':show n); hFlush stdout; < 1278892916 0 :EgoBot!unknown@unknown.invalid PRIVMSG #esoteric :1 < 1278892924 0 :zzo38!unknown@unknown.invalid PRIVMSG #esoteric :Do you like GNU long options? Or not < 1278892936 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :wth. oh. < 1278892942 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :!haskell import System.IO; main = loop 1; loop n = do putStr (' ':show n); hFlush stdout; loop (n+1) < 1278892948 0 :calamari!unknown@unknown.invalid PRIVMSG #esoteric :CakeProphet: sounds good to me < 1278892965 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :siduxgor: ok so even explicitly flushing doesn't help... < 1278892971 0 :CakeProphet!unknown@unknown.invalid PRIVMSG #esoteric :oerjan: yeah I was about to say. not recursive. < 1278893000 0 :relet!unknown@unknown.invalid QUIT :Quit: Leaving. < 1278893037 0 :augur!unknown@unknown.invalid QUIT :Remote host closed the connection < 1278893043 0 :augur!~augur@216-164-33-76.c3-0.slvr-ubr1.lnh-slvr.md.cable.rcn.com JOIN :#esoteric < 1278893084 0 :CakeProphet!unknown@unknown.invalid PRIVMSG #esoteric :calamari: a plan 9 approach would result in a small instruction set. Simply delegate hardware to a filesystem, and then support filesystem operations? < 1278893096 0 :CakeProphet!unknown@unknown.invalid PRIVMSG #esoteric :or is that getting too complicated already? < 1278893105 0 :calamari!unknown@unknown.invalid PRIVMSG #esoteric :I don't think we need to worry about that yet < 1278893116 0 :calamari!unknown@unknown.invalid PRIVMSG #esoteric :but maybe I am misunderstanding < 1278893122 0 :lucidalise!unknown@unknown.invalid PRIVMSG #esoteric :what are you even doing < 1278893127 0 :calamari!unknown@unknown.invalid PRIVMSG #esoteric :lucidalise: pipe dream < 1278893137 0 :lucidalise!unknown@unknown.invalid PRIVMSG #esoteric :sounds like a very un-pipey pipe dream. < 1278893143 0 :calamari!unknown@unknown.invalid PRIVMSG #esoteric :the ever vaporware esoteric os < 1278893150 0 :lucidalise!unknown@unknown.invalid PRIVMSG #esoteric :ah yes. ESO. < 1278893169 0 :CakeProphet!unknown@unknown.invalid PRIVMSG #esoteric :calamari: Well since our asm is going to run standalone it does need native support for hardware, right? How do other virtual asms do this? < 1278893183 0 :lucidalise!unknown@unknown.invalid PRIVMSG #esoteric :Um ... ports. < 1278893192 0 :lucidalise!unknown@unknown.invalid PRIVMSG #esoteric :Mapped memory. < 1278893200 0 :calamari!unknown@unknown.invalid PRIVMSG #esoteric :ports sounds like a good idea < 1278893210 0 :zzo38!unknown@unknown.invalid PRIVMSG #esoteric :Does Plain TeX have any blackboard bold? (Even if so, I don't plan to use blackboard bold for !! operator) < 1278893211 0 :lucidalise!unknown@unknown.invalid PRIVMSG #esoteric :Mapped memory is best if you're on 64-bit. < 1278893215 0 :lucidalise!unknown@unknown.invalid PRIVMSG #esoteric :Try doing VGA with ports. < 1278893218 0 :lucidalise!unknown@unknown.invalid PRIVMSG #esoteric :zzo38: No. < 1278893222 0 :lucidalise!unknown@unknown.invalid PRIVMSG #esoteric :zzo38: You need AMSLaTeX for that. < 1278893223 0 :CakeProphet!unknown@unknown.invalid PRIVMSG #esoteric :calamari: this is new to me. I don't know much about OS design, obviously. :) < 1278893262 0 :CakeProphet!unknown@unknown.invalid PRIVMSG #esoteric :is it similar to the idea of ports in Erlang? < 1278893268 0 :lucidalise!unknown@unknown.invalid PRIVMSG #esoteric :No. < 1278893277 0 :lucidalise!unknown@unknown.invalid PRIVMSG #esoteric :You just have read byte from port, put byte to port operations. < 1278893278 0 :calamari!unknown@unknown.invalid PRIVMSG #esoteric :lucidalise: won't have to worry about it.. sticking with text mode I am sure < 1278893286 0 :CakeProphet!unknown@unknown.invalid PRIVMSG #esoteric :in Erlang a port is an abstract "thing" you can read to and write from < 1278893295 0 :lucidalise!unknown@unknown.invalid PRIVMSG #esoteric :calamari: Some pipe dream. < 1278893300 0 :CakeProphet!unknown@unknown.invalid PRIVMSG #esoteric :a "port driver" implements the hardware access. < 1278893312 0 :MigoMipo!unknown@unknown.invalid QUIT :Read error: Connection reset by peer < 1278893334 0 :zzo38!unknown@unknown.invalid PRIVMSG #esoteric :Also should I make it treat {} as a single operator or not (even if so, you can override it by adding a space { } if you want it separate) < 1278893337 0 :calamari!unknown@unknown.invalid PRIVMSG #esoteric :lucidalise: ESO is the duke nukem forever of the esoteric world :) < 1278893346 0 :lucidalise!unknown@unknown.invalid PRIVMSG #esoteric :zzo38: Keep it seperate. < 1278893358 0 :lucidalise!unknown@unknown.invalid PRIVMSG #esoteric :{} is usually pointless in C as opposed to ;. < 1278893375 0 :lucidalise!unknown@unknown.invalid PRIVMSG #esoteric :Maybe set a control structure followed by ; differently. < 1278893377 0 :CakeProphet!unknown@unknown.invalid PRIVMSG #esoteric :I use {} for function stubs. < 1278893380 0 :lucidalise!unknown@unknown.invalid PRIVMSG #esoteric :Bold the ; and adjust the spacing, say. < 1278893384 0 :lucidalise!unknown@unknown.invalid PRIVMSG #esoteric :CakeProphet: Well, true. < 1278893387 0 :lucidalise!unknown@unknown.invalid PRIVMSG #esoteric :But no need to set it differently. < 1278893404 0 :CakeProphet!unknown@unknown.invalid PRIVMSG #esoteric :I don't know what the problem at hand is. So I have nothing else to comment. :) < 1278893412 0 :lucidalise!unknown@unknown.invalid PRIVMSG #esoteric :Typesetting C. < 1278893419 0 :CakeProphet!unknown@unknown.invalid PRIVMSG #esoteric :...ha. < 1278893426 0 :lucidalise!unknown@unknown.invalid PRIVMSG #esoteric :"Ha"; you mock Knuth. < 1278893428 0 :lucidalise!unknown@unknown.invalid PRIVMSG #esoteric :WEB is his work. < 1278893431 0 :lucidalise!unknown@unknown.invalid PRIVMSG #esoteric :Well, it was Pascal then. < 1278893440 0 :lucidalise!unknown@unknown.invalid PRIVMSG #esoteric :But now it is C, and Knuth uses CWEB, which iirc he co-authored. < 1278893440 0 :CakeProphet!unknown@unknown.invalid PRIVMSG #esoteric :WEB? < 1278893445 0 :CakeProphet!unknown@unknown.invalid PRIVMSG #esoteric :is that kind of like G.E.B? :P < 1278893446 0 :lucidalise!unknown@unknown.invalid PRIVMSG #esoteric :It invented literate programming. < 1278893451 0 :lucidalise!unknown@unknown.invalid PRIVMSG #esoteric :You fail forever. < 1278893452 0 :zzo38!unknown@unknown.invalid PRIVMSG #esoteric :I sometimes write like while(f(x)) {} instead of ; because it is less confusing if I write {} after a control structure instead of ; < 1278893467 0 :CakeProphet!unknown@unknown.invalid PRIVMSG #esoteric :lucidalise: hey. We all can't know everything about everything. :P < 1278893479 0 :CakeProphet!unknown@unknown.invalid PRIVMSG #esoteric :some of us can pretend to though. < 1278893480 0 :lucidalise!unknown@unknown.invalid PRIVMSG #esoteric :CakeProphet: Mocking Knuth, then ignorance of one of his projects -- unforgivable! < 1278893485 0 :lucidalise!unknown@unknown.invalid PRIVMSG #esoteric :You shall perish. < 1278893500 0 :zzo38!unknown@unknown.invalid PRIVMSG #esoteric :WEB was with Pascal, now CWEB is like WEB but C, and now Enhanced CWEB, which is my own, adds some features such as line-numbers and meta-macros. < 1278893512 0 :CakeProphet!unknown@unknown.invalid PRIVMSG #esoteric :neat. < 1278893527 0 :siduxgor!unknown@unknown.invalid QUIT :Quit: Page closed < 1278893586 0 :CakeProphet!unknown@unknown.invalid PRIVMSG #esoteric :calamari: I think you'll probably need to design the VM then. :P < 1278893600 0 :CakeProphet!unknown@unknown.invalid PRIVMSG #esoteric :the asm, that is. < 1278893626 0 :CakeProphet!unknown@unknown.invalid PRIVMSG #esoteric :if the assembler can be written in any language. I'd love to write it in Haskell using the Parsec library. < 1278893637 0 :calamari!unknown@unknown.invalid PRIVMSG #esoteric :CakeProphet: sounds good < 1278893639 0 :lucidalise!unknown@unknown.invalid PRIVMSG #esoteric :Surely you need machine code? < 1278893664 0 :Zuu!unknown@unknown.invalid PRIVMSG #esoteric :We need more machine code! < 1278893669 0 :CakeProphet!unknown@unknown.invalid PRIVMSG #esoteric :well, "the asm" is the machine code. Our vocabulary needs an adjustment I suppose. < 1278893682 0 :calamari!unknown@unknown.invalid PRIVMSG #esoteric :yes, that was my bad wording before < 1278893688 0 :CakeProphet!unknown@unknown.invalid PRIVMSG #esoteric :the assembler takes "the assembly code" and makes the virtual machine code. < 1278893700 0 :CakeProphet!unknown@unknown.invalid PRIVMSG #esoteric :so right now we're working on the machine code. < 1278893703 0 :zzo38!unknown@unknown.invalid PRIVMSG #esoteric :Enhanced CWEB prints ++ and -- as up and down arrows. Assignment = is printed as a left arrow. == is printed as a single equal sign and != as a not-equal sign. Compound assignment operators such as += or |= is printed as the operator with a left arrow above the operator. < 1278893721 0 :calamari!unknown@unknown.invalid PRIVMSG #esoteric :CakeProphet: what I < 1278893732 0 :CakeProphet!unknown@unknown.invalid PRIVMSG #esoteric :calamari: /can/ the assembler be in any language? Shouldn't we have one for the OS itself at some point? < 1278893741 0 :zzo38!unknown@unknown.invalid PRIVMSG #esoteric :Line numbers are printed in small numbers on the right side of the page, with a dot on the left side and a dot on the right side. < 1278893741 0 :calamari!unknown@unknown.invalid PRIVMSG #esoteric :CakeProphet: what I'm thinking about is the translation of something like interrupts into a queue < 1278893766 0 :Zuu!unknown@unknown.invalid PRIVMSG #esoteric :zzo38: making a C obfuscator? < 1278893781 0 :CakeProphet!unknown@unknown.invalid PRIVMSG #esoteric :calamari: hmmm, aren't ports also a kind of queue? < 1278893783 0 :zzo38!unknown@unknown.invalid PRIVMSG #esoteric :Zuu: No. < 1278893785 0 :calamari!unknown@unknown.invalid PRIVMSG #esoteric :CakeProphet: yep, it's a good point < 1278893793 0 :calamari!unknown@unknown.invalid PRIVMSG #esoteric :CakeProphet: that was in reference to the asm < 1278893795 0 :CakeProphet!unknown@unknown.invalid PRIVMSG #esoteric :calamari: so you could unify that. Interrupt = port < 1278893817 0 :Zuu!unknown@unknown.invalid PRIVMSG #esoteric :hm < 1278893848 0 :CakeProphet!unknown@unknown.invalid PRIVMSG #esoteric :calamari: okay here's what we should do. The assembler should be written in an esolang that we eventually intend to compile into our assembly. < 1278893854 0 :calamari!unknown@unknown.invalid PRIVMSG #esoteric :CakeProphet: rewriting the assembler and compiler to run under the actual system is so far in the future we shouldn't even worry about it right now < 1278893875 0 :CakeProphet!unknown@unknown.invalid PRIVMSG #esoteric :calamari: ah. yeah that's true. I can make a Haskell assembler and then the ESO assembler can be written in an esolang. < 1278893894 0 :CakeProphet!unknown@unknown.invalid PRIVMSG #esoteric :I'll just need a spec of the language. < 1278893902 0 :calamari!unknown@unknown.invalid PRIVMSG #esoteric :I mean if the worst happens we could code it in bfbasic lol < 1278893921 0 :CakeProphet!unknown@unknown.invalid PRIVMSG #esoteric :everything useful should be done in befunge. like fungot. :) < 1278893921 0 :fungot!unknown@unknown.invalid PRIVMSG #esoteric :CakeProphet: omg i busted a gut laughing when this accident happened in 1988 and there was more than a few of us will focus on what you say is shame < 1278893941 0 :calamari!unknown@unknown.invalid PRIVMSG #esoteric :but my guess is that it wouldn't be terribly difficult to write the assembler in almost any esolang < 1278893956 0 :CakeProphet!unknown@unknown.invalid PRIVMSG #esoteric :maybe. I'm not a master of esolang programming. < 1278893979 0 :CakeProphet!unknown@unknown.invalid PRIVMSG #esoteric :programming anything in brainfuck looks like... black magic to me < 1278893980 0 :calamari!unknown@unknown.invalid PRIVMSG #esoteric :I've written an asm for bf.. it was lame tho < 1278893993 0 :calamari!unknown@unknown.invalid PRIVMSG #esoteric :bootstrapped it I mean < 1278894006 0 :calamari!unknown@unknown.invalid PRIVMSG #esoteric :let's not use that asm ;) < 1278894011 0 :CakeProphet!unknown@unknown.invalid PRIVMSG #esoteric :I suppose the assembly language will take a simple command format right? like most assembler. < 1278894016 0 :CakeProphet!unknown@unknown.invalid PRIVMSG #esoteric :instr arg1 arg2 arg3... < 1278894020 0 :calamari!unknown@unknown.invalid PRIVMSG #esoteric :yep < 1278894024 0 :CakeProphet!unknown@unknown.invalid PRIVMSG #esoteric :newline terminated? < 1278894029 0 :calamari!unknown@unknown.invalid PRIVMSG #esoteric :yep < 1278894035 0 :CakeProphet!unknown@unknown.invalid PRIVMSG #esoteric :commas or space? < 1278894049 0 :calamari!unknown@unknown.invalid PRIVMSG #esoteric :traditionally both < 1278894057 0 :CakeProphet!unknown@unknown.invalid PRIVMSG #esoteric :hmmm, okay. < 1278894073 0 :calamari!unknown@unknown.invalid PRIVMSG #esoteric :for example MOV AX,1234 < 1278894074 0 :CakeProphet!unknown@unknown.invalid PRIVMSG #esoteric :then I can actually go ahead and write an assembler, and then fill in the instructions later. < 1278894093 0 :CakeProphet!unknown@unknown.invalid PRIVMSG #esoteric :I'll just need to figure out the format of an argument. but the instruction part will be simple. < 1278894117 0 :calamari!unknown@unknown.invalid PRIVMSG #esoteric :I've recently written an assembler using flex/yacc < 1278894126 0 :CakeProphet!unknown@unknown.invalid PRIVMSG #esoteric :is it a pain or simple? < 1278894129 0 :calamari!unknown@unknown.invalid PRIVMSG #esoteric :but I know you want to use haskell so that's fine < 1278894171 0 :calamari!unknown@unknown.invalid PRIVMSG #esoteric :wasn't that big a deal but it took some time < 1278894182 0 :calamari!unknown@unknown.invalid PRIVMSG #esoteric :although that was mostly due to my divorce hehe < 1278894189 0 :CakeProphet!unknown@unknown.invalid PRIVMSG #esoteric :I've just finally got to a point where Haskell is easy to think in, so I prefer to use it when I can. I suppose which language we use for this "cross-assembler" doesn't matter. < 1278894224 0 :CakeProphet!unknown@unknown.invalid PRIVMSG #esoteric :anything that we intend to run on the OS itself needs to be an esolang though. for maximum esotericity. < 1278894246 0 :CakeProphet!unknown@unknown.invalid PRIVMSG #esoteric :hmmm. we VM design would be best for most esolangs anyways? < 1278894248 0 :CakeProphet!unknown@unknown.invalid PRIVMSG #esoteric :*what < 1278894290 0 :CakeProphet!unknown@unknown.invalid PRIVMSG #esoteric :for example, would befunge run better on a register or a stack machine? Or does it even matter? < 1278894296 0 :Zuu!unknown@unknown.invalid PRIVMSG #esoteric :I'll get dissapointed if it wont be good for my esolang :P < 1278894339 0 :calamari!unknown@unknown.invalid PRIVMSG #esoteric :CakeProphet: a stack can be easily implemented via pointers < 1278894358 0 :CakeProphet!unknown@unknown.invalid PRIVMSG #esoteric :yeah, I suppose it doesn't matter. I've always preferred register machines to stack anyway. Dunno why. < 1278894398 0 :CakeProphet!unknown@unknown.invalid PRIVMSG #esoteric :should our assembler be type safe? :P < 1278894409 0 :calamari!unknown@unknown.invalid PRIVMSG #esoteric :CakeProphet: there are no types to worry about < 1278894418 0 :CakeProphet!unknown@unknown.invalid PRIVMSG #esoteric :surely a port is different from a register. < 1278894446 0 :CakeProphet!unknown@unknown.invalid PRIVMSG #esoteric :or is it all implemented with pointers? < 1278894452 0 :CakeProphet!unknown@unknown.invalid PRIVMSG #esoteric :and words and such? < 1278894459 0 :calamari!unknown@unknown.invalid PRIVMSG #esoteric :well I'm not sure we have decided on ports yet < 1278894508 0 :CakeProphet!unknown@unknown.invalid PRIVMSG #esoteric :...it seems like this best abstraction for an IO device. I'm not sure how interrupts would work with it though. It seems you'd want to specify interrupt handlers, otherwise you'd end up polling for the interrupt, which is counter-intuitive. :P < 1278894525 0 :pikhq!~pikhq@75-106-123-171.cust.wildblue.net JOIN :#esoteric < 1278894536 0 :calamari!unknown@unknown.invalid PRIVMSG #esoteric :yeah that's kinda the problem < 1278894549 0 :calamari!unknown@unknown.invalid PRIVMSG #esoteric :for example in bf you do a , and magically get input (eventually) < 1278894561 0 :pikhq!unknown@unknown.invalid PRIVMSG #esoteric :Hooray, the power's back. < 1278894600 0 :CakeProphet!unknown@unknown.invalid PRIVMSG #esoteric :calamari: well it blocks. The port can just have a block on read operation. < 1278894611 0 :CakeProphet!unknown@unknown.invalid PRIVMSG #esoteric :er, block-until-read < 1278894646 0 :zzo38!unknown@unknown.invalid PRIVMSG #esoteric :I think OK for stack+register mode, where you have both, as well as special registers for top of stack value, second of stack value, and having multiple stacks (two stacks should be enough, but you can also have a way to select other register for stack) < 1278894662 0 :zzo38!unknown@unknown.invalid PRIVMSG #esoteric :Maybe you can even have a register to select which other register is treated as instruction pointer < 1278894685 0 :zzo38!unknown@unknown.invalid PRIVMSG #esoteric :Or have two separate modes one for reading the instruction and one for advancing the instruction < 1278894696 0 :CakeProphet!unknown@unknown.invalid PRIVMSG #esoteric :I'd say two stacks at the most < 1278894699 0 :CakeProphet!unknown@unknown.invalid PRIVMSG #esoteric :and special registers for each < 1278894737 0 :zzo38!unknown@unknown.invalid PRIVMSG #esoteric :Yes, two stacks is enough for machine-codes, I think. < 1278894745 0 :CakeProphet!unknown@unknown.invalid PRIVMSG #esoteric :I think supporting both stacks and registers is a good idea as many esolangs use stacks heavily. < 1278894769 0 :calamari!unknown@unknown.invalid PRIVMSG #esoteric :okay so we can have a 32-bit stack pointer register < 1278894791 0 :zzo38!unknown@unknown.invalid PRIVMSG #esoteric :CakeProphet: Yes. And some can use some registers as well < 1278894805 0 :CakeProphet!unknown@unknown.invalid PRIVMSG #esoteric :yeah... < 1278894806 0 :calamari!unknown@unknown.invalid PRIVMSG #esoteric :but I'm not sure why it would have to be cordoned off that way < 1278894824 0 :CakeProphet!unknown@unknown.invalid PRIVMSG #esoteric :and I like the port idea, unless there's a better way to handle hardware. And interrupts are still an open question. < 1278894826 0 :zzo38!unknown@unknown.invalid PRIVMSG #esoteric :Some esolangs have one "accumulator" register < 1278894837 0 :calamari!unknown@unknown.invalid PRIVMSG #esoteric :since any other register that you could dereference could also serve < 1278894849 0 :CakeProphet!unknown@unknown.invalid PRIVMSG #esoteric :calamari: makes it easy for esolangs to be ported to our machine code if it supports both rather than requiring stacks to be done with registers. < 1278894887 0 :CakeProphet!unknown@unknown.invalid PRIVMSG #esoteric :I guess? < 1278894925 0 :CakeProphet!unknown@unknown.invalid PRIVMSG #esoteric :I believe ports is how BEAM handles hardware. ports with port drivers. < 1278894942 0 :calamari!unknown@unknown.invalid PRIVMSG #esoteric :well for example 8088 has a PUSH instruction, which basically changes a stack pointer value and writes the value (or the reverse, can't recall atm) < 1278894970 0 :CakeProphet!unknown@unknown.invalid PRIVMSG #esoteric :so what you're saying is with the right instruction set there is no need to have an abstraction of a stack? < 1278894978 0 :calamari!unknown@unknown.invalid PRIVMSG #esoteric :correct < 1278894982 0 :CakeProphet!unknown@unknown.invalid PRIVMSG #esoteric :then that's fine. < 1278895018 0 :CakeProphet!unknown@unknown.invalid PRIVMSG #esoteric :so, to elaborate on the idea of ports. I'd say you basically have an instruction that creates a new port, and stores its address in a supplied register. < 1278895040 0 :CakeProphet!unknown@unknown.invalid PRIVMSG #esoteric :and then you have read/write/block-until-read operations that operate on the ports address/handle. < 1278895081 0 :CakeProphet!unknown@unknown.invalid PRIVMSG #esoteric :and the create-port instruction could have some means of specifying the "port driver" (to use the Erlang analogy), which is the native code that speaks to the hardware. < 1278895090 0 :CakeProphet!unknown@unknown.invalid PRIVMSG #esoteric :I don't know what that would be though. < 1278895094 0 :calamari!unknown@unknown.invalid PRIVMSG #esoteric :usually the ports are prenumbered < 1278895108 0 :CakeProphet!unknown@unknown.invalid PRIVMSG #esoteric :ah, so they can't be dynamically allocated? < 1278895112 0 :calamari!unknown@unknown.invalid PRIVMSG #esoteric :although I suppose we don't have to do it that way < 1278895112 0 :CakeProphet!unknown@unknown.invalid PRIVMSG #esoteric :in most systems? < 1278895151 0 :CakeProphet!unknown@unknown.invalid PRIVMSG #esoteric :well with a VM there's no real reason to have a fixed set of locations for everything < 1278895162 0 :CakeProphet!unknown@unknown.invalid PRIVMSG #esoteric :Parrot, for example, allows you to dynamically allocate new registers. < 1278895171 0 :calamari!unknown@unknown.invalid PRIVMSG #esoteric :real ports are actually a pain to work with < 1278895193 0 :calamari!unknown@unknown.invalid PRIVMSG #esoteric :all sorts of timing issues and crap.. since you're talking directly to hardware < 1278895207 0 :CakeProphet!unknown@unknown.invalid PRIVMSG #esoteric :but we can remove that via abstraction right? < 1278895231 0 :lucidalise!unknown@unknown.invalid PRIVMSG #esoteric :http://www.kernel.org/doc/man-pages/online/pages/man3/fopencookie.3.html < 1278895234 0 :lucidalise!unknown@unknown.invalid PRIVMSG #esoteric :huh. < 1278895238 0 :CakeProphet!unknown@unknown.invalid PRIVMSG #esoteric :at least for the VM. maybe not for the hardware code. < 1278895248 0 :lucidalise!unknown@unknown.invalid PRIVMSG #esoteric :CakeProphet: just memory map stuff < 1278895250 0 :lucidalise!unknown@unknown.invalid PRIVMSG #esoteric :a lot easier. < 1278895255 0 :lucidalise!unknown@unknown.invalid PRIVMSG #esoteric :use 64-bit addr space < 1278895274 0 :CakeProphet!unknown@unknown.invalid PRIVMSG #esoteric :memory mapping is new to me as well, actually. < 1278895280 0 :CakeProphet!unknown@unknown.invalid PRIVMSG #esoteric :ACTION is a low-level noob. < 1278895480 0 :calamari!unknown@unknown.invalid PRIVMSG #esoteric :almost got it I thik < 1278895495 0 :lucidalise!unknown@unknown.invalid PRIVMSG #esoteric :CakeProphet: simple < 1278895504 0 :lucidalise!unknown@unknown.invalid PRIVMSG #esoteric :some part of memory address space, rather rh < 1278895504 0 :CakeProphet!unknown@unknown.invalid PRIVMSG #esoteric :Parrot has a mechanism where you essentially assign newly created registers to variables. < 1278895509 0 :lucidalise!unknown@unknown.invalid PRIVMSG #esoteric :than actually going to ram < 1278895514 0 :lucidalise!unknown@unknown.invalid PRIVMSG #esoteric :gets its requests for writes and reads sent to some hardware < 1278895516 0 :lucidalise!unknown@unknown.invalid PRIVMSG #esoteric :which responds accordingy < 1278895519 0 :lucidalise!unknown@unknown.invalid PRIVMSG #esoteric :*accordingly < 1278895537 0 :lucidalise!unknown@unknown.invalid PRIVMSG #esoteric :e.g. you could have mem location 0 is 1 if there is an unread byte, 0 otherwise < 1278895548 0 :lucidalise!unknown@unknown.invalid PRIVMSG #esoteric :then mem location 1 is the byte in the buffer, reading it sets mem location 0 to 0 < 1278895556 0 :lucidalise!unknown@unknown.invalid PRIVMSG #esoteric :so you loop until *0 == 1, then you read *1 and handle it < 1278895570 0 :pikhq!unknown@unknown.invalid PRIVMSG #esoteric :AAAGH GAAAAH FUCKING CONGRESS < 1278895572 0 :calamari!unknown@unknown.invalid PRIVMSG #esoteric :lucidalise: yep < 1278895583 0 :lucidalise!unknown@unknown.invalid PRIVMSG #esoteric :pikhq: you have coreutils competition < 1278895584 0 :CakeProphet!unknown@unknown.invalid PRIVMSG #esoteric :lucidalise: sounds like implementing hardware support in brainfuck. :) < 1278895584 0 :lucidalise!unknown@unknown.invalid PRIVMSG #esoteric :but wat < 1278895610 0 :pikhq!unknown@unknown.invalid PRIVMSG #esoteric :lucidalise: Oh, back in 2005 Santorum was wanting to limit what the National Weather Service could report. < 1278895631 0 :pikhq!unknown@unknown.invalid PRIVMSG #esoteric :Because they were "unfairly competing" with the private sector weather reporting services. < 1278895661 0 :lucidalise!unknown@unknown.invalid PRIVMSG #esoteric :xD < 1278895670 0 :pikhq!unknown@unknown.invalid PRIVMSG #esoteric :Someone would want to ruin the single least controversial and unambiguously good service of the US government. < 1278895675 0 :lucidalise!unknown@unknown.invalid PRIVMSG #esoteric :pikhq: i am so glad how well the assimilation of santorum's name into ... something new ... is going < 1278895696 0 :lucidalise!unknown@unknown.invalid PRIVMSG #esoteric :So, it passed, I guess? < 1278895723 0 :lucidalise!unknown@unknown.invalid PRIVMSG #esoteric :So because EVERYTHING FUCKING SUCKS I gotta write my own kernel. < 1278895734 0 :pikhq!unknown@unknown.invalid PRIVMSG #esoteric :lucidalise: No. Still pissed. < 1278895743 0 :pikhq!unknown@unknown.invalid PRIVMSG #esoteric :Just the freaking idea pisses me off. < 1278895755 0 :calamari!unknown@unknown.invalid PRIVMSG #esoteric :lucidalise: please do! < 1278895779 0 :lucidalise!unknown@unknown.invalid PRIVMSG #esoteric :calamari: It's going to be Plan 9 turned up to 11: which is one of my more conservative designs. < 1278895792 0 :CakeProphet!unknown@unknown.invalid PRIVMSG #esoteric :calamari: so how's the design coming? < 1278895799 0 :lucidalise!unknown@unknown.invalid PRIVMSG #esoteric :aliseOS, of course, has basically infinite uniqueness and practicality: but it will, at least, be undeniably perfect. < 1278895803 0 :lucidalise!unknown@unknown.invalid PRIVMSG #esoteric :Some day. < 1278895812 0 :pikhq!unknown@unknown.invalid PRIVMSG #esoteric :lucidalise: You should attain more time. < 1278895822 0 :pikhq!unknown@unknown.invalid PRIVMSG #esoteric :Don't they have that down at the corner store? < 1278895854 0 :calamari!unknown@unknown.invalid PRIVMSG #esoteric :CakeProphet: well since I'll be implementing the real vm on x86, that means interrupts and interrupt handlers < 1278895873 0 :lucidalise!unknown@unknown.invalid PRIVMSG #esoteric :pikhq: I seem to be staggering up to the discharge. Wrong words: They are pushing me, staggering and disoriented, to the discharge; but of course not a complete discharge, they'd feel as if they'd done me a disservice, that would weigh on their minds forever ... no, they're making sure I'm "well looked after": < 1278895883 0 :CakeProphet!unknown@unknown.invalid PRIVMSG #esoteric :calamari: ah. nothing fancy and abstract? Ah well. < 1278895887 0 :calamari!unknown@unknown.invalid PRIVMSG #esoteric :CakeProphet: but we can certainly make it easier than that for the internals < 1278895910 0 :pikhq!unknown@unknown.invalid PRIVMSG #esoteric :lucidalise: So, you will be leaving the unit and they will be observing you on a semiregular basis? < 1278895918 0 :CakeProphet!unknown@unknown.invalid PRIVMSG #esoteric :one of the things a VM should do is make compiling to it fairly simple. Especially for esolangs. :) < 1278895929 0 :calamari!unknown@unknown.invalid PRIVMSG #esoteric :CakeProphet: exactly < 1278895936 0 :pikhq!unknown@unknown.invalid PRIVMSG #esoteric :Improvement at least. < 1278895937 0 :lucidalise!unknown@unknown.invalid PRIVMSG #esoteric :So the plan, it seems, is this: I am discharged, to the local high school, to be edumacated in the Queen's Standard Curriculum for Mindless Drones by the part of it for people who have "missed a lot of school", which makes me expect stupid people, but who knows. (Apparently not.) < 1278895954 0 :lucidalise!unknown@unknown.invalid PRIVMSG #esoteric :I have, at least, seen there; it seems not so abhorrent. Pointless, certainly, but not abhorrent. < 1278895957 0 :lucidalise!unknown@unknown.invalid PRIVMSG #esoteric :pikhq: Heh, no < 1278895959 0 :lucidalise!unknown@unknown.invalid PRIVMSG #esoteric :*no. < 1278895976 0 :calamari!unknown@unknown.invalid PRIVMSG #esoteric :argh this is where my os class being so long ago is killing me < 1278895989 0 :lucidalise!unknown@unknown.invalid PRIVMSG #esoteric :They won't let me get away from day-in, day-out standardised education ... not for anything other than avoiding nuclear holocaust. < 1278896003 0 :calamari!unknown@unknown.invalid PRIVMSG #esoteric :I really don't want to have to do busy waiting < 1278896005 0 :pikhq!unknown@unknown.invalid PRIVMSG #esoteric :lucidalise: Improvement, though. < 1278896023 0 :pikhq!unknown@unknown.invalid PRIVMSG #esoteric :At least you're out of the unit and in education for mundane folk. < 1278896030 0 :lucidalise!unknown@unknown.invalid PRIVMSG #esoteric :But apparently some concessions can be made, such as starting the day later and whatnot; so perhaps I can cope -- limp -- until I turn 16 and the behemoth that is the education authority slinks away to prey on some other innocent kid, hopefully one more naive so they won't know what hits them. < 1278896048 0 :pikhq!unknown@unknown.invalid PRIVMSG #esoteric :OHRAIT. European education. < 1278896050 0 :lucidalise!unknown@unknown.invalid PRIVMSG #esoteric :But I will get the afternoons and nights at home, so that is a thing; a god thing. < 1278896052 0 :lucidalise!unknown@unknown.invalid PRIVMSG #esoteric :*good < 1278896052 0 :pikhq!unknown@unknown.invalid PRIVMSG #esoteric :Public education ends at 16. < 1278896062 0 :lucidalise!unknown@unknown.invalid PRIVMSG #esoteric :pikhq: Not any more -- it's 18 for all the young'uns now. < 1278896086 0 :lucidalise!unknown@unknown.invalid PRIVMSG #esoteric :They have more and more mindless and increasingly even more hopeless edumacation awaiting them, poor fuckers! < 1278896090 0 :pikhq!unknown@unknown.invalid PRIVMSG #esoteric :lucidalise: Oh, so now it's akin to the US system in that it's available until you're 18 but mandatory until you're 16? < 1278896105 0 :lucidalise!unknown@unknown.invalid PRIVMSG #esoteric :pikhq: It's available until ... whenever you end up leaving university :P < 1278896106 0 :calamari!unknown@unknown.invalid PRIVMSG #esoteric :CakeProphet: the x86 reserves a part of low memory for pointers to interrupt handlers.. perhaps we could simply clone that idea? < 1278896110 0 :lucidalise!unknown@unknown.invalid PRIVMSG #esoteric :Or, well, college, if you can't get into uni. < 1278896118 0 :lucidalise!unknown@unknown.invalid PRIVMSG #esoteric :pikhq: But no, now it's mandatory until 18. < 1278896120 0 :pikhq!unknown@unknown.invalid PRIVMSG #esoteric :GAAAH < 1278896124 0 :pikhq!unknown@unknown.invalid PRIVMSG #esoteric :Fucking Europe. < 1278896124 0 :calamari!unknown@unknown.invalid PRIVMSG #esoteric :CakeProphet: would certainly make the implementation easy :) < 1278896127 0 :lucidalise!unknown@unknown.invalid PRIVMSG #esoteric :But not for me! < 1278896128 0 :lucidalise!unknown@unknown.invalid PRIVMSG #esoteric :H ha ha! < 1278896130 0 :lucidalise!unknown@unknown.invalid PRIVMSG #esoteric :pikhq: This is a UK thing < 1278896139 0 :lucidalise!unknown@unknown.invalid PRIVMSG #esoteric :I get out at 16. Anyway. Here is our system. < 1278896144 0 :pikhq!unknown@unknown.invalid PRIVMSG #esoteric :*You guys have public post-secondary education.* < 1278896160 0 :lucidalise!unknown@unknown.invalid PRIVMSG #esoteric :So do you guys. < 1278896162 0 :lucidalise!unknown@unknown.invalid PRIVMSG #esoteric :First school - after nursery. You know, regular shit. < 1278896174 0 :lucidalise!unknown@unknown.invalid PRIVMSG #esoteric :Middle school - I forget the exact age you start. 8 to 10 or something. < 1278896176 0 :lucidalise!unknown@unknown.invalid PRIVMSG #esoteric :Until like 13. < 1278896192 0 :pikhq!unknown@unknown.invalid PRIVMSG #esoteric :No, we have private post-secondary education and government-subsidised effectively private post-secondary education. < 1278896202 0 :lucidalise!unknown@unknown.invalid PRIVMSG #esoteric :High school - 14 to 16. Sixth form college - 16 to 18. Often high schools have a sixth form integrated, you know, if you can't make it into a good one. < 1278896214 0 :lucidalise!unknown@unknown.invalid PRIVMSG #esoteric :University - 18 to bearded and banana-eating. < 1278896228 0 :CakeProphet!unknown@unknown.invalid PRIVMSG #esoteric :calamari: would it increase the difficulty of compiler writing? < 1278896242 0 :lucidalise!unknown@unknown.invalid PRIVMSG #esoteric :pikhq: Hey, people here get bankrupt over student loans. < 1278896244 0 :lucidalise!unknown@unknown.invalid PRIVMSG #esoteric :It ain't easy. < 1278896262 0 :pikhq!unknown@unknown.invalid PRIVMSG #esoteric :lucidalise: Here it's impossible to get bankrupt over student loans. < 1278896268 0 :calamari!unknown@unknown.invalid PRIVMSG #esoteric :CakeProphet: that's what I'm trying to figure out.. how do you map BF "," without busy waiting? < 1278896271 0 :CakeProphet!unknown@unknown.invalid PRIVMSG #esoteric :I think our inter-mediate assembly language should have some kind of simple way to specify a hardware IO device. < 1278896273 0 :pikhq!unknown@unknown.invalid PRIVMSG #esoteric :... BECAUSE THATS EXEMPT FROM BANKRUPTCY < 1278896277 0 :lucidalise!unknown@unknown.invalid PRIVMSG #esoteric :pikhq: Well, not bankrupt perhaps. < 1278896280 0 :lucidalise!unknown@unknown.invalid PRIVMSG #esoteric :But in deep shit. < 1278896289 0 :lucidalise!unknown@unknown.invalid PRIVMSG #esoteric :It ain't free here. < 1278896293 0 :pikhq!unknown@unknown.invalid PRIVMSG #esoteric :lucidalise: Cost per year on average? < 1278896301 0 :zzo38!unknown@unknown.invalid PRIVMSG #esoteric :In order to write a MBR code I had to know exactly the format in which the interrupt vectors are stored, so now I know. < 1278896305 0 :lucidalise!unknown@unknown.invalid PRIVMSG #esoteric :pikhq: Oxford is like £11,000 or something for tuition. < 1278896312 0 :lucidalise!unknown@unknown.invalid PRIVMSG #esoteric :Per term or something. < 1278896315 0 :lucidalise!unknown@unknown.invalid PRIVMSG #esoteric :It ain't free. < 1278896331 0 :pikhq!unknown@unknown.invalid PRIVMSG #esoteric :Youch. That is pretty pricy. < 1278896336 0 :lucidalise!unknown@unknown.invalid PRIVMSG #esoteric :Perhaps relatively cheap compared to the US: but my friend at Oxford is going to have some fun debt to spent the rest of his life paying off. < 1278896352 0 :lucidalise!unknown@unknown.invalid PRIVMSG #esoteric :pikhq: Well, Oxford /is/ one of the top, say, four educational institutions in the world. < 1278896357 0 :pikhq!unknown@unknown.invalid PRIVMSG #esoteric :lucidalise: No, that's the upper end of tuition in the US. < 1278896363 0 :calamari!unknown@unknown.invalid PRIVMSG #esoteric :CakeProphet: I just remembered that a lot of this work has already been done for us < 1278896371 0 :calamari!unknown@unknown.invalid PRIVMSG #esoteric :CakeProphet: let me see if I can find it < 1278896374 0 :pikhq!unknown@unknown.invalid PRIVMSG #esoteric :lucidalise: What does that include, though? < 1278896374 0 :lucidalise!unknown@unknown.invalid PRIVMSG #esoteric :pikhq: I may be wrong. Google it. < 1278896399 0 :pikhq!unknown@unknown.invalid PRIVMSG #esoteric :ACTION looketh < 1278896427 0 :lucidalise!unknown@unknown.invalid PRIVMSG #esoteric :pikhq: Little. Accommodation. < 1278896460 0 :pikhq!unknown@unknown.invalid PRIVMSG #esoteric :ACTION cannot find a listed cost < 1278896466 0 :lucidalise!unknown@unknown.invalid PRIVMSG #esoteric :Try Wikipedia? < 1278896468 0 :pikhq!unknown@unknown.invalid PRIVMSG #esoteric :Ah, there. < 1278896501 0 :lucidalise!unknown@unknown.invalid PRIVMSG #esoteric :How much? < 1278896522 0 :pikhq!unknown@unknown.invalid PRIVMSG #esoteric :ACTION does a spit take < 1278896550 0 :pikhq!unknown@unknown.invalid PRIVMSG #esoteric :For in-EU, £3,290. < 1278896581 0 :pikhq!unknown@unknown.invalid PRIVMSG #esoteric :That's per-year. < 1278896582 0 :pikhq!unknown@unknown.invalid PRIVMSG #esoteric :($4,953 USD) < 1278896719 0 :pikhq!unknown@unknown.invalid PRIVMSG #esoteric :For comparison, a year at a community college (Pikes Peak Community College's tuition is being used for reference) for an area resident is $3,798 a year. < 1278896772 0 :lucidalise!unknown@unknown.invalid PRIVMSG #esoteric :I thought it was ... more. < 1278896777 0 :lucidalise!unknown@unknown.invalid PRIVMSG #esoteric :Oxford is ... cheap ... < 1278896801 0 :pikhq!unknown@unknown.invalid PRIVMSG #esoteric :(a community college, BTW, is post-secondary education, usually administered by a county or city government, that offers "adult learning" and associates' degrees.) < 1278896809 0 :lucidalise!unknown@unknown.invalid PRIVMSG #esoteric :pikhq: Now add exams, accommodation, books... < 1278896826 0 :pikhq!unknown@unknown.invalid PRIVMSG #esoteric :lucidalise: And you're talking pricy vs. pricy. < 1278896840 0 :calamari!unknown@unknown.invalid PRIVMSG #esoteric :CakeProphet: http://jonripley.com/easel/ < 1278896846 0 :pikhq!unknown@unknown.invalid PRIVMSG #esoteric :Until you realise that you can plausibly pay $40,000 on tuition in the US. < 1278896847 0 :lucidalise!unknown@unknown.invalid PRIVMSG #esoteric :True ... and you do get Oxford, vs, say, some decent university. < 1278896857 0 :pikhq!unknown@unknown.invalid PRIVMSG #esoteric :(MIT, Harvard and the like.) < 1278896877 0 :pikhq!unknown@unknown.invalid PRIVMSG #esoteric :(I'd say MIT or Harvard are about the same caliber as Oxford. Agree?) < 1278896879 0 :CakeProphet!unknown@unknown.invalid PRIVMSG #esoteric :calamari: well then let's use that. :) < 1278896879 0 :Gregor!~Gregor@75-151-73-57-Spokane.hfc.comcastbusiness.net JOIN :#esoteric < 1278896903 0 :lucidalise!unknown@unknown.invalid PRIVMSG #esoteric :pikhq: MIT, no. < 1278896923 0 :lucidalise!unknown@unknown.invalid PRIVMSG #esoteric :MIT have reduced their CS curriculum to Robots-in-Python. So, engineering is their only remaining discipline in which they excel. < 1278896930 0 :lucidalise!unknown@unknown.invalid PRIVMSG #esoteric :Harvard, okay, agreed, they're on the same level as Oxford. < 1278896939 0 :Gregor!unknown@unknown.invalid PRIVMSG #esoteric :What're we talking about? < 1278896956 0 :lucidalise!unknown@unknown.invalid PRIVMSG #esoteric :Gregor: Universities; specifically in comparison to Oxford w/ its $4,953/year tuition. < 1278896960 0 :pikhq!unknown@unknown.invalid PRIVMSG #esoteric :Gregor: Alise claimed that university in the UK was freaking expensive. < 1278896967 0 :Gregor!unknown@unknown.invalid PRIVMSG #esoteric :Ah < 1278896970 0 :lucidalise!unknown@unknown.invalid PRIVMSG #esoteric :pikhq: Still, would you rather say "I went to Harvard" or "I went to fucking OXFORD". < 1278896979 0 :Gregor!unknown@unknown.invalid PRIVMSG #esoteric :Not being paid to go to school must be weird :P < 1278896989 0 :pikhq!unknown@unknown.invalid PRIVMSG #esoteric :Gregor: Darned grad student. < 1278897011 0 :Gregor!unknown@unknown.invalid PRIVMSG #esoteric :I was aaaaalmost full-ride scholarshipped (THIS IS A WORD) all the way through undergrad. < 1278897020 0 :pikhq!unknown@unknown.invalid PRIVMSG #esoteric :YOU PUNK < 1278897029 0 :Gregor!unknown@unknown.invalid PRIVMSG #esoteric :ACTION <3 Gregor < 1278897052 0 :lucidalise!unknown@unknown.invalid PRIVMSG #esoteric :pikhq: tbh, though, mit has a better system than the uk < 1278897055 0 :pikhq!unknown@unknown.invalid PRIVMSG #esoteric :lucidalise: Oh yeah. Almost all the help there exists for fees in the US consists of private entities handing money at people they feel are qualified. < 1278897059 0 :lucidalise!unknown@unknown.invalid PRIVMSG #esoteric :MIT: "Okay, here is money to pay your tuition." < 1278897077 0 :lucidalise!unknown@unknown.invalid PRIVMSG #esoteric :UK: "Here is a loan to pay everything. You don't need to pay it back until you start earning money. Ha ha ha ha ha ha ha ha ha ha ha ha HA ha ha ha ..." < 1278897090 0 :Gregor!unknown@unknown.invalid PRIVMSG #esoteric :Actually, almost all of my money right now is from the gov't. < 1278897100 0 :Gregor!unknown@unknown.invalid PRIVMSG #esoteric :Either the university itself (when TA'ing) or the NSF. < 1278897116 0 :pikhq!unknown@unknown.invalid PRIVMSG #esoteric :lucidalise: That's the standard US system except for one thing: *there isn't generally enough money to cover the costs*. < 1278897122 0 :pikhq!unknown@unknown.invalid PRIVMSG #esoteric :Gregor: Yeah, but you're a grad student. < 1278897141 0 :lucidalise!unknown@unknown.invalid PRIVMSG #esoteric :pikhq: Okay, new idea. < 1278897142 0 :Gregor!unknown@unknown.invalid PRIVMSG #esoteric :I would make an awesome thumbs-up smiley, but I don't know how. So imagine one here: < 1278897149 0 :lucidalise!unknown@unknown.invalid PRIVMSG #esoteric :We set up the #esoteric Institution for Higher Learning. < 1278897157 0 :pikhq!unknown@unknown.invalid PRIVMSG #esoteric :lucidalise: Oh, also. The loans increase in payout, and the tuition increases in response. < 1278897159 0 :Gregor!unknown@unknown.invalid PRIVMSG #esoteric :EIHL < 1278897163 0 :lucidalise!unknown@unknown.invalid PRIVMSG #esoteric :Based in, fucked if I know, Helsinki or Ontario or somewhere. < 1278897164 0 :Gregor!unknown@unknown.invalid PRIVMSG #esoteric :Or is it #IHL? < 1278897180 0 :pikhq!unknown@unknown.invalid PRIVMSG #esoteric :Making the damned loans into a way for the government to bleed money at universities. < 1278897199 0 :pikhq!unknown@unknown.invalid PRIVMSG #esoteric :Oh, wait. Loans. < 1278897199 0 :lucidalise!unknown@unknown.invalid PRIVMSG #esoteric :Gregor: Wat < 1278897201 0 :lucidalise!unknown@unknown.invalid PRIVMSG #esoteric :*Wat. < 1278897214 0 :pikhq!unknown@unknown.invalid PRIVMSG #esoteric :Sorry, for the *students* to bleed money at universities. < 1278897218 0 :lucidalise!unknown@unknown.invalid PRIVMSG #esoteric :Gregor: Oh I see. < 1278897246 0 :lucidalise!unknown@unknown.invalid PRIVMSG #esoteric :Gregor: Esoni for short, perhaps. (Esoteric-uni) < 1278897261 0 :lucidalise!unknown@unknown.invalid PRIVMSG #esoteric :Motto: Someone translate "[evil cackle]" into Latin. < 1278897334 0 :pikhq!unknown@unknown.invalid PRIVMSG #esoteric :悪笑 suffice? < 1278897359 0 :pikhq!unknown@unknown.invalid PRIVMSG #esoteric :(valid CJK.) < 1278897365 0 :lucidalise!unknown@unknown.invalid PRIVMSG #esoteric :Latin! < 1278897380 0 :pikhq!unknown@unknown.invalid PRIVMSG #esoteric :AKUS WARAUS < 1278897388 0 :pikhq!unknown@unknown.invalid PRIVMSG #esoteric :There, Latinized. < 1278897388 0 :pikhq!unknown@unknown.invalid PRIVMSG #esoteric ::P < 1278897407 0 :lucidalise!unknown@unknown.invalid PRIVMSG #esoteric :Anyway, we could have a Computer Science class taught by ais523, a Systems Administration class taught by pikhq, a Programming Language Design taught by Gregor and I (I am not egotistical, dammit), and... < 1278897412 0 :calamari!unknown@unknown.invalid PRIVMSG #esoteric :CakeProphet: you know.. it looks like he spent a lot of time on this, but it's really a mess. maybe we should assume a language with more powerful i/o than bf < 1278897417 0 :lucidalise!unknown@unknown.invalid PRIVMSG #esoteric :And free Ph.D.s for everyone. < 1278897436 0 :pikhq!unknown@unknown.invalid PRIVMSG #esoteric :lucidalise: Beautiful thing is, anyone can offer a degree. < 1278897448 0 :lucidalise!unknown@unknown.invalid PRIVMSG #esoteric :calamari: PESOIX, the only thing worse than PSOX. < 1278897458 0 :lucidalise!unknown@unknown.invalid PRIVMSG #esoteric :It was so bad that PSOX actually improved the state of the art. < 1278897460 0 :pikhq!unknown@unknown.invalid PRIVMSG #esoteric :Without accredation it's just a piece of paper, but still. < 1278897482 0 :lucidalise!unknown@unknown.invalid PRIVMSG #esoteric :pikhq: Accreditation is fucking easy: see, Maharashi University of Management. < 1278897484 0 :calamari!unknown@unknown.invalid PRIVMSG #esoteric :lucidalise: do you have a url for PSOX? < 1278897486 0 :lucidalise!unknown@unknown.invalid PRIVMSG #esoteric :It's a university ... and a cult! < 1278897488 0 :pikhq!unknown@unknown.invalid PRIVMSG #esoteric :ACTION gives everyone a Ph.D. in Doctorism. < 1278897490 0 :lucidalise!unknown@unknown.invalid PRIVMSG #esoteric :calamari: No, but you don't want one. < 1278897491 0 :CakeProphet!unknown@unknown.invalid PRIVMSG #esoteric :calamari: this seems like a good idea. < 1278897502 0 :lucidalise!unknown@unknown.invalid PRIVMSG #esoteric :pikhq: Alas I even know someone intelligent who goes there /sigh < 1278897506 0 :calamari!unknown@unknown.invalid PRIVMSG #esoteric :CakeProphet: what does? < 1278897508 0 :lucidalise!unknown@unknown.invalid PRIVMSG #esoteric :Well, not know, but nomic-know. Agora-know. < 1278897515 0 :pikhq!unknown@unknown.invalid PRIVMSG #esoteric :lucidalise: Accredited by whom? < 1278897526 0 :lucidalise!unknown@unknown.invalid PRIVMSG #esoteric :pikhq: Whoever does that in the US. < 1278897535 0 :lucidalise!unknown@unknown.invalid PRIVMSG #esoteric :Consciousness-based education? Accredit'd < 1278897536 0 :pikhq!unknown@unknown.invalid PRIVMSG #esoteric :Several such entities. < 1278897539 0 :pikhq!unknown@unknown.invalid PRIVMSG #esoteric :That's private. < 1278897549 0 :pikhq!unknown@unknown.invalid PRIVMSG #esoteric :We love our capitalism. < 1278897558 0 :pikhq!unknown@unknown.invalid PRIVMSG #esoteric :Oh, wait. < 1278897567 0 :CakeProphet!unknown@unknown.invalid PRIVMSG #esoteric :calamari: assuming a language with more powerful i/o than bf. < 1278897569 0 :lucidalise!unknown@unknown.invalid PRIVMSG #esoteric :Run by the Transcendental Meditation cult famous for claiming its adherents can even, once advanced enough, fly. < 1278897571 0 :pikhq!unknown@unknown.invalid PRIVMSG #esoteric :It's accredited by one of the government ones. < 1278897574 0 :lucidalise!unknown@unknown.invalid PRIVMSG #esoteric :And being supported by David Lynch. < 1278897579 0 :pikhq!unknown@unknown.invalid PRIVMSG #esoteric :Fucking fuckfuck. < 1278897590 0 :lucidalise!unknown@unknown.invalid PRIVMSG #esoteric :Oh, and the Beatles spent time with the leader at some point. < 1278897591 0 :pikhq!unknown@unknown.invalid PRIVMSG #esoteric :How's Canada? < 1278897597 0 :lucidalise!unknown@unknown.invalid PRIVMSG #esoteric :While they were busy being stupid. < 1278897611 0 :pikhq!unknown@unknown.invalid PRIVMSG #esoteric :lucidalise: Y'mean, not smoking pot? < 1278897612 0 :lucidalise!unknown@unknown.invalid PRIVMSG #esoteric :Sexy Sadie? Yeah, that's about the leader of the cult. < 1278897620 0 :pikhq!unknown@unknown.invalid PRIVMSG #esoteric :(their music got better with pot) < 1278897634 0 :lucidalise!unknown@unknown.invalid PRIVMSG #esoteric :Lennon originally wanted to title the song "Maharishi",[1] but the Beatles changed the title to "Sexy Sadie" at George Harrison's request. Lennon was disillusioned after Maharishi Mahesh Yogi had allegedly made a sexual advance at one of the female members attending the course Maharishi was teaching at his ashram. < 1278897638 0 :calamari!unknown@unknown.invalid PRIVMSG #esoteric :http://esolangs.org/wiki/PSOX < 1278897664 0 :cheater99!unknown@unknown.invalid QUIT :Ping timeout: 248 seconds < 1278897752 0 :lucidalise!unknown@unknown.invalid PRIVMSG #esoteric :Oh yeah, and Transcendental Meditation of course is a form of "meditation" that involves repeating a meaningless, unique-to-you (not actually unique to you) mantra given to you by your amazing guru. < 1278897763 0 :lucidalise!unknown@unknown.invalid PRIVMSG #esoteric :This achieves perfect conscious existence^W^W^Wfuck all. < 1278897800 0 :calamari!unknown@unknown.invalid PRIVMSG #esoteric :CakeProphet: which esolangs does that leave us? < 1278897828 0 :CakeProphet!unknown@unknown.invalid PRIVMSG #esoteric :calamari: well, I mean. We should be able to support all of them, ideally. But befunge I think is a good choice because it has good IO support < 1278897856 0 :calamari!unknown@unknown.invalid PRIVMSG #esoteric :which variant? < 1278897905 0 :calamari!unknown@unknown.invalid PRIVMSG #esoteric :I'm only seeing int and char i/o < 1278897937 0 :Wamanuz3!unknown@unknown.invalid QUIT :Ping timeout: 264 seconds < 1278898006 0 :BeholdMyGlory!unknown@unknown.invalid QUIT :Remote host closed the connection < 1278898007 0 :FireFly!unknown@unknown.invalid QUIT :Quit: swatted to death < 1278898059 0 :pikhq!unknown@unknown.invalid PRIVMSG #esoteric :lucidalise: To be perfectly fair, the *were* experimenting with, uh, just about everything they could. < 1278898067 0 :pikhq!unknown@unknown.invalid PRIVMSG #esoteric :It was the 60s. < 1278898092 0 :Quadrescence!~Quad@unaffiliated/quadrescence JOIN :#esoteric < 1278898094 0 :pikhq!unknown@unknown.invalid PRIVMSG #esoteric :Also: nobody gives a shit about their personal beliefs, cause the music was pretty good. :P < 1278898131 0 :pikhq!unknown@unknown.invalid PRIVMSG #esoteric :Context jump: Maharishi University of Management seems like a freaking retarded school. < 1278898236 0 :pikhq!unknown@unknown.invalid PRIVMSG #esoteric :And yet, they offer CS degrees. < 1278898244 0 :pikhq!unknown@unknown.invalid PRIVMSG #esoteric :ACTION wonders how good that program is. < 1278898254 0 :pikhq!unknown@unknown.invalid PRIVMSG #esoteric :ACTION wonders if people who can fly can comment well. < 1278898450 0 :zzo38!unknown@unknown.invalid QUIT :Remote host closed the connection < 1278898509 0 :lucidalise!unknown@unknown.invalid PRIVMSG #esoteric :pikhq: Pavitra is the Agora player who goes there. Studies math, says google. >_> < 1278898524 0 :pikhq!unknown@unknown.invalid PRIVMSG #esoteric :lucidalise: ... < 1278898526 0 :lucidalise!unknown@unknown.invalid PRIVMSG #esoteric :So maybe I Internet-stalked the guy's relation to the uni after the initial shock! So what >_> < 1278898530 0 :lucidalise!unknown@unknown.invalid PRIVMSG #esoteric :<_< < 1278898548 0 :lucidalise!unknown@unknown.invalid PRIVMSG #esoteric :Hey, he's one -- well, was one -- of the smartest Agora players; I was wondering how on earth one such as him could end up in such a place. < 1278898733 0 :lucidalise!unknown@unknown.invalid PRIVMSG #esoteric :So, anyway, good night. < 1278898744 0 :lucidalise!unknown@unknown.invalid QUIT :Quit: Page closed < 1278898745 0 :pikhq!unknown@unknown.invalid PRIVMSG #esoteric :Gxis < 1278898778 0 :Gregor!unknown@unknown.invalid PRIVMSG #esoteric :So yeah ... EIHL ... maybe not :P < 1278898819 0 :CakeProphet!unknown@unknown.invalid PRIVMSG #esoteric :calamari: befunge98 I think? < 1278898822 0 :CakeProphet!unknown@unknown.invalid PRIVMSG #esoteric :whatever fungot is coded in < 1278898823 0 :fungot!unknown@unknown.invalid PRIVMSG #esoteric :CakeProphet: cruise mode holds it no one is my favorite. :d haha. if it is < 1278898832 0 :CakeProphet!unknown@unknown.invalid PRIVMSG #esoteric :allows network/file io I'm fairly sure. < 1278898838 0 :pikhq!unknown@unknown.invalid PRIVMSG #esoteric :Gregor: Clearly we should just genetically engineer humanity to make everyone inherently desire learning. < 1278899852 0 :poiuy_qwert!~poiuy_qwe@bas5-toronto47-2925108742.dsl.bell.ca JOIN :#esoteric < 1278901288 0 :CakeProphet!unknown@unknown.invalid PRIVMSG #esoteric :calamari: http://hpaste.org/fastcgi/hpaste.fcgi/view?id=27329#a27329 < 1278901294 0 :CakeProphet!unknown@unknown.invalid PRIVMSG #esoteric :this a stub for the assembler < 1278901336 0 :CakeProphet!unknown@unknown.invalid PRIVMSG #esoteric :each instruction parser will go at the end of the file in the case statement. addOutput "string" accumulates a string to the machine code output < 1278901504 0 :calamari!unknown@unknown.invalid PRIVMSG #esoteric :where are you handling labels? < 1278901566 0 :CakeProphet!unknown@unknown.invalid PRIVMSG #esoteric :nowhere at the moment. I don't know the format of our assembly, so I don't have them yet. :) < 1278901579 0 :CakeProphet!unknown@unknown.invalid PRIVMSG #esoteric :but this is the basic instruction translator < 1278901608 0 :CakeProphet!unknown@unknown.invalid PRIVMSG #esoteric :I know next to nothing about assembly languages. < 1278901623 0 :CakeProphet!unknown@unknown.invalid PRIVMSG #esoteric :how are labels going to be used? < 1278901642 0 :CakeProphet!unknown@unknown.invalid PRIVMSG #esoteric :because I have an idea of how to implement them < 1278901746 0 :calamari!unknown@unknown.invalid PRIVMSG #esoteric :they are converted to code offsets < 1278901771 0 :calamari!unknown@unknown.invalid PRIVMSG #esoteric :actually, think about labels in C < 1278901824 0 :aschueler!unknown@unknown.invalid QUIT :Ping timeout: 248 seconds < 1278901829 0 :calamari!unknown@unknown.invalid PRIVMSG #esoteric :with goto... and conditional gotos < 1278901830 0 :CakeProphet!unknown@unknown.invalid PRIVMSG #esoteric :so you make a label with a label declaration < 1278901844 0 :CakeProphet!unknown@unknown.invalid PRIVMSG #esoteric :and then goto instructions. How do these get translated to machine code? < 1278901869 0 :CakeProphet!unknown@unknown.invalid PRIVMSG #esoteric :so basically < 1278901877 0 :CakeProphet!unknown@unknown.invalid PRIVMSG #esoteric :I need to construct a table from label strings to.... what? < 1278901881 0 :coppro!~coppro@unaffiliated/coppro JOIN :#esoteric < 1278901894 0 :calamari!unknown@unknown.invalid PRIVMSG #esoteric :depends on the instruction.. can be absolute addresses or relative.. abosulte is not good tho.. relative is better for relocation < 1278901933 0 :calamari!unknown@unknown.invalid PRIVMSG #esoteric :okay sorry, let me explain better < 1278901952 0 :CakeProphet!unknown@unknown.invalid PRIVMSG #esoteric :...yes < 1278901956 0 :coppro!unknown@unknown.invalid PRIVMSG #esoteric :we need ircfs < 1278901969 0 :coppro!unknown@unknown.invalid PRIVMSG #esoteric :ircfs works by scanning a network's nicks for bots of known software, and then seeing if it's possible to store data on them e.g. factoids on supybot < 1278901975 0 :coppro!unknown@unknown.invalid PRIVMSG #esoteric :then, it stores data on those bots < 1278902018 0 :calamari!unknown@unknown.invalid PRIVMSG #esoteric :so lets say you write the label MYLABEL: and that happens to be at offset 0x1234 ... then later you are at offset 0x2345 and issue JMP MYLABEL... so absolute would store that like opcode 34 12 < 1278902044 0 :coppro!unknown@unknown.invalid PRIVMSG #esoteric :wait what? < 1278902063 0 :calamari!unknown@unknown.invalid PRIVMSG #esoteric :relative would store it as 1234-2345 (plus or minus a few) < 1278902093 0 :calamari!unknown@unknown.invalid PRIVMSG #esoteric :coppro: sounds like a cool idea < 1278902114 0 :coppro!unknown@unknown.invalid PRIVMSG #esoteric :calamari: and how does that give 34 12? < 1278902128 0 :calamari!unknown@unknown.invalid PRIVMSG #esoteric :coppro: 1234 hex is 34 12 < 1278902133 0 :coppro!unknown@unknown.invalid PRIVMSG #esoteric :oh ok < 1278902145 0 :coppro!unknown@unknown.invalid PRIVMSG #esoteric :yeah, relative jumps are awesome < 1278902149 0 :coppro!unknown@unknown.invalid PRIVMSG #esoteric :(see MMIX) < 1278902152 0 :Gregor!unknown@unknown.invalid PRIVMSG #esoteric :calamari is some kind of little-endian bigot! < 1278902159 0 :calamari!unknown@unknown.invalid PRIVMSG #esoteric :I think we should avoid absolute addressing tho < 1278902178 0 :calamari!unknown@unknown.invalid PRIVMSG #esoteric :Gregor: :P < 1278902200 0 :Gregor!unknown@unknown.invalid PRIVMSG #esoteric :Actually I figured out why (and that) little-endian is better, so I no longer care :P < 1278902248 0 :calamari!unknown@unknown.invalid PRIVMSG #esoteric :the mainframes I work on are big endian < 1278902266 0 :Gregor!unknown@unknown.invalid PRIVMSG #esoteric :MOAR LIEK LAME-ENDIAN < 1278902295 0 :calamari!unknown@unknown.invalid PRIVMSG #esoteric :System Z 0wnz y3w < 1278902322 0 :Gregor!unknown@unknown.invalid PRIVMSG #esoteric :zLinux (or is it Z/Linux? LinuxZ? Something) OWNZ < 1278902325 0 :calamari!unknown@unknown.invalid PRIVMSG #esoteric :actually got to see a z10 the other day.. the hot air blowing out and noise is intense < 1278902341 0 :CakeProphet!unknown@unknown.invalid QUIT :Ping timeout: 245 seconds < 1278902385 0 :CakeProphet!~adam@h37.42.18.98.dynamic.ip.windstream.net JOIN :#esoteric < 1278902434 0 :CakeProphet!unknown@unknown.invalid PRIVMSG #esoteric :...disconnected < 1278902437 0 :CakeProphet!unknown@unknown.invalid PRIVMSG #esoteric :fill me in. < 1278902439 0 :Sgeo!unknown@unknown.invalid PRIVMSG #esoteric :ACTION wonders if he should design a PSOX2 < 1278902468 0 :CakeProphet!unknown@unknown.invalid PRIVMSG #esoteric :I still don't fully understand. Do I just need to save information about where I found the label then? And then substitute back in when the label is referred to (converted to relative)? < 1278902511 0 :calamari!unknown@unknown.invalid PRIVMSG #esoteric :CakeProphet: basically, yes < 1278902523 0 :calamari!unknown@unknown.invalid PRIVMSG #esoteric :jumps can be forward or back < 1278902533 0 :calamari!unknown@unknown.invalid PRIVMSG #esoteric :so depending on how you do it, you might need two passes < 1278902550 0 :CakeProphet!unknown@unknown.invalid PRIVMSG #esoteric :well I'll need a pass to find labels and preprocess < 1278902557 0 :CakeProphet!unknown@unknown.invalid PRIVMSG #esoteric :and then a pass to translate instructions < 1278902579 0 :CakeProphet!unknown@unknown.invalid PRIVMSG #esoteric :how would you do it in one? < 1278902633 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :CakeProphet: this being haskell, you want to use Tying The Knot < 1278902691 0 :coppro!unknown@unknown.invalid QUIT :Read error: Operation timed out < 1278902706 0 :calamari!unknown@unknown.invalid PRIVMSG #esoteric :http://www.haskell.org/haskellwiki/Tying_the_Knot < 1278902707 0 :calamari!unknown@unknown.invalid PRIVMSG #esoteric :cool < 1278902709 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :i.e. you pass the map of labels into the parser, which uses it to translate the instructions; then the parser constructs the map of labels and returns it as part of its result. < 1278902737 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :and because of laziness this actually works :D < 1278902747 0 :CakeProphet!unknown@unknown.invalid PRIVMSG #esoteric :so I just... don't worry about it and do it all at once? < 1278902751 0 :CakeProphet!unknown@unknown.invalid PRIVMSG #esoteric :are you sure? < 1278902784 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :_assuming_ the position of the labels is not affected by their values < 1278902817 0 :calamari!unknown@unknown.invalid PRIVMSG #esoteric :oerjan: yeah not gonna do that :) < 1278902820 0 :CakeProphet!unknown@unknown.invalid PRIVMSG #esoteric :the position of the label is its value... if I understood that correctly. < 1278902847 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :yeah < 1278902853 0 :calamari!unknown@unknown.invalid PRIVMSG #esoteric :CakeProphet: what he means is that sometimes depending on the range of the jump you might have a 2 or 3 byte instruction and you don't know in advance < 1278902862 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :yeah like that < 1278902883 0 :CakeProphet!unknown@unknown.invalid PRIVMSG #esoteric :oh wait... < 1278902890 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :if that were the case it would break down < 1278902892 0 :calamari!unknown@unknown.invalid PRIVMSG #esoteric :so that is simple to solve.. don't make the instructions that way :) < 1278902902 0 :CakeProphet!unknown@unknown.invalid PRIVMSG #esoteric :so the offset is a byte offset? So I need to accumulate the offset value for each machine code byte? < 1278902915 0 :calamari!unknown@unknown.invalid PRIVMSG #esoteric :and since we control the machine code, don't worry about it :) < 1278902949 0 :CakeProphet!unknown@unknown.invalid PRIVMSG #esoteric :basically I've got a structure called AsmState, which is the state I'm carrying around in my parser < 1278902965 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :CakeProphet: you would want to have the current position yeah < 1278902967 0 :Gregor!unknown@unknown.invalid PRIVMSG #esoteric :http://www.wimp.com/cloudchamber/ This is so much more awesome than anything else ever. < 1278902975 0 :CakeProphet!unknown@unknown.invalid PRIVMSG #esoteric :AsmState = AsmState { output :: String, labels :: Map String ???, offset :: Word8} < 1278902989 0 :CakeProphet!unknown@unknown.invalid PRIVMSG #esoteric :er... maybe Word32 instead < 1278903023 0 :CakeProphet!unknown@unknown.invalid PRIVMSG #esoteric :so to write output code you do addOutput "string" < 1278903026 0 :calamari!unknown@unknown.invalid PRIVMSG #esoteric :Gregor: nice < 1278903056 0 :CakeProphet!unknown@unknown.invalid PRIVMSG #esoteric :so I guess in addOutput I can just accumulate the offset per character? < 1278903082 0 :CakeProphet!unknown@unknown.invalid PRIVMSG #esoteric :and when I encounter a label I add a new Map entry with the current offset? < 1278903183 0 :calamari!unknown@unknown.invalid PRIVMSG #esoteric :ACTION sticks some Thorium in Gregor's pocket < 1278903226 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :CakeProphet: note you probably want to keep the labels you are building and the labels you are using as different fields < 1278903303 0 :CakeProphet!unknown@unknown.invalid PRIVMSG #esoteric :not sure I understand... < 1278903307 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :at least if you use Map, which is strict in the keys < 1278903309 0 :CakeProphet!unknown@unknown.invalid PRIVMSG #esoteric :I really don't know how Tying the Knot works. :P < 1278903313 0 :CakeProphet!unknown@unknown.invalid PRIVMSG #esoteric :aaah < 1278903318 0 :Gregor!unknown@unknown.invalid PRIVMSG #esoteric :"Is that thorium in your pocket, or are you just happy to see me" < 1278903319 0 :CakeProphet!unknown@unknown.invalid PRIVMSG #esoteric :I could import Map.Lazy right? < 1278903336 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :CakeProphet: i don't really know much about that one < 1278903350 0 :CakeProphet!unknown@unknown.invalid PRIVMSG #esoteric :oerjan: it's all lazy, as the name suggests. < 1278903354 0 :CakeProphet!unknown@unknown.invalid PRIVMSG #esoteric :same interface < 1278903365 0 :CakeProphet!unknown@unknown.invalid PRIVMSG #esoteric :at least I assume so. < 1278903460 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :CakeProphet: i think not passing both values makes it harder to handle missing label errors in a controlled way < 1278903516 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :hm you'd get an infinite recursion then, i think < 1278903544 0 :calamari!unknown@unknown.invalid PRIVMSG #esoteric :might not have to worry about missing labels since the assembler code will probably be compiler generated < 1278903551 0 :CakeProphet!unknown@unknown.invalid PRIVMSG #esoteric :okay so.... < 1278903563 0 :CakeProphet!unknown@unknown.invalid PRIVMSG #esoteric :I need two maps? One contains already found labels and one contains? < 1278903606 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :if you have m = Map.insert key val m and then lookup anything _other_ than key, you get an infinite recursion < 1278903626 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :but if you use two maps you can get an actual lookup failure instead < 1278903685 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :one map contains the labels that the parser has found already. the other contains all the labels including the ones it hasn't found yet, and is passed into the initial parser :D < 1278903711 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :*initial parser state < 1278903743 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :the parser builds the first but uses the second for actual lookups < 1278903815 0 :CakeProphet!unknown@unknown.invalid PRIVMSG #esoteric :oerjan: ...I don't understand how I construct that second map for the parser before-the-fact. < 1278903839 0 :Sgeo!unknown@unknown.invalid PRIVMSG #esoteric :calamari, CakeProphet, would a redesigned PSOX be helpful? < 1278903848 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :this works fine as long as the lookups are never used for conditional branching in the parser or for building the first map < 1278903850 0 :Sgeo!unknown@unknown.invalid PRIVMSG #esoteric :No NULs, and tested with multiple languages < 1278903855 0 :CakeProphet!unknown@unknown.invalid PRIVMSG #esoteric :Sgeo: dunno, calamari will have to answer that. < 1278903871 0 :calamari!unknown@unknown.invalid PRIVMSG #esoteric :Sgeo: I haven't looked at PSOX enough to know < 1278903883 0 :CakeProphet!unknown@unknown.invalid PRIVMSG #esoteric :oerjan: I mean. How do I make the second map? What do I pass in? < 1278903886 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :CakeProphet: it is simply the first map from the final state of the parser, passed back into the initial state < 1278903899 0 :coppro!~coppro@unaffiliated/coppro JOIN :#esoteric < 1278903909 0 :CakeProphet!unknown@unknown.invalid PRIVMSG #esoteric :oerjan: ...oh my. okay, that makes sense. But I'm still not sure how... < 1278903913 0 :CakeProphet!unknown@unknown.invalid PRIVMSG #esoteric :like, how do I get that value? < 1278903921 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :that's the actual "tying" part of the knot :D < 1278903923 0 :Sgeo!unknown@unknown.invalid PRIVMSG #esoteric :First idea: The first character that the language sends to PSOX < 1278903956 0 :calamari!unknown@unknown.invalid PRIVMSG #esoteric :Sgeo: I don't know if PSOX worries about a non-PSOX environment, but that wouldn't be needed < 1278903966 0 :Sgeo!unknown@unknown.invalid PRIVMSG #esoteric :NUL if NULs etc. are the easiest, 1 if numeric I/O is available, C if ... < 1278903967 0 :Sgeo!unknown@unknown.invalid PRIVMSG #esoteric :hm? < 1278903973 0 :Sgeo!unknown@unknown.invalid PRIVMSG #esoteric :ACTION is now talking about PSOX2 < 1278903992 0 :CakeProphet!unknown@unknown.invalid PRIVMSG #esoteric :oerjan: okay so when I first run the parser I have to give it an initial state value. What should that be for the second map? < 1278904006 0 :CakeProphet!unknown@unknown.invalid PRIVMSG #esoteric :in Haskell code < 1278904008 0 :CakeProphet!unknown@unknown.invalid PRIVMSG #esoteric :an expression < 1278904010 0 :calamari!unknown@unknown.invalid PRIVMSG #esoteric :Sgeo: url for PSOX2? < 1278904011 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :let me see < 1278904013 0 :Sgeo!unknown@unknown.invalid PRIVMSG #esoteric :Better yet, a series of tests < 1278904021 0 :Sgeo!unknown@unknown.invalid PRIVMSG #esoteric :calamari, #esoteric < 1278904022 0 :Sgeo!unknown@unknown.invalid PRIVMSG #esoteric :Right now < 1278904027 0 :calamari!unknown@unknown.invalid PRIVMSG #esoteric :oh, lol okay < 1278904057 0 :Mathnerd314!unknown@unknown.invalid QUIT :Ping timeout: 264 seconds < 1278904067 0 :calamari!unknown@unknown.invalid PRIVMSG #esoteric :I didn't realize was PSOX was, glad you kept going with PESOIX < 1278904073 0 :calamari!unknown@unknown.invalid PRIVMSG #esoteric :what < 1278904096 0 :Sgeo!unknown@unknown.invalid PRIVMSG #esoteric :The program outputs 0. The program outputs the largest number it can, or 0 if it can output theoretically any number < 1278904103 0 :Sgeo!unknown@unknown.invalid PRIVMSG #esoteric :Then maybe some more tests < 1278904108 0 :Sgeo!unknown@unknown.invalid PRIVMSG #esoteric :calamari, alise hates PSOX < 1278904115 0 :Sgeo!unknown@unknown.invalid PRIVMSG #esoteric :I didn't realize he hated PESOIX more >.> < 1278904140 0 :Mathnerd314!~mathnerd3@nat-wireless-guest-reg-158-122.bu.edu JOIN :#esoteric < 1278904143 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :CakeProphet: hm does Parsec have a MonadFix instance? that would make it easier i think < 1278904165 0 :calamari!unknown@unknown.invalid PRIVMSG #esoteric :Sgeo: really PESOIX and PSOX seem to be overkill < 1278904200 0 :calamari!unknown@unknown.invalid PRIVMSG #esoteric :Sgeo: at least if we are going wit hthe interrupt vector table idea < 1278904364 0 :CakeProphet!unknown@unknown.invalid PRIVMSG #esoteric :oerjan: don't think so < 1278904374 0 :CakeProphet!unknown@unknown.invalid PRIVMSG #esoteric :EsoAsm rev 2: http://hpaste.org/fastcgi/hpaste.fcgi/view?id=27329#a27330 < 1278904519 0 :calamari!unknown@unknown.invalid PRIVMSG #esoteric :Sgeo: how did you handle blocking btw? < 1278904552 0 :Sgeo!unknown@unknown.invalid PRIVMSG #esoteric :calamari, as in? < 1278904584 0 :calamari!unknown@unknown.invalid PRIVMSG #esoteric :Sgeo: actually nm, I guess the underlying OS handled it for you < 1278904774 0 :CakeProphet!unknown@unknown.invalid PRIVMSG #esoteric :the state accessor function is awesome < 1278904786 0 :CakeProphet!unknown@unknown.invalid PRIVMSG #esoteric :o <- get offset < 1278904787 0 :CakeProphet!unknown@unknown.invalid PRIVMSG #esoteric ::) < 1278904797 0 :CakeProphet!unknown@unknown.invalid PRIVMSG #esoteric :getOffset = get offset < 1278904886 0 :CakeProphet!unknown@unknown.invalid PRIVMSG #esoteric :oerjan: you'll have to help me understand this Tying the knot thing because it looks like magic. < 1278904902 0 :oerjan!unknown@unknown.invalid QUIT :Remote host closed the connection < 1278904907 0 :CakeProphet!unknown@unknown.invalid PRIVMSG #esoteric :ha. < 1278904913 0 :oerjan!~oerjan@hagbart.nvg.ntnu.no JOIN :#esoteric < 1278904963 0 :CakeProphet!unknown@unknown.invalid PRIVMSG #esoteric :oerjan: you'll have to help me understand this Tying the knot thing because it looks like magic. < 1278904966 0 :CakeProphet!unknown@unknown.invalid PRIVMSG #esoteric :(resend) < 1278904983 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :CakeProphet: i cannot get to the logs so i don't know what i missed < 1278904984 0 :pikhq!unknown@unknown.invalid PRIVMSG #esoteric :It is magic. < 1278904985 0 :CakeProphet!unknown@unknown.invalid PRIVMSG #esoteric :could you show a simple example. I'm not following the wiki on the doubly linked list thing. < 1278904995 0 :CakeProphet!unknown@unknown.invalid PRIVMSG #esoteric :EsoAsm rev 2: http://hpaste.org/fastcgi/hpaste.fcgi/view?id=27329#a27330 < 1278904996 0 :pikhq!unknown@unknown.invalid PRIVMSG #esoteric :Or perhaps sufficiently advanced technology. < 1278904997 0 :CakeProphet!unknown@unknown.invalid PRIVMSG #esoteric :oerjan: miss that? < 1278905007 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :no < 1278905030 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :my trouble here is remembering the actual Parsec functions :D < 1278905036 0 :Sgeo!unknown@unknown.invalid PRIVMSG #esoteric :You missed a ha < 1278905038 0 :CakeProphet!unknown@unknown.invalid PRIVMSG #esoteric :I can probably help with that. < 1278905057 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :!haskell :t Text.Parsec.runParser < 1278905086 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :yeah sure don't be helpful EgoBot < 1278905096 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :!haskell Text.Parsec.runParser < 1278905099 0 :Gregor!unknown@unknown.invalid PRIVMSG #esoteric : 'K I won't < 1278905106 0 :CakeProphet!unknown@unknown.invalid PRIVMSG #esoteric :*EsoAsm Text.ParserCombinators.Parsec> :t runParser < 1278905106 0 :CakeProphet!unknown@unknown.invalid PRIVMSG #esoteric :runParser :: GenParser tok st a -> st -> SourceName -> [tok] -> Either ParseError a < 1278905138 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :barring an actual MonadFix, that function seems like the best place to do the knot tying, i think < 1278905146 0 :Sgeo!unknown@unknown.invalid PRIVMSG #esoteric :!haskell putStrLn "Hello world" < 1278905148 0 :EgoBot!unknown@unknown.invalid PRIVMSG #esoteric :Hello world < 1278905164 0 :CakeProphet!unknown@unknown.invalid PRIVMSG #esoteric :oerjan: BUT HOW. < 1278905175 0 :CakeProphet!unknown@unknown.invalid PRIVMSG #esoteric :like... how do I magically have a reference to a value that is built later? < 1278905191 0 :Sgeo!unknown@unknown.invalid PRIVMSG #esoteric :Wait, circular references are possible in Haskell? < 1278905203 0 :Gregor!unknown@unknown.invalid PRIVMSG #esoteric :With KNOTS. < 1278905205 0 :Gregor!unknown@unknown.invalid PRIVMSG #esoteric :And ... TYING. < 1278905212 0 :CakeProphet!unknown@unknown.invalid PRIVMSG #esoteric :... < 1278905238 0 :CakeProphet!unknown@unknown.invalid PRIVMSG #esoteric :Sgeo: and yes. I believe so. < 1278905240 0 :pikhq!unknown@unknown.invalid PRIVMSG #esoteric :CakeProphet: Dude, circular references are done *all the time* in Haskell. < 1278905248 0 :CakeProphet!unknown@unknown.invalid PRIVMSG #esoteric :pikhq: yes, but I don't understand this particular one. < 1278905252 0 :Sgeo!unknown@unknown.invalid PRIVMSG #esoteric :pikhq, I was the one asking the question < 1278905255 0 :CakeProphet!unknown@unknown.invalid PRIVMSG #esoteric :if someone could, I don't know, explain? < 1278905262 0 :pikhq!unknown@unknown.invalid PRIVMSG #esoteric :x = 1 : x -- Glee! < 1278905268 0 :Sgeo!unknown@unknown.invalid PRIVMSG #esoteric :O < 1278905269 0 :Sgeo!unknown@unknown.invalid PRIVMSG #esoteric :Oh < 1278905322 0 :CakeProphet!unknown@unknown.invalid PRIVMSG #esoteric :oerjan: where could I get the st to plug into that function? < 1278905353 0 :CakeProphet!unknown@unknown.invalid PRIVMSG #esoteric :or part of the state rather, the second label map < 1278905376 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :ok assume your parser returns not just the result, but also the state < 1278905386 0 :CakeProphet!unknown@unknown.invalid PRIVMSG #esoteric :this is what it currently does, so alright. < 1278905437 0 :CakeProphet!unknown@unknown.invalid PRIVMSG #esoteric :asmFile = ... >> getState < 1278905463 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :tiedParser p st name toks = pRes where pRes = runParser (p) st{labels2 = l1}; Right (_, ASMState {labels1 = l1}) = pRes < 1278905525 0 :CakeProphet!unknown@unknown.invalid PRIVMSG #esoteric :is there a function name that goes in front of that Right? < 1278905532 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :no < 1278905542 0 :CakeProphet!unknown@unknown.invalid PRIVMSG #esoteric :ah. pattern binding, got it. < 1278905551 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :the pRes should be a Right if the parsing succeeds < 1278905565 0 :CakeProphet!unknown@unknown.invalid PRIVMSG #esoteric :...that's magical. < 1278905579 0 :CakeProphet!unknown@unknown.invalid PRIVMSG #esoteric :I get it now. it's just some tricky referencing < 1278905627 0 :CakeProphet!unknown@unknown.invalid PRIVMSG #esoteric :hmmm, what would be good names for these label maps? < 1278905632 0 :CakeProphet!unknown@unknown.invalid PRIVMSG #esoteric :buildMap, labelMap? < 1278905640 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :it is of course vital that no attempt is made to strictly evaluate that l1 until the parser actually _has_ returned a Right < 1278905665 0 :CakeProphet!unknown@unknown.invalid PRIVMSG #esoteric :hmmm < 1278905670 0 :CakeProphet!unknown@unknown.invalid PRIVMSG #esoteric :isn't State strict? < 1278905688 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :i also missed some arguments on runParser, but you can fix that :D < 1278905733 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :it won't matter if ASMState isn't strict in labels2 < 1278905769 0 :cheater99!~cheater@ip-80-226-20-169.vodafone-net.de JOIN :#esoteric < 1278905820 0 :CakeProphet!unknown@unknown.invalid PRIVMSG #esoteric :hmmm, okay. < 1278905873 0 :cheater99!unknown@unknown.invalid PRIVMSG #esoteric :hello < 1278905890 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :hi < 1278905987 0 :cheater99!unknown@unknown.invalid PRIVMSG #esoteric :oerjan: i wanted to say something to you but forgot what. < 1278906000 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :*MWAHAHAHA* < 1278906001 0 :cheater99!unknown@unknown.invalid PRIVMSG #esoteric :you mentioned something to me then disappeared for a week. damn you. < 1278906009 0 :cheater99!unknown@unknown.invalid PRIVMSG #esoteric :I HATE YOU < 1278906011 0 :cheater99!unknown@unknown.invalid PRIVMSG #esoteric :ok, bbl < 1278906012 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :O_o < 1278906023 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :i've been here about every day :D < 1278906024 0 :cheater99!unknown@unknown.invalid PRIVMSG #esoteric :j/k, i love you. < 1278906030 0 :cheater99!unknown@unknown.invalid PRIVMSG #esoteric :under a different nick perhaps < 1278906030 0 :CakeProphet!unknown@unknown.invalid PRIVMSG #esoteric :oerjan: what happens when pRes is Left? < 1278906040 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :no definitely this one < 1278906043 0 :Sgeo!unknown@unknown.invalid PRIVMSG #esoteric :Actually, what is so unplayable about death walz? Some poorly aligned notes is all it takes to make it nonsense? < 1278906044 0 :cheater99!unknown@unknown.invalid PRIVMSG #esoteric :not true < 1278906046 0 :cheater99!unknown@unknown.invalid PRIVMSG #esoteric :you weren't here < 1278906047 0 :Sgeo!unknown@unknown.invalid PRIVMSG #esoteric :>:D < 1278906057 0 :cheater99!unknown@unknown.invalid PRIVMSG #esoteric :i know because my autocomplete hasn't worked. < 1278906061 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :CakeProphet: then l1 should not be used, i hope < 1278906067 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :cheater99: i'm not here _all_ day < 1278906079 0 :cheater99!unknown@unknown.invalid PRIVMSG #esoteric :AHA < 1278906081 0 :cheater99!unknown@unknown.invalid PRIVMSG #esoteric :SO U LIED < 1278906091 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :cheater99: i said _every_ < 1278906092 0 :cheater99!unknown@unknown.invalid PRIVMSG #esoteric : i've been here about every day :D < 1278906107 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :those are not the same thing < 1278906111 0 :CakeProphet!unknown@unknown.invalid PRIVMSG #esoteric :oerjan: don't you need to pattern match for Left somewhere? < 1278906115 0 :cheater99!unknown@unknown.invalid PRIVMSG #esoteric :yes, if you were here every day, that would mean for each day, you were here that day. < 1278906127 0 :cheater99!unknown@unknown.invalid PRIVMSG #esoteric :not half a day < 1278906129 0 :cheater99!unknown@unknown.invalid PRIVMSG #esoteric :not five minutes! < 1278906131 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :CakeProphet: no, the match is lazy and is only evaluated if l1 is < 1278906132 0 :cheater99!unknown@unknown.invalid PRIVMSG #esoteric :but a day! < 1278906140 0 :cheater99!unknown@unknown.invalid PRIVMSG #esoteric :ACTION feels duped :~( < 1278906182 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :like is generally the case for where and let < 1278906191 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :*only checked < 1278906203 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :*if l1 is evaluated < 1278906212 0 :augur!unknown@unknown.invalid QUIT :Remote host closed the connection < 1278906260 0 :CakeProphet!unknown@unknown.invalid PRIVMSG #esoteric :oh my god it compiles. < 1278906266 0 :cheater99!unknown@unknown.invalid PRIVMSG #esoteric :you are manipulating the facts, oerjan! < 1278906270 0 :cheater99!unknown@unknown.invalid PRIVMSG #esoteric :rewriting history! < 1278906304 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :cheater99: i am pretty sure i've been here for at least some hours nearly every day in recent memory < 1278906318 0 :cheater99!unknown@unknown.invalid PRIVMSG #esoteric :ok fine :( < 1278906326 0 :cheater99!unknown@unknown.invalid PRIVMSG #esoteric :but you weren't here when i needed u < 1278906331 0 :cheater99!unknown@unknown.invalid PRIVMSG #esoteric ::'( < 1278906340 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :sheesh < 1278906374 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :so did it have anything to do with math? < 1278906386 0 :cheater99!unknown@unknown.invalid PRIVMSG #esoteric :i'm not sure anymore :| < 1278906421 0 :cheater99!unknown@unknown.invalid PRIVMSG #esoteric :i think maybe computability or something. < 1278906430 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :ok that too < 1278906440 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :complexity, turing machines, P=NP? < 1278906451 0 :cheater99!unknown@unknown.invalid PRIVMSG #esoteric :complexity < 1278906464 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :ACTION has started slowly going through rjlipton's blog archive < 1278906475 0 :cheater99!unknown@unknown.invalid PRIVMSG #esoteric :i mentioned your nick with it < 1278906478 0 :cheater99!unknown@unknown.invalid PRIVMSG #esoteric :when you weren't here :D < 1278906488 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :any particular day? < 1278906493 0 :cheater99!unknown@unknown.invalid PRIVMSG #esoteric :bout 2-3 days ago < 1278906504 0 :cheater99!unknown@unknown.invalid PRIVMSG #esoteric :just search for cheater99> oerjan: < 1278906553 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric : oerjan: but functions in python aren't first-order objects < 1278906557 0 :cheater99!unknown@unknown.invalid PRIVMSG #esoteric :yes < 1278906566 0 :cheater99!unknown@unknown.invalid PRIVMSG #esoteric :we were talking about normalization < 1278906587 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :yes and what does that even _mean_ in the context of python, to start with < 1278906590 0 :cheater99!unknown@unknown.invalid PRIVMSG #esoteric :and you said that normalization does not happen in any lambda calculus that is touring complete < 1278906616 0 :cheater99!unknown@unknown.invalid PRIVMSG #esoteric :but given that the functions in python aren't first-order, you can't do a lot of tricks that break normalization in lambda calculus < 1278906622 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :well i'm not sure i said _exactly_ that, but something close < 1278906628 0 :cheater99!unknown@unknown.invalid PRIVMSG #esoteric :yeah something like that < 1278906632 0 :cheater99!unknown@unknown.invalid PRIVMSG #esoteric :ACTION waves his hands a little < 1278906659 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :ah but every infinite computation (which python must have) is essentially a break of normalization < 1278906674 0 :cheater99!unknown@unknown.invalid PRIVMSG #esoteric :why < 1278906685 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :because normalization in LC at least is the same as saying every evaluation strategy must terminate < 1278906692 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :(for strong) < 1278906698 0 :cheater99!unknown@unknown.invalid PRIVMSG #esoteric :ok < 1278906703 0 :cheater99!unknown@unknown.invalid PRIVMSG #esoteric :but most programs terminate < 1278906709 0 :cheater99!unknown@unknown.invalid PRIVMSG #esoteric :and you can easily factor out the non-terminating parts < 1278906712 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :and actually running a program is definitely an evaluation strategy < 1278906720 0 :CakeProphet!unknown@unknown.invalid PRIVMSG #esoteric :EsoAsm rev 3: http://hpaste.org/fastcgi/hpaste.fcgi/view?id=27329#a27331 < 1278906722 0 :cheater99!unknown@unknown.invalid PRIVMSG #esoteric :SO, the bits that interest us are actually going to terminate < 1278906731 0 :cheater99!unknown@unknown.invalid PRIVMSG #esoteric :hence, they can be strongly normalized, no? < 1278906756 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :"easily factor out", have you _ever_ heard of the halting problem? :D < 1278906788 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :most practical programs can be written in such a way that the nonterminating bits are confined to bits of the code < 1278906791 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :e.g. the totality monad < 1278906800 0 :cheater99!unknown@unknown.invalid PRIVMSG #esoteric :oerjan: i don't know what you're talking about right now < 1278906805 0 :cheater99!unknown@unknown.invalid PRIVMSG #esoteric :oerjan: i don't write my apps to never terminate < 1278906809 0 :cheater99!unknown@unknown.invalid PRIVMSG #esoteric :oerjan: they always terminate < 1278906816 0 :CakeProphet!unknown@unknown.invalid PRIVMSG #esoteric :ah, I forgot to add some functions < 1278906821 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :interpreters are an exception < 1278906825 0 :cheater99!unknown@unknown.invalid PRIVMSG #esoteric :oerjan: what ais523 said < 1278906851 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :cheater99: well then you are writing them to be at least weakly normalizing by design < 1278906855 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :(in other words: the halting problem in unsolvable in general, but often solvable in any individual case, including many of the useful ones) < 1278906901 0 :cheater99!unknown@unknown.invalid PRIVMSG #esoteric :oerjan: in general, you only write non-terminating problems in the Wankers 101 class < 1278906906 0 :cheater99!unknown@unknown.invalid PRIVMSG #esoteric :irl, you don't < 1278906909 0 :CakeProphet!unknown@unknown.invalid PRIVMSG #esoteric :oerjan: so when I add labels I should refer to buildMap, and when I refer to labels I should use labelMap < 1278906935 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :cheater99: the halting problem says essentially that if you have a program that you don't know whether is terminating, then you cannot always decide < 1278906948 0 :cheater99!unknown@unknown.invalid PRIVMSG #esoteric :read what i just said < 1278906965 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :cheater99: yeah yeah < 1278906977 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :CakeProphet: yeah < 1278906980 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :(yeah) < 1278906984 0 :CakeProphet!unknown@unknown.invalid PRIVMSG #esoteric :haha... the State monad is great. < 1278906986 0 :cheater99!unknown@unknown.invalid PRIVMSG #esoteric :yeah yeah. < 1278906992 0 :CakeProphet!unknown@unknown.invalid PRIVMSG #esoteric :it's almost like programming in imperitive langs. < 1278907003 0 :CakeProphet!unknown@unknown.invalid PRIVMSG #esoteric :but better. < 1278907029 0 :CakeProphet!unknown@unknown.invalid PRIVMSG #esoteric :I wonder how much memory this parser will end up consuming < 1278907035 0 :Quadrescence!unknown@unknown.invalid PRIVMSG #esoteric :better? < 1278907040 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :CakeProphet: you are essentially getting two passes automatically just from the dataflow < 1278907041 0 :CakeProphet!unknown@unknown.invalid PRIVMSG #esoteric :well, safer. < 1278907045 0 :Quadrescence!unknown@unknown.invalid PRIVMSG #esoteric :How is using a state monad to do imperative work bett---okay < 1278907050 0 :Quadrescence!unknown@unknown.invalid PRIVMSG #esoteric :safer is fair < 1278907105 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :Quadrescence: it lets you go functional-style and just use the imperative bits when they become relevant < 1278907120 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :if you really want to mix imperative and functional a lot, though, ML is probably neater than Haskell < 1278907169 0 :Quadrescence!unknown@unknown.invalid PRIVMSG #esoteric :I don't think (S)ML is much better for doing imperative stuff. I mean, yeah, it's impure (or can be), but bla bloo bla it's not pretty < 1278907173 0 :CakeProphet!unknown@unknown.invalid PRIVMSG #esoteric :olololol boilerplate code. < 1278907179 0 :CakeProphet!unknown@unknown.invalid PRIVMSG #esoteric :that is the only downside of using State so far. < 1278907190 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :the only ML I know is OCaml < 1278907193 0 :CakeProphet!unknown@unknown.invalid PRIVMSG #esoteric :all the get/put convenience functions < 1278907198 0 :Quadrescence!unknown@unknown.invalid PRIVMSG #esoteric :ais523: Poor you :( < 1278907213 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :Quadrescence: I'm aware of the existence of SML < 1278907219 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :and really, the differences between the MLs aren't major < 1278907224 0 :Quadrescence!unknown@unknown.invalid PRIVMSG #esoteric :ais523: SML is just smaller and "neater" < 1278907227 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :compared to the difference between, say, OCaml and Java < 1278907246 0 :Quadrescence!unknown@unknown.invalid PRIVMSG #esoteric :Yeah, the differences aren't huge. Mostly minor things, like bits of syntax and some little rules < 1278907248 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :CakeProphet: the Parsec State may not be quite the same as the State monad, unless they've fixed it up recently. Does it have a MonadState instance? < 1278907282 0 :CakeProphet!unknown@unknown.invalid PRIVMSG #esoteric :no it does not. < 1278907294 0 :CakeProphet!unknown@unknown.invalid PRIVMSG #esoteric :getState, putState, updateState < 1278907299 0 :CakeProphet!unknown@unknown.invalid PRIVMSG #esoteric :I don't know why there isn't an instance. < 1278907325 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :because that would give you get, put and modify. although that's essentially the same as those anyhow < 1278907332 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :oh and gets < 1278907347 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :(applies a function automatically) < 1278907363 0 :CakeProphet!unknown@unknown.invalid PRIVMSG #esoteric :as far as I can tell they're exactly the same < 1278907384 0 :CakeProphet!unknown@unknown.invalid PRIVMSG #esoteric :GenParser and friends are have a State transformer < 1278907386 0 :CakeProphet!unknown@unknown.invalid PRIVMSG #esoteric :of some kind < 1278907960 0 :CakeProphet!unknown@unknown.invalid PRIVMSG #esoteric :behold! a knot-tying parser that can now add labels and access their offsets in a pseudo-magic fashion < 1278907964 0 :CakeProphet!unknown@unknown.invalid PRIVMSG #esoteric :http://hpaste.org/fastcgi/hpaste.fcgi/view?id=27329#a27332 < 1278907971 0 :CakeProphet!unknown@unknown.invalid PRIVMSG #esoteric :the only thing missing is... instruction parsers. :) < 1278908096 0 :CakeProphet!unknown@unknown.invalid PRIVMSG #esoteric :of course I haven't tested it at all. But compiling with no type errors is a fairly good guarantee. < 1278908105 0 :CakeProphet!unknown@unknown.invalid PRIVMSG #esoteric :and I don't really know how I /could/ test it atm with no instruction set. < 1278908136 0 :Sgeo_!~Sgeo@ool-18bf618a.dyn.optonline.net JOIN :#esoteric < 1278908241 0 :Sgeo!unknown@unknown.invalid QUIT :Ping timeout: 245 seconds < 1278908258 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :you could do subleq, maybe? < 1278908260 0 :Sgeo_!unknown@unknown.invalid PRIVMSG #esoteric :Someone should write music that has impossible stuff, but when you strip out the meaningless stuff, it's a rickroll < 1278908292 0 :CakeProphet!unknown@unknown.invalid PRIVMSG #esoteric :define impossible stuff < 1278908317 0 :CakeProphet!unknown@unknown.invalid PRIVMSG #esoteric :oerjan: dunno what subleq is... < 1278908338 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :CakeProphet: single-instruction TC machine code < 1278908341 0 :coppro!unknown@unknown.invalid QUIT :Remote host closed the connection < 1278908398 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :subtract and branch if less than or equal < 1278908414 0 :coppro!~coppro@unaffiliated/coppro JOIN :#esoteric < 1278908433 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :so just one instruction and labels should be enough to test a barebones assembler < 1278908449 0 :CakeProphet!unknown@unknown.invalid PRIVMSG #esoteric :calamari: you still there? < 1278908456 0 :calamari!unknown@unknown.invalid PRIVMSG #esoteric :CakeProphet: just got back < 1278908481 0 :CakeProphet!unknown@unknown.invalid PRIVMSG #esoteric :see link above for the latest update to the assembler (well, not the latest, I spotted a bug in the parser combinators) < 1278908515 0 :calamari!unknown@unknown.invalid PRIVMSG #esoteric :CakeProphet: I'm not really equipped to run haskell right now, so please hold onto it :) < 1278908546 0 :calamari!unknown@unknown.invalid PRIVMSG #esoteric :I think I'm going to need to call it a night unfortunately.. although the asm is nearly worked out < 1278908550 0 :CakeProphet!unknown@unknown.invalid PRIVMSG #esoteric :calamari: well, it doesn't really work yet. It's just a skeleton still < 1278908564 0 :CakeProphet!unknown@unknown.invalid PRIVMSG #esoteric :I need an actual instruction set to interpret. Which I'll do later because I've been working on this for a while now. < 1278908579 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :freefall :D < 1278908592 0 :calamari!unknown@unknown.invalid PRIVMSG #esoteric :oerjan: ? < 1278908600 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :(webcomic) < 1278908635 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :that bot is not really helping his case.... < 1278908702 0 :CakeProphet!unknown@unknown.invalid PRIVMSG #esoteric :at the moment is fairly general purpose. You could plug in the parsers for any kind of instruction set at this point. < 1278908711 0 :CakeProphet!unknown@unknown.invalid PRIVMSG #esoteric :ACTION will probably re-use this code for other crazy VM designs. < 1278908870 0 :calamari!unknown@unknown.invalid QUIT :Quit: Leaving < 1278908877 0 :CakeProphet!unknown@unknown.invalid PRIVMSG #esoteric :oerjan: due to the introduction of this knot-tying thing... I know cannot guess the evaluation order of my program at all. < 1278908883 0 :CakeProphet!unknown@unknown.invalid PRIVMSG #esoteric :*now < 1278908991 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :*MWAHAHAHA* < 1278909116 0 :CakeProphet!unknown@unknown.invalid PRIVMSG #esoteric :oerjan: I could use this same strategy for macros yes? < 1278909177 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :er how so? < 1278909392 0 :GreaseMonkey!~gm@unaffiliated/greasemonkey JOIN :#esoteric < 1278909669 0 :SevenInchBread!~adam@h105.24.18.98.dynamic.ip.windstream.net JOIN :#esoteric < 1278909811 0 :CakeProphet!unknown@unknown.invalid QUIT :Ping timeout: 276 seconds < 1278910014 0 :coppro!unknown@unknown.invalid QUIT :Remote host closed the connection < 1278910059 0 :coppro!~coppro@unaffiliated/coppro JOIN :#esoteric < 1278910290 0 :SevenInchBread!unknown@unknown.invalid PRIVMSG #esoteric :oerjan: scan for macro definitions, add them to a build map, knot-tie a map that represents the finished macro map, and access that < 1278910295 0 :SevenInchBread!unknown@unknown.invalid NICK :CakeProphet < 1278910771 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :CakeProphet: ok there could be trouble then if macros are allowed to do macro definitions < 1278910772 0 :Mathnerd314!unknown@unknown.invalid QUIT :Ping timeout: 265 seconds < 1278910821 0 :Mathnerd314!~mathnerd3@nat-wireless-guest-reg-158-122.bu.edu JOIN :#esoteric < 1278910831 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :or alternatively if macros can _hide_ macro definitions, such as #if in C < 1278910836 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :*CPP < 1278910855 0 :CakeProphet!unknown@unknown.invalid PRIVMSG #esoteric :I don't actually know if we're going to implement a preprocessor < 1278910872 0 :CakeProphet!unknown@unknown.invalid PRIVMSG #esoteric :we could just use CPP < 1278910883 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :um that's not my point < 1278910945 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :the point is that in order for knot-tying of macro definitions to work, you cannot allow the content of macro definitions to affect how macro definitions are parsed < 1278910978 0 :pikhq!unknown@unknown.invalid PRIVMSG #esoteric :The worst thing about the CPP is there is no way for macros to produce further macros. < 1278910981 0 :pikhq!unknown@unknown.invalid PRIVMSG #esoteric :IMO. < 1278911009 0 :pikhq!unknown@unknown.invalid PRIVMSG #esoteric :... That was a non sequitur that made sense when I typed it somehow. < 1278911011 0 :pikhq!unknown@unknown.invalid PRIVMSG #esoteric :My apologies. < 1278911011 0 :Gregor!unknown@unknown.invalid PRIVMSG #esoteric :ACTION <3 m4c < 1278911024 0 :Gregor!unknown@unknown.invalid PRIVMSG #esoteric :(m4c is the imaginary language of C with M4 instead of CPP) < 1278911038 0 :pikhq!unknown@unknown.invalid PRIVMSG #esoteric :I'm not sure whether to vomit or applaud. < 1278911057 0 :Gregor!unknown@unknown.invalid PRIVMSG #esoteric :Vomit once you see my m4c "header" that gives OO to C :P < 1278911066 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :m4 was invented as a general-purpose preprocessor that's more powerful than CPP, after all < 1278911100 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :CakeProphet: i understand this is a relevant problem in scheme, which says behavior is undefined if definitions can affect what is a definition < 1278911110 0 :coppro!unknown@unknown.invalid PRIVMSG #esoteric :m4 gives us autotools :( < 1278911122 0 :pikhq!unknown@unknown.invalid PRIVMSG #esoteric :coppro: No, *Stallman* gave us autotools. < 1278911134 0 :coppro!unknown@unknown.invalid PRIVMSG #esoteric :pikhq: I know; I was joking < 1278911135 0 :Gregor!unknown@unknown.invalid PRIVMSG #esoteric :And autotools gives us portable software. < 1278911146 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :but haskell knot-tying is more breakable than scheme macros, i suspect, at least without additional cleverness < 1278911160 0 :coppro!unknown@unknown.invalid PRIVMSG #esoteric :Gregor: autotools is not worth the effort it takes to get working < 1278911170 0 :Gregor!unknown@unknown.invalid PRIVMSG #esoteric :False. < 1278911264 0 :CakeProphet!unknown@unknown.invalid PRIVMSG #esoteric :oerjan: so #if would create such a situation? < 1278911290 0 :CakeProphet!unknown@unknown.invalid PRIVMSG #esoteric :if so, we could just leave it out. Macros would be immensly useful in an assembler... #if only somewhat (I think?) < 1278911290 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :xkcd XD < 1278911315 0 :kwertii!unknown@unknown.invalid QUIT :Quit: bye < 1278911326 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :CakeProphet: however this is all moot if macros can only be used after they're defined. < 1278911412 0 :CakeProphet!unknown@unknown.invalid PRIVMSG #esoteric :oerjan: so basically the code that builds the macro map can't access it or it will loop? < 1278911420 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :yep < 1278911468 0 :coppro!unknown@unknown.invalid QUIT :Remote host closed the connection < 1278911513 0 :coppro!~coppro@unaffiliated/coppro JOIN :#esoteric < 1278912083 0 :Oranjer!unknown@unknown.invalid PART #esoteric :? < 1278912502 0 :GreaseMonkey!unknown@unknown.invalid QUIT :Ping timeout: 276 seconds < 1278912596 0 :Gregor!unknown@unknown.invalid QUIT :Remote host closed the connection < 1278912627 0 :GreaseMonkey!~gm@unaffiliated/greasemonkey JOIN :#esoteric < 1278912877 0 :Mathnerd314!unknown@unknown.invalid QUIT :Ping timeout: 264 seconds < 1278912927 0 :MizardX!unknown@unknown.invalid QUIT :Read error: Connection reset by peer < 1278912937 0 :MizardX!~MizardX@unaffiliated/mizardx JOIN :#esoteric < 1278912954 0 :Gregor!4b974939@gateway/web/freenode/ip.75.151.73.57 JOIN :#esoteric < 1278913381 0 :CakeProphet!unknown@unknown.invalid PRIVMSG #esoteric :oerjan: ha. People on #haskell are tryin to convince me that using state is a bad idea. :) < 1278913408 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :parsec state in particular? < 1278913416 0 :coppro!unknown@unknown.invalid PRIVMSG #esoteric :using state in what sense? < 1278913440 0 :coppro!unknown@unknown.invalid PRIVMSG #esoteric :Parsec state should be avoided if possible; it may not be < 1278913508 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :technically a writer monad might be even better for building label maps, i think. but parsec doesn't come with that. < 1278913541 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :and you still need state for the current offset < 1278913631 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :or maybe not, i vaguely recall Maps may not have efficient union < 1278913707 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :it might be considered cleaner to use parsec to build a data representation without doing the actual label lookups inside it < 1278913715 0 :CakeProphet!unknown@unknown.invalid PRIVMSG #esoteric :they're suggested I carry around a monolithic data structure throughout the Parsec parser as return values < 1278913720 0 :CakeProphet!unknown@unknown.invalid PRIVMSG #esoteric :and build them together < 1278913810 0 :Sgeo_!unknown@unknown.invalid PRIVMSG #esoteric ::( < 1278913864 0 :coppro!unknown@unknown.invalid PRIVMSG #esoteric :CakeProphet: in any case, it should be impossible to have state anyways < 1278913873 0 :coppro!unknown@unknown.invalid PRIVMSG #esoteric :so not quite sure how you'd do anything else < 1278913916 0 :Sgeo_!unknown@unknown.invalid PRIVMSG #esoteric :CakeProphet, isn't that.. what State and/or ST do? < 1278913920 0 :Sgeo_!unknown@unknown.invalid PRIVMSG #esoteric :Well, ST not so literally < 1278913939 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :State doesn't really give you state < 1278913944 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :it just automates the passing-around of state < 1278913958 0 :CakeProphet!unknown@unknown.invalid PRIVMSG #esoteric :yes that's what MonadState in general does < 1278913967 0 :CakeProphet!unknown@unknown.invalid PRIVMSG #esoteric :and Parsec parsers implement a state monad. < 1278914083 0 :coppro!unknown@unknown.invalid PRIVMSG #esoteric :more or less < 1278914098 0 :coppro!unknown@unknown.invalid PRIVMSG #esoteric :Parsec's a tad more confusing < 1278914466 0 :MizardX!unknown@unknown.invalid QUIT :Ping timeout: 260 seconds < 1278914618 0 :CakeProphet!unknown@unknown.invalid PRIVMSG #esoteric :coppro: how so? < 1278914806 0 :coppro!unknown@unknown.invalid PRIVMSG #esoteric :CakeProphet: backtracking < 1278914845 0 :CakeProphet!unknown@unknown.invalid PRIVMSG #esoteric :ah... does it not reset state upon backtrack? < 1278914878 0 :CakeProphet!unknown@unknown.invalid PRIVMSG #esoteric :or it does and that's why it's more confusing? < 1278914913 0 :coppro!unknown@unknown.invalid PRIVMSG #esoteric :well, it (like all of Haskell), doesn't really have a state to start with < 1278914926 0 :CakeProphet!unknown@unknown.invalid PRIVMSG #esoteric :blah blah blah. :P < 1278914935 0 :coppro!unknown@unknown.invalid PRIVMSG #esoteric :if you're going to pretend it has state, then yes, it resets that state < 1278914939 0 :coppro!unknown@unknown.invalid PRIVMSG #esoteric :but it doesn't have state < 1278914946 0 :CakeProphet!unknown@unknown.invalid PRIVMSG #esoteric :I get what you're saying < 1278914953 0 :CakeProphet!unknown@unknown.invalid PRIVMSG #esoteric :semantically it makes no difference. < 1278914958 0 :CakeProphet!unknown@unknown.invalid PRIVMSG #esoteric :how you word it. < 1278914961 0 :CakeProphet!unknown@unknown.invalid PRIVMSG #esoteric :what is state? < 1278914988 0 :pikhq!unknown@unknown.invalid PRIVMSG #esoteric :What *is* State? < 1278914992 0 :coppro!unknown@unknown.invalid PRIVMSG #esoteric :semantically it makes a lot of difference < 1278914993 0 :pikhq!unknown@unknown.invalid PRIVMSG #esoteric :Does it have Buddha nature? < 1278914997 0 :CakeProphet!unknown@unknown.invalid PRIVMSG #esoteric :not having C-style state doesn't mean you don't use state. Haskell uses plenty of state. < 1278915009 0 :coppro!unknown@unknown.invalid PRIVMSG #esoteric :no, Haskell doesn't use state < 1278915029 0 :pikhq!unknown@unknown.invalid PRIVMSG #esoteric :ACTION beats coppro with STM < 1278915033 0 :pikhq!unknown@unknown.invalid PRIVMSG #esoteric :Erm. < 1278915035 0 :CakeProphet!unknown@unknown.invalid PRIVMSG #esoteric :ah, so then the internal configuration of any kind of hardware that implements a Haskell program is just sitting still, right? motionless. no state. < 1278915039 0 :pikhq!unknown@unknown.invalid PRIVMSG #esoteric :Not that. < 1278915051 0 :pikhq!unknown@unknown.invalid PRIVMSG #esoteric :StateT, wasn't it? That's the strict state one. < 1278915055 0 :CakeProphet!unknown@unknown.invalid PRIVMSG #esoteric :no < 1278915057 0 :CakeProphet!unknown@unknown.invalid PRIVMSG #esoteric :State.Strict < 1278915059 0 :CakeProphet!unknown@unknown.invalid PRIVMSG #esoteric :is strict state < 1278915063 0 :CakeProphet!unknown@unknown.invalid PRIVMSG #esoteric :StateT is the state transformer < 1278915074 0 :pikhq!unknown@unknown.invalid PRIVMSG #esoteric :Rightrightright. < 1278915098 0 :pikhq!unknown@unknown.invalid PRIVMSG #esoteric :CakeProphet: Arguably, one does not execute a Haskell program, but rather executes the program described by the Haskell program. < 1278915113 0 :CakeProphet!unknown@unknown.invalid PRIVMSG #esoteric :...rofl < 1278915114 0 :CakeProphet!unknown@unknown.invalid PRIVMSG #esoteric :ah < 1278915115 0 :CakeProphet!unknown@unknown.invalid PRIVMSG #esoteric :right. < 1278915119 0 :pikhq!unknown@unknown.invalid PRIVMSG #esoteric :This, I presume, is what coprro is referring to. < 1278915122 0 :CakeProphet!unknown@unknown.invalid PRIVMSG #esoteric :okay. then I guess Haskell /doesn't/ have state. < 1278915122 0 :coppro!unknown@unknown.invalid PRIVMSG #esoteric :yeah < 1278915142 0 :coppro!unknown@unknown.invalid PRIVMSG #esoteric :hence why IO is a monad < 1278915210 0 :CakeProphet!unknown@unknown.invalid PRIVMSG #esoteric :conceptually I think it has the equivalent of state. via recursive functions and various monads. < 1278915221 0 :CakeProphet!unknown@unknown.invalid PRIVMSG #esoteric :values however, do not change, no. < 1278915222 0 :coppro!unknown@unknown.invalid PRIVMSG #esoteric :certainly; it's TC < 1278915249 0 :CakeProphet!unknown@unknown.invalid PRIVMSG #esoteric :so I still say the distinction makes no difference. :P < 1278915275 0 :CakeProphet!unknown@unknown.invalid PRIVMSG #esoteric :sorry... -ahem- < 1278915288 0 :CakeProphet!unknown@unknown.invalid PRIVMSG #esoteric :I have been defending my design choices for the past hour < 1278915299 0 :CakeProphet!unknown@unknown.invalid PRIVMSG #esoteric :so I must debate everything, naturally. < 1278915326 0 :coppro!unknown@unknown.invalid PRIVMSG #esoteric :if I was implementing a complex parser in Parsec, I'd make an AST data structure through the monad < 1278915340 0 :Sgeo_!unknown@unknown.invalid PRIVMSG #esoteric :pikhq, that's a very concise and clear way of describing it < 1278915340 0 :CakeProphet!unknown@unknown.invalid PRIVMSG #esoteric :certainly. < 1278915360 0 :Sgeo_!unknown@unknown.invalid PRIVMSG #esoteric :main is ultimately a description of what to do < 1278915372 0 :coppro!unknown@unknown.invalid PRIVMSG #esoteric :Sgeo_: I liked ais523's description of Haskell simply returning a giant input->output mapping table < 1278915394 0 :CakeProphet!unknown@unknown.invalid PRIVMSG #esoteric :a giant-and-possibly-infnite table? < 1278915424 0 :coppro!unknown@unknown.invalid PRIVMSG #esoteric :yeah < 1278915515 0 :pikhq!unknown@unknown.invalid PRIVMSG #esoteric :A perfectly valid if abstract way of viewing the semantics of the IO monad. < 1278915540 0 :coppro!unknown@unknown.invalid PRIVMSG #esoteric :the program one is closer to the truth < 1278915560 0 :CakeProphet!unknown@unknown.invalid PRIVMSG #esoteric :you know < 1278915568 0 :pikhq!unknown@unknown.invalid PRIVMSG #esoteric :Fairly close to how it actually is implemented. < 1278915570 0 :CakeProphet!unknown@unknown.invalid PRIVMSG #esoteric :every program should model execution as salmon swimming upstream < 1278915581 0 :pikhq!unknown@unknown.invalid PRIVMSG #esoteric :Mmm, HOMESPRING. < 1278915582 0 :CakeProphet!unknown@unknown.invalid PRIVMSG #esoteric :isn't that what a program truly is? < 1278915605 0 :CakeProphet!unknown@unknown.invalid PRIVMSG #esoteric :UNIVERSE OF BEAR HATCHERY OBLIVION < 1278915789 0 :ineiros!unknown@unknown.invalid QUIT :Ping timeout: 265 seconds < 1278915830 0 :ineiros!~itniemin@james.ics.hut.fi JOIN :#esoteric < 1278915865 0 :lifthrasiir!unknown@unknown.invalid QUIT :Ping timeout: 264 seconds < 1278915871 0 :lifthrasiir!Qn13HfmQ@haje12.kaist.ac.kr JOIN :#esoteric < 1278916305 0 :CakeProphet!unknown@unknown.invalid QUIT :Ping timeout: 240 seconds < 1278916316 0 :CakeProphet!~adam@h186.7.18.98.dynamic.ip.windstream.net JOIN :#esoteric < 1278916608 0 :CakeProphet!unknown@unknown.invalid QUIT :Ping timeout: 248 seconds < 1278916719 0 :CakeProphet!~adam@h186.7.18.98.dynamic.ip.windstream.net JOIN :#esoteric < 1278916877 0 :mycroftiv!unknown@unknown.invalid QUIT :Ping timeout: 260 seconds < 1278916971 0 :mycroftiv!~ircguy@h69-128-47-242.mdsnwi.dedicated.static.tds.net JOIN :#esoteric < 1278916995 0 :Gracenotes!unknown@unknown.invalid QUIT :*.net *.split < 1278917293 0 :coppro!unknown@unknown.invalid QUIT :Remote host closed the connection < 1278917519 0 :coppro!~coppro@unaffiliated/coppro JOIN :#esoteric < 1278918613 0 :cheater99!unknown@unknown.invalid QUIT :Ping timeout: 276 seconds < 1278919369 0 :Gregor!unknown@unknown.invalid PRIVMSG #esoteric :ARGH < 1278919383 0 :Gregor!unknown@unknown.invalid PRIVMSG #esoteric :All that stands between me and finishing the laundry is four full, finished, but un-emptied driers. < 1278919392 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :advanced regret generating hell < 1278919393 0 :Gregor!unknown@unknown.invalid PRIVMSG #esoteric :At what point do you just take their clothes and throw them all over the room? < 1278919398 0 :Gregor!unknown@unknown.invalid PRIVMSG #esoteric :Fifteen minutes? Twenty? Thirty? < 1278919460 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :ACTION is not getting it < 1278919464 0 :coppro!unknown@unknown.invalid PRIVMSG #esoteric :it's not a joke < 1278919480 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :well i'm _still_ not getting it < 1278919524 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :oh. < 1278919538 0 :cheater99!~cheater@ip-80-226-47-208.vodafone-net.de JOIN :#esoteric < 1278919543 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :ACTION is not accustomed to the idea of doing laundry in public places < 1278919567 0 :fizzie!unknown@unknown.invalid PRIVMSG #esoteric :Yes, isn't that unseemly? Laundry is a dish best served behind closed doors, like the saying goes. < 1278919617 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :hm actually there was that during my half year in the US < 1278919629 0 :coppro!unknown@unknown.invalid PRIVMSG #esoteric :fizzie: not everyone has a personal laundry machine < 1278919657 0 :fizzie!unknown@unknown.invalid PRIVMSG #esoteric :Reserving a washing-machine/drier-thing for a period of time and then not emptying it was a growth industry at the student apartments at the university, too. < 1278919716 0 :fizzie!unknown@unknown.invalid PRIVMSG #esoteric :Usually people just put unemptied-after-half-an-hour-or-so stuff in piles on top of the machines/tables rather than uniformly distributing them all over the room, though. < 1278919763 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :how boringly uncathartic < 1278919791 0 :fizzie!unknown@unknown.invalid PRIVMSG #esoteric :Well, I think sometimes they left angry notes, too. < 1278919854 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :*-h+h, possibly < 1278919893 0 :fizzie!unknown@unknown.invalid PRIVMSG #esoteric :(Also there were some cases of inexplicable underwear disappearments that I heard of. But that might be related to something completely different than retribution for exceeding reservation-times.) < 1278919937 0 :fizzie!unknown@unknown.invalid PRIVMSG #esoteric :I'm having trouble figuring out whether you want to remove the h from "think" or "they". < 1278919950 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :dammit the spelling was right the first time < 1278919970 0 :fizzie!unknown@unknown.invalid PRIVMSG #esoteric :You could plausibly claim that -h+h is a no-op. < 1278919999 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :it just looked wrong, and my browser chose _just_ this time to lock up (well with some help by something trashing my laptop) < 1278920058 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :(that was for uncathartic, btw) < 1278920095 0 :CakeProphet!unknown@unknown.invalid QUIT :Ping timeout: 276 seconds < 1278920175 0 :fizzie!unknown@unknown.invalid PRIVMSG #esoteric :The cold, cathartic wastelands of North. < 1278920246 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :yes, poor t-rex < 1278920413 0 :Gregor!unknown@unknown.invalid PRIVMSG #esoteric :So here's the thing. < 1278920439 0 :Gregor!unknown@unknown.invalid PRIVMSG #esoteric :Either way, if I'm taking these clothes out of the drier, then I'm pawing around in some uknown woman's underthings. < 1278920461 0 :Gregor!unknown@unknown.invalid PRIVMSG #esoteric :Which I hear unknown women don't usually appreciate? < 1278920476 0 :Gregor!unknown@unknown.invalid PRIVMSG #esoteric :So I decided to just wait her out :P < 1278920536 0 :Zuu!unknown@unknown.invalid QUIT :Ping timeout: 276 seconds < 1278920597 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :why, use a shovel < 1278920603 0 :fizzie!unknown@unknown.invalid PRIVMSG #esoteric :A ten-foot pole. < 1278920636 0 :Gregor!unknown@unknown.invalid PRIVMSG #esoteric :oerjan: What an extremely weird thing to say :P < 1278920641 0 :Gregor!unknown@unknown.invalid PRIVMSG #esoteric :fizzie: What an extremely gay thing to say :P < 1278920738 0 :fizzie!unknown@unknown.invalid PRIVMSG #esoteric :But it's *the* implement for not touching things! < 1278920809 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :driers & damsels < 1278920934 0 :CakeProphet!~adam@h74.1.18.98.dynamic.ip.windstream.net JOIN :#esoteric < 1278920942 0 :Zuu!zuu@0x55529f1b.adsl.cybercity.dk JOIN :#esoteric < 1278920942 0 :Zuu!unknown@unknown.invalid QUIT :Changing host < 1278920942 0 :Zuu!zuu@unaffiliated/zuu JOIN :#esoteric < 1278921025 0 :Gregor!unknown@unknown.invalid PRIVMSG #esoteric :Hmmmm < 1278921027 0 :Gregor!unknown@unknown.invalid PRIVMSG #esoteric :Lesse < 1278921039 0 :Gregor!unknown@unknown.invalid PRIVMSG #esoteric :Tomorrow is my first opportunity to wear my brand new, awesomely bright and shiny solid-color pink tie. < 1278921049 0 :Gregor!unknown@unknown.invalid PRIVMSG #esoteric :SO, should I wear it with a pink shirt, which is obviously appropriate, < 1278921055 0 :Gregor!unknown@unknown.invalid PRIVMSG #esoteric :or should I wear it with, say, a maroon shirt? < 1278921075 0 :Gregor!unknown@unknown.invalid PRIVMSG #esoteric :Decisions, decisions. < 1278921077 0 :fizzie!unknown@unknown.invalid PRIVMSG #esoteric :Didn't you have some sort of system(tm) for color-matching? < 1278921087 0 :Gregor!unknown@unknown.invalid PRIVMSG #esoteric :Both of these match wonderfully. < 1278921092 0 :Gregor!unknown@unknown.invalid PRIVMSG #esoteric :Which is the problem :P < 1278921117 0 :Gregor!unknown@unknown.invalid PRIVMSG #esoteric :I can match in the "these are the same color" sense. < 1278921117 0 :Gregor!unknown@unknown.invalid PRIVMSG #esoteric :Or in the "these go together sense" < 1278921117 0 :Gregor!unknown@unknown.invalid PRIVMSG #esoteric :Also I could wear a green shirt and match in the "these don't match" sense < 1278921141 0 :fizzie!unknown@unknown.invalid PRIVMSG #esoteric :I'm tempted to say "maroon" just because it's a funny word. Maroon, maroon, maroon, maroon. Marooned on Mars. < 1278921160 0 :Gregor!unknown@unknown.invalid PRIVMSG #esoteric :I do have some pretty spectacular maroon shirts. < 1278921243 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :Vengeance on Venus < 1278921291 0 :fizzie!unknown@unknown.invalid PRIVMSG #esoteric :Possibly, but that's not an episode of the Commander Keen series. < 1278921335 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :i didn't even know it _was_ a name of a story before i said it. although i of course suspected it. < 1278921360 0 :fizzie!unknown@unknown.invalid PRIVMSG #esoteric :"1. "Marooned on Mars" (first released as shareware on December 14, 1990) < 1278921360 0 :fizzie!unknown@unknown.invalid PRIVMSG #esoteric : While Commander Keen is exploring Mars, the Vorticon steal four vital components of his ship and hide them in Martian cities, each guarded by a Vorticon soldier. In this episode, Keen acquires his trademark pogo stick and meets a variety of Martian aliens and robots." < 1278921360 0 :Gregor!unknown@unknown.invalid PRIVMSG #esoteric :Your Anal Sex on Uranus < 1278921402 0 :Gregor!unknown@unknown.invalid PRIVMSG #esoteric :Juffo-Wupp on Jupiter < 1278921429 0 :Gregor!unknown@unknown.invalid PRIVMSG #esoteric :Androids from Andromeda! < 1278921430 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :Tits of Titan < 1278921438 0 :fizzie!unknown@unknown.invalid PRIVMSG #esoteric :The Mercurian Meritocracy. < 1278921530 0 :CakeProphet!unknown@unknown.invalid QUIT :Ping timeout: 265 seconds < 1278921532 0 :coppro!unknown@unknown.invalid QUIT :Ping timeout: 260 seconds < 1278921599 0 :clog!unknown@unknown.invalid QUIT :ended < 1278921600 0 :clog!unknown@unknown.invalid JOIN :#esoteric < 1278921829 0 :tombom!tombom@82.27.19.204 JOIN :#esoteric < 1278921829 0 :tombom!unknown@unknown.invalid QUIT :Changing host < 1278921829 0 :tombom!tombom@wikipedia/Tombomp JOIN :#esoteric < 1278922353 0 :oerjan!unknown@unknown.invalid QUIT :Quit: leaving < 1278923080 0 :MigoMipo!~John@84-217-4-49.tn.glocalnet.net JOIN :#esoteric < 1278923503 0 :Sgeo_!unknown@unknown.invalid PRIVMSG #esoteric :http://www.youtube.com/watch?v=vh2pc72CNek&feature=related < 1278924301 0 :Gracenotes!~chatzilla@70.101.160.69 JOIN :#esoteric < 1278924502 0 :choochter!~choochter@nat/ibm/x-ecqmqggmgktmailz JOIN :#esoteric < 1278925366 0 :Gracenotes!unknown@unknown.invalid QUIT :Changing host < 1278925366 0 :Gracenotes!~chatzilla@wikipedia/Gracenotes JOIN :#esoteric < 1278928104 0 :CakeProphet!~adam@h5.35.18.98.dynamic.ip.windstream.net JOIN :#esoteric < 1278928234 0 :AnMaster!~AnMaster@unaffiliated/anmaster JOIN :#esoteric < 1278929484 0 :Wamanuz3!~wamanuz@78-69-168-43-no84.tbcn.telia.com JOIN :#esoteric < 1278930669 0 :Gregor!unknown@unknown.invalid QUIT :Ping timeout: 252 seconds < 1278931810 0 :Sgeo_!unknown@unknown.invalid PRIVMSG #esoteric :How can someone know what a closure is and not know what first-class functions are? < 1278931856 0 :CakeProphet!unknown@unknown.invalid PRIVMSG #esoteric :I don't know but I know someone who used to be the same. < 1278931868 0 :CakeProphet!unknown@unknown.invalid PRIVMSG #esoteric :then I showed them Haskell. :) < 1278931886 0 :CakeProphet!unknown@unknown.invalid PRIVMSG #esoteric :but said person has always only halfway grasped everything they learn. < 1278932037 0 :Sgeo_!unknown@unknown.invalid PRIVMSG #esoteric : Runnable run = new Runnable() { public void run() { do_something() }; < 1278932037 0 :Sgeo_!unknown@unknown.invalid PRIVMSG #esoteric : GuiView.post(run); < 1278932046 0 :Sgeo_!unknown@unknown.invalid PRIVMSG #esoteric : GuiView.post(() => { do_something();}); < 1278932046 0 :Sgeo_!unknown@unknown.invalid PRIVMSG #esoteric : Or probably GuiView.post(do_something); would work in this case < 1278932152 0 :GreaseMonkey!unknown@unknown.invalid QUIT :Quit: I'm using NO SCRIPT WHATSOEVER - Download it at file:///dev/null < 1278932360 0 :Sgeo_!unknown@unknown.invalid PRIVMSG #esoteric :"it's definetly not as expressive" < 1278932370 0 :Sgeo_!unknown@unknown.invalid PRIVMSG #esoteric :"but damn it's easy to use" < 1278932508 0 :Sgeo_!unknown@unknown.invalid PRIVMSG #esoteric :Hm, do C's function pointers count as C having first-class functions? < 1278932523 0 :CakeProphet!unknown@unknown.invalid PRIVMSG #esoteric :hmmm... < 1278932528 0 :Deewiant!unknown@unknown.invalid PRIVMSG #esoteric :No < 1278932538 0 :CakeProphet!unknown@unknown.invalid PRIVMSG #esoteric :not quite. it's not the full meaning of first-class < 1278932540 0 :Deewiant!unknown@unknown.invalid PRIVMSG #esoteric :It doesn't have e.g. function literals < 1278932568 0 :CakeProphet!unknown@unknown.invalid PRIVMSG #esoteric :certainly it has some elements of first-class functions. You can reference the function as a value. But yeah, no closures or anything like that. < 1278932581 0 :CakeProphet!unknown@unknown.invalid PRIVMSG #esoteric :or anonymous functions. < 1278932784 0 :Ilari!unknown@unknown.invalid PRIVMSG #esoteric :Necressiting hacks like exporting pointers to static functions... < 1278932948 0 :CakeProphet!unknown@unknown.invalid PRIVMSG #esoteric :...at least C /has/ function pointers < 1278932952 0 :CakeProphet!unknown@unknown.invalid PRIVMSG #esoteric :I suppose. < 1278932973 0 :CakeProphet!unknown@unknown.invalid PRIVMSG #esoteric :Java requires the most awkward construction ever with anonymous types. < 1278932986 0 :Sgeo_!unknown@unknown.invalid PRIVMSG #esoteric :CakeProphet, which is what this person is defending < 1278933011 0 :Sgeo_!unknown@unknown.invalid PRIVMSG #esoteric :Which is _still_ better than LSL. < 1278933022 0 :CakeProphet!unknown@unknown.invalid PRIVMSG #esoteric :eh. IMO delegate types are a better solution to that kind of problem. < 1278933033 0 :CakeProphet!unknown@unknown.invalid PRIVMSG #esoteric :ala C# < 1278933052 0 :Ilari!unknown@unknown.invalid PRIVMSG #esoteric :What I would like in Java is method pointers (with ability to combine them with instance). < 1278933064 0 :Ilari!unknown@unknown.invalid PRIVMSG #esoteric :(both precombine and combine on call). < 1278933084 0 :CakeProphet!unknown@unknown.invalid PRIVMSG #esoteric :delegate int Callback (string data); < 1278933094 0 :CakeProphet!unknown@unknown.invalid PRIVMSG #esoteric :Callback f; < 1278933125 0 :CakeProphet!unknown@unknown.invalid PRIVMSG #esoteric :void setCallback(Callback g) { f = g;} < 1278933199 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :Ilari: Java 1.7 has that, IIRC < 1278933201 0 :CakeProphet!unknown@unknown.invalid PRIVMSG #esoteric :they're typesafe, and much less cumersome to work with. < 1278933210 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :Class#method, instance#method < 1278933229 0 :CakeProphet!unknown@unknown.invalid PRIVMSG #esoteric :with the same kind of type safety mechanism? < 1278933241 0 :CakeProphet!unknown@unknown.invalid PRIVMSG #esoteric :I guess it has to... < 1278933255 0 :CakeProphet!unknown@unknown.invalid PRIVMSG #esoteric :I can't imagine what kind of reprecussions non-safe method pointers would have. < 1278933259 0 :CakeProphet!unknown@unknown.invalid PRIVMSG #esoteric :to Java. < 1278933280 0 :CakeProphet!unknown@unknown.invalid PRIVMSG #esoteric :actually I can: unexpected runtime errors. < 1278933422 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :ofc, it's just sugar < 1278933539 0 :CakeProphet!unknown@unknown.invalid PRIVMSG #esoteric :I think the obstacle C-style languages having good type systems is the syntax < 1278933549 0 :CakeProphet!unknown@unknown.invalid PRIVMSG #esoteric :it is interleaved in with the program code. < 1278933589 0 :CakeProphet!unknown@unknown.invalid PRIVMSG #esoteric :so complex, Haskell-style types quickly become tedious and hard to read. < 1278933600 0 :CakeProphet!unknown@unknown.invalid PRIVMSG #esoteric :ACTION has seen generics overdone in C# and Java both. < 1278933644 0 :CakeProphet!unknown@unknown.invalid PRIVMSG #esoteric :at least C# /has/ decent parameterized types. < 1278933653 0 :CakeProphet!unknown@unknown.invalid PRIVMSG #esoteric :Tuple even. miraculous. < 1278933690 0 :Sgeo_!unknown@unknown.invalid PRIVMSG #esoteric :When did C# get Tuples? < 1278933705 0 :fizzie!unknown@unknown.invalid PRIVMSG #esoteric :I've seen more than one Java library which contains a custom generic "Pair" class. < 1278933751 0 :CakeProphet!unknown@unknown.invalid PRIVMSG #esoteric :I don't recall the library it is in < 1278933757 0 :CakeProphet!unknown@unknown.invalid PRIVMSG #esoteric :but they have a set of Tuple generics < 1278933761 0 :CakeProphet!unknown@unknown.invalid PRIVMSG #esoteric :as well as Action and Func < 1278933772 0 :CakeProphet!unknown@unknown.invalid PRIVMSG #esoteric :Action being a void-return function < 1278933804 0 :CakeProphet!unknown@unknown.invalid PRIVMSG #esoteric :so Action and Func kind of serve as "anonymous delegates" < 1278933817 0 :CakeProphet!unknown@unknown.invalid PRIVMSG #esoteric :Func> < 1278933834 0 :CakeProphet!unknown@unknown.invalid PRIVMSG #esoteric :Int -> Int -> (Int,Int) < 1278933869 0 :CakeProphet!unknown@unknown.invalid PRIVMSG #esoteric :er... substitute the C# Int with Integer. That's the correct boxed int type. < 1278933992 0 :Sgeo_!unknown@unknown.invalid PRIVMSG #esoteric :Wait, this person knows Erlang. How do they not understand what I'm trying to express? < 1278934012 0 :Sgeo_!unknown@unknown.invalid PRIVMSG #esoteric :"pointers are process ids" < 1278934013 0 :Sgeo_!unknown@unknown.invalid PRIVMSG #esoteric :erm < 1278934031 0 :Deewiant!unknown@unknown.invalid PRIVMSG #esoteric :Do they know anything other than Erlang? :-P < 1278934084 0 :Sgeo_!unknown@unknown.invalid PRIVMSG #esoteric :C++, Java < 1278934110 0 :Sgeo_!unknown@unknown.invalid PRIVMSG #esoteric :Perl < 1278934171 0 :Deewiant!unknown@unknown.invalid PRIVMSG #esoteric :If they know C++ that statement about pointers is somewhat unexpected < 1278934245 0 :Sgeo_!unknown@unknown.invalid PRIVMSG #esoteric :They were referring specifically to Erlang < 1278934296 0 :CakeProphet!unknown@unknown.invalid PRIVMSG #esoteric :perhaps they've just gone along this whole time < 1278934305 0 :CakeProphet!unknown@unknown.invalid PRIVMSG #esoteric :not really knowing anything, but getting along < 1278934317 0 :CakeProphet!unknown@unknown.invalid PRIVMSG #esoteric :like many programming professionals? < 1278934395 0 :CakeProphet!unknown@unknown.invalid PRIVMSG #esoteric :ACTION invented this statistic out of his head, btw. It's far too early for me to still be awake. < 1278934562 0 :fizzie!unknown@unknown.invalid PRIVMSG #esoteric :As we all are well aware, 89 % of all statistics are made up on the spot. < 1278934630 0 :CakeProphet!unknown@unknown.invalid PRIVMSG #esoteric :isn't it something more like pi%? < 1278934650 0 :fizzie!unknown@unknown.invalid PRIVMSG #esoteric :I don't really know, so I just made it up (gasp). < 1278934945 0 :Sgeo_!unknown@unknown.invalid PRIVMSG #esoteric :What esolangs might have trouble outputting newlines as required by a spec? < 1278934999 0 :fizzie!unknown@unknown.invalid PRIVMSG #esoteric :Underload has trouble outputting characters you can't input, so if you can't input a newline... usually you can, though. < 1278935060 0 :Sgeo_!unknown@unknown.invalid PRIVMSG #esoteric :I think the first question that PSOX 2.0 will ask is if it wants to use PSOX 2.1 options < 1278935068 0 :Sgeo_!unknown@unknown.invalid PRIVMSG #esoteric :Well, third question < 1278935082 0 :Sgeo_!unknown@unknown.invalid PRIVMSG #esoteric :First being "What is false?" and second "What is true?" < 1278935190 0 :fizzie!unknown@unknown.invalid PRIVMSG #esoteric :Thue's conventions for outputting newlines are a bit vague, but I guess usually it's made possible. < 1278935244 0 :Sgeo_!unknown@unknown.invalid PRIVMSG #esoteric :I should choose a core set of languages that PSOX2 is known to work well with < 1278935273 0 :Sgeo_!unknown@unknown.invalid PRIVMSG #esoteric :Hm. Maybe the more "special needs" languages < 1278935370 0 :fizzie!unknown@unknown.invalid PRIVMSG #esoteric :Then there's those that don't really have output. < 1278935404 0 :Sgeo_!unknown@unknown.invalid PRIVMSG #esoteric :I don't care about those < 1278935423 0 :FireFly!~firefly@unaffiliated/firefly JOIN :#esoteric < 1278935509 0 :Sgeo_!unknown@unknown.invalid PRIVMSG #esoteric :Taxi will be a core language. Because I say so. < 1278935715 0 :Sgeo_!unknown@unknown.invalid PRIVMSG #esoteric :What languages can't easily output numbers and/or characters? < 1278936099 0 :FireFly!unknown@unknown.invalid QUIT :Ping timeout: 252 seconds < 1278936537 0 :Sgeo_!unknown@unknown.invalid PRIVMSG #esoteric :Are there languages that can't output, say, more than N characters to a line? < 1278936584 0 :CakeProphet!unknown@unknown.invalid PRIVMSG #esoteric :theoretically, yes. :) < 1278936604 0 :CakeProphet!unknown@unknown.invalid PRIVMSG #esoteric :er... theoretically no. Because languages have no semantics. But screw theoretics. < 1278936669 0 :Sgeo_!unknown@unknown.invalid PRIVMSG #esoteric :Underload doesn't take input? < 1278936673 0 :Sgeo_!unknown@unknown.invalid PRIVMSG #esoteric :Then it can't be supported < 1278936694 0 :Sgeo_!unknown@unknown.invalid PRIVMSG #esoteric :Actually, screw that. < 1278936701 0 :Sgeo_!unknown@unknown.invalid PRIVMSG #esoteric :I'm making Underload a core PSOX2 language. < 1278936745 0 :CakeProphet!unknown@unknown.invalid PRIVMSG #esoteric :force it to take input! That's the spirit. < 1278936763 0 :Sgeo_!unknown@unknown.invalid PRIVMSG #esoteric :No, Underload+PSOX will just have limited capabilities < 1278936797 0 :Sgeo_!unknown@unknown.invalid PRIVMSG #esoteric :It won't be able to say, react to events in an IRC chatroom, but it can still join one, say something, and leave. < 1278937130 0 :hiato!~nine@41-133-80-156.dsl.mweb.co.za JOIN :#esoteric < 1278937180 0 :BeholdMyGlory!~behold@unaffiliated/beholdmyglory JOIN :#esoteric < 1278937221 0 :Sgeo_!unknown@unknown.invalid PRIVMSG #esoteric :Evil idea: PSOX2 has a domain for turing-completeness. A language like Underload can actually output stuff that the PSOX interpreter will execute, and that code can do I/O < 1278937421 0 :augur!~augur@216-164-33-76.c3-0.slvr-ubr1.lnh-slvr.md.cable.rcn.com JOIN :#esoteric < 1278937561 0 :Sgeo_!unknown@unknown.invalid PRIVMSG #esoteric :It's a language embedded directly in PSOX2 < 1278937564 0 :Sgeo_!unknown@unknown.invalid PRIVMSG #esoteric :PSOX2-EZ < 1278937566 0 :wareya!unknown@unknown.invalid QUIT :Read error: Connection reset by peer < 1278937623 0 :wareya!~wareya@cpe-74-70-142-220.nycap.res.rr.com JOIN :#esoteric < 1278937650 0 :Sgeo_!unknown@unknown.invalid PRIVMSG #esoteric :You know what, I'll go ahead and make HQ9+ a core language. < 1278937653 0 :Sgeo_!unknown@unknown.invalid PRIVMSG #esoteric :(j/k) < 1278937666 0 :Sgeo_!unknown@unknown.invalid PRIVMSG #esoteric :ACTION wonders how that could be made to work, though < 1278938320 0 :Sgeo_!unknown@unknown.invalid PRIVMSG #esoteric :ACTION decides to call the embedded language PSOX.EZ, and a version not running in PSOX PSOZ.EZ-lite < 1278938325 0 :Sgeo_!unknown@unknown.invalid PRIVMSG #esoteric :erm < 1278938329 0 :Sgeo_!unknown@unknown.invalid PRIVMSG #esoteric :PSOX.EZ-lite < 1278938333 0 :Sgeo_!unknown@unknown.invalid PRIVMSG #esoteric :Although PSOZ is a cool name < 1278938435 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :hm, while learning haskell I noticed that the opposite of the term "break even" must be "span odd" ;) < 1278938437 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :ACTION runs < 1278938574 0 :Sgeo_!unknown@unknown.invalid PRIVMSG #esoteric :ez.somefunc 1 "hello"2 < 1278938585 0 :hiato_!~nine@41-133-80-156.dsl.mweb.co.za JOIN :#esoteric < 1278938606 0 :hiato_!unknown@unknown.invalid QUIT :Client Quit < 1278938606 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :Sgeo_, explain that syntax? < 1278938620 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :as in, what does the 2 at the end do < 1278938631 0 :Sgeo_!unknown@unknown.invalid PRIVMSG #esoteric :AnMaster, it's another argument to ez.somefunc < 1278938641 0 :Sgeo_!unknown@unknown.invalid PRIVMSG #esoteric :The string is terminated by the second " < 1278938651 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :Sgeo_, so what about the trailing 2? < 1278938658 0 :hiato!unknown@unknown.invalid QUIT :Ping timeout: 248 seconds < 1278938666 0 :Sgeo_!unknown@unknown.invalid PRIVMSG #esoteric :AnMaster, that's another argument. The function accepts 3 arguments for some reason < 1278938689 0 :Sgeo_!unknown@unknown.invalid PRIVMSG #esoteric :Although I think I'll try something else < 1278938697 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :Sgeo_, oh so how do you separate the arguments < 1278938698 0 :Sgeo_!unknown@unknown.invalid PRIVMSG #esoteric :Hm < 1278938705 0 :Sgeo_!unknown@unknown.invalid PRIVMSG #esoteric :AnMaster, depends on the type of argument < 1278938706 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :I mean, it looked like it was separated by space there < 1278938710 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :Sgeo_, urgh < 1278938725 0 :Sgeo_!unknown@unknown.invalid PRIVMSG #esoteric :Numbers are terminated by space, strings by " < 1278938728 0 :Sgeo_!unknown@unknown.invalid PRIVMSG #esoteric :So: < 1278938735 0 :Sgeo_!unknown@unknown.invalid PRIVMSG #esoteric :ez.somefunc 1 hello"2 < 1278938750 0 :Sgeo_!unknown@unknown.invalid PRIVMSG #esoteric :Or strings could be terminated by space I guess < 1278938757 0 :Sgeo_!unknown@unknown.invalid PRIVMSG #esoteric :ez.somefunc 1 hello\ world 2 < 1278938761 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :yeargh < 1278938779 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :Sgeo_, this was supposed to be embedded in PSOX? < 1278938787 0 :Sgeo_!unknown@unknown.invalid PRIVMSG #esoteric :You have to realize, I'm trying to make it so it resembles what would be output by a PSOX2 program < 1278938801 0 :Sgeo_!unknown@unknown.invalid PRIVMSG #esoteric :AnMaster, why not? < 1278938803 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :hm < 1278938821 0 :Sgeo_!unknown@unknown.invalid PRIVMSG #esoteric :PSOX2 programs choose how they terminate numbers, how strings are delt with, etc < 1278938826 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :Sgeo_, what do you mean "resembles what would be output by a PSOX2 program"? < 1278938837 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :oh I see < 1278938868 0 :Sgeo_!unknown@unknown.invalid PRIVMSG #esoteric :Making PSOX.EZ-lite (Which isn't embedded in PSOX) helps me consider what options need to be available < 1278938875 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :Sgeo_, so about 4/5 of bf hello world for PSOX will be spent at setting up various PSOX settings? < 1278938883 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :or will it be passed from the outside? < 1278938888 0 :Sgeo_!unknown@unknown.invalid PRIVMSG #esoteric :AnMaster, the former < 1278938912 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :Sgeo_, how can you set up the settings from inside before you set up the protocol :P < 1278938933 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :sounds like a catch22 to me < 1278938939 0 :Sgeo_!unknown@unknown.invalid PRIVMSG #esoteric :AnMaster, I'm assuming that the program is capable of outputting one character for true and one for false < 1278938962 0 :Sgeo_!unknown@unknown.invalid PRIVMSG #esoteric :So the first thing the program does is output what it will use to represent false, then what it will use to represent true < 1278938963 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :Sgeo_, what about languages that can only output whole lines? < 1278938988 0 :Sgeo_!unknown@unknown.invalid PRIVMSG #esoteric :AnMaster, the PSOX interpreter will be able to see the first and second characters of lines < 1278939003 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :Sgeo_, okay what about intercal-72. iirc it can't do text IO. You are stuck with I II III IV V VI and so on < 1278939005 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :IIRC < 1278939032 0 :Sgeo_!unknown@unknown.invalid PRIVMSG #esoteric :Hm < 1278939041 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :hm or maybe it could < 1278939042 0 :Sgeo_!unknown@unknown.invalid PRIVMSG #esoteric :Well, I could be false and V could be true < 1278939042 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :not sure < 1278939055 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :oh wait I'm right < 1278939058 0 :Sgeo_!unknown@unknown.invalid PRIVMSG #esoteric :But from there, where could it go? < 1278939059 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :"Hello world cannot be implemented in INTERCAL-72 since the language lacks a facility for text output. Only "butchered" Roman numerals can be printed.[2]" < 1278939089 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :C-INTERCAL can do byte IO, so can CLC (though a completely different method) < 1278939112 0 :Sgeo_!unknown@unknown.invalid PRIVMSG #esoteric :So that's 4 major sections: Output of Numbers, Output of Strings, Input of Numbers, Input of Strings < 1278939122 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :C- and CLC- each have compatibility modes to use the other's IO rules, though < 1278939129 0 :Sgeo_!unknown@unknown.invalid PRIVMSG #esoteric :Some of which may be optional, including both Input sections < 1278939132 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :ais523, right < 1278939153 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :Sgeo_, you must support intercal-72 ;P < 1278939169 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :ais523, what does wikipedia mean with '"butchered" Roman numerals' I wonder? < 1278939170 0 :Sgeo_!unknown@unknown.invalid PRIVMSG #esoteric :AnMaster, I'm trying to figure out the best way to do that < 1278939172 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :ais523, clock face? < 1278939182 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :AnMaster: no, they're extended to go beyond the normal range < 1278939185 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :using lowercase as well as overlines < 1278939207 0 :Sgeo_!unknown@unknown.invalid PRIVMSG #esoteric :I don't see how the PSOX2 interpreter should be expected to natively understand Roman Numerals < 1278939221 0 :Sgeo_!unknown@unknown.invalid PRIVMSG #esoteric :Without special casing everything for just one language's benefit < 1278939227 0 :Sgeo_!unknown@unknown.invalid PRIVMSG #esoteric :Although that would be kind of interesting < 1278939234 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :ais523, you mean like after IVXM it turns into something else? < 1278939242 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :yes < 1278939253 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :wait, aren't there three between X and M? < 1278939257 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :50,100,500? < 1278939260 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :IVXLCDM < 1278939263 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :ah < 1278939274 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :ais523, after M what then? < 1278939287 0 :Sgeo_!unknown@unknown.invalid PRIVMSG #esoteric :Are there languages besides INTERCAL-72 that would want Roman Numeral output? < 1278939294 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :the same letters with bars over, then the same letters in lowercase < 1278939299 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :so 5000 is \V < 1278939303 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :Sgeo_, C-INTERCAL and CLC-INTERCAL < 1278939307 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :well, that should be a line over rather than a backslash before < 1278939331 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :Sgeo_: my advice is, recognise /patterns/ < 1278939333 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :Sgeo_, well, you can do byte IO but you would have to write the printf("%d", ...) equiv yourself < 1278939345 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :ais523, did you see my haskell pun above? < 1278939348 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :if the input says something 3 times and something else twice, that can be meaningful to psox < 1278939368 0 :Sgeo_!unknown@unknown.invalid PRIVMSG #esoteric :ais523, hm...? < 1278939384 0 :Sgeo_!unknown@unknown.invalid PRIVMSG #esoteric :Oh, I think I see < 1278939394 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :Sgeo_, eh? I don't < 1278939397 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :basically, you take input as binary, but what the individual bits are represented as is determined by looking at your input < 1278939397 0 :Sgeo_!unknown@unknown.invalid PRIVMSG #esoteric :So, for starters, True and False wouldn't be limited to one character? < 1278939408 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :yep < 1278939421 0 :Sgeo_!unknown@unknown.invalid PRIVMSG #esoteric :But that question was based on a misunderstanding < 1278939457 0 :Sgeo_!unknown@unknown.invalid PRIVMSG #esoteric :Question: Please put False once, and True twice: < 1278939460 0 :Sgeo_!unknown@unknown.invalid PRIVMSG #esoteric :IVV < 1278939472 0 :Sgeo_!unknown@unknown.invalid PRIVMSG #esoteric :I'm not sure if that's the sort of thing you meant < 1278939550 0 :Sgeo_!unknown@unknown.invalid PRIVMSG #esoteric :Taken to some sort of extreme, would this allow HQ9+ support? < 1278939589 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :ais523, so did you see it? :/ < 1278939729 0 :Sgeo_!unknown@unknown.invalid PRIVMSG #esoteric :Now, how would I go about asking questions about Strings? Would I ask, say, "Use numbers to represent characters, or use characters directly?" < 1278939772 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :you could have a flag to set whether strings were being taken literally, or in binary < 1278939809 0 :Sgeo_!unknown@unknown.invalid PRIVMSG #esoteric :literally, or numbers for each character, or binary? < 1278939855 0 :Sgeo_!unknown@unknown.invalid PRIVMSG #esoteric :BTW, the very first question is whether or not to use PSOX 2.1 features < 1278939885 0 :Sgeo_!unknown@unknown.invalid PRIVMSG #esoteric :This way, if PSOX 2.1 comes out, the opening.. stuff can mostly be changed < 1278939977 0 :Sgeo_!unknown@unknown.invalid PRIVMSG #esoteric :Actually, I might not need "Enter as binary" for strings, since I could have an option for numbers entered as binary < 1278940053 0 :Sgeo_!unknown@unknown.invalid PRIVMSG #esoteric :How do I separate the result from asking What is False and What is True from the rest of the questions' answers? < 1278940058 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :Sgeo_, you want bool before asking for numbers < 1278940062 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :or version < 1278940117 0 :Sgeo_!unknown@unknown.invalid PRIVMSG #esoteric :Yes, and I don't see how to separate bool from version and numbers < 1278940134 0 :Sgeo_!unknown@unknown.invalid PRIVMSG #esoteric :I mean, I can't really ask for separator, can I? < 1278940145 0 :Sgeo_!unknown@unknown.invalid PRIVMSG #esoteric :Unless I make the assumption that separator is one character < 1278940162 0 :Sgeo_!unknown@unknown.invalid PRIVMSG #esoteric :Even then, I'm not sure if I can do that < 1278940261 0 :Mathnerd314!~mathnerd3@nat-wireless-guest-reg-158-122.bu.edu JOIN :#esoteric < 1278940280 0 :Sgeo_!unknown@unknown.invalid PRIVMSG #esoteric :ACTION vaguely wonders how alise will react to all this < 1278940315 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :ais523, doesn't INTERCAL-72 do one number per line? < 1278940322 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :AnMaster: one number per two lines < 1278940327 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :oh fun < 1278940328 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :beause it needs an extra line to draw the overbars < 1278940355 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :Sgeo_, remember that when deciding to support intercal-72 ;P < 1278940361 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :it will be a PITA :D < 1278940367 0 :Sgeo_!unknown@unknown.invalid PRIVMSG #esoteric :So Newline is not good to be assumed to be separator < 1278940377 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :don't assume anything separator < 1278940382 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :just look at the sequence of bytes for repeats < 1278940387 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :don't assume anything at all < 1278940394 0 :Sgeo_!unknown@unknown.invalid PRIVMSG #esoteric :AnMaster, impossible. < 1278940418 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :Sgeo_, you could have a separate definition file containing the required stuff < 1278940433 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :like: < 1278940434 0 :Sgeo_!unknown@unknown.invalid PRIVMSG #esoteric :ais523, but it's possible that what a program wants to use for True repeats in a way that looks like separation between True and False < 1278940443 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :(define parser standard-byte) < 1278940447 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :or: < 1278940454 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :(define parser (lambda ...)) < 1278940467 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :Sgeo_: yes, I was wondering about that; presumably it's an unsolvable problem in general < 1278940469 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :Sgeo_, no way you can get more flexible than that < 1278940495 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :but you could require, say, three trues, two falses, two trues, that needs a pretty perverse string to be recognised incorrectly < 1278940520 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :Sgeo_, of course the equivalent can be done for languages like erlang, haskell and so on. Not sure about python < 1278940526 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :lisp is probably _the_ easiest one < 1278940607 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :well, shell wouldn't be too complicated either. Just messy. < 1278940607 0 :Sgeo_!unknown@unknown.invalid PRIVMSG #esoteric :AnMaster, I don't want to do that. I want all the information to be contained in the program < 1278940621 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :Sgeo_, then what ais523 suggested seems like a good idea < 1278940716 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :Sgeo_, idea: do what ais523 said to set up the basics. Then provide a way for the program to feed you a new parser function over this protocol, in case they want to switch to something less cumbersome (for them) but which can't be expressed the normal way. < 1278940774 0 :Sgeo_!unknown@unknown.invalid PRIVMSG #esoteric :Hmm.. < 1278940774 0 :Zuu!unknown@unknown.invalid QUIT :Read error: Connection reset by peer < 1278940786 0 :Sgeo_!unknown@unknown.invalid PRIVMSG #esoteric :Does the parser need to be TC? < 1278940832 0 :Sgeo_!unknown@unknown.invalid PRIVMSG #esoteric :ACTION wonders what role, if any, PSOX.EZ could play < 1278940876 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :it probably /should/ be TC, so esolangs which aren't TC could use PSOX to add TCness < 1278940878 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :just like it adds OS calls < 1278940879 0 :Sgeo_!unknown@unknown.invalid PRIVMSG #esoteric :If it's possible, but annoying, given the defaults, to use PSOX, then it would be possible for the new parser to just be fed to a regular function < 1278940892 0 :Sgeo_!unknown@unknown.invalid PRIVMSG #esoteric :ais523, that's the point of PSOX.EZ < 1278940893 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :ais523, through using the parser? Genius! < 1278940933 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :Sgeo_, it is much more esoteric if you do it through using a custom parser function < 1278940974 0 :Sgeo_!unknown@unknown.invalid PRIVMSG #esoteric :PSOX.HARD < 1278941036 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :hm? < 1278941059 0 :Sgeo_!unknown@unknown.invalid PRIVMSG #esoteric :Seriously, I'd have no clue how that would work out < 1278941123 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :ais523, hm what is the best way to refer to a haskell function? As in make it clear when talking about it on irc that you mean a function. Like you would say "strlen()" or such when wanting to make clear you mean a C function, or length/1 to make it clear in the context of Erlang code. < 1278941134 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :I can't see any obvious such way for haskell < 1278941176 0 :Sgeo_!unknown@unknown.invalid PRIVMSG #esoteric :putStrLn :: String -> IO () < 1278941185 0 :FireFly!~firefly@unaffiliated/firefly JOIN :#esoteric < 1278941195 0 :Sgeo_!unknown@unknown.invalid PRIVMSG #esoteric :Actually, I think there is a convention < 1278941198 0 :Sgeo_!unknown@unknown.invalid PRIVMSG #esoteric :Not sure what it is < 1278941204 0 :Deewiant!unknown@unknown.invalid PRIVMSG #esoteric :AnMaster: In what kind of situation would you need to disambiguate? < 1278941279 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :Deewiant, well odd < 1278941282 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :might be one < 1278941306 0 :Deewiant!unknown@unknown.invalid PRIVMSG #esoteric :?? < 1278941310 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :Deewiant, even even could be good to disambig in some situations < 1278941310 0 :MizardX!~MizardX@unaffiliated/mizardx JOIN :#esoteric < 1278941317 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :like that one < 1278941317 0 :Deewiant!unknown@unknown.invalid PRIVMSG #esoteric :Oh, those functions < 1278941325 0 :Deewiant!unknown@unknown.invalid PRIVMSG #esoteric :Hmm < 1278941336 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :Deewiant, you see, you got all confused by it :P < 1278941348 0 :Sgeo_!unknown@unknown.invalid PRIVMSG #esoteric :AnMaster++... oh wait < 1278941351 0 :Deewiant!unknown@unknown.invalid PRIVMSG #esoteric :Because I asked about a situation and got a function back :-P < 1278941354 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :Sgeo_, ? < 1278941369 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :Deewiant, hm < 1278941378 0 :Sgeo_!unknown@unknown.invalid PRIVMSG #esoteric :AnMaster, tried to increment, but this is Haskell < 1278941382 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :Sgeo_, right < 1278941404 0 :Deewiant!unknown@unknown.invalid PRIVMSG #esoteric :Well, one that always works is "the foo function" where you can even quote it (`foo`) if you want < 1278941409 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :hm you can't define postfix functions/operators in haskell right? < 1278941411 0 :Deewiant!unknown@unknown.invalid PRIVMSG #esoteric :But I guess you wanted something shorter... dunno < 1278941425 0 :Deewiant!unknown@unknown.invalid PRIVMSG #esoteric :Not really, no < 1278941431 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :hm < 1278941465 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :Deewiant, oh btw, I guess from now on, not breaking even should be called spanning odd < 1278941471 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :;) < 1278941498 0 :Deewiant!unknown@unknown.invalid PRIVMSG #esoteric :s/not// < 1278941802 0 :Sgeo_!unknown@unknown.invalid PRIVMSG #esoteric :Maybe I don't _want_ all TCness to be in the parser < 1278941811 0 :Sgeo_!unknown@unknown.invalid PRIVMSG #esoteric :I mean, that's kind of insane < 1278941814 0 :Zuu!zuu@unaffiliated/zuu JOIN :#esoteric < 1278941876 0 :Sgeo_!unknown@unknown.invalid PRIVMSG #esoteric :Ideally, PSOX.EZ-lite with an appropriate header should be fully turing-complete and I/O capable < 1278941908 0 :Sgeo_!unknown@unknown.invalid PRIVMSG #esoteric :If literally read into the PSOX2 intepreter < 1278942090 0 :Sgeo_!unknown@unknown.invalid PRIVMSG #esoteric :ais523, would regex be sufficient for parsing most languages? < 1278942099 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :Sgeo_: far from it < 1278942105 0 :Sgeo_!unknown@unknown.invalid PRIVMSG #esoteric :blargh < 1278942106 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :the vast majority of languages can't be parsed with a regex, in fact < 1278942116 0 :Sgeo_!unknown@unknown.invalid PRIVMSG #esoteric :erm, the output, I meant < 1278942117 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :even ones like Python with a deliberately simple syntax < 1278942142 0 :Sgeo_!unknown@unknown.invalid PRIVMSG #esoteric :As a custom parser providable by the program for PSOX2 < 1278942152 0 :Sgeo_!unknown@unknown.invalid PRIVMSG #esoteric :Although PSOX.EZ might be better < 1278942238 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :ais523, can regex be parsed with regex? < 1278942251 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :no, it allows nested parens < 1278942270 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :ais523, could a regex with non-nesting parens self-parse? < 1278942290 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :again no, unless it was incredibly simple < 1278942296 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :ais523, why not? < 1278942320 0 :Sgeo_!unknown@unknown.invalid PRIVMSG #esoteric :ACTION needs to determine how PSOX2 should handle varargs < 1278942326 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :AnMaster: think about backslashes, and escaping them < 1278942339 0 :Sgeo_!unknown@unknown.invalid PRIVMSG #esoteric :I want a PSOX.EZ function that can call PSOX functions < 1278942346 0 :Zuu!unknown@unknown.invalid PRIVMSG #esoteric :ais523: that is perfectly recognizable by a regular expression < 1278942346 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :ais523, hm okay < 1278942370 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :Zuu: yes, but not one without parens that's the same length as what it's recognising < 1278942371 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :ais523, could PCRE self-parse? After all it allows recursive matching of nested parens < 1278942379 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :possibly < 1278942386 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :that is PCRE without cheating by escaping to "native" code < 1278942406 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :Sgeo_, why varargs? < 1278942416 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :Sgeo_, just take a list of arguments instead < 1278942423 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :I think so < 1278942424 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :Sgeo_, like io:format/2 in erlang < 1278942429 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :it is analogous to printf < 1278942444 0 :Sgeo_!unknown@unknown.invalid PRIVMSG #esoteric :Well, then I need to figure out how to represent a list < 1278942447 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :io:format("format string", [list,of,parameters,for,format,string]). < 1278942468 0 :Sgeo_!unknown@unknown.invalid PRIVMSG #esoteric :I was thinking of asking for a function ender, but a list separator and terminator might be better < 1278942499 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :hm < 1278942543 0 :Sgeo_!unknown@unknown.invalid PRIVMSG #esoteric :Asking for separators is troublesome. Should I ask for a string, and whether or not it's to be taken literally? Can I provide the option for the terminator to depend on the.. wait, n/m < 1278942562 0 :Sgeo_!unknown@unknown.invalid PRIVMSG #esoteric :numbers and strings have their own terminators < 1278942578 0 :Sgeo_!unknown@unknown.invalid PRIVMSG #esoteric :But I still need to terminate the list somehow < 1278942939 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :ais523, how does INTERCAL-72 output 0? < 1278942981 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :an overline with nothing beneath it < 1278942987 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :ah interesting < 1278943249 0 :Sgeo_!unknown@unknown.invalid PRIVMSG #esoteric :ACTION decides that there will be no PSOX.EZ-lite. Just PSOX-lite. < 1278943260 0 :Sgeo_!unknown@unknown.invalid PRIVMSG #esoteric :No reason not to include other PSOX functions in the language < 1278943339 0 :Mathnerd314!unknown@unknown.invalid QUIT :Ping timeout: 276 seconds < 1278943486 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :> zipWith < 1278943486 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :zipWith zipWith zipWith3 zipWith3 zipWith4 zipWith5 zipWith6 zipWith7 < 1278943497 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :hm that seems somewhat annoying < 1278943553 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :ais523, why do haskell not have some zipWithN that takes a list of lists and a function that takes a list of values? < 1278943575 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :and why are there two "zipWith" listed there? < 1278943912 0 :Sgeo_!unknown@unknown.invalid PRIVMSG #esoteric :Is this a decent model for PSOX.EZ: The program calls an ez.edit function, that edits the function on a certain slot < 1278943933 0 :Sgeo_!unknown@unknown.invalid PRIVMSG #esoteric :Then it calls other .ez functions that add to the editied function's code < 1278943940 0 :Sgeo_!unknown@unknown.invalid PRIVMSG #esoteric :Then calls, say, ez.done or something < 1278943993 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :Sgeo_: you're reaching almost zzo38 levels of lack of context there... < 1278944040 0 :Sgeo_!unknown@unknown.invalid PRIVMSG #esoteric :Well, by slot, I'm thinking an array of stored .. ezfunctions < 1278945130 0 :BeholdMyGlory!unknown@unknown.invalid QUIT :Remote host closed the connection < 1278945463 0 :Sgeo_!unknown@unknown.invalid PRIVMSG #esoteric :ais523, for numbers processing, if the program says it wants to define its own digits, and PSOX asks for it to do True say, 16 times for base 16, then False, then for each digit, True for each character in the digit, then False, then the digit, is that reasonable? < 1278945491 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :binary > unary for that sort of thing < 1278945526 0 :Sgeo_!unknown@unknown.invalid PRIVMSG #esoteric :Hm, good point < 1278945544 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :hm how does one find docs on a function in Prelude or Data.List or whatever? Anything like erl -man for haskell? < 1278945545 0 :Sgeo_!unknown@unknown.invalid PRIVMSG #esoteric :Although.. how many digits will be in the binary? < 1278945548 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :ais523, ^ < 1278945563 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :AnMaster: there's a search engine for that sort of thing on haskell.org < 1278945565 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :called Hoogle IIRC < 1278945570 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :ais523, offline docs I meant < 1278945578 0 :Sgeo_!unknown@unknown.invalid PRIVMSG #esoteric :ais523, ^ < 1278945589 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :Sgeo_: there are ways to code it < 1278945596 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :look up binary-coded-ternary, and base fibonacci < 1278945611 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :ais523, I'm far from always online when I'm practising programming. Atm I'm outside with laptop connected over 3G to bouncer at home < 1278945627 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :local docs would be preferred due to cost and such < 1278945754 0 :Sgeo_!unknown@unknown.invalid PRIVMSG #esoteric :ais523, the only information on the former that I see is some.. optical thing? < 1278945768 0 :ais523!unknown@unknown.invalid PART #esoteric :? < 1278945794 0 :Sgeo_!unknown@unknown.invalid PRIVMSG #esoteric ::( < 1278945798 0 :Sgeo_!unknown@unknown.invalid PRIVMSG #esoteric :I think I irritated him < 1278946064 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :Sgeo_, Yeah probably you rather than me. Since you asked em a lot more questions than what I did < 1278946325 0 :Deewiant!unknown@unknown.invalid PRIVMSG #esoteric :AnMaster: zipWithN is ([a] -> [b]) -> [[a]] -> [[b]], which is not as useful since lists' elements have to have the same type < 1278946382 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :Deewiant, oh right. < 1278946408 0 :Deewiant!unknown@unknown.invalid PRIVMSG #esoteric :As for offline docs, I have a bookmark to ~/.cabal/share/doc/index.html (if that doesn't exist there's /usr/share/doc/ghc but that won't have user-installed stuff if you ever install such) < 1278946437 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :Deewiant, hm. It seems when looking at stuff that "tail recursion except it uses cons" is fairly popular in haskell code. From this I presume haskell somehow optimises this into tail recursion? < 1278946440 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :is that right? < 1278946447 0 :Deewiant!unknown@unknown.invalid PRIVMSG #esoteric :No < 1278946451 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :hm < 1278946459 0 :Deewiant!unknown@unknown.invalid PRIVMSG #esoteric :Lists are lazy data structures < 1278946471 0 :Deewiant!unknown@unknown.invalid PRIVMSG #esoteric :(a : b) doesn't have to evaluate a or b < 1278946472 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :I remember reading that tail recursion + cons is possible to optimise though < 1278946480 0 :Deewiant!unknown@unknown.invalid PRIVMSG #esoteric :And if you request a, it isn't necessary to evaluate b < 1278946503 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :Deewiant, yes but if you want to evaluate the whole thing you will end up evaluating it all anyway < 1278946520 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :Deewiant, so there the laziness won't help < 1278946520 0 :Deewiant!unknown@unknown.invalid PRIVMSG #esoteric :Yes, you will, but often the list doesn't need to be created < 1278946525 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :huh < 1278946534 0 :Deewiant!unknown@unknown.invalid PRIVMSG #esoteric :http://www.haskell.org/haskellwiki/Short_cut_fusion < 1278946559 0 :Deewiant!unknown@unknown.invalid PRIVMSG #esoteric :http://www.cse.unsw.edu.au/~dons/papers/stream-fusion.pdf < 1278946588 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :Deewiant, for example: show (map (\x -> x*x) [1..100000000]) < 1278946602 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :not sure if map is tail recursive or not < 1278946607 0 :Deewiant!unknown@unknown.invalid PRIVMSG #esoteric :Can be done in O(1) space < 1278946624 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :Deewiant, yes it can, but does ghc/ghci do that? < 1278946635 0 :Deewiant!unknown@unknown.invalid PRIVMSG #esoteric :Yes < 1278946684 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :hm... You could in theory optimise a lot of bloated C++ into very efficient code. But no compiler is smart enough for it. < 1278946736 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :Deewiant, couldn't lazy evaluation cause problems sometimes. Like with that "Fibonacci that is smart and count upwards instead of downwards"? < 1278946768 0 :Deewiant!unknown@unknown.invalid PRIVMSG #esoteric :Don't know what you're talking about re. Fibonacci, but yes, lazy evaluation is not a panacea < 1278946788 0 :Deewiant!unknown@unknown.invalid PRIVMSG #esoteric :http://paczesiowa.blogspot.com/2010/03/generalized-zipwithn.html defines a general zipWithN < 1278946795 0 :Deewiant!unknown@unknown.invalid PRIVMSG #esoteric :(It's nontrivial) < 1278946863 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :Deewiant, well you know the usual "dumb" fib implementation (base cases left out for brevity)? fib n = fib (n-1) + fib (n-2) ? < 1278946866 0 :CakeProphet!unknown@unknown.invalid QUIT :Ping timeout: 245 seconds < 1278946884 0 :Deewiant!unknown@unknown.invalid PRIVMSG #esoteric :Yes, I know Fibonacci < 1278946895 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :Deewiant, then there is the variant implementation that starts from the base cases and counts upwards to n < 1278946919 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :which is O(n) instead of O(n^2) iirc. At least for other languages than haskell < 1278946966 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :I don't remember the exact form of it < 1278946969 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :ACTION tries to find it < 1278947015 0 :Ilari!unknown@unknown.invalid PRIVMSG #esoteric :Isn't there way to calculate fibbonacci series in time (if integer operations are assumed to be O(1)) of O(log n)? < 1278947182 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :meh can't find it < 1278947199 0 :ineiros!unknown@unknown.invalid QUIT :Ping timeout: 240 seconds < 1278947225 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :basically it counts upwards and remember the values of n-1 and n-2 (memoising basically) < 1278947278 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :Ilari, hm I think there is < 1278947343 0 :CakeProphet!~adam@h62.22.18.98.dynamic.ip.windstream.net JOIN :#esoteric < 1278947381 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :oh btw is there a way in haskell do make a function like: f :: [Int] | [Char] -> ... < 1278947419 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :that is, one that can take a finite number of alternative different types. Probably handling them by two different pattern matches < 1278947457 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :this is something that would be trivial in erlang. But of course since it is dynamically typed that is quite a different situation < 1278947464 0 :Sgeo_!unknown@unknown.invalid PRIVMSG #esoteric :data SomeType = I [Int] | C [Char] < 1278947466 0 :Sgeo_!unknown@unknown.invalid PRIVMSG #esoteric :? < 1278947469 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :hm < 1278947471 0 :Deewiant!unknown@unknown.invalid PRIVMSG #esoteric :f :: Either [Int] [Char] -> ... < 1278947475 0 :Sgeo_!unknown@unknown.invalid PRIVMSG #esoteric :Or that < 1278947477 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :Sgeo_, well, somewhat bulky but could work < 1278947484 0 :Deewiant!unknown@unknown.invalid PRIVMSG #esoteric :But yeah, basically like that < 1278947489 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :Deewiant, ah, I haven't learned about Either yet. Interesting < 1278947527 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :Deewiant, could you have Either (a,b) (a,b,c) (a,b,c,d) and so on? < 1278947540 0 :Deewiant!unknown@unknown.invalid PRIVMSG #esoteric :No < 1278947545 0 :Deewiant!unknown@unknown.invalid PRIVMSG #esoteric :data Either a b = Left a | Right b < 1278947550 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :hm < 1278947604 0 :Deewiant!unknown@unknown.invalid PRIVMSG #esoteric :Of course you can nest Eithers but you soon get to the point where it's a better idea to just write a custom data type :-P < 1278947636 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :That is another troubling thing. How do you declare an "infinite" type. Like Integer. Lets say I want a type that contains all powers of two. 1,2,4,8,16 and so on < 1278947656 0 :fizzie!unknown@unknown.invalid PRIVMSG #esoteric :There's a simplish identity "fib(2n) = f(n+1)^2 - fib(n-1)^2", that sounds like it should make it possible to get fib(n) in O(log n) time since you can basically divide n by two with that. < 1278947677 0 :Deewiant!unknown@unknown.invalid PRIVMSG #esoteric :AnMaster: That's dependent typing, which Haskell doesn't have. < 1278947692 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :Deewiant, oh. So how is the type Integer declared? < 1278947714 0 :Deewiant!unknown@unknown.invalid PRIVMSG #esoteric :data Integer = S# Int# | J# Int# ByteArray# < 1278947732 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :Deewiant, or what about this: A non-empty-list of non-empty lists. Even erlang's "optional" type system can represent that < 1278947753 0 :Deewiant!unknown@unknown.invalid PRIVMSG #esoteric :type NonEmpty a = (a,[a]) < 1278947756 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :Deewiant, that looks like it is abusing internal stuff < 1278947761 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :Deewiant, that looks like a tuple < 1278947763 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :not a list < 1278947770 0 :Deewiant!unknown@unknown.invalid PRIVMSG #esoteric :Lists can be empty. < 1278947783 0 :CakeProphet!unknown@unknown.invalid QUIT :Read error: Operation timed out < 1278947816 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :Deewiant, yes but I want to specialise the list type to a type only containing non-empty ones. I can't see any good reason why it would be impossible. :/ < 1278947823 0 :Deewiant!unknown@unknown.invalid PRIVMSG #esoteric :Again, that's dependent typing. < 1278947827 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :ah < 1278947860 0 :Deewiant!unknown@unknown.invalid PRIVMSG #esoteric :You can't change the fact that list is declared as [a] = [] | a:[a] (or it would be, if it weren't built-in syntax) < 1278947872 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :hm < 1278947943 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :also the syntax for "these two parameters are the same" seems to require guards in haskell, in erlang you just do foo(A,A), which would only match if the second A matches the first A < 1278947968 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :sure, can be done with guards, but somewhat more verbose syntax < 1278947969 0 :Deewiant!unknown@unknown.invalid PRIVMSG #esoteric :Yes, Miranda had that too, but Haskell doesn't for some reason. < 1278947978 0 :Deewiant!unknown@unknown.invalid PRIVMSG #esoteric :It rarely matters in practice. < 1278948053 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :hm < 1278948157 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :Deewiant, are there any simple rules of thumb for exactly when haskell's lazyness will cause issues? I mean, with something like lisp or erlang the rule goes like "use tail recursion if you will be working on non-trivial sized lists". For haskell the rules seems a lot more complex... < 1278948204 0 :Deewiant!unknown@unknown.invalid PRIVMSG #esoteric :Be lazy if it makes sense to observe only part of the output < 1278948220 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :hm < 1278948244 0 :CakeProphet!~adam@h88.57.18.98.dynamic.ip.windstream.net JOIN :#esoteric < 1278948246 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :Deewiant, for a general library function like those in Data.List it could be very hard to know. < 1278948263 0 :Deewiant!unknown@unknown.invalid PRIVMSG #esoteric :How so < 1278948328 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :Deewiant, well consider map. The user could decide to require it all or just up until some point. And if it isn't lazy you can't map over infinite lists. < 1278948350 0 :Deewiant!unknown@unknown.invalid PRIVMSG #esoteric :There are cases where it makes sense, so map should be lazy. < 1278948358 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :hm < 1278948375 0 :Deewiant!unknown@unknown.invalid PRIVMSG #esoteric :The compiler can strictify stuff where necessary, but not lazify. < 1278948377 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :Deewiant, is tail recursion with an accumulator lazy? I presume it isn't < 1278948389 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :accumulator list I meant < 1278948445 0 :Deewiant!unknown@unknown.invalid PRIVMSG #esoteric :The accumulator is lazy. < 1278948455 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :in erlang you often append at the start of the accumulator in your tail recursive function, then have a lists:reverse call in your base case. (Which is implemented in the virtual machine itself, thus is more efficient) < 1278948485 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :but I can't see how that would be possible to make lazy. Or rather, possible to make lazy without having an extremely smart compiler < 1278948502 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :so would that be lazy or not? < 1278948512 0 :Deewiant!unknown@unknown.invalid PRIVMSG #esoteric :reverse isn't lazy, because it has to traverse the whole list before giving any output. < 1278948540 0 :Deewiant!unknown@unknown.invalid PRIVMSG #esoteric :The parameter isn't evaluated until it gets to the reverse. < 1278948548 0 :Deewiant!unknown@unknown.invalid PRIVMSG #esoteric :(And until the reverse is evaluated.) < 1278948606 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :Deewiant, does ghc optimise ++ in a recursive function? After all the compiler could see you kept appending to the end, and updating in place would not be visible anywhere before returning, thus generating code that appended to the end in place and kept a pointer to the current end all the time < 1278948624 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :it is quite feasible to do this, question is if ghc does it < 1278948632 0 :Deewiant!unknown@unknown.invalid PRIVMSG #esoteric :I don't know. < 1278948639 0 :Deewiant!unknown@unknown.invalid PRIVMSG #esoteric :Probably not. < 1278948669 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :pity, that would make trivial implementations of many list functions a lot faster. < 1278948809 0 :BeholdMyGlory!~behold@unaffiliated/beholdmyglory JOIN :#esoteric < 1278949193 0 :CakeProphet!unknown@unknown.invalid PRIVMSG #esoteric :AnMaster: generally speaking, GHC does optimizations of that kind. But I don't know if it's smart enough to /always/ do it < 1278949204 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :hm < 1278949219 0 :CakeProphet!unknown@unknown.invalid PRIVMSG #esoteric :this question is probably better answered by some of the pricks on #haskell. :) < 1278949236 0 :CakeProphet!unknown@unknown.invalid PRIVMSG #esoteric :-ahem- I mean very nice people. < 1278949356 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :heh < 1278949384 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :sigh... reasoning about strict code is a lot easier than lazy code < 1278949673 0 :Sgeo_!unknown@unknown.invalid PRIVMSG #esoteric :PSOX2 types: bools, literals, numbers, strings, lists < 1278949683 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :Sgeo_, literals being? < 1278949693 0 :Sgeo_!unknown@unknown.invalid PRIVMSG #esoteric :AnMaster, say the program is in HQ9+ < 1278949699 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :mhm? < 1278949715 0 :Sgeo_!unknown@unknown.invalid PRIVMSG #esoteric :And some function, maybe parser related, wants to know "Ok, how do you specify XYZ" < 1278949732 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :HH? < 1278949747 0 :Sgeo_!unknown@unknown.invalid PRIVMSG #esoteric :It would be annoying to use strings for that because presumably, for strings, you're already set up to use binary for each character < 1278949771 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :Sgeo_, eh? How will you represent strings for INTERCAL-72 then? < 1278949792 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :Sgeo_, for input it needs to take spelled out numbers in English < 1278949793 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :iirc < 1278949799 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :like ONE FOUR NINER < 1278949802 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :for 149 < 1278949824 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :Sgeo_, and output is roman numerals only < 1278949834 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :so it isn't even symmetric < 1278949837 0 :Sgeo_!unknown@unknown.invalid PRIVMSG #esoteric :So instead, .. oh, let me answer that question < 1278949848 0 :Sgeo_!unknown@unknown.invalid PRIVMSG #esoteric :Input options and output options can be specified separately < 1278949852 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :good < 1278949871 0 :Sgeo_!unknown@unknown.invalid PRIVMSG #esoteric :I currently don't know what the input options will look like < 1278949875 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :right < 1278949926 0 :Sgeo_!unknown@unknown.invalid PRIVMSG #esoteric :Anyway, literals could be used for things like separators. Separate domain from function < 1278949967 0 :Sgeo_!unknown@unknown.invalid PRIVMSG #esoteric :So that, say, HQ9+ can say that a separator is h9h instead of having to spell out all the characters < 1278950023 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :uhu < 1278950272 0 :Sgeo_!unknown@unknown.invalid PRIVMSG #esoteric :ACTION wonders how safe it would be to use q < 1278950345 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :Sgeo_, what did q do? < 1278950349 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :oh quine < 1278950350 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :right < 1278950360 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :depends on how soon you detect a repeating pattern < 1278950384 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :it would need to be multi-line for INTERCAL-72 I think < 1278950423 0 :Sgeo_!unknown@unknown.invalid PRIVMSG #esoteric :Nothing wrong with multi-line < 1278950513 0 :Sgeo_!unknown@unknown.invalid PRIVMSG #esoteric :ACTION ponders adding symbol to the list of types < 1278950523 0 :Sgeo_!unknown@unknown.invalid PRIVMSG #esoteric :There would be a function that takes a literal and stores it somewhere < 1278950542 0 :Sgeo_!unknown@unknown.invalid PRIVMSG #esoteric :Then, a function that accepts a symbol would just wait for the .. thingy < 1278950546 0 :Sgeo_!unknown@unknown.invalid PRIVMSG #esoteric :Whatever the literal was < 1278950569 0 :cpressey!~CPressey@173-9-215-173-Illinois.hfc.comcastbusiness.net JOIN :#esoteric < 1278950620 0 :Sgeo_!unknown@unknown.invalid PRIVMSG #esoteric :Was the type system one of PSOX's big problems? < 1278950629 0 :Sgeo_!unknown@unknown.invalid PRIVMSG #esoteric :Because PSOX2's type system is ever expanding :/ < 1278950893 0 :Mathnerd314!~mathnerd3@nat-wireless-guest-reg-158-122.bu.edu JOIN :#esoteric < 1278951048 0 :pikhq!unknown@unknown.invalid PRIVMSG #esoteric :Sgeo_: The Brainfuck-side code should be reasonably simple. < 1278951123 0 :Sgeo_!unknown@unknown.invalid PRIVMSG #esoteric :I think it would be < 1278951306 0 :Sgeo_!unknown@unknown.invalid PRIVMSG #esoteric :Although this is not going to be BF-specific < 1278951315 0 :Sgeo_!unknown@unknown.invalid PRIVMSG #esoteric :I guess I shouldn't lose sight of BF though < 1278951336 0 :pikhq!unknown@unknown.invalid PRIVMSG #esoteric :Sgeo_: No, but what can be done easily in Brainfuck can be done easily in a very large number of esolangs. < 1278951355 0 :cheater99!unknown@unknown.invalid PRIVMSG #esoteric :* ☠ :Erroneous Nickname < 1278951355 0 :cheater99!unknown@unknown.invalid PRIVMSG #esoteric ::( < 1278951358 0 :Sgeo_!unknown@unknown.invalid PRIVMSG #esoteric :I thought PSOX's flaw was that it was too BF-specific? < 1278951358 0 :pikhq!unknown@unknown.invalid PRIVMSG #esoteric :Hence, one can reasonably consider it a "lowest common denominator" of capability. < 1278951389 0 :Sgeo_!unknown@unknown.invalid PRIVMSG #esoteric :I think HQ9+ is my lowest common denominator < 1278951393 0 :pikhq!unknown@unknown.invalid PRIVMSG #esoteric :PSOX's flaw was that it was too darned hard to use outside of Brainfuck, and slightly less hard in Brainfuck. < 1278951411 0 :Sgeo_!unknown@unknown.invalid PRIVMSG #esoteric :ACTION blinks < 1278951429 0 :Sgeo_!unknown@unknown.invalid PRIVMSG #esoteric :How was it hard to use in BF? < 1278951440 0 :pikhq!unknown@unknown.invalid PRIVMSG #esoteric :... The bignums! The bignums! < 1278951495 0 :Sgeo_!unknown@unknown.invalid PRIVMSG #esoteric :Those were mostly optional < 1278951510 0 :CakeProphet!unknown@unknown.invalid PRIVMSG #esoteric :so does any of this fit into calamari's OS idea? < 1278951601 0 :ais523!~ais523@unaffiliated/ais523 JOIN :#esoteric < 1278951684 0 :Sgeo_!unknown@unknown.invalid PRIVMSG #esoteric :wb ais523 < 1278951869 0 :cheater99!unknown@unknown.invalid PRIVMSG #esoteric :hello ais523 < 1278951881 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :hi < 1278951916 0 :sebbu!unknown@unknown.invalid QUIT :Ping timeout: 260 seconds < 1278952359 0 :relet!~thomas@c905DBF51.dhcp.bluecom.no JOIN :#esoteric < 1278952570 0 :sebbu!~sebbu@ADijon-152-1-38-246.w83-194.abo.wanadoo.fr JOIN :#esoteric < 1278953295 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :hello ais523 < 1278953306 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :hi < 1278953402 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :when was windows 2000 released? IIRC the support for it finally ends tomorrow < 1278953424 0 :pikhq!unknown@unknown.invalid PRIVMSG #esoteric :2000. < 1278953434 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :right, you can never know with microsoft < 1278953443 0 :pikhq!unknown@unknown.invalid PRIVMSG #esoteric :XP was 2001. < 1278953450 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :wasn't windows 95 released in 96 or such? < 1278953452 0 :pikhq!unknown@unknown.invalid PRIVMSG #esoteric :Yes, really, it was obsoleted a year later. < 1278953459 0 :pikhq!unknown@unknown.invalid PRIVMSG #esoteric :No, just very late 95. < 1278953463 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :right < 1278953470 0 :pikhq!unknown@unknown.invalid PRIVMSG #esoteric :Some of the OSRs were in 96. < 1278953475 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :OSR? < 1278953499 0 :pikhq!unknown@unknown.invalid PRIVMSG #esoteric :Don't recall the expansion, but these were versions of 95 with added features for OEM usage. < 1278953505 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :ah < 1278953516 0 :pikhq!unknown@unknown.invalid PRIVMSG #esoteric :Featuring stuff like USB support and built-in IE. < 1278953605 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :wasn't that windows 95 SE and such? Second Edition or something < 1278953611 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :or was it 98 that had those? < 1278953616 0 :pikhq!unknown@unknown.invalid PRIVMSG #esoteric :98 had SE. < 1278953619 0 :pikhq!unknown@unknown.invalid PRIVMSG #esoteric :95 had the OSRs. < 1278953622 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :right < 1278953637 0 :pikhq!unknown@unknown.invalid PRIVMSG #esoteric :They're analogous, but 98 SE was actually sold to the general market. < 1278953641 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :ah < 1278953656 0 :pikhq!unknown@unknown.invalid PRIVMSG #esoteric :Anyways: from 95 to 2001, there was effectively a Windows release every year. < 1278953671 0 :pikhq!unknown@unknown.invalid PRIVMSG #esoteric :And then... Nothing until Vista. < 1278953732 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :pikhq, you don't count the service packs? < 1278953742 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :XP SP1/2 < 1278953748 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :was there ever a third one? < 1278953750 0 :pikhq!unknown@unknown.invalid PRIVMSG #esoteric :Mmm, okay, we can count the service packs. < 1278953751 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :not for xp 64-bit iirc < 1278953753 0 :pikhq!unknown@unknown.invalid PRIVMSG #esoteric :Yes, there was. < 1278953762 0 :pikhq!unknown@unknown.invalid PRIVMSG #esoteric :64-bit skipped a service pack. < 1278953767 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :indeed < 1278953775 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :pikhq, did it skip at the start or the end? < 1278953778 0 :pikhq!unknown@unknown.invalid PRIVMSG #esoteric :... Oh wait. No, that's not it at all. < 1278953788 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :pikhq, eh? < 1278953795 0 :pikhq!unknown@unknown.invalid PRIVMSG #esoteric :XP 64-bit was actually a marketed-as-XP version of Server 2003. < 1278953802 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :hah < 1278953823 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :pikhq, it *feels* like XP 32-bit. I used both. < 1278953835 0 :pikhq!unknown@unknown.invalid PRIVMSG #esoteric :Yes, Server 2003 didn't diverge massively. < 1278953838 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :it has the security center and all that iirc < 1278953864 0 :pikhq!unknown@unknown.invalid PRIVMSG #esoteric :Yeah. < 1278953886 0 :pikhq!unknown@unknown.invalid PRIVMSG #esoteric :It probably had the XP version of various UI widgets rather than the Server one. < 1278953889 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :pikhq, only difference is that it is sluggish after logging in on it virtualbox for about 20 seconds instead of about 2 minutes for 32-bit xp < 1278953892 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :no idea why < 1278953943 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :both had guest additions and such installed. Only difference I can remember is that the 32-bit one was home and Swedish and the 64-bit one was pro and English < 1278954062 0 :aschueler!~alec@host86-131-213-11.range86-131.btcentralplus.com JOIN :#esoteric < 1278954450 0 :jberryman!~jberryman@c-24-125-153-250.hsd1.va.comcast.net JOIN :#esoteric < 1278954767 0 :fizzie!unknown@unknown.invalid PRIVMSG #esoteric :In addition to "Windows XP x64 edition" for amd64, there was also that "Windows XP 64-bit edition" for Itanium, which apparently existed in two versions (2002 and 2003), the former of which was based on the XP codebase, while the latter was Server 2003 -like. < 1278954835 0 :fizzie!unknown@unknown.invalid PRIVMSG #esoteric :I think MSDNAA or some other relatively similar Microsoft offering (perhaps a predecessor) included the "64-bit edition", and it was a clever ruse since it wasn't the x64 edition but instead the Itanium one, making it pretty useless for most folks. < 1278954968 0 :Gregor!~Gregor@75-151-73-57-Spokane.hfc.comcastbusiness.net JOIN :#esoteric < 1278955414 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :hm the value encoding for hdparm -S is definitely esoteric < 1278955459 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :for example: "255 is interpreted as 21 minutes plus 15 seconds" (and there is much more strange things like that for other values < 1278955485 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :fizzie, I got the x86_64 one from MSDNAA < 1278955750 0 :oerjan!~oerjan@hagbart.nvg.ntnu.no JOIN :#esoteric < 1278956244 0 :fizzie!unknown@unknown.invalid PRIVMSG #esoteric :AnMaster: Mhm. Well, this was quite a while ago, and it might not have been MSDNAA exactly. < 1278956244 0 :cpressey!unknown@unknown.invalid PRIVMSG #esoteric :Scanner encountered IMPOSSIBLE TOKEN today! < 1278956293 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :cpressey, context? < 1278956311 0 :cpressey!unknown@unknown.invalid PRIVMSG #esoteric :AnMaster: No thank you. I'm full. < 1278956327 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :cpressey, so you gone completely insane then? XD < 1278956336 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric : ais523, why do haskell not have some zipWithN that takes a list of lists and a function that takes a list of values? < 1278956347 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :oerjan, I think I already got a full answer to it < 1278956349 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :you can easily do it with a bit of transpose < 1278956351 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :ok < 1278956359 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :oerjan, thought not that bit < 1278956389 0 :Sgeo_!unknown@unknown.invalid PRIVMSG #esoteric :ACTION Futuramas < 1278956393 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :hm does haskell have any printf equiv? < 1278956401 0 :Sgeo_!unknown@unknown.invalid PRIVMSG #esoteric :AnMaster, yes < 1278956412 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :how? The type could vary? < 1278956415 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :types* < 1278956427 0 :Sgeo_!unknown@unknown.invalid PRIVMSG #esoteric :It's some type that does weird things, I think < 1278956431 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :ah < 1278956436 0 :Deewiant!unknown@unknown.invalid PRIVMSG #esoteric :forall r. (PrintfType r) => String -> r < 1278956450 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :huh < 1278956454 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :!haskell Text.Printf.printf "%s: %d" "Like this" (42::Int) < 1278956457 0 :EgoBot!unknown@unknown.invalid PRIVMSG #esoteric :Like this: 42 < 1278956460 0 :Sgeo_!unknown@unknown.invalid PRIVMSG #esoteric :AnMaster, also, how could you not have noticed that we're all insane? < 1278956500 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :AnMaster: the ::Int is necessary here to make sure it gets the right type. I think. < 1278956508 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :the main reason format strings are more useful than manually concatenating strings IMO is that it makes i18n easier. Try translating strings like " of " out of context, could be different words in different phrases. < 1278956545 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :oerjan, hm. < 1278956560 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :oerjan, does it validate the format string at compile time? < 1278956566 0 :Deewiant!unknown@unknown.invalid PRIVMSG #esoteric :No. < 1278956567 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :AnMaster: it's a very clever type hack with type classes < 1278956568 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :ah < 1278956572 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :I see < 1278956583 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :would be cool if the type depended on the format string somehow < 1278956590 0 :Deewiant!unknown@unknown.invalid PRIVMSG #esoteric :Again, dependent types. :-P < 1278956591 0 :fizzie!unknown@unknown.invalid PRIVMSG #esoteric :AnMaster: The "21 minutes plus 15 seconds" isn't completely bonkers; it's just that in general it gives the time using units of 5 seconds (252*5 s = 21 min, 255*5 s = 21 min, 15 s), except that some values (241..251, 253 and 254) have special other meanings. < 1278956602 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :Deewiant, right. Whatever that is exactly, haskell should add it < 1278956616 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :AnMaster: however the interpretation of the format string depends on the actual types passed < 1278956622 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :fizzie, hah < 1278956622 0 :Sgeo_!unknown@unknown.invalid PRIVMSG #esoteric :fizzie, you're an Esotericer. You are unable to determine bonkers from non-bonkers >.> < 1278956623 0 :Deewiant!unknown@unknown.invalid PRIVMSG #esoteric :AnMaster: I think that would be highly nontrivial < 1278956631 0 :cpressey!unknown@unknown.invalid PRIVMSG #esoteric :Cherish your special other meanings. < 1278956632 0 :Deewiant!unknown@unknown.invalid PRIVMSG #esoteric :AnMaster: Ask alise about it, she knows. < 1278956638 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :so that it is still type safe < 1278956649 0 :fizzie!unknown@unknown.invalid PRIVMSG #esoteric :Esoterice is the best rice ever. < 1278956685 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :oerjan, so you mean it ignores %d if it has a string, and instead puts a string there? < 1278956696 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :um < 1278956711 0 :Sgeo_!unknown@unknown.invalid PRIVMSG #esoteric :Going to watch some Futurama now < 1278956712 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :!haskell Text.Printf.printf "%d" "test" < 1278956714 0 :EgoBot!unknown@unknown.invalid PRIVMSG #esoteric :*** Exception: Printf.printf: bad argument < 1278956714 0 :Deewiant!unknown@unknown.invalid PRIVMSG #esoteric :AnMaster: He means that if you say %d and give a float it'll error. < 1278956721 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :well that makes more sense < 1278956739 0 :Sgeo_!unknown@unknown.invalid PRIVMSG #esoteric :Runtime errors are not type-s.. well, not statically-type-safe? < 1278956742 0 :Deewiant!unknown@unknown.invalid PRIVMSG #esoteric :!haskell Text.printf.printf "%s %s" "one" < 1278956755 0 :Deewiant!unknown@unknown.invalid PRIVMSG #esoteric :Fine, don't channelify. < 1278956756 0 :Sgeo_!unknown@unknown.invalid PRIVMSG #esoteric :Wouldn't that be a function? < 1278956757 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :Sgeo_: indeed, but it's memory safe < 1278956762 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :Deewiant, it went to dcc? < 1278956776 0 :Deewiant!unknown@unknown.invalid PRIVMSG #esoteric :Aye < 1278956781 0 :Sgeo_!unknown@unknown.invalid PRIVMSG #esoteric :!haskell Text.printf.printf "%s %s" "one" < 1278956784 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :Deewiant, large runtime error? < 1278956786 0 :Deewiant!unknown@unknown.invalid PRIVMSG #esoteric :I guess the type error is too long < 1278956795 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :what? Type error? < 1278956802 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :oh runtime one? < 1278956804 0 :Sgeo_!unknown@unknown.invalid PRIVMSG #esoteric :Parse error < 1278956813 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :huh < 1278956821 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :!haskell Text.printf.printf "%s %s" "one" < 1278956827 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :hm < 1278956828 0 :Deewiant!unknown@unknown.invalid PRIVMSG #esoteric :!haskell Text.printf.printf "%s %s" "one" :: String < 1278956832 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :ah dcc won't work here < 1278956833 0 :fizzie!unknown@unknown.invalid PRIVMSG #esoteric :!haskell Text.printf.printf "%s %s" "one" < 1278956839 0 :Sgeo_!unknown@unknown.invalid PRIVMSG #esoteric :!haskell Text.printf.printf "%s %s" "one" :: String < 1278956842 0 :Deewiant!unknown@unknown.invalid PRIVMSG #esoteric :Er, that shouldn't be an error. < 1278956845 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :it will end up on wrong client, not the one I'm on atm < 1278956850 0 :Deewiant!unknown@unknown.invalid PRIVMSG #esoteric :Er, of course it should be. < 1278956853 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :_Printf_ < 1278956855 0 :Deewiant!unknown@unknown.invalid PRIVMSG #esoteric :I can't type and everybody else is copy-pasting. < 1278956858 0 :Deewiant!unknown@unknown.invalid PRIVMSG #esoteric :!haskell Text.Printf.printf "%s %s" "one" :: String < 1278956859 0 :EgoBot!unknown@unknown.invalid PRIVMSG #esoteric :*** Exception: Printf.printf: argument list ended prematurely < 1278956872 0 :fizzie!unknown@unknown.invalid PRIVMSG #esoteric :Deewiant: I did notice the lowercasing, I just wanted to see the error. :p < 1278956875 0 :Deewiant!unknown@unknown.invalid PRIVMSG #esoteric :!haskell Text.Printf.printf "%s" "one" "two" :: String < 1278956876 0 :EgoBot!unknown@unknown.invalid PRIVMSG #esoteric :*** Exception: Printf.printf: formatting string ended prematurely < 1278956880 0 :Deewiant!unknown@unknown.invalid PRIVMSG #esoteric :fizzie: :-P < 1278956882 0 :fizzie!unknown@unknown.invalid PRIVMSG #esoteric :(Also I have no idea whether it's case-sensitive or not.) < 1278956895 0 :Deewiant!unknown@unknown.invalid PRIVMSG #esoteric :Haskell is. < 1278956899 0 :fizzie!unknown@unknown.invalid PRIVMSG #esoteric :Seems to. < 1278956902 0 :Sgeo_!unknown@unknown.invalid PRIVMSG #esoteric :Anways, back to Futurama for me! < 1278956928 0 :cpressey!unknown@unknown.invalid PRIVMSG #esoteric :!haskell Text.Printf.printf "%s %s" "one" "two" < 1278956930 0 :EgoBot!unknown@unknown.invalid PRIVMSG #esoteric :one two < 1278956948 0 :cpressey!unknown@unknown.invalid PRIVMSG #esoteric :(Sorry, I just needed closure on that.) < 1278956961 0 :Deewiant!unknown@unknown.invalid PRIVMSG #esoteric ::-) < 1278956977 0 :pikhq!unknown@unknown.invalid PRIVMSG #esoteric :Sgeo_: Y'know, I always did like that s... ALL GLORY TO HYPNOTOAD < 1278957003 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :fizzie: haskell is very case sensitive, in fact lower and upper case identifiers are completely different namespaces (variables vs. constructors/types) < 1278957038 0 :cpressey!unknown@unknown.invalid PRIVMSG #esoteric :Yes, it's very, very sensitive about case. Touchy, even. < 1278957062 0 :cpressey!unknown@unknown.invalid PRIVMSG #esoteric :Once it completely stormed out on me when I accidentally used a lower-case 'g'. < 1278957080 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :!haskell Text.Printf.printf "%s %s" "one" "two" :: String -- printf doubles as sprintf too < 1278957082 0 :EgoBot!unknown@unknown.invalid PRIVMSG #esoteric :"one two" < 1278957143 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :cpressey, yes it does have impressively large errors < 1278957150 0 :Deewiant!unknown@unknown.invalid PRIVMSG #esoteric :Haha < 1278957151 0 :Deewiant!unknown@unknown.invalid PRIVMSG #esoteric :http://paczesiowa.blogspot.com/2010/07/two-dimensional-analog-literals-in.html < 1278957290 0 :cpressey!unknown@unknown.invalid PRIVMSG #esoteric :A bold attempt at lexical abuse, indeed. < 1278957346 0 :fizzie!unknown@unknown.invalid PRIVMSG #esoteric :"-- ghc for 4x4 rectangle needs 500 mb of memory (I don't have a machine capable of checking 5x5) --" < 1278957353 0 :fizzie!unknown@unknown.invalid PRIVMSG #esoteric :An entirely practical thing. < 1278957359 0 :Deewiant!unknown@unknown.invalid PRIVMSG #esoteric :Only the first solution. < 1278957367 0 :fizzie!unknown@unknown.invalid PRIVMSG #esoteric :Yes, I noticed. It still caught the eye. < 1278957442 0 :Mathnerd314!unknown@unknown.invalid QUIT :Ping timeout: 260 seconds < 1278957748 0 :Mathnerd314!~mathnerd3@nat-wireless-guest-reg-158-122.bu.edu JOIN :#esoteric < 1278957803 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric : Deewiant, for example: show (map (\x -> x*x) [1..100000000]) < 1278957839 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :while ghc optimizes such things, it's based on special rules for builtin list functions like map iiuc < 1278957858 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :so it doesn't apply to functions you build directly using cons and tail recursion < 1278957873 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :unless you also add such a rule pragma for it < 1278957928 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :http://haskell.org/ghc/docs/6.12.2/html/users_guide/rewrite-rules.html < 1278958004 0 :cpressey!unknown@unknown.invalid PRIVMSG #esoteric :Ah, Haskell, the PL/I of functional languages. < 1278958013 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :oerjan, hm. Seems messy it can't detect it itself. I saw some paper discussing how to do it automatically for cons + tail recursion for scheme iirc < 1278958022 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :cpressey, what do you mean by that? < 1278958023 0 :Deewiant!unknown@unknown.invalid PRIVMSG #esoteric :oerjan: It does execute that in O(1) even if you define your own map and enumFromTo. < 1278958046 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :Deewiant: well, that is laziness i guess. < 1278958052 0 :pikhq!unknown@unknown.invalid PRIVMSG #esoteric :I do love that you can write rewrite rules. < 1278958137 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :also the list [0,2..] ... how is it represented internally? Some kind of special end-marker instead of [] ? < 1278958164 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :oops, bbl food is ready < 1278958171 0 :cpressey!unknown@unknown.invalid PRIVMSG #esoteric :Over the weekend I wrote a Commodore 64 music interrupt routine -- not everything I want yet, but the basics are there (multiple voices, patterns, zero-duration events that make arbitrary changes to the SID registers...) < 1278958178 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :AnMaster: enumFromThen 0 2 < 1278958189 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :!haskell take 10 $ enumFromThen 0 2 < 1278958191 0 :EgoBot!unknown@unknown.invalid PRIVMSG #esoteric :[0,2,4,6,8,10,12,14,16,18] < 1278958270 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :enumFromThen is also one of the "good producers" in the url i linked above, so it may very well be optimized away (for builtin types) < 1278958281 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :well Int and Char, it says < 1278958491 0 :Gregor-P!~AndChat@173-117-38-159.pools.spcsdns.net JOIN :#esoteric < 1278958584 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric : oh btw is there a way in haskell do make a function like: f :: [Int] | [Char] -> ... < 1278958613 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :you can also make a class method for it < 1278958647 0 :pikhq!unknown@unknown.invalid PRIVMSG #esoteric :Typeclass, yeah. < 1278958662 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :class MyF a where { f :: [a] -> ... }; instance MyF Int where ...; instance MyF Char where ... < 1278958705 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :oerjan, hah < 1278958744 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :enumFromThen is also a class method btw < 1278958752 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :!haskell :t enumFromThen < 1278958753 0 :EgoBot!unknown@unknown.invalid PRIVMSG #esoteric :enumFromThen :: (Enum a) => a -> a -> [a] < 1278958764 0 :pikhq!unknown@unknown.invalid PRIVMSG #esoteric :Mmm, Enum. < 1278958785 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :I haven't got to typeclasses yet in this book. I think it is next chapter < 1278958793 0 :Deewiant!unknown@unknown.invalid PRIVMSG #esoteric :What book? < 1278958802 0 :fizzie!unknown@unknown.invalid PRIVMSG #esoteric :cpressey: How coincidental; I instead wrote an Impulse Tracker module player stub (x86-32 Linux, /dev/dsp audio, <2kB of code) for a friend who needed one; it also doesn't do all the strange .it format stuff, but it does the basics: sample playback with linear interpolation, portamento/pitch-slide/vibrato/volume-slide/speed-control effects, panning, things like that. < 1278958866 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :real world haskell. Of those free online resources that others recommended in this channel it was the only one I found were all of comprehensible, non-silly, not extremely boring < 1278958883 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :I think it was ehird who recommended that one < 1278958901 0 :Deewiant!unknown@unknown.invalid PRIVMSG #esoteric :It's the best < 1278958921 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric : There's a simplish identity "fib(2n) = f(n+1)^2 - fib(n-1)^2", that sounds like it should make it possible to get fib(n) in O(log n) time since you can basically divide n by two with that. < 1278958931 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :Deewiant, well I noticed some typos. Like mixing up which filename it used for a file one paragraph above or such < 1278958966 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :that probably breaks down with odd numbers. there's a more complicated version that gives you both fib(2n) and fib(2n+1) though < 1278959000 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :you know, scheme seems to have (help 'foo), python have similar online help. Erlang at least have easily accessible man pages for each module. But haskell seems to require me to open a web browser to get reference docs < 1278959002 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :that is annoying < 1278959006 0 :Deewiant!unknown@unknown.invalid PRIVMSG #esoteric :AnMaster: Submit errata if it's not already been submitted < 1278959006 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :based on multiplying matrices [fib(n) fib(n+1); 0 fib(n)] or something like that < 1278959012 0 :fizzie!unknown@unknown.invalid PRIVMSG #esoteric :oerjan: But note that if you get fib(2n) easily, you can also get fib(2n+2) (since it's just fib(2(n+1))), and then from fib(2n) and fib(2n+2) you get fib(2n+1) with just one subtraction. < 1278959019 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :Deewiant, it was mentioned in a comment on that paragraph < 1278959028 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :fizzie: oh hm < 1278959067 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :maybe it works then. anyway see you. < 1278959070 0 :oerjan!unknown@unknown.invalid QUIT :Quit: leaving < 1278959087 0 :fizzie!unknown@unknown.invalid PRIVMSG #esoteric :(Then you again have the three consecutive fibs, and could proceed with duplications as long as it's necessary.) < 1278959163 0 :fizzie!unknown@unknown.invalid PRIVMSG #esoteric :1. fib, story, tale, tarradiddle, taradiddle -- (a trivial lie; "he told a fib about eating his spinach"; "how can I stop my child from telling stories?") -- heh, tarradiddle. < 1278959193 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric ::info foldl' saying "foldl' :: (a -> b -> a) -> a -> [b] -> a" is far less helpful than something containing some sort of parameter names < 1278959214 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :this takes longer to read if you need to check order of the parameters in the lambda < 1278959225 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :"hm which one is a, *eyes jump around in the line*" < 1278959624 0 :Deewiant!unknown@unknown.invalid PRIVMSG #esoteric :If it gave you parameter names you'd get "foldl' f z xs" < 1278959704 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :Deewiant, argh... mathematicians ;) < 1278959744 0 :Deewiant!unknown@unknown.invalid PRIVMSG #esoteric :My Haskell tends to look like that too, since it's obvious from the type what they mean ;-P < 1278959781 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :Deewiant, I would like docs like: foldl' (\acc element -> acc') acc0 [list] -> final_acc < 1278959783 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :or something like that < 1278959850 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :Deewiant, of course I found figure it out from the type. But that meant having to read more of it, to see which one was a and which one was b < 1278959943 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :Deewiant, and sometimes it might not be so clear. Something like isSuffixOf :: (Eq a) => [a] -> [a] -> Bool < 1278959957 0 :Deewiant!unknown@unknown.invalid PRIVMSG #esoteric :a `isSuffixOf` b < 1278960004 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :Deewiant, yes but you know what ` is here? A dead key. And I use it as that when writing occasionally, so turning it off isn't an option really. Which means that is slower to type < 1278960014 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :and yes that one I remember, there are harder to remember cases however < 1278960030 0 :Deewiant!unknown@unknown.invalid PRIVMSG #esoteric :I know it's a dead key on the scandinavian layout < 1278960040 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :btw how does something like: fromIntegral :: (Integral a, Num b) => a -> b work? < 1278960047 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :black magic? < 1278960054 0 :Deewiant!unknown@unknown.invalid PRIVMSG #esoteric :And I recommend spending a key or getting a keyboard with more keys so you can have a non-dead version of ` :-P < 1278960067 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :Deewiant, second is not an option on a laptop < 1278960070 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :which is what I'm on atm < 1278960083 0 :Deewiant!unknown@unknown.invalid PRIVMSG #esoteric :fromIntegral = fromInteger . toInteger < 1278960088 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :uh < 1278960108 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :okay then, how does fromInteger work? < 1278960130 0 :Deewiant!unknown@unknown.invalid PRIVMSG #esoteric :class (Eq a, Show a) => Num a where ... fromInteger :: Num a => Integer -> a < 1278960146 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :class? Oh type classes hm < 1278960165 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :I guess that explains the seemingly magic breach of the type system < 1278960187 0 :Deewiant!unknown@unknown.invalid PRIVMSG #esoteric :Nothing is breached because of the (Integral a, Num b) constraint < 1278960197 0 :Deewiant!unknown@unknown.invalid PRIVMSG #esoteric :You can't do fromIntegral "foo" :: (Int,Int) :-P < 1278960229 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :hm < 1278960273 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :what about ord then (Data.Char) < 1278960289 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :ord :: Char -> Int < 1278960293 0 :Deewiant!unknown@unknown.invalid PRIVMSG #esoteric :What about it < 1278960336 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :it isn't a Num or Integral according to :info < 1278960341 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :Char that is < 1278960351 0 :Deewiant!unknown@unknown.invalid PRIVMSG #esoteric :True, and? < 1278960353 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :lookup table or what? < 1278960362 0 :Deewiant!unknown@unknown.invalid PRIVMSG #esoteric :Probably a low-level cast < 1278960364 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :ah < 1278960377 0 :Deewiant!unknown@unknown.invalid PRIVMSG #esoteric :Or exploiting Char < 1278960385 0 :Deewiant!unknown@unknown.invalid PRIVMSG #esoteric :data Char = C# Char# < 1278960390 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :Deewiant, so black magic at last. The lack of "this only works because it is special cased in runtime" stuff made me suspicious < 1278960395 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :;) < 1278960399 0 :Deewiant!unknown@unknown.invalid PRIVMSG #esoteric :It doesn't have to be black magic < 1278960404 0 :Deewiant!unknown@unknown.invalid PRIVMSG #esoteric :It's just more performant that way < 1278960407 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :hm < 1278960418 0 :Deewiant!unknown@unknown.invalid PRIVMSG #esoteric :E.g. your lookup table would work fine < 1278960425 0 :cpressey!unknown@unknown.invalid PRIVMSG #esoteric :!haskell fromInteger 'c' < 1278960426 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :Deewiant, for unicode? < 1278960431 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :Hm how much space < 1278960439 0 :Deewiant!unknown@unknown.invalid PRIVMSG #esoteric :Like said, it's not performant :-P < 1278960454 0 :Deewiant!unknown@unknown.invalid PRIVMSG #esoteric :AnMaster: But also, ord = fromEnum. < 1278960457 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :well, what is the size of Char? < 1278960462 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :Deewiant, huh < 1278960473 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :fromEnum :: (Enum a) => a -> Int < 1278960475 0 :Deewiant!unknown@unknown.invalid PRIVMSG #esoteric :!haskell (minBound,maxBound) :: (Char,Char) < 1278960476 0 :EgoBot!unknown@unknown.invalid PRIVMSG #esoteric :('\NUL','\1114111') < 1278960477 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :okay that looks like cheating < 1278960480 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :Deewiant, heh < 1278960493 0 :Deewiant!unknown@unknown.invalid PRIVMSG #esoteric :!haskell join (***) fromEnum (minBound,maxBound) :: (Char,Char) < 1278960496 0 :Deewiant!unknown@unknown.invalid PRIVMSG #esoteric :!haskell join (***) fromEnum ((minBound,maxBound) :: (Char,Char)) < 1278960503 0 :Deewiant!unknown@unknown.invalid PRIVMSG #esoteric :Meh, it doesn't import things. < 1278960508 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :hm < 1278960512 0 :Deewiant!unknown@unknown.invalid PRIVMSG #esoteric :!haskell Control.Monad.join (Control.Arrow.***) fromEnum ((minBound,maxBound) :: (Char,Char)) < 1278960515 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :*** ? < 1278960531 0 :Deewiant!unknown@unknown.invalid PRIVMSG #esoteric :That should have worked :-/ < 1278960540 0 :cpressey!unknown@unknown.invalid PRIVMSG #esoteric :!haskell "foo" `isSuffixOf` "anyfoo" < 1278960565 0 :Deewiant!unknown@unknown.invalid PRIVMSG #esoteric :!haskell print $ Control.Monad.join (Control.Arrow.***) fromEnum ((minBound,maxBound) :: (Char,Char)) < 1278960567 0 :cpressey!unknown@unknown.invalid PRIVMSG #esoteric :All I get from EgoBot are strange-looking PM's. < 1278960573 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :Deewiant, Enum? is that like data Foo = A | B | C ? < 1278960588 0 :Deewiant!unknown@unknown.invalid PRIVMSG #esoteric :AnMaster: Read up on type classes before asking more of these questions :-P < 1278960593 0 :cpressey!unknown@unknown.invalid PRIVMSG #esoteric :!haskell "Hello, world!" < 1278960595 0 :EgoBot!unknown@unknown.invalid PRIVMSG #esoteric :"Hello, world!" < 1278960619 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :Deewiant, ah right. I'm just at the stage where I start spotting various logic flaws in what I have learnt so far ;P < 1278960655 0 :Deewiant!unknown@unknown.invalid PRIVMSG #esoteric :!haskell (fromEnum (minBound :: Char), fromEnum (maxBound :: Char)) < 1278960657 0 :EgoBot!unknown@unknown.invalid PRIVMSG #esoteric :(0,1114111) < 1278960691 0 :cpressey!unknown@unknown.invalid PRIVMSG #esoteric :!haskell List.isSuffixOf < 1278960705 0 :Deewiant!unknown@unknown.invalid PRIVMSG #esoteric :!haskell "foo" `Data.List.isSuffixOf` "anyfoo" < 1278960707 0 :EgoBot!unknown@unknown.invalid PRIVMSG #esoteric :True < 1278960720 0 :cpressey!unknown@unknown.invalid PRIVMSG #esoteric :Data, of course. < 1278960732 0 :Deewiant!unknown@unknown.invalid PRIVMSG #esoteric :!haskell "foo" `List.isSuffixOf` "anyfoo" < 1278960733 0 :EgoBot!unknown@unknown.invalid PRIVMSG #esoteric :True < 1278960895 0 :cpressey!unknown@unknown.invalid PRIVMSG #esoteric :!haskell List.IsSuffixOf "foo" "anyfoo" < 1278960902 0 :Deewiant!unknown@unknown.invalid PRIVMSG #esoteric :s/I/i/ < 1278960914 0 :cpressey!unknown@unknown.invalid PRIVMSG #esoteric :!haskell List.isSuffixOf "foo" "anyfoo" < 1278960916 0 :EgoBot!unknown@unknown.invalid PRIVMSG #esoteric :True < 1278960930 0 :cpressey!unknown@unknown.invalid PRIVMSG #esoteric :EgoBot's error messaging leaves a lot to be desired. < 1278960943 0 :Deewiant!unknown@unknown.invalid PRIVMSG #esoteric :Yep < 1278961030 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :huh, why can't lambdas have multiple "entry points" like normal functions < 1278961045 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :even erlang manages that < 1278961066 0 :Deewiant!unknown@unknown.invalid PRIVMSG #esoteric :Because pattern matching directly in definitions is just syntax sugar for case < 1278961098 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :Deewiant, same goes for erlang if you ask the compiler to dump the stage just before it generates beam asm < 1278961103 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :Deewiant, so that is not a good reason < 1278961136 0 :Deewiant!unknown@unknown.invalid PRIVMSG #esoteric :Well, er... because if you need that and case is too cumbersome, your lambda is so complicated that it should be a function anyway? :-P < 1278961189 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :Deewiant, well it just needed two cases. Hm does all top level functions in a haskell source file become visible outside? < 1278961219 0 :Deewiant!unknown@unknown.invalid PRIVMSG #esoteric :Unless you specify what is visible, yes < 1278961226 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :ah you can do that, nice < 1278961241 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :useful in the case of a helper function being used by more than one top level function < 1278961340 0 :cpressey!unknown@unknown.invalid PRIVMSG #esoteric :Functions that are not to be exported must be written in invisible ink. < 1278961376 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric ::P < 1278961401 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :cpressey, but I used all my invisible ink when coding in whitespace. I guess I need to buy more < 1278961408 0 :jberryman!unknown@unknown.invalid QUIT :Ping timeout: 276 seconds < 1278961641 0 :kar8nga!~kar8nga@j-170.vc-graz.ac.at JOIN :#esoteric < 1278961645 0 :myndzi\!myndzi@c-24-19-39-178.hsd1.wa.comcast.net JOIN :#esoteric < 1278961660 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :why no 1-tupple? Sure it is pretty useless but it still seems strange to just have a hole in the valid range. < 1278961693 0 :Deewiant!unknown@unknown.invalid PRIVMSG #esoteric :Tuples are written (e1, ..., ek), and may be of arbitrary length k>=2. < 1278961708 0 :Deewiant!unknown@unknown.invalid PRIVMSG #esoteric :The unit expression () has type () (see Section 4.1.2). It is the only member of that type apart from _|_, and can be thought of as the "nullary tuple" < 1278961727 0 :choochter!unknown@unknown.invalid QUIT :Ping timeout: 265 seconds < 1278961772 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :Deewiant, That doesn't really answer my question though. It just confirms thagt there is no 1-tuple. < 1278961780 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :It doesn't explain why < 1278961784 0 :Deewiant!unknown@unknown.invalid PRIVMSG #esoteric :It says that () isn't really a tuple. < 1278961786 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :hm < 1278961791 0 :cpressey!unknown@unknown.invalid PRIVMSG #esoteric :() isn't a tuple to me < 1278961800 0 :Deewiant!unknown@unknown.invalid PRIVMSG #esoteric :The trivial type is written as () and has kind *. < 1278961800 0 :cpressey!unknown@unknown.invalid PRIVMSG #esoteric :And 1-tuples ARE pretty useless. < 1278961804 0 :Deewiant!unknown@unknown.invalid PRIVMSG #esoteric :The tuple types are written as (,), (,,), and so on. Their kinds are *->*->*, *->*->*->*, and so on. < 1278961806 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :that makes more sense < 1278961812 0 :myndzi!unknown@unknown.invalid QUIT :Ping timeout: 240 seconds < 1278961834 0 :Deewiant!unknown@unknown.invalid PRIVMSG #esoteric :If you prefer, just do type Void = () and forget about ()'s existence ;-P < 1278961836 0 :cpressey!unknown@unknown.invalid PRIVMSG #esoteric :1-tuple, a.k.a. "single". < 1278961852 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :Deewiant, kind? < 1278961859 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :I guess I haven't got to that yet < 1278961862 0 :cpressey!unknown@unknown.invalid PRIVMSG #esoteric :I've never seen a mathematician concern themselves with a 1-tuple. < 1278961863 0 :Deewiant!unknown@unknown.invalid PRIVMSG #esoteric :Yep. < 1278961872 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :Deewiant, type classes again? < 1278961894 0 :Deewiant!unknown@unknown.invalid PRIVMSG #esoteric :Nope. < 1278961955 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :mhm < 1278962175 0 :CakeProphet!unknown@unknown.invalid PRIVMSG #esoteric :AnMaster: a kind has to do with type parameters < 1278962183 0 :CakeProphet!unknown@unknown.invalid PRIVMSG #esoteric :[a] has kind * -> * < 1278962190 0 :Deewiant!unknown@unknown.invalid PRIVMSG #esoteric :No, [a] is a type. < 1278962202 0 :CakeProphet!unknown@unknown.invalid PRIVMSG #esoteric :....right/ < 1278962203 0 :CakeProphet!unknown@unknown.invalid PRIVMSG #esoteric :? < 1278962206 0 :Deewiant!unknown@unknown.invalid PRIVMSG #esoteric :It has type *. < 1278962211 0 :Deewiant!unknown@unknown.invalid PRIVMSG #esoteric :[] has kind * -> *. < 1278962214 0 :CakeProphet!unknown@unknown.invalid PRIVMSG #esoteric :er, well. bleh < 1278962215 0 :CakeProphet!unknown@unknown.invalid PRIVMSG #esoteric :okay. < 1278962239 0 :Deewiant!unknown@unknown.invalid PRIVMSG #esoteric :s/\Vtype */kind */ < 1278962241 0 :CakeProphet!unknown@unknown.invalid PRIVMSG #esoteric :I thought he was learning Haskell not math. :P < 1278962257 0 :CakeProphet!unknown@unknown.invalid PRIVMSG #esoteric :the distinction is trivial to make. < 1278962264 0 :Deewiant!unknown@unknown.invalid PRIVMSG #esoteric :In Haskell, [a] has kind * and [] has kind * -> *. < 1278962281 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric : [] has kind * -> *. <-- why is that then? < 1278962289 0 :Deewiant!unknown@unknown.invalid PRIVMSG #esoteric :Just read the book. :-P < 1278962476 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :wait, does the lambdas to foldl and foldr have the acc/value parameters in different orders? < 1278962490 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :Deewiant, is that correct? < 1278962493 0 :Deewiant!unknown@unknown.invalid PRIVMSG #esoteric :Yes. No, I don't know why. < 1278962496 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :ah < 1278962508 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :Deewiant, it explains this strange bug I have been hitting for a while now < 1278962650 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric : Occurs check: cannot construct the infinite type: a = [a] < 1278962656 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :now I'm confronted with that instead < 1278962670 0 :cpressey!unknown@unknown.invalid PRIVMSG #esoteric :Stupid occurs check. < 1278962674 0 :cpressey!unknown@unknown.invalid PRIVMSG #esoteric :I want infinite types. < 1278962680 0 :Deewiant!unknown@unknown.invalid PRIVMSG #esoteric :No, you don't. :-P < 1278962694 0 :cpressey!unknown@unknown.invalid PRIVMSG #esoteric :They would have been very useful in that interpreter I was writing! < 1278962701 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :I want to know what I did wrong instead < 1278962730 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :or rather, what sort of thing could cause it hm < 1278962738 0 :Deewiant!unknown@unknown.invalid PRIVMSG #esoteric :http://www.mail-archive.com/haskell-cafe@haskell.org/msg18345.html says why infinite types are a bad idea < 1278962763 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :In the first argument of `foldr', namely `step' < 1278962764 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :hm < 1278962775 0 :Deewiant!unknown@unknown.invalid PRIVMSG #esoteric :AnMaster: (x:x) will cause that error, for example. (For any x.) < 1278962784 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric : where step val acc | f val = acc : val < 1278962784 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric : | otherwise = [] < 1278962786 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :like that? < 1278962787 0 :Deewiant!unknown@unknown.invalid PRIVMSG #esoteric :Well, not quite any x. < 1278962791 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :it looks fine to me < 1278962869 0 :Deewiant!unknown@unknown.invalid PRIVMSG #esoteric :foldr :: (a -> b -> b) -> b -> [a] -> b < 1278962879 0 :Deewiant!unknown@unknown.invalid PRIVMSG #esoteric :So, step should have type a -> b -> b < 1278962881 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :did I confuse the order of val and acc hm < 1278962923 0 :Deewiant!unknown@unknown.invalid PRIVMSG #esoteric :So assign 'val' the type 'a' and 'acc' the type 'b' < 1278962931 0 :cpressey!unknown@unknown.invalid PRIVMSG #esoteric :Deewiant: Thanks for the link. I think though, that's not really an argument against infinite types... that's an argument for not relying on a type checker which blithely allows them. If I could annotate the type with "infinite" or something, to indicate that I know what I'm getting into... < 1278962942 0 :Deewiant!unknown@unknown.invalid PRIVMSG #esoteric :'acc : val' has the type of val < 1278962947 0 :cpressey!unknown@unknown.invalid PRIVMSG #esoteric :Ah, but I wasn't aware of "newtype" before. < 1278962978 0 :Deewiant!unknown@unknown.invalid PRIVMSG #esoteric :AnMaster: So, in short, yes. < 1278963002 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :Deewiant, but it seems like first param must be element from list < 1278963007 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :since a matches the type a there < 1278963021 0 :Deewiant!unknown@unknown.invalid PRIVMSG #esoteric :Yes < 1278963039 0 :Deewiant!unknown@unknown.invalid PRIVMSG #esoteric :But your 'step' function has type [a] -> a -> [a] < 1278963045 0 :Deewiant!unknown@unknown.invalid PRIVMSG #esoteric :This does not match a -> b -> b < 1278963051 0 :Deewiant!unknown@unknown.invalid PRIVMSG #esoteric :Since you cannot unify b with both a and [a] < 1278963052 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :and I'm building a list of [a] since I'm trying to implement takeWhile with foldr. It is one of the exercises mentioned in the book. < 1278963059 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :Deewiant, ah hm < 1278963067 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :val : acc < 1278963068 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :that is it < 1278963073 0 :Deewiant!unknown@unknown.invalid PRIVMSG #esoteric :Right :-) < 1278963090 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :Deewiant, it reported the error on the wrong line < 1278963092 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :annoying < 1278963103 0 :Deewiant!unknown@unknown.invalid PRIVMSG #esoteric :If you had put a type annotation on step it probably would have reported it there < 1278963114 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :Deewiant, can you do that inside a where? < 1278963116 0 :Deewiant!unknown@unknown.invalid PRIVMSG #esoteric :Yes. < 1278963121 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :huh, how? < 1278963134 0 :Deewiant!unknown@unknown.invalid PRIVMSG #esoteric :Same way as at top-level. < 1278963148 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :where step :: ... < 1278963154 0 :Deewiant!unknown@unknown.invalid PRIVMSG #esoteric :Yep < 1278963155 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric : step ... = < 1278963157 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :and so ? < 1278963159 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :huh < 1278963373 0 :cpressey!unknown@unknown.invalid PRIVMSG #esoteric :Oh, so newtype is basically a type alias? This reminds me of Pascal! < 1278963384 0 :Deewiant!unknown@unknown.invalid PRIVMSG #esoteric :type is basically a type alias. ;-) < 1278963484 0 :cpressey!unknown@unknown.invalid PRIVMSG #esoteric :Er, right. A newtype is a, what word would work better - "synonym"? It has the same structure but has a distinct identity. < 1278963516 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :so you need explicit conversion functions? < 1278963525 0 :cpressey!unknown@unknown.invalid PRIVMSG #esoteric :I think I'm confused. < 1278963615 0 :cpressey!unknown@unknown.invalid PRIVMSG #esoteric :Actually, I can't see yet how newtype differs from data. < 1278963658 0 :Deewiant!unknown@unknown.invalid PRIVMSG #esoteric :http://www.haskell.org/haskellwiki/Newtype < 1278963684 0 :cpressey!unknown@unknown.invalid PRIVMSG #esoteric :Yeah, I read that, it wasn't very enlightening to me. < 1278963716 0 :Deewiant!unknown@unknown.invalid PRIVMSG #esoteric :newtypes have no overhead on top of what they wrap < 1278963734 0 :Deewiant!unknown@unknown.invalid PRIVMSG #esoteric :With data, you have the constructor < 1278963783 0 :cpressey!unknown@unknown.invalid PRIVMSG #esoteric :OK. That's more subtle than I was expecting. < 1278963824 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :is !haskell ghc or ghci? < 1278963826 0 :Deewiant!unknown@unknown.invalid PRIVMSG #esoteric :Even if the data is strict in its parameter, _|_ and Data _|_ are distinct, but _|_ and NewType _|_ are identical. < 1278963834 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :`ls < 1278963843 0 :HackEgo!unknown@unknown.invalid PRIVMSG #esoteric :bin \ cube2.base64 \ cube2.jpg \ hack_gregor \ hello.txt \ help.txt \ huh \ netcat-0.7.1 \ netcat-0.7.1.tar.gz \ out.txt \ paste \ poetry.txt \ quotes \ qw.pl \ share \ test.sh \ tmpdir.18581 \ wunderbar_emporium < 1278963844 0 :Deewiant!unknown@unknown.invalid PRIVMSG #esoteric :ghci is ghc --interactive ;-) < 1278963853 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :Deewiant, well you know what I meant though :P < 1278963878 0 :Deewiant!unknown@unknown.invalid PRIVMSG #esoteric :It's most likely GHC because you can import and define main and whatnot. < 1278963898 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :ah < 1278963906 0 :Deewiant!unknown@unknown.invalid PRIVMSG #esoteric :s/GHC/ghc/ < 1278963997 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :the partially applied function thing seems fairly limited in that it is restricted to argument order < 1278964006 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :or? < 1278964031 0 :Gracenotes!unknown@unknown.invalid QUIT :Ping timeout: 240 seconds < 1278964056 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :for something like isSuffixOf partially applying either the first or the second parameter would both be useful, in different situations < 1278964140 0 :cpressey!unknown@unknown.invalid PRIVMSG #esoteric :(\ x y -> isSuffixOf y x) "foo" < 1278964149 0 :Deewiant!unknown@unknown.invalid PRIVMSG #esoteric :flip isSuffixOf < 1278964157 0 :cpressey!unknown@unknown.invalid PRIVMSG #esoteric :I'm sure there's ways to do that in "pointless" style -- yes, exactly < 1278964164 0 :Deewiant!unknown@unknown.invalid PRIVMSG #esoteric :!haskell ("foo" `isSuffixOf`) "foobar" < 1278964174 0 :Deewiant!unknown@unknown.invalid PRIVMSG #esoteric :!haskell ("foo" `List.isSuffixOf`) "foobar" < 1278964175 0 :EgoBot!unknown@unknown.invalid PRIVMSG #esoteric :False < 1278964187 0 :Deewiant!unknown@unknown.invalid PRIVMSG #esoteric :!haskell (`List.isSuffixOf` "foobar") "bar" < 1278964188 0 :EgoBot!unknown@unknown.invalid PRIVMSG #esoteric :True < 1278964335 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :ah < 1278964349 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :Deewiant, well, more than two parameters might be more of an issue :P < 1278964367 0 :Deewiant!unknown@unknown.invalid PRIVMSG #esoteric :Just write lambdas < 1278964406 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :Deewiant, sure, but why do partial application at all then. Just syntax sugar? < 1278964455 0 :Deewiant!unknown@unknown.invalid PRIVMSG #esoteric :Sort of, but also how all application works :-P < 1278964464 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :hm < 1278964480 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :Deewiant, does ghc optimise that in the generated code? < 1278964491 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :so it ends up like a function taking multiple parameters again < 1278964494 0 :Deewiant!unknown@unknown.invalid PRIVMSG #esoteric :Yes, or things would be unbearably slow < 1278964500 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :right < 1278964655 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :"As-patterns have a more practical use than simple readability: they can help us to share data instead of copying it. In our definition of noAsPattern, when we match (x:xs), we construct a new copy of it in the body of our function." < 1278964656 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :um < 1278964669 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :seriously? ghc doesn't optimise that? < 1278964691 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :for context, the code was: noAsPattern (x:xs) = (x:xs) : noAsPattern xs < 1278964699 0 :Deewiant!unknown@unknown.invalid PRIVMSG #esoteric :Dunno < 1278964700 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :if ghc doesn't optimise that.... wtf < 1278964733 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :ah a comment points out that is only true for ghc without -O or such < 1278964751 0 :Deewiant!unknown@unknown.invalid PRIVMSG #esoteric :I think it's bad practice to write something which is both less clear and suboptimal anyway :-P < 1278964770 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :Deewiant, well the comment also compares: < 1278964774 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :foo (x:ys@(y:zs)) = ... foo ys ... < 1278964775 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :vs. < 1278964776 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :foo (x:y:zs) = ... foo (y:zs) ... < 1278964791 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :Deewiant, I have to agree that the latter seems easier to read < 1278964822 0 :Deewiant!unknown@unknown.invalid PRIVMSG #esoteric :foo (x : ys@(y:zs)) is best IMO < 1278964831 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :Deewiant, I find that harder to read < 1278965175 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :Deewiant, hm... does . only work on functions with one parameter? < 1278965187 0 :Deewiant!unknown@unknown.invalid PRIVMSG #esoteric :All functions have only one parameter < 1278965652 0 :Gracenotes!~chatzilla@70-101-160-69.dsl2.mon.ny.frontiernet.net JOIN :#esoteric < 1278965895 0 :coppro!~coppro@unaffiliated/coppro JOIN :#esoteric < 1278966701 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :Deewiant, well lets say an uncurried function then < 1278966730 0 :Deewiant!unknown@unknown.invalid PRIVMSG #esoteric :All functions have only one parameter < 1278966743 0 :Deewiant!unknown@unknown.invalid PRIVMSG #esoteric :If the parameter is of type (a,b,c,d) it's still one parameter. < 1278966750 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :hm < 1278966806 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric ::type foldl . head < 1278966806 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :foldl . head :: [a -> b -> a] -> a -> [b] -> a < 1278966814 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :that looks strange < 1278966838 0 :Deewiant!unknown@unknown.invalid PRIVMSG #esoteric :\fs -> foldl (head fs) < 1278966866 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :aha < 1278966886 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :somewhat confusing still < 1278967218 0 :fizzie!unknown@unknown.invalid PRIVMSG #esoteric :Deewiant: Latest news on the Descent 1 rendering front: I've manually crafted a "fireball" (it doesn't really look like realistic fire, but on the other hand neither does the game sprite) that the enemies could shoot, and it makes for a reasonably nice (if unrealistic and not at all fire-like; but again, it's not like it should be fire) splash effect if I use Blender's fluid-simulator to model how it could hit an enemy bot, but it takes quite a while to set sim < 1278967218 0 :fizzie!unknown@unknown.invalid PRIVMSG #esoteric :ulation domains and initial velocities and such properly (esp. since the movement should match pretty closely frame-by-frame what happens in the demo), and writing a script to set everything like that up based on the demo file sounds like far too much effort. I'm beginning to feel I'm wasting my time here (what, really?!). < 1278967294 0 :Deewiant!unknown@unknown.invalid PRIVMSG #esoteric :(I dunno, really?!) < 1278967780 0 :augur!unknown@unknown.invalid QUIT :Remote host closed the connection < 1278967791 0 :augur!~augur@216-164-33-76.c3-0.slvr-ubr1.lnh-slvr.md.cable.rcn.com JOIN :#esoteric < 1278967800 0 :augur!unknown@unknown.invalid QUIT :Remote host closed the connection < 1278967805 0 :augur!~augur@216-164-33-76.c3-0.slvr-ubr1.lnh-slvr.md.cable.rcn.com JOIN :#esoteric < 1278967830 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :Deewiant, hm seq can only be implemented inside the runtime I suspect. Or would there be a way in pure haskell? < 1278967926 0 :Deewiant!unknown@unknown.invalid PRIVMSG #esoteric :No, it's a primitive < 1278967947 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :Deewiant, primitive meaning something implemented in the compiler itself? < 1278967968 0 :Deewiant!unknown@unknown.invalid PRIVMSG #esoteric :Meaning not definable in Haskell < 1278967978 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :ah < 1278968008 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :Deewiant, like a special form in lisp? < 1278968018 0 :Deewiant!unknown@unknown.invalid PRIVMSG #esoteric :Yep < 1278968145 0 :hiato!~nine@41-133-80-156.dsl.mweb.co.za JOIN :#esoteric < 1278968164 0 :sebbu!unknown@unknown.invalid QUIT :Ping timeout: 265 seconds < 1278968454 0 :aschueler!unknown@unknown.invalid QUIT :Ping timeout: 265 seconds < 1278968988 0 :cpressey!unknown@unknown.invalid PRIVMSG #esoteric :Meaning, those things all languages have < 1278969269 0 :Mathnerd314!unknown@unknown.invalid QUIT :Ping timeout: 265 seconds < 1278969369 0 :MigoMipo!unknown@unknown.invalid QUIT :Remote host closed the connection < 1278969399 0 :MigoMipo!~John@84-217-4-49.tn.glocalnet.net JOIN :#esoteric < 1278969614 0 :Mathnerd314_!~mathnerd3@nat-wireless-guest-reg-158-122.bu.edu JOIN :#esoteric < 1278969633 0 :Mathnerd314_!unknown@unknown.invalid NICK :Mathnerd314 < 1278970256 0 :CakeProphet!unknown@unknown.invalid QUIT :Ping timeout: 258 seconds < 1278970322 0 :CakeProphet!~adam@h209.45.18.98.dynamic.ip.windstream.net JOIN :#esoteric < 1278970956 0 :coppro!unknown@unknown.invalid QUIT :Remote host closed the connection < 1278970969 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :cpressey, hm trying to think of such in C. I guess for, while and other keywords would count as those there < 1278970979 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :possibly the stuff in stdarg.h too < 1278971014 0 :cpressey!unknown@unknown.invalid PRIVMSG #esoteric :+ < 1278971017 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :though actually I seem to remember a pure C implementation of that. What a mess < 1278971029 0 :cpressey!unknown@unknown.invalid PRIVMSG #esoteric :% < 1278971036 0 :cpressey!unknown@unknown.invalid PRIVMSG #esoteric :sizeof < 1278971050 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :cpressey, + can be implemented as a increment for finite types < 1278971052 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :in theory < 1278971076 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :% could be implemented without that too. Just very inefficient < 1278971081 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :sizeof would be harder < 1278971097 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :of course the syntax doesn't allow you to name a function + or % < 1278971105 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :but the same feature could be implemented < 1278971111 0 :Deewiant!unknown@unknown.invalid PRIVMSG #esoteric :Difference is that those are actually keywords; seq isn't < 1278971122 0 :cpressey!unknown@unknown.invalid PRIVMSG #esoteric :You could of course implement seq in Haskell too, just write a Haskell interpreter in Haskell < 1278971154 0 :Deewiant!unknown@unknown.invalid PRIVMSG #esoteric :That is, of course, not the same thing :-) < 1278971158 0 :fizzie!unknown@unknown.invalid PRIVMSG #esoteric :You can get a sort-of sizeof with a pointer-arithmetics-based macro, but it's messy and probably not quite identical. < 1278971183 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :ah I seem to remember the gnu extension alignof can be done with pointer arithmetic < 1278971203 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :fizzie, you would need to know the last member + the size of it I think < 1278971216 0 :Sgeo_!unknown@unknown.invalid PRIVMSG #esoteric :Dear Chrome: Please stop ignoring me. Love, Sgeo < 1278971263 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :hm is it possible to make a language entirely without special forms? < 1278971267 0 :kar8nga!unknown@unknown.invalid QUIT :Remote host closed the connection < 1278971272 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :hm probably not < 1278971278 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :except the null language < 1278971288 0 :cpressey!unknown@unknown.invalid PRIVMSG #esoteric :Not if you want strings to have meanings < 1278971310 0 :cpressey!unknown@unknown.invalid PRIVMSG #esoteric :The language (0|1)* has no special forms, as such < 1278971314 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :cpressey, do natural languages have special forms I wonder... < 1278971322 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :cpressey, hm good point < 1278971372 0 :fizzie!unknown@unknown.invalid PRIVMSG #esoteric :If you restrict yourself to sensible platforms and implementations, you can get the size of a type by taking "((type*)0)+1" and dumping that back to an integer; and conversely for declared variable "x" by simply (char*)(&x+1)-(char*)&x, but getting sizeof() of an arbitrary expression is going to be problematic. < 1278971424 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :fizzie, ooh fun < 1278971426 0 :p_q!~poiuy_qwe@bas5-toronto47-1176439960.dsl.bell.ca JOIN :#esoteric < 1278971452 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :so sizeof is not a special form except possibly for "macros evaluate more than once" < 1278971459 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :which there is a gnu extension to avoid < 1278971532 0 :fizzie!unknown@unknown.invalid PRIVMSG #esoteric :Well, really, to get your macro implementation to do sizeof(1UL) properly is not exactly trivial. Possibly if you have the typeof() GNU extension, but that's a bit... cheatingy. < 1278971547 0 :fizzie!unknown@unknown.invalid PRIVMSG #esoteric :Then someone would just ask you to implement typeof() as a macro, and where would you be then? < 1278971557 0 :poiuy_qwert!unknown@unknown.invalid QUIT :Ping timeout: 265 seconds < 1278971566 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :fizzie, reducing one problem to another < 1278971568 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric ::P < 1278971587 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :mathematicians do it all the time. So it must be okay < 1278971619 0 :Sgeo_!unknown@unknown.invalid PRIVMSG #esoteric :I think that's if you can solve what the problem was reduced to < 1278971651 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :Sgeo_, nah it is used to prove that solving something else would solve that problem as well < 1278971666 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :or for finding if some logic function is universal < 1278971667 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :or whatever < 1278971669 0 :Deewiant!unknown@unknown.invalid PRIVMSG #esoteric :Just reduce two problems to each other and let the compiler figure it out < 1278971686 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :Deewiant, you could have typeof as a special form but not sizeof < 1278971691 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :I don't see the issue with that < 1278971712 0 :cpressey!unknown@unknown.invalid PRIVMSG #esoteric :if < 1278971720 0 :Deewiant!unknown@unknown.invalid PRIVMSG #esoteric :then < 1278971721 0 :Deewiant!unknown@unknown.invalid PRIVMSG #esoteric :else < 1278971728 0 :cpressey!unknown@unknown.invalid PRIVMSG #esoteric :goto < 1278971729 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :Deewiant, just reduce your special forms to the minimal possible set < 1278971736 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :Deewiant, then? C doesn't use that < 1278971747 0 :cpressey!unknown@unknown.invalid PRIVMSG #esoteric :abort() < 1278971753 0 :Deewiant!unknown@unknown.invalid PRIVMSG #esoteric :} < 1278971754 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :cpressey, not a special form < 1278971765 0 :cpressey!unknown@unknown.invalid PRIVMSG #esoteric :? < 1278971777 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :cpressey, I implemented abort() in C on an embedded platform. It calls _exit() < 1278971794 0 :cpressey!unknown@unknown.invalid PRIVMSG #esoteric :and _exit() is implemented in terms of abort() < 1278971800 0 :fizzie!unknown@unknown.invalid PRIVMSG #esoteric :#define sizeof(x) ({ typeof (x) _xxx; (size_t)((char *)(&x+1) - (char *)&x); }) /* disclaimer: untested, uses GNU extensions, breaks if _xxx has been #defined something strange, pointless anyway */ < 1278971804 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :cpressey, incorrect. _exit there calls the OS task manager < 1278971822 0 :cpressey!unknown@unknown.invalid PRIVMSG #esoteric :Oh no! cpressey is incorrect! < 1278971841 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :cpressey, besides abort() on systems that have stuff like core dumps couldn't have _exit() implemented in terms of abort() < 1278971871 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :cpressey, and there you could make abort() just do *0; or such (assuming that page was never mapped, like on linux) < 1278971900 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :fizzie, :D < 1278971929 0 :cpressey!unknown@unknown.invalid PRIVMSG #esoteric :break < 1278971929 0 :fizzie!unknown@unknown.invalid PRIVMSG #esoteric :abort() on a hosted (non-freestanding) C system -- well, C99 anyway -- is defined in terms of raise(SIGABRT), though. < 1278971932 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :cpressey, agreed < 1278971942 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :fizzie, right < 1278971947 0 :cpressey!unknown@unknown.invalid PRIVMSG #esoteric :You agree with "break"? How? < 1278971971 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :cpressey, that it is a special form, well or syntax. Is "let" a special form in haskell? I guess it is. < 1278971997 0 :cpressey!unknown@unknown.invalid PRIVMSG #esoteric :You can implement break with goto, if I'm not mistaken < 1278972005 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :cpressey, oh good point < 1278972017 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :cpressey, requires you to add a label at the end though < 1278972020 0 :fizzie!unknown@unknown.invalid PRIVMSG #esoteric :You need to put some labels in, though; you can't just #define ... < 1278972023 0 :fizzie!unknown@unknown.invalid PRIVMSG #esoteric :Right, what he said. < 1278972032 0 :cpressey!unknown@unknown.invalid PRIVMSG #esoteric :I wonder if that matters or not. < 1278972047 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :depends on how exactly you define special form < 1278972049 0 :cpressey!unknown@unknown.invalid PRIVMSG #esoteric :You can't #define anything at all in Haskell. < 1278972068 0 :Deewiant!unknown@unknown.invalid PRIVMSG #esoteric :AnMaster: The semantics of let can be duplicated with lambdas. < 1278972074 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :Deewiant, hm okay < 1278972082 0 :fizzie!unknown@unknown.invalid PRIVMSG #esoteric :You could possibly do a set of macros for all break'able contexts that'd wrap the thing and a (user-supplied) label, and then require the break-macro to be provided with the label. < 1278972086 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :cpressey, you could define a function, or not < 1278972089 0 :fizzie!unknown@unknown.invalid PRIVMSG #esoteric :You'd get multi-level breaks for free, even. < 1278972106 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :fizzie, hah < 1278972181 0 :fizzie!unknown@unknown.invalid PRIVMSG #esoteric :Could do the same for "continue", of course. < 1278972200 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :fizzie, wouldn't that mess up the counter with continue; in for loops? < 1278972235 0 :fizzie!unknown@unknown.invalid PRIVMSG #esoteric :In fact, the C99 spec (6.8.6.2) defines "continue" in terms of a goto statement. < 1278972237 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :you would need an extra line simulating that part of the for or while loop continue that is in the loop header < 1278972243 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :huh < 1278972255 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :fizzie, I can't see how that works in for loops < 1278972289 0 :Gregor-P!unknown@unknown.invalid PRIVMSG #esoteric :On a scale from one to ten, that's awesome. < 1278972297 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :fizzie, oh wait < 1278972297 0 :fizzie!unknown@unknown.invalid PRIVMSG #esoteric :http://zem.fi/~fis/cont.png < 1278972298 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :to the end < 1278972299 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :I get it < 1278972301 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :that works < 1278972316 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :took a while to load it and find the section < 1278972327 0 :fizzie!unknown@unknown.invalid PRIVMSG #esoteric :You could have just waited for the .png. < 1278972344 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :fizzie, I didn't know it was forthcoming < 1278972382 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :Gregor-P, 9.5i < 1278972384 0 :fizzie!unknown@unknown.invalid PRIVMSG #esoteric :They didn't do the same for "break", but of course there's the switch mess to consider. < 1278972423 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :fizzie, oh yes but that works there too as jumping to a label after the switch < 1278972428 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :switch block* < 1278972533 0 :fizzie!unknown@unknown.invalid PRIVMSG #esoteric :Sure, but it might look messy. Three columns is already a bit much. < 1278972557 0 :pikhq!unknown@unknown.invalid QUIT :Read error: Connection reset by peer < 1278972578 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :fizzie, why side by side, I see no reason for that < 1278972609 0 :cheater99!unknown@unknown.invalid QUIT :Ping timeout: 240 seconds < 1278972683 0 :fizzie!unknown@unknown.invalid PRIVMSG #esoteric :Note that continue shall appear "in *or as* a loop body", so instead of the usual "for (;;);" infiniloop you could confusingly write "for (;;) continue;" instead. < 1278972813 0 :fizzie!unknown@unknown.invalid PRIVMSG #esoteric :Makes one wonder how many loops there are with only a "break" or a "continue" as the body. < 1278973007 0 :p_q!unknown@unknown.invalid QUIT :Ping timeout: 265 seconds < 1278973046 0 :p_q!~poiuy_qwe@bas5-toronto47-2925108814.dsl.bell.ca JOIN :#esoteric < 1278973122 0 :Gregor-P!unknown@unknown.invalid PRIVMSG #esoteric :whi < 1278973126 0 :Gregor-P!unknown@unknown.invalid PRIVMSG #esoteric :Erm < 1278973136 0 :Gregor-P!unknown@unknown.invalid PRIVMSG #esoteric :while (1) break; < 1278973175 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :Gregor-P, do { break } while(0); < 1278973178 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :even more confusing < 1278973193 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :idea: < 1278973198 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :Add this to a system header: < 1278973199 0 :fizzie!unknown@unknown.invalid PRIVMSG #esoteric :for (int temp = x(); do_something(temp); /* nice way to limit the scope of 'temp' */) break; < 1278973207 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :#define break do { break } while(0) < 1278973211 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :err < 1278973213 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :add the ; < 1278973216 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :of course < 1278973220 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :now people will be all confused < 1278973224 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :why break is a no-op < 1278973225 0 :Gregor-P!unknown@unknown.invalid PRIVMSG #esoteric :fizzie: Not C89 though < 1278973241 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :Gregor-P, who cares about that < 1278973245 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :I'm all C99 < 1278973255 0 :Gregor-P!unknown@unknown.invalid PRIVMSG #esoteric :AnMaster: ... you could also #define break 0 < 1278973276 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :Gregor-P, gcc would warn about value that wasn't used iirc < 1278973281 0 :fizzie!unknown@unknown.invalid PRIVMSG #esoteric :Gregor-P: Yes, well, it *is* 2010 or something. Haven't you noticed all the flying cars outside? < 1278973300 0 :Gregor-P!unknown@unknown.invalid PRIVMSG #esoteric :AnMaster: #define break < 1278973308 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :Gregor-P, that works < 1278973318 0 :Gregor-P!unknown@unknown.invalid PRIVMSG #esoteric :fizzie: You can have your future! < 1278973336 0 :Gregor-P!unknown@unknown.invalid PRIVMSG #esoteric :#define while if < 1278973357 0 :Gregor-P!unknown@unknown.invalid PRIVMSG #esoteric :#define int signed char < 1278973371 0 :fizzie!unknown@unknown.invalid PRIVMSG #esoteric :Or "#define break ;" and then wait for some unsuspecting guy to start putting "break" after all his lines because it seems to work. < 1278973374 0 :cheater99!~cheater@ip-80-226-47-208.vodafone-net.de JOIN :#esoteric < 1278973375 0 :Gregor-P!unknown@unknown.invalid PRIVMSG #esoteric :#define void long long < 1278973522 0 :fizzie!unknown@unknown.invalid PRIVMSG #esoteric :They should add a generic "long long long ... long" bignum-ish type next; where each "long" would double the size. Why be afraid of being ridiculous? < 1278973534 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric : #define int signed char <-- but but... int is supposed to be 16 bit!? < 1278973537 0 :GreaseMonkey!~gm@unaffiliated/greasemonkey JOIN :#esoteric < 1278973541 0 :hiato!unknown@unknown.invalid QUIT :Quit: underflow < 1278973577 0 :fizzie!unknown@unknown.invalid PRIVMSG #esoteric :AnMaster: Perhaps Gregor-P has big chars. < 1278973590 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :Gregor-P, oh some DSP then no doubt < 1278973594 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :err < 1278973595 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :fizzie, ^ < 1278973604 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :though there it tends to be 32-bit < 1278973637 0 :fizzie!unknown@unknown.invalid PRIVMSG #esoteric :Oh, there are many 16-bit DSPs in the less-high-end range. < 1278973648 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :ah < 1278973651 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :good point < 1278973667 0 :fizzie!unknown@unknown.invalid PRIVMSG #esoteric :And many 24-bit ones too, though I don't know what their C implementations do. < 1278973689 0 :fizzie!unknown@unknown.invalid PRIVMSG #esoteric :Certainly you can fake 8-bit chars on architecture like that too. < 1278973704 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :well true < 1278973836 0 :Gregor-P!unknown@unknown.invalid PRIVMSG #esoteric :lawl < 1278973974 0 :fizzie!unknown@unknown.invalid PRIVMSG #esoteric :Gregor-P: What about it, how big are your... chars? < 1278974100 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :that sounded like innuendo. I blame the ... < 1278974104 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric ::P < 1278974780 0 :Gregor-P!unknown@unknown.invalid PRIVMSG #esoteric :fizzie: My chars are as big as they come ... and UNsigned. < 1278974813 0 :Gregor-P!unknown@unknown.invalid PRIVMSG #esoteric :Alternate: < 1278974833 0 :Gregor-P!unknown@unknown.invalid PRIVMSG #esoteric :fizzie: 8 bits, uncut ... I mean unsigned < 1278974860 0 :pikhq!~pikhq@75-106-123-171.cust.wildblue.net JOIN :#esoteric < 1278975016 0 :oerjan!~oerjan@hagbart.nvg.ntnu.no JOIN :#esoteric < 1278975203 0 :aliseiphone!~ehirdipho@82.132.139.75 JOIN :#esoteric < 1278975211 0 :aliseiphone!unknown@unknown.invalid PRIVMSG #esoteric :Hi. < 1278975213 0 :aliseiphone!unknown@unknown.invalid QUIT :Client Quit < 1278975267 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :famous first and last words. < 1278975291 0 :aliseiphone!~ehirdipho@82.132.139.203 JOIN :#esoteric < 1278975294 0 :aliseiphone!unknown@unknown.invalid PRIVMSG #esoteric :And hi again. < 1278975300 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :rehi < 1278975331 0 :aliseiphone!unknown@unknown.invalid PRIVMSG #esoteric :ais523! Nice to see you at this time. Maintain that sleep schedule. < 1278975355 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :aliseiphone: I've been awake for /well/ over 24 hours, being on call because there's a paper submission deadline coming up < 1278975370 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :and I don't know what my supervisor's up to < 1278975401 0 :aliseiphone!unknown@unknown.invalid PRIVMSG #esoteric :Well, dammit, just make sure you're awake between 11 and midnight or so. < 1278975426 0 :aliseiphone!unknown@unknown.invalid PRIVMSG #esoteric :You could just sleep with your phone set to super-loud. < 1278975725 0 :Sgeo_!unknown@unknown.invalid PRIVMSG #esoteric :Hi aliseiphone < 1278975729 0 :Sgeo_!unknown@unknown.invalid PRIVMSG #esoteric :I'm working on PSOX2 < 1278975769 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric : huh, why can't lambdas have multiple "entry points" like normal functions <-- a way to achieve that has been proposed in various forms, but never agreed on. < 1278975780 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :aliseiphone: I don't have a mobile phone... < 1278975784 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :we're contacting via email < 1278975786 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :and svn < 1278975797 0 :aliseiphone!unknown@unknown.invalid PRIVMSG #esoteric :oerjan: Eh? < 1278975809 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :aliseiphone: haskell question < 1278975816 0 :aliseiphone!unknown@unknown.invalid PRIVMSG #esoteric :Oh. No. AnMaster is learning Haskell. < 1278975821 0 :cpressey!unknown@unknown.invalid PRIVMSG #esoteric :ais523: write a svn commit hook that starts playing your least favourite mp3 at maximum volume < 1278975826 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :case of ... with nothing between case and of is one way i've seen suggested < 1278975828 0 :aliseiphone!unknown@unknown.invalid PRIVMSG #esoteric :You will not see me for a while. < 1278975834 0 :aliseiphone!unknown@unknown.invalid PRIVMSG #esoteric :What cpressey said. < 1278975846 0 :aliseiphone!unknown@unknown.invalid PRIVMSG #esoteric :oerjan: Please STOP HIM. < 1278975851 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :also, to go to sleep, I'd have to walk home < 1278975855 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :which is not where my internet connection is < 1278975856 0 :aliseiphone!unknown@unknown.invalid PRIVMSG #esoteric :It is our ONLY hope. < 1278975858 0 :cpressey!unknown@unknown.invalid PRIVMSG #esoteric :ACTION is entertained! < 1278975868 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :aliseiphone: I /parted the channel earlier because both AnMaster and Sgeo were asking insane questions at once < 1278975880 0 :Sgeo_!unknown@unknown.invalid PRIVMSG #esoteric :ais523, sorry < 1278975888 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :*inane < 1278975890 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :aliseiphone: he said he thought the book (real world haskell) he's reading was your suggestion, so it's all your own fault ;D < 1278975891 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :insane questions are OK < 1278975895 0 :augur!unknown@unknown.invalid QUIT :Remote host closed the connection < 1278975907 0 :augur!~augur@216-164-33-76.c3-0.slvr-ubr1.lnh-slvr.md.cable.rcn.com JOIN :#esoteric < 1278975912 0 :cpressey!unknown@unknown.invalid PRIVMSG #esoteric :ais523: What have you done with my CHEESE??? < 1278975916 0 :aliseiphone!unknown@unknown.invalid PRIVMSG #esoteric :ais523: At least Sgeo is harmlessly utterly and completely reliant on our opinions for every minor detail in his life. < 1278975936 0 :aliseiphone!unknown@unknown.invalid PRIVMSG #esoteric :AnMaster, on the other hand, is liquid pain. < 1278975953 0 :Sgeo_!unknown@unknown.invalid PRIVMSG #esoteric :Eh, I think my questions were a bit painful < 1278975961 0 :Sgeo_!unknown@unknown.invalid PRIVMSG #esoteric :In my defense, the Googles did nothing < 1278975982 0 :aliseiphone!unknown@unknown.invalid PRIVMSG #esoteric :oerjan: I suggested a LYAH/RWH cocktail like I always do. He proceeded to dismiss LYAH because it had silly cartoon pictures. < 1278975997 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :ah. < 1278976019 0 :Sgeo_!unknown@unknown.invalid PRIVMSG #esoteric :aliseiphone, oh, btw, thank you for suggesting Dirk Gently's Holistic Detective Agencyt < 1278976021 0 :Sgeo_!unknown@unknown.invalid PRIVMSG #esoteric :*Agency < 1278976025 0 :aliseiphone!unknown@unknown.invalid PRIVMSG #esoteric :And AnMaster is a SERIOUS, MANLY ENGINEER with CHEST HAIRS. < 1278976047 0 :aliseiphone!unknown@unknown.invalid PRIVMSG #esoteric :Sgeo_: You're welcome. ...BUT TO WHAT? < 1278976079 0 :augur!unknown@unknown.invalid PRIVMSG #esoteric :aliseiphone! < 1278976079 0 :Sgeo_!unknown@unknown.invalid PRIVMSG #esoteric :...read? Were you thinking I thought you suggested it as a paperweight? < 1278976085 0 :augur!unknown@unknown.invalid PRIVMSG #esoteric :ON A MONDAY?! < 1278976098 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :welcome to accidentally cause humanity to have never existed. possibly. < 1278976186 0 :Sgeo_!unknown@unknown.invalid PRIVMSG #esoteric :aliseiphone, unrelated, but I have learned first-hand how Java destroys brains < 1278976248 0 :aliseiphone!unknown@unknown.invalid PRIVMSG #esoteric :Sgeo_: C# does too. < 1278976262 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :C# is just a slightly more insane version of Java < 1278976265 0 :Sgeo_!unknown@unknown.invalid PRIVMSG #esoteric :aliseiphone, I'd argue that it doesn't, and even if it does, it's not as bas < 1278976266 0 :aliseiphone!unknown@unknown.invalid PRIVMSG #esoteric :augur: Keyword iPhone. < 1278976267 0 :Sgeo_!unknown@unknown.invalid PRIVMSG #esoteric :*bad < 1278976273 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :(Java's main insanity is being too /excessively/ sane for its own good) < 1278976279 0 :aliseiphone!unknown@unknown.invalid PRIVMSG #esoteric :ais523: With some useful stuff. Like closures. < 1278976284 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :aliseiphone: yep < 1278976292 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :C# is a very kitchen-sinky sort of language < 1278976299 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :it reminds me vaguely of MAGENTA < 1278976303 0 :aliseiphone!unknown@unknown.invalid PRIVMSG #esoteric :ais523: Also, *Java 7. They're not versioning 1.x now. < 1278976303 0 :augur!unknown@unknown.invalid PRIVMSG #esoteric :aliseiphone: ah yes, true < 1278976306 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :of course, many of those features are useful, probably all of them < 1278976318 0 :aliseiphone!unknown@unknown.invalid PRIVMSG #esoteric :Sgeo_: Guess why you think C# doesn't destroy minds? < 1278976321 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :but, they still lead to a jankily large language when they're all combined < 1278976363 0 :aliseiphone!unknown@unknown.invalid PRIVMSG #esoteric :Because it's taking nibbles already. You're overengineering even more from what I've seen. < 1278976363 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric : If you prefer, just do type Void = () and forget about ()'s existence ;-P < 1278976382 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :except Void usually means something else in haskell (the type with _no_ non-bottom members) < 1278976402 0 :aliseiphone!unknown@unknown.invalid PRIVMSG #esoteric :Sheesh. Some people need slapping with unadorned C and being told to do something without making a sprawling framework for doing so first. < 1278976405 0 :Sgeo_!unknown@unknown.invalid PRIVMSG #esoteric :aliseiphone, what exactly have you seen? < 1278976414 0 :aliseiphone!unknown@unknown.invalid PRIVMSG #esoteric :type Unit = () < 1278976431 0 :aliseiphone!unknown@unknown.invalid PRIVMSG #esoteric :Sgeo_: How do you expect me to answer that question? < 1278976452 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :oerjan: I think a type like that should exist in other langs too < 1278976457 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :to mean "this function never terminates normally" < 1278976460 0 :Sgeo_!unknown@unknown.invalid PRIVMSG #esoteric :aliseiphone, if I had any public projects since PSOX, those projects would be the answer. But I don't. So what have you seen? < 1278976463 0 :aliseiphone!unknown@unknown.invalid PRIVMSG #esoteric :oerjan: I take it AnMaster has been picking at irrelevant details of Haskell? < 1278976466 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :you could actually enforce nonreturning in the type system < 1278976474 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :by making a type that was impossible to construct an instance of < 1278976482 0 :aliseiphone!unknown@unknown.invalid PRIVMSG #esoteric :Sgeo_: You pastebin. You talk. < 1278976503 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :aliseiphone: well yeah. but then we all do, in principle. we are geeks after all. < 1278976506 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric : And AnMaster is a SERIOUS, MANLY ENGINEER with CHEST HAIRS. <-- uh... Thanks? < 1278976516 0 :aliseiphone!unknown@unknown.invalid PRIVMSG #esoteric :AnMaster: An insultb < 1278976520 0 :aliseiphone!unknown@unknown.invalid PRIVMSG #esoteric :*insult. < 1278976523 0 :Sgeo_!unknown@unknown.invalid PRIVMSG #esoteric :I think this project is underengineered < 1278976526 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :aliseiphone, I can't see how it is one. Meh < 1278976531 0 :Sgeo_!unknown@unknown.invalid PRIVMSG #esoteric :I should have had parts be in Lua from the getgo < 1278976541 0 :aliseiphone!unknown@unknown.invalid PRIVMSG #esoteric :oerjan: AnMaster has a wonderfully irritating way of doing so, however. < 1278976548 0 :aliseiphone!unknown@unknown.invalid PRIVMSG #esoteric :AnMaster: Part of the problem. < 1278976573 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :aliseiphone, perhaps you don't like chest hairs? I do have them. Not my fault. Genetics and so on. < 1278976593 0 :aliseiphone!unknown@unknown.invalid PRIVMSG #esoteric :Perhaps you should stop talking now. < 1278976593 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :aliseiphone: he _did_ seem in the logs to ask a lot of questions only because he tried to understand function types but hadn't got to typeclasses yet < 1278976609 0 :aliseiphone!unknown@unknown.invalid PRIVMSG #esoteric :oerjan: *slow clap* < 1278976611 0 :Sgeo_!unknown@unknown.invalid PRIVMSG #esoteric :And yes, parts being in Lua would have been very useful. The ability to change ..gameplay code, nto sure if that's the right term.. while it's running would have been immensely useful < 1278976650 0 :Sgeo_!unknown@unknown.invalid PRIVMSG #esoteric :aliseiphone, anyways, worst part about PSOX: BF-centrism, or type issues, or something else < 1278976651 0 :Sgeo_!unknown@unknown.invalid PRIVMSG #esoteric :? < 1278976658 0 :aliseiphone!unknown@unknown.invalid PRIVMSG #esoteric :oerjan: dammit I learned from freaking YAHT and I kept writing shit until it worked. kids these days. < 1278976668 0 :aliseiphone!unknown@unknown.invalid PRIVMSG #esoteric :Sgeo_: Sheer pointlessness. < 1278976675 0 :Sgeo_!unknown@unknown.invalid PRIVMSG #esoteric :... < 1278976680 0 :Sgeo_!unknown@unknown.invalid PRIVMSG #esoteric :why are you in this channel? < 1278976688 0 :aliseiphone!unknown@unknown.invalid PRIVMSG #esoteric :And your inability to engineer without under- or over-ing it? < 1278976693 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :ACTION cannot actually recall how he learned haskell. except that at some time he read most of the haskell report. < 1278976710 0 :aliseiphone!unknown@unknown.invalid PRIVMSG #esoteric :Sgeo_: I only enjoy /interesting/ pointless things. < 1278976719 0 :aliseiphone!unknown@unknown.invalid PRIVMSG #esoteric :Or are you a fan of Ook!? < 1278976727 0 :Sgeo_!unknown@unknown.invalid PRIVMSG #esoteric :Is writing an HQ9+ IRC bot interersting enough? < 1278976729 0 :cpressey!unknown@unknown.invalid PRIVMSG #esoteric :I think I'm with aliseiphone on the PSOX issue: it's not as cool as something that just pipes a bunch of different esoprograms together, and they just use each other's capabilities as they see fit. < 1278976731 0 :aliseiphone!unknown@unknown.invalid PRIVMSG #esoteric :And LOLCode? < 1278976737 0 :aliseiphone!unknown@unknown.invalid PRIVMSG #esoteric :Sgeo_: No. < 1278976739 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :aliseiphone: hey Ook! is interesting. once. < 1278976751 0 :cpressey!unknown@unknown.invalid PRIVMSG #esoteric :Ook! is a snicker. Once. < 1278976753 0 :aliseiphone!unknown@unknown.invalid PRIVMSG #esoteric :oerjan: no. not even once. :P < 1278976773 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :Ook! is useful for getting people to realise that syntax really is irrelevant < 1278976778 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :lots of people get fixated on it for some reason < 1278976779 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :aliseiphone: it's interesting as the first and only time you try doing that kind of obfuscation. < 1278976787 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :then you can move on. < 1278976794 0 :aliseiphone!unknown@unknown.invalid PRIVMSG #esoteric :ais523: I think that might have the opposite effect. < 1278976796 0 :Sgeo_!unknown@unknown.invalid PRIVMSG #esoteric :cpressey, idea for PSOX2: Multiple programs in different esolangs running < 1278976822 0 :aliseiphone!unknown@unknown.invalid PRIVMSG #esoteric :So, you know that ancient laptop < 1278976828 0 :aliseiphone!unknown@unknown.invalid PRIVMSG #esoteric :I upgraded? < 1278976836 0 :cpressey!unknown@unknown.invalid PRIVMSG #esoteric :Sgeo_: Yes, exactly, but then you don't really need to define a protocol, do you? < 1278976839 0 :aliseiphone!unknown@unknown.invalid PRIVMSG #esoteric :Over the weekend. < 1278976854 0 :Sgeo_!unknown@unknown.invalid PRIVMSG #esoteric :cpressey, why wouldn't I need to? < 1278976882 0 :aliseiphone!unknown@unknown.invalid PRIVMSG #esoteric :The teacher has /vetoed the nurses/ and made sure I can have it (without Internet). For homework. < 1278976903 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric : why no 1-tupple? Sure it is pretty useless but it still seems strange to just have a hole in the valid range. < 1278976939 0 :aliseiphone!unknown@unknown.invalid PRIVMSG #esoteric :I just need a 3G stick and I've been /handed a working, Internet-connected computer/ that I *don't even need to hide*. < 1278976941 0 :olsner!unknown@unknown.invalid PRIVMSG #esoteric :but a 1-tuple is just a single value, it barely even adds bottoms < 1278976953 0 :aliseiphone!unknown@unknown.invalid PRIVMSG #esoteric :oerjan: fail < 1278976965 0 :tombom!unknown@unknown.invalid QUIT :Quit: Leaving < 1278976965 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :aliseiphone: ooh, impressive < 1278976969 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :a 1-tuple only makes sense if there is something you can do to tuples in general. but haskell doesn't support that, all sizes are mutually incompatible. although there _are_ some typeclass abuses, they are not in the standard. < 1278976970 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :and rather fortunate < 1278976983 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :you may want to hide the 3G stick, though, in case they catch on < 1278976992 0 :aliseiphone!unknown@unknown.invalid PRIVMSG #esoteric :ais523: Of course. < 1278977000 0 :cpressey!unknown@unknown.invalid PRIVMSG #esoteric :Sgeo_: Because if you write both the client and the server, you don't need to follow a protocol. I mean, you *can*, if you want one or the other to be interchangeable, but in a world where everyone wants to roll their own... < 1278977012 0 :aliseiphone!unknown@unknown.invalid PRIVMSG #esoteric :ais523: And getting used to 463mhz and 64mib of ram will suck. < 1278977025 0 :Sgeo_!unknown@unknown.invalid PRIVMSG #esoteric :Why would I be writing the client? < 1278977035 0 :aliseiphone!unknown@unknown.invalid PRIVMSG #esoteric :ais523: I'll put Puppy Linux or something onto a partition. < 1278977042 0 :Sgeo_!unknown@unknown.invalid PRIVMSG #esoteric :Sure, I'll write some test clients, but mostly other people will be writing clients < 1278977047 0 :Sgeo_!unknown@unknown.invalid PRIVMSG #esoteric :Hopefully < 1278977063 0 :aliseiphone!unknown@unknown.invalid PRIVMSG #esoteric :But still, dammit, I can type! Code! For this short portion of night... < 1278977080 0 :cpressey!unknown@unknown.invalid PRIVMSG #esoteric :aliseiphone: Explain what I mean to Sgeo_. < 1278977099 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :AnMaster: hm does actually ping you? i keep just copying and pasting from the logs for convenience but it may not be optimal < 1278977101 0 :cpressey!unknown@unknown.invalid PRIVMSG #esoteric :No, nm, you don't have a real keyboard, that's unfair or me. < 1278977111 0 :aliseiphone!unknown@unknown.invalid PRIVMSG #esoteric :Sgeo_: He's telling you to make esolang programs talk to each other. < 1278977139 0 :aliseiphone!unknown@unknown.invalid PRIVMSG #esoteric :If you need a GUI, have a Zetaplex program to display it based on data provided to it by BF. < 1278977162 0 :aliseiphone!unknown@unknown.invalid PRIVMSG #esoteric :Essentially, drop PSOX and make an orgy of two-way esoteric pipes. < 1278977171 0 :aliseiphone!unknown@unknown.invalid PRIVMSG #esoteric :cpressey: Done. I love carpal tunnel. < 1278977227 0 :Sgeo_!unknown@unknown.invalid PRIVMSG #esoteric :Hm, that would be interesting < 1278977234 0 :cpressey!unknown@unknown.invalid PRIVMSG #esoteric :Consider a utility that just ties the stdin and stdout of several processes together into some common channels. One of those processes could be a Befunge-98 interpreter which supports one of those graphics fingerprints, and it's running a program which accepts commands of some sort on its stdin and draws graphics. One other of those processes could be an Unlambda interpreter which is running a program which produces ou < 1278977239 0 :cpressey!unknown@unknown.invalid PRIVMSG #esoteric :Thank you aliseiphone. < 1278977257 0 :aliseiphone!unknown@unknown.invalid PRIVMSG #esoteric :"which produces ou" < 1278977262 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric : wait, does the lambdas to foldl and foldr have the acc/value parameters in different orders? < 1278977265 0 :aliseiphone!unknown@unknown.invalid PRIVMSG #esoteric :You got cut off. < 1278977272 0 :cpressey!unknown@unknown.invalid PRIVMSG #esoteric :tput which consists of those commands. End result: Unlambda drawing graphics. < 1278977293 0 :aliseiphone!unknown@unknown.invalid PRIVMSG #esoteric :cpressey: I wuv turtle graphics. < 1278977306 0 :aliseiphone!unknown@unknown.invalid PRIVMSG #esoteric :LOGO is a sweet language. < 1278977320 0 :cpressey!unknown@unknown.invalid PRIVMSG #esoteric :Now, the utility itself could have some esoteric control language. However, I wonder if that would be going too far. I think it might be nice to have one, but it should be simple. < 1278977321 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :oerjan, yes that still confuses me < 1278977330 0 :cpressey!unknown@unknown.invalid PRIVMSG #esoteric :aliseiphone: It is, it is. < 1278977332 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :AnMaster: it's quite logical when you realize foldl f x [a,b,c] = ((x `f` a) `f` b) `f` c and foldr f x [a,b,c] = a `f` (b `f` (c `f` x)) < 1278977332 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :oerjan, and yes it pings me < 1278977349 0 :Sgeo_!unknown@unknown.invalid PRIVMSG #esoteric :Well, if it's a simple chain.. wait, two-way communication would be useful, wouldn't it < 1278977361 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :oerjan, Hm I guess that does makes kind of sense < 1278977375 0 :aliseiphone!unknown@unknown.invalid PRIVMSG #esoteric :Sgeo_: All you need to write is a useful two-pipe unix utility. < 1278977390 0 :Sgeo_!unknown@unknown.invalid PRIVMSG #esoteric :ACTION doesn't want it to be UNIX-only < 1278977394 0 :Sgeo_!unknown@unknown.invalid PRIVMSG #esoteric :But there may be no choice < 1278977410 0 :aliseiphone!unknown@unknown.invalid PRIVMSG #esoteric :Only because you use Win "Shitty" dows. < 1278977417 0 :olsner!unknown@unknown.invalid PRIVMSG #esoteric :pretty sure you can do stuff like that in windows too, it's just a lot weirder < 1278977437 0 :olsner!unknown@unknown.invalid PRIVMSG #esoteric :(usually) < 1278977446 0 :Sgeo_!unknown@unknown.invalid PRIVMSG #esoteric :olsner, I would have loved to know that during the original PSOX's implementation < 1278977457 0 :Sgeo_!unknown@unknown.invalid PRIVMSG #esoteric :My inability to figure it out resulted in a major spec change < 1278977488 0 :cpressey!unknown@unknown.invalid PRIVMSG #esoteric :Just abstract the properties of pipes that you want and write different backends if you want to support different underlying OSes. < 1278977505 0 :aliseiphone!unknown@unknown.invalid PRIVMSG #esoteric :ais523: Any tips for enduring ultra-low-powered computers? < 1278977524 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :try to use more efficient programs < 1278977544 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :cpressey, so a bus for esolangs. Nice idea. < 1278977546 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :it's surprising how wasteful many programs are nowadays < 1278977560 0 :aliseiphone!unknown@unknown.invalid PRIVMSG #esoteric :ais523: Like a non-Windows OS. :-) < 1278977564 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :well, yes < 1278977571 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :aliseiphone, DOS < 1278977574 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric ::P < 1278977576 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :I find Windows almost unusuable nowadays just because of how slow it is < 1278977578 0 :aliseiphone!unknown@unknown.invalid PRIVMSG #esoteric :ais523: But I'm a web junkie. < 1278977588 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :there are efficient web browsers < 1278977605 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :really, the speed of your computer shouldn't matter for surfing, the speed of your connection matters more < 1278977611 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :ais523, javascript < 1278977613 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :slows things down < 1278977617 0 :aliseiphone!unknown@unknown.invalid PRIVMSG #esoteric :ais523: Supporting all the crap you need (I know you don't) nowadays? < 1278977618 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :I bet aliseiphone consider that important < 1278977665 0 :aliseiphone!unknown@unknown.invalid PRIVMSG #esoteric :ais523: I mean... 64 MiB of RAM. Firefox never uses less than 100! < 1278977667 0 :olsner!unknown@unknown.invalid PRIVMSG #esoteric :Sgeo_: dunno about PSOX, but this looks like the thing you'd want on windows: http://msdn.microsoft.com/en-us/library/ms682499(VS.85).aspx < 1278977671 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :it's important to be able to run JS, but having it off by default generally makes websites less annoying < 1278977685 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :you could try using w3m, I suppose < 1278977694 0 :aliseiphone!unknown@unknown.invalid PRIVMSG #esoteric :ais523: No. < 1278977701 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :it can even handle images, it shows them as links which download and open the image in a new window < 1278977707 0 :cpressey!unknown@unknown.invalid PRIVMSG #esoteric :I just explode in a frenzy of love every time I read the word LPVOID. < 1278977718 0 :aliseiphone!unknown@unknown.invalid PRIVMSG #esoteric :ais523: Anyway, rendering at 463 MHz?! < 1278977721 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :but there are plenty of other low-resource browsers < 1278977722 0 :olsner!unknown@unknown.invalid PRIVMSG #esoteric :opera runs on many things with less than 64MB ram < 1278977730 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric : Er, right. A newtype is a, what word would work better - "synonym"? It has the same structure but has a distinct identity. < 1278977736 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :and rendering is rarely a bottleneck IIRC < 1278977738 0 :olsner!unknown@unknown.invalid PRIVMSG #esoteric :and with cpu:s slower than 450MHz < 1278977739 0 :Sgeo_!unknown@unknown.invalid PRIVMSG #esoteric :olsner, great, so how does the parent know when the child's requesting something on stdin? < 1278977746 0 :aliseiphone!unknown@unknown.invalid PRIVMSG #esoteric :btw, w3m can show images online on framebuffer < 1278977751 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :(Chrome has the fastest renderer of all the common browsers IIRC, not that most people tend to care) < 1278977753 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :bad wording, since "type" defined names are officially _called_ type synonyms in haskell < 1278977760 0 :cpressey!unknown@unknown.invalid PRIVMSG #esoteric :oerjan: Oh, do confuse me more. < 1278977760 0 :olsner!unknown@unknown.invalid PRIVMSG #esoteric :Sgeo_: you can't "request" something on standard input, you can only block or poll < 1278977771 0 :Sgeo_!unknown@unknown.invalid PRIVMSG #esoteric :olsner, I think you can on UNIX < 1278977776 0 :Sgeo_!unknown@unknown.invalid PRIVMSG #esoteric :Maybe I'm misremembering < 1278977794 0 :aliseiphone!unknown@unknown.invalid PRIVMSG #esoteric :Sgeo_: you are. < 1278977796 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :aliseiphone, opera mini runs on my phone. Not sure about RAM but it has 32 MB flash built in < 1278977797 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :cpressey: a newtype is sometimes called a "wrapper" < 1278977802 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :incidentally, I installed a bunch of browsers for cross-browser testing < 1278977802 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :RAM I guess around the same range or less < 1278977807 0 :cpressey!unknown@unknown.invalid PRIVMSG #esoteric :oerjan: It still does remind me of what you need to do in Pascal to make a linked list record. < 1278977810 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :I had to uninstall Opera almost immediately because it was too anyoing < 1278977812 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :*annoying < 1278977822 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :whereas I can tolerate Chromium, although I dislike it < 1278977822 0 :olsner!unknown@unknown.invalid PRIVMSG #esoteric :AnMaster: mini should support down to 2MB of ram though :P < 1278977822 0 :wareya!unknown@unknown.invalid PRIVMSG #esoteric :I found another turing complete game < 1278977833 0 :wareya!unknown@unknown.invalid PRIVMSG #esoteric :but this one cheats because it has wires < 1278977840 0 :aliseiphone!unknown@unknown.invalid PRIVMSG #esoteric :DAMMIT RETARDS PHONES ARE NOT X86 LAPTOPS WITH MULTITASKING OPERATING SYSTEMS AND OPERA MINI ISN'T EVEN A REAL BROWSER < 1278977848 0 :aliseiphone!unknown@unknown.invalid PRIVMSG #esoteric :Stop failing :| < 1278977852 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric : Sgeo_: you can't "request" something on standard input, you can only block or poll <-- you could select() for ability to write without blocking on *nix < 1278977862 0 :aliseiphone!unknown@unknown.invalid PRIVMSG #esoteric :*SYSTEMS RUNNING < 1278977866 0 :olsner!unknown@unknown.invalid PRIVMSG #esoteric :AnMaster: that's what I meant with poll though < 1278977869 0 :Sgeo_!unknown@unknown.invalid PRIVMSG #esoteric :AnMaster, I.. think that's what I meant < 1278977881 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :aliseiphone, true. opera mini is J2ME < 1278977899 0 :aliseiphone!unknown@unknown.invalid PRIVMSG #esoteric :AnMaster: Opera Mini DOESNT RENDER. < 1278977903 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :true < 1278977906 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :their servers do it < 1278977909 0 :aliseiphone!unknown@unknown.invalid PRIVMSG #esoteric :The page is rendered on OPERA SERVERS. < 1278977913 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :aliseiphone, I know this < 1278977915 0 :aliseiphone!unknown@unknown.invalid PRIVMSG #esoteric :*DOESN'T < 1278977915 0 :olsner!unknown@unknown.invalid PRIVMSG #esoteric :well I was referring to the proper opera, mobile or desktop, or maybe one of the custom versions for devices < 1278977924 0 :aliseiphone!unknown@unknown.invalid PRIVMSG #esoteric :Your advice is worse than useless. < 1278977926 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :why are you shouting about this < 1278977934 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :aliseiphone, what is the issue with opera servers rendering it < 1278977935 0 :cpressey!unknown@unknown.invalid PRIVMSG #esoteric :jaw drops < 1278977940 0 :Sgeo_!unknown@unknown.invalid PRIVMSG #esoteric :AnMaster, bandwidth? < 1278977945 0 :MigoMipo!unknown@unknown.invalid QUIT :Read error: Connection reset by peer < 1278977954 0 :aliseiphone!unknown@unknown.invalid PRIVMSG #esoteric :olsner: Opera on a 463 MHz Pentium II Celeron with 64 MiB of RAM? < 1278977955 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :Sgeo_, it works fine on EDGE. Even faster on 3G < 1278977967 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :is the DS web browser opera mini or opera mobile? < 1278977970 0 :aliseiphone!unknown@unknown.invalid PRIVMSG #esoteric :AnMaster: What is WRONG? For a desktop browser? < 1278977986 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :aliseiphone, I was just saying it was lightweight < 1278977987 0 :olsner!unknown@unknown.invalid PRIVMSG #esoteric :ais523: it would be "one of the custom versions" < 1278978000 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :yes, but I mean which codebase is it vaguely based on? < 1278978007 0 :aliseiphone!unknown@unknown.invalid PRIVMSG #esoteric :Are you fucking retarded? It reformats pages. Compresses images. Won't serve to things that run on things other than mobiles. < 1278978009 0 :olsner!unknown@unknown.invalid PRIVMSG #esoteric :it's not a mini thing though, it actually renders stuff < 1278978029 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric : is !haskell ghc or ghci? < 1278978039 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :AnMaster: both, it tries ghci first < 1278978051 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric : I had to uninstall Opera almost immediately because it was too anyoing <-- yes desktop version is way more annoying than the mini version for phones < 1278978053 0 :aliseiphone!unknown@unknown.invalid PRIVMSG #esoteric :My toaster toasts bread with barely any power. Why does your universal constructor take so long to make toasted bread? < 1278978065 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :!haskell :type True < 1278978067 0 :EgoBot!unknown@unknown.invalid PRIVMSG #esoteric :True :: Bool < 1278978069 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :indeed! < 1278978078 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :toasters use quite a lot of power... < 1278978078 0 :Sgeo_!unknown@unknown.invalid PRIVMSG #esoteric :ACTION compresses aliseiphone  < 1278978083 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :AnMaster: this has the disadvantage of EgoBot giving _really_ crappy error messages for stuff that you intended to be sent to ghci < 1278978095 0 :aliseiphone!unknown@unknown.invalid PRIVMSG #esoteric :ais523: not nearly as much as a UC < 1278978107 0 :aliseiphone!unknown@unknown.invalid PRIVMSG #esoteric :!haskell :t fmap fmap fmap < 1278978108 0 :EgoBot!unknown@unknown.invalid PRIVMSG #esoteric :fmap fmap fmap :: (Functor ((->) (a -> b)), Functor f1, Functor f) => < 1278978118 0 :Sgeo_!unknown@unknown.invalid PRIVMSG #esoteric :wareya, what game? < 1278978122 0 :aliseiphone!unknown@unknown.invalid PRIVMSG #esoteric :Aww, c'mon. < 1278978130 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :AnMaster: since it then tries the ghc (well, full module compilation) instead and ends up reporting _that_ completely irrelevent error message < 1278978165 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :Gregor-P: in fact it would have been nice to have a separate command for _just_ trying with ghci < 1278978185 0 :aliseiphone!unknown@unknown.invalid PRIVMSG #esoteric :ais523: I wish I had my iPhone set up to function as a modem. Free unlimited Internet! < 1278978196 0 :aliseiphone!unknown@unknown.invalid PRIVMSG #esoteric :3G sticks cost so much per GB. < 1278978197 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :oerjan, ah right < 1278978201 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :!haskell :t \s.\m.\x.m(s x) < 1278978206 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :*irrelevant < 1278978209 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :wait, wrong syntax < 1278978215 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :!haskell :t \s m x->m(s x) < 1278978218 0 :EgoBot!unknown@unknown.invalid PRIVMSG #esoteric :\s m x->m(s x) :: (t -> t1) -> (t1 -> t2) -> t -> t2 < 1278978218 0 :Sgeo_!unknown@unknown.invalid PRIVMSG #esoteric :It does occur to me that having turing-complete input-capable HQ9+ and .. some other languages would pretty much be Ook!ish < 1278978226 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :aliseiphone, why can't your iphone do that? < 1278978231 0 :Gregor-P!unknown@unknown.invalid PRIVMSG #esoteric :oerjan: Meh meh meh your awesome bots are never awesome enough bleh bleh bleh I want more features blar < 1278978239 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :aliseiphone, can't you do that easily on jailbroken ones anyway? < 1278978253 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :it violates the phone contract IIRC < 1278978263 0 :Gregor-P!unknown@unknown.invalid PRIVMSG #esoteric :My Android can do that :P < 1278978265 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :as in, not Apple's contract, but AT&T's or O2's < 1278978265 0 :aliseiphone!unknown@unknown.invalid PRIVMSG #esoteric :AnMaster: Because the networks don't allow it. My phone is not jailbroken at < 1278978271 0 :aliseiphone!unknown@unknown.invalid PRIVMSG #esoteric :*atm. < 1278978297 0 :Gregor-P!unknown@unknown.invalid PRIVMSG #esoteric :Hell, the new EVO does that out of the box. < 1278978298 0 :aliseiphone!unknown@unknown.invalid PRIVMSG #esoteric :ais523: Hell, I don't care. Certainly not Apple's fault though. < 1278978314 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :if they find out, you might lose your mobile access < 1278978324 0 :aliseiphone!unknown@unknown.invalid PRIVMSG #esoteric :Gregor-P: Hell, the iPhone PREDATED ALL THOSE. < 1278978335 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :aliseiphone, I checked several networks in Sweden. All allow tethering without extra cost but warns it won't work with iphone. < 1278978340 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :XD < 1278978341 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :Gregor-P: PRECISELY < 1278978342 0 :aliseiphone!unknown@unknown.invalid PRIVMSG #esoteric :ais523: It'll look just like my usual traffic... < 1278978349 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :I suppose so < 1278978350 0 :Sgeo_!unknown@unknown.invalid PRIVMSG #esoteric :PESOIX predated PSOX < 1278978353 0 :wareya!unknown@unknown.invalid PRIVMSG #esoteric :18:41 < Sgeo_> wareya, what game? < 1278978355 0 :wareya!unknown@unknown.invalid PRIVMSG #esoteric :minecraft < 1278978360 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :if you start accessing repositories over it, though, they might get suspicious < 1278978361 0 :Gregor-P!unknown@unknown.invalid PRIVMSG #esoteric :oerjan: So long as we're on the same page. < 1278978373 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :that would look out-of-place, who accesses linux repos on an iPhone? < 1278978374 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :Gregor-P, EVO? < 1278978380 0 :aliseiphone!unknown@unknown.invalid PRIVMSG #esoteric :ais523: Yeah. They have gnomes. < 1278978384 0 :aliseiphone!unknown@unknown.invalid PRIVMSG #esoteric :To SEARCH. < 1278978387 0 :Sgeo_!unknown@unknown.invalid PRIVMSG #esoteric :ais523, I tried to access an SVN repo on my N1 < 1278978388 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :oh and I tethered today using my old nokia < 1278978389 0 :Sgeo_!unknown@unknown.invalid PRIVMSG #esoteric :Didn't go so well < 1278978391 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :over bluetooth < 1278978393 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :no issues there < 1278978396 0 :aliseiphone!unknown@unknown.invalid PRIVMSG #esoteric :ais523: Its just http. < 1278978404 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :works fine in ubuntu if you install blueman < 1278978406 0 :aliseiphone!unknown@unknown.invalid PRIVMSG #esoteric :I look at code often on this. < 1278978408 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :aliseiphone: I know, it's the destination that's suspicious < 1278978431 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :if I was asked to try to figure out which phones were being used illegally for tethering < 1278978433 0 :aliseiphone!unknown@unknown.invalid PRIVMSG #esoteric :ais523: Dude, deep packet inspection isn't even that clever. < 1278978437 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :I'd check to see if they were accessing Windows Update < 1278978452 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :which would be a big giveaway < 1278978452 0 :aliseiphone!unknown@unknown.invalid PRIVMSG #esoteric :Do you realise how many iPhone users there are? < 1278978459 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :ais523, fun < 1278978465 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :ais523, what about windows mobile? < 1278978469 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :aliseiphone: I'm not sure how that's relevant < 1278978480 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :AnMaster: presumably the update URL is at least slightly different < 1278978484 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :hm < 1278978491 0 :aliseiphone!unknown@unknown.invalid PRIVMSG #esoteric :ais523: monitoring arbitrary deluged of packets is very hard < 1278978496 0 :Gregor-P!unknown@unknown.invalid PRIVMSG #esoteric :lawl @ Windows Mobile < 1278978501 0 :aliseiphone!unknown@unknown.invalid PRIVMSG #esoteric :*deluged < 1278978511 0 :aliseiphone!unknown@unknown.invalid PRIVMSG #esoteric :*deluges < 1278978527 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :hmm, I wonder to what extent mobile internet uses http? < 1278978536 0 :aliseiphone!unknown@unknown.invalid PRIVMSG #esoteric :U < 1278978537 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :is it just straight uninterpreted tcp packets that contain the http < 1278978542 0 :aliseiphone!unknown@unknown.invalid PRIVMSG #esoteric :*Um. < 1278978546 0 :aliseiphone!unknown@unknown.invalid PRIVMSG #esoteric :ais523: Yes. < 1278978551 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :or is there some sort of mobile internet protocol used between the phone and the control towers? < 1278978554 0 :aliseiphone!unknown@unknown.invalid PRIVMSG #esoteric :I'm using a native IRC client. < 1278978573 0 :aliseiphone!unknown@unknown.invalid PRIVMSG #esoteric :This shit is just TCP over IP over wave. < 1278978573 0 :Sgeo_!unknown@unknown.invalid PRIVMSG #esoteric :aliseiphone, and nothing else =P < 1278978626 0 :aliseiphone!unknown@unknown.invalid PRIVMSG #esoteric :Sgeo_: I'm wearing a top hat and? (This is Jeopardy!, right?£ < 1278978633 0 :aliseiphone!unknown@unknown.invalid PRIVMSG #esoteric :*right?) < 1278978647 0 :Sgeo_!unknown@unknown.invalid PRIVMSG #esoteric :I was referring to lack of multitasking on pre-iOS4 < 1278978674 0 :aliseiphone!unknown@unknown.invalid PRIVMSG #esoteric :Hey, soothes the ADHD. Can't knock it. < 1278978705 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :hmm, are there any sensible multitasking algos other than cooperative and competitive? < 1278978723 0 :aliseiphone!unknown@unknown.invalid PRIVMSG #esoteric :ais523: Capitalist! < 1278978736 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :programs pay for timeslices? < 1278978747 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :*cooperative and preemptive < 1278978749 0 :aliseiphone!unknown@unknown.invalid PRIVMSG #esoteric :Processes buy up bits of system time with credits they get by... Doing work for the system? < 1278978753 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :you can tell I've been up for around 30 hours < 1278978767 0 :aliseiphone!unknown@unknown.invalid PRIVMSG #esoteric :Letting other processes run? < 1278978785 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :ais523, competative? < 1278978796 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :% spelling < 1278978801 0 :aliseiphone!unknown@unknown.invalid PRIVMSG #esoteric :ais523: Postemptive, of course. < 1278978802 0 :Sgeo_!unknown@unknown.invalid PRIVMSG #esoteric :AnMaster, see ais523's correctio.. oh < 1278978806 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :oh right < 1278978817 0 :Sgeo_!unknown@unknown.invalid PRIVMSG #esoteric :Oh, n/m the oh < 1278978828 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :come to think of it, wouldn't "modulo spelling" remove all the spelling from the word, leaving only the mistakes? < 1278978835 0 :Sgeo_!unknown@unknown.invalid PRIVMSG #esoteric :I thought you were commenting on ais523's spelling, until I saw what you wrote < 1278978838 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :ais523, I would totally love competitive multitasking < 1278978845 0 :Sgeo_!unknown@unknown.invalid PRIVMSG #esoteric :erm, what ais523 wrote < 1278978852 0 :aliseiphone!unknown@unknown.invalid PRIVMSG #esoteric :It's called preemptive. < 1278978867 0 :aliseiphone!unknown@unknown.invalid PRIVMSG #esoteric :ais523: Argumentative multitasking. < 1278978870 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :ais523, okay modulo mistakes then < 1278978884 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :nah, preëmptive has an OS doing the preëmpting < 1278978895 0 :aliseiphone!unknown@unknown.invalid PRIVMSG #esoteric :ais523: Processes debate who deserves to run for a timeslice. The winner gets it. < 1278978897 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :competitive multitasking would be along the lines of CoreWars < 1278978900 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric : cpressey, that it is a special form, well or syntax. Is "let" a special form in haskell? I guess it is. < 1278978907 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :aliseiphone, that would take several timeslices! < 1278978909 0 :Mathnerd314!unknown@unknown.invalid QUIT :Ping timeout: 240 seconds < 1278978914 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :just debating < 1278978933 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :AnMaster: very special actually, it's one of the four haskell 98 keywords that introduce indentation blocks (let, do, where, of) < 1278978945 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :oerjan, hm < 1278978950 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :there are a few more in extensions (mdo comes to mind) < 1278978955 0 :aliseiphone!unknown@unknown.invalid PRIVMSG #esoteric :Special Needs multitasking: processes that do their work slowly get extra time. < 1278978955 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :oerjan: haskell 2010 too < 1278978962 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :I was reading the spec of that pretty recently < 1278978971 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :ACTION hasn't read it yet < 1278978979 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :ACTION hasn't finished it yet < 1278978991 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :OTOH, I don't know haskell 98 well enough to spot any differences < 1278979026 0 :aliseiphone!unknown@unknown.invalid PRIVMSG #esoteric :ais523: oh dear, I just realised that aliseOS is very like Feather < 1278979036 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :aliseiphone: almost all good ideas are very like Feather < 1278979071 0 :cpressey!unknown@unknown.invalid PRIVMSG #esoteric :In fact, the only good idea which is not very like Feather is one called "Feather" < 1278979078 0 :aliseiphone!unknown@unknown.invalid PRIVMSG #esoteric :it's impossible to explain what it is, is almost impossible to define precisely, hurts your mind when you think about it, and will probably never be implemented. < 1278979102 0 :aliseiphone!unknown@unknown.invalid PRIVMSG #esoteric :cpressey: no, feather is a bad idea < 1278979124 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :aliseiphone: that's one of the best summaries of Feather I've ever seen < 1278979156 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :ais523, please please put up everything about it on a wiki page if you decide to never implement it < 1278979161 0 :aliseiphone!unknown@unknown.invalid PRIVMSG #esoteric :ais523: And it doesn't even mention a single language feature! < 1278979161 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :that way someone else could give it a go < 1278979178 0 :aliseiphone!unknown@unknown.invalid PRIVMSG #esoteric :AnMaster: ais523 would never do yhat to innocent minds < 1278979181 0 :aliseiphone!unknown@unknown.invalid PRIVMSG #esoteric :*that < 1278979182 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :AnMaster: deliberately driving people insane is illegal in the uK < 1278979184 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :*UK < 1278979192 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :ais523, put a warning at the top then? < 1278979195 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :perhaps