←2010-07-11 2010-07-12 2010-07-13→ ↑2010 ↑all
00:00:00 <siduxgor> lucidalise: Exactly!
00:00:14 <CakeProphet> hahaha. youtube fungot is my new favorite.
00:00:15 <fungot> CakeProphet: of course. seriously, read description :) haha, this movie or hitman? ( watching smoz tuck his tail) this song
00:00:45 <zzo38> fungot: This is not a movie?
00:00:46 <fungot> zzo38: hey guys! check out second from disaster on discovery channel, minus the french are surrender monkeys, nuff said.
00:01:01 <CakeProphet> calamari: okay. so custom asm?
00:01:13 <calamari> CakeProphet: okay
00:01:31 <oerjan> !haskell main = loop 1; loop n = do putStr (' ':show n); hFlush stdout;
00:01:40 <zzo38> ^style -1
00:01:41 <fungot> Not found.
00:01:46 <CakeProphet> our asm will essentially need to be a simple register machine with some hardware operations I think?
00:01:53 <oerjan> !haskell import System.IO; main = loop 1; loop n = do putStr (' ':show n); hFlush stdout;
00:01:56 <EgoBot> 1
00:02:04 <zzo38> Do you like GNU long options? Or not
00:02:16 <oerjan> wth. oh.
00:02:22 <oerjan> !haskell import System.IO; main = loop 1; loop n = do putStr (' ':show n); hFlush stdout; loop (n+1)
00:02:28 <calamari> CakeProphet: sounds good to me
00:02:45 <oerjan> siduxgor: ok so even explicitly flushing doesn't help...
00:02:51 <CakeProphet> oerjan: yeah I was about to say. not recursive.
00:03:20 -!- relet has quit (Quit: Leaving.).
00:03:57 -!- augur has quit (Remote host closed the connection).
00:04:03 -!- augur has joined.
00:04:44 <CakeProphet> calamari: a plan 9 approach would result in a small instruction set. Simply delegate hardware to a filesystem, and then support filesystem operations?
00:04:56 <CakeProphet> or is that getting too complicated already?
00:05:05 <calamari> I don't think we need to worry about that yet
00:05:16 <calamari> but maybe I am misunderstanding
00:05:22 <lucidalise> what are you even doing
00:05:27 <calamari> lucidalise: pipe dream
00:05:37 <lucidalise> sounds like a very un-pipey pipe dream.
00:05:43 <calamari> the ever vaporware esoteric os
00:05:50 <lucidalise> ah yes. ESO.
00:06:09 <CakeProphet> 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?
00:06:23 <lucidalise> Um ... ports.
00:06:32 <lucidalise> Mapped memory.
00:06:40 <calamari> ports sounds like a good idea
00:06:50 <zzo38> Does Plain TeX have any blackboard bold? (Even if so, I don't plan to use blackboard bold for !! operator)
00:06:51 <lucidalise> Mapped memory is best if you're on 64-bit.
00:06:55 <lucidalise> Try doing VGA with ports.
00:06:58 <lucidalise> zzo38: No.
00:07:02 <lucidalise> zzo38: You need AMSLaTeX for that.
00:07:03 <CakeProphet> calamari: this is new to me. I don't know much about OS design, obviously. :)
00:07:42 <CakeProphet> is it similar to the idea of ports in Erlang?
00:07:48 <lucidalise> No.
00:07:57 <lucidalise> You just have read byte from port, put byte to port operations.
00:07:58 <calamari> lucidalise: won't have to worry about it.. sticking with text mode I am sure
00:08:06 <CakeProphet> in Erlang a port is an abstract "thing" you can read to and write from
00:08:15 <lucidalise> calamari: Some pipe dream.
00:08:20 <CakeProphet> a "port driver" implements the hardware access.
00:08:32 -!- MigoMipo has quit (Read error: Connection reset by peer).
00:08:54 <zzo38> 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)
00:08:57 <calamari> lucidalise: ESO is the duke nukem forever of the esoteric world :)
00:09:06 <lucidalise> zzo38: Keep it seperate.
00:09:18 <lucidalise> {} is usually pointless in C as opposed to ;.
00:09:35 <lucidalise> Maybe set a control structure followed by ; differently.
00:09:37 <CakeProphet> I use {} for function stubs.
00:09:40 <lucidalise> Bold the ; and adjust the spacing, say.
00:09:44 <lucidalise> CakeProphet: Well, true.
00:09:47 <lucidalise> But no need to set it differently.
00:10:04 <CakeProphet> I don't know what the problem at hand is. So I have nothing else to comment. :)
00:10:12 <lucidalise> Typesetting C.
00:10:19 <CakeProphet> ...ha.
00:10:26 <lucidalise> "Ha"; you mock Knuth.
00:10:28 <lucidalise> WEB is his work.
00:10:31 <lucidalise> Well, it was Pascal then.
00:10:40 <lucidalise> But now it is C, and Knuth uses CWEB, which iirc he co-authored.
00:10:40 <CakeProphet> WEB?
00:10:45 <CakeProphet> is that kind of like G.E.B? :P
00:10:46 <lucidalise> It invented literate programming.
00:10:51 <lucidalise> You fail forever.
00:10:52 <zzo38> I sometimes write like while(f(x)) {} instead of ; because it is less confusing if I write {} after a control structure instead of ;
00:11:07 <CakeProphet> lucidalise: hey. We all can't know everything about everything. :P
00:11:19 <CakeProphet> some of us can pretend to though.
00:11:20 <lucidalise> CakeProphet: Mocking Knuth, then ignorance of one of his projects -- unforgivable!
00:11:25 <lucidalise> You shall perish.
00:11:40 <zzo38> 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.
00:11:52 <CakeProphet> neat.
00:12:07 -!- siduxgor has quit (Quit: Page closed).
00:13:06 <CakeProphet> calamari: I think you'll probably need to design the VM then. :P
00:13:20 <CakeProphet> the asm, that is.
00:13:46 <CakeProphet> if the assembler can be written in any language. I'd love to write it in Haskell using the Parsec library.
00:13:57 <calamari> CakeProphet: sounds good
00:13:59 <lucidalise> Surely you need machine code?
00:14:24 <Zuu> We need more machine code!
00:14:29 <CakeProphet> well, "the asm" is the machine code. Our vocabulary needs an adjustment I suppose.
00:14:42 <calamari> yes, that was my bad wording before
00:14:48 <CakeProphet> the assembler takes "the assembly code" and makes the virtual machine code.
00:15:00 <CakeProphet> so right now we're working on the machine code.
00:15:03 <zzo38> 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.
00:15:21 <calamari> CakeProphet: what I
00:15:32 <CakeProphet> calamari: /can/ the assembler be in any language? Shouldn't we have one for the OS itself at some point?
00:15:41 <zzo38> 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.
00:15:41 <calamari> CakeProphet: what I'm thinking about is the translation of something like interrupts into a queue
00:16:06 <Zuu> zzo38: making a C obfuscator?
00:16:21 <CakeProphet> calamari: hmmm, aren't ports also a kind of queue?
00:16:23 <zzo38> Zuu: No.
00:16:25 <calamari> CakeProphet: yep, it's a good point
00:16:33 <calamari> CakeProphet: that was in reference to the asm
00:16:35 <CakeProphet> calamari: so you could unify that. Interrupt = port
00:16:57 <Zuu> hm
00:17:28 <CakeProphet> 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.
00:17:34 <calamari> 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
00:17:55 <CakeProphet> calamari: ah. yeah that's true. I can make a Haskell assembler and then the ESO assembler can be written in an esolang.
00:18:14 <CakeProphet> I'll just need a spec of the language.
00:18:22 <calamari> I mean if the worst happens we could code it in bfbasic lol
00:18:41 <CakeProphet> everything useful should be done in befunge. like fungot. :)
00:18:41 <fungot> 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
00:19:01 <calamari> but my guess is that it wouldn't be terribly difficult to write the assembler in almost any esolang
00:19:16 <CakeProphet> maybe. I'm not a master of esolang programming.
00:19:39 <CakeProphet> programming anything in brainfuck looks like... black magic to me
00:19:40 <calamari> I've written an asm for bf.. it was lame tho
00:19:53 <calamari> bootstrapped it I mean
00:20:06 <calamari> let's not use that asm ;)
00:20:11 <CakeProphet> I suppose the assembly language will take a simple command format right? like most assembler.
00:20:16 <CakeProphet> instr arg1 arg2 arg3...
00:20:20 <calamari> yep
00:20:24 <CakeProphet> newline terminated?
00:20:29 <calamari> yep
00:20:35 <CakeProphet> commas or space?
00:20:49 <calamari> traditionally both
00:20:57 <CakeProphet> hmmm, okay.
00:21:13 <calamari> for example MOV AX,1234
00:21:14 <CakeProphet> then I can actually go ahead and write an assembler, and then fill in the instructions later.
00:21:33 <CakeProphet> I'll just need to figure out the format of an argument. but the instruction part will be simple.
00:21:57 <calamari> I've recently written an assembler using flex/yacc
00:22:06 <CakeProphet> is it a pain or simple?
00:22:09 <calamari> but I know you want to use haskell so that's fine
00:22:51 <calamari> wasn't that big a deal but it took some time
00:23:02 <calamari> although that was mostly due to my divorce hehe
00:23:09 <CakeProphet> 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.
00:23:44 <CakeProphet> anything that we intend to run on the OS itself needs to be an esolang though. for maximum esotericity.
00:24:06 <CakeProphet> hmmm. we VM design would be best for most esolangs anyways?
00:24:08 <CakeProphet> *what
00:24:50 <CakeProphet> for example, would befunge run better on a register or a stack machine? Or does it even matter?
00:24:56 <Zuu> I'll get dissapointed if it wont be good for my esolang :P
00:25:39 <calamari> CakeProphet: a stack can be easily implemented via pointers
00:25:58 <CakeProphet> yeah, I suppose it doesn't matter. I've always preferred register machines to stack anyway. Dunno why.
00:26:38 <CakeProphet> should our assembler be type safe? :P
00:26:49 <calamari> CakeProphet: there are no types to worry about
00:26:58 <CakeProphet> surely a port is different from a register.
00:27:26 <CakeProphet> or is it all implemented with pointers?
00:27:32 <CakeProphet> and words and such?
00:27:39 <calamari> well I'm not sure we have decided on ports yet
00:28:28 <CakeProphet> ...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
00:28:45 -!- pikhq has joined.
00:28:56 <calamari> yeah that's kinda the problem
00:29:09 <calamari> for example in bf you do a , and magically get input (eventually)
00:29:21 <pikhq> Hooray, the power's back.
00:30:00 <CakeProphet> calamari: well it blocks. The port can just have a block on read operation.
00:30:11 <CakeProphet> er, block-until-read
00:30:46 <zzo38> 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)
00:31:02 <zzo38> Maybe you can even have a register to select which other register is treated as instruction pointer
00:31:25 <zzo38> Or have two separate modes one for reading the instruction and one for advancing the instruction
00:31:36 <CakeProphet> I'd say two stacks at the most
00:31:39 <CakeProphet> and special registers for each
00:32:17 <zzo38> Yes, two stacks is enough for machine-codes, I think.
00:32:25 <CakeProphet> I think supporting both stacks and registers is a good idea as many esolangs use stacks heavily.
00:32:49 <calamari> okay so we can have a 32-bit stack pointer register
00:33:11 <zzo38> CakeProphet: Yes. And some can use some registers as well
00:33:25 <CakeProphet> yeah...
00:33:26 <calamari> but I'm not sure why it would have to be cordoned off that way
00:33:44 <CakeProphet> and I like the port idea, unless there's a better way to handle hardware. And interrupts are still an open question.
00:33:46 <zzo38> Some esolangs have one "accumulator" register
00:33:57 <calamari> since any other register that you could dereference could also serve
00:34:09 <CakeProphet> 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.
00:34:47 <CakeProphet> I guess?
00:35:25 <CakeProphet> I believe ports is how BEAM handles hardware. ports with port drivers.
00:35:42 <calamari> 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)
00:36:10 <CakeProphet> so what you're saying is with the right instruction set there is no need to have an abstraction of a stack?
00:36:18 <calamari> correct
00:36:22 <CakeProphet> then that's fine.
00:36:58 <CakeProphet> 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.
00:37:20 <CakeProphet> and then you have read/write/block-until-read operations that operate on the ports address/handle.
00:38:01 <CakeProphet> 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.
00:38:10 <CakeProphet> I don't know what that would be though.
00:38:14 <calamari> usually the ports are prenumbered
00:38:28 <CakeProphet> ah, so they can't be dynamically allocated?
00:38:32 <calamari> although I suppose we don't have to do it that way
00:38:32 <CakeProphet> in most systems?
00:39:11 <CakeProphet> well with a VM there's no real reason to have a fixed set of locations for everything
00:39:22 <CakeProphet> Parrot, for example, allows you to dynamically allocate new registers.
00:39:31 <calamari> real ports are actually a pain to work with
00:39:53 <calamari> all sorts of timing issues and crap.. since you're talking directly to hardware
00:40:07 <CakeProphet> but we can remove that via abstraction right?
00:40:31 <lucidalise> http://www.kernel.org/doc/man-pages/online/pages/man3/fopencookie.3.html
00:40:34 <lucidalise> huh.
00:40:38 <CakeProphet> at least for the VM. maybe not for the hardware code.
00:40:48 <lucidalise> CakeProphet: just memory map stuff
00:40:50 <lucidalise> a lot easier.
00:40:55 <lucidalise> use 64-bit addr space
00:41:14 <CakeProphet> memory mapping is new to me as well, actually.
00:41:20 * CakeProphet is a low-level noob.
00:44:40 <calamari> almost got it I thik
00:44:55 <lucidalise> CakeProphet: simple
00:45:04 <lucidalise> some part of memory address space, rather rh
00:45:04 <CakeProphet> Parrot has a mechanism where you essentially assign newly created registers to variables.
00:45:09 <lucidalise> than actually going to ram
00:45:14 <lucidalise> gets its requests for writes and reads sent to some hardware
00:45:16 <lucidalise> which responds accordingy
00:45:19 <lucidalise> *accordingly
00:45:37 <lucidalise> e.g. you could have mem location 0 is 1 if there is an unread byte, 0 otherwise
00:45:48 <lucidalise> then mem location 1 is the byte in the buffer, reading it sets mem location 0 to 0
00:45:56 <lucidalise> so you loop until *0 == 1, then you read *1 and handle it
00:46:10 <pikhq> AAAGH GAAAAH FUCKING CONGRESS
00:46:12 <calamari> lucidalise: yep
00:46:23 <lucidalise> pikhq: you have coreutils competition
00:46:24 <CakeProphet> lucidalise: sounds like implementing hardware support in brainfuck. :)
00:46:24 <lucidalise> but wat
00:46:50 <pikhq> lucidalise: Oh, back in 2005 Santorum was wanting to limit what the National Weather Service could report.
00:47:11 <pikhq> Because they were "unfairly competing" with the private sector weather reporting services.
00:47:41 <lucidalise> xD
00:47:50 <pikhq> Someone would want to ruin the single least controversial and unambiguously good service of the US government.
00:47:55 <lucidalise> pikhq: i am so glad how well the assimilation of santorum's name into ... something new ... is going
00:48:16 <lucidalise> So, it passed, I guess?
00:48:43 <lucidalise> So because EVERYTHING FUCKING SUCKS I gotta write my own kernel.
00:48:54 <pikhq> lucidalise: No. Still pissed.
00:49:03 <pikhq> Just the freaking idea pisses me off.
00:49:15 <calamari> lucidalise: please do!
00:49:39 <lucidalise> calamari: It's going to be Plan 9 turned up to 11: which is one of my more conservative designs.
00:49:52 <CakeProphet> calamari: so how's the design coming?
00:49:59 <lucidalise> aliseOS, of course, has basically infinite uniqueness and practicality: but it will, at least, be undeniably perfect.
00:50:03 <lucidalise> Some day.
00:50:12 <pikhq> lucidalise: You should attain more time.
00:50:22 <pikhq> Don't they have that down at the corner store?
00:50:54 <calamari> CakeProphet: well since I'll be implementing the real vm on x86, that means interrupts and interrupt handlers
00:51:13 <lucidalise> 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":
00:51:23 <CakeProphet> calamari: ah. nothing fancy and abstract? Ah well.
00:51:27 <calamari> CakeProphet: but we can certainly make it easier than that for the internals
00:51:50 <pikhq> lucidalise: So, you will be leaving the unit and they will be observing you on a semiregular basis?
00:51:58 <CakeProphet> one of the things a VM should do is make compiling to it fairly simple. Especially for esolangs. :)
00:52:09 <calamari> CakeProphet: exactly
00:52:16 <pikhq> Improvement at least.
00:52:17 <lucidalise> 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.)
00:52:34 <lucidalise> I have, at least, seen there; it seems not so abhorrent. Pointless, certainly, but not abhorrent.
00:52:37 <lucidalise> pikhq: Heh, no
00:52:39 <lucidalise> *no.
00:52:56 <calamari> argh this is where my os class being so long ago is killing me
00:53:09 <lucidalise> They won't let me get away from day-in, day-out standardised education ... not for anything other than avoiding nuclear holocaust.
00:53:23 <calamari> I really don't want to have to do busy waiting
00:53:25 <pikhq> lucidalise: Improvement, though.
00:53:43 <pikhq> At least you're out of the unit and in education for mundane folk.
00:53:50 <lucidalise> 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.
00:54:08 <pikhq> OHRAIT. European education.
00:54:10 <lucidalise> But I will get the afternoons and nights at home, so that is a thing; a god thing.
00:54:12 <lucidalise> *good
00:54:12 <pikhq> Public education ends at 16.
00:54:22 <lucidalise> pikhq: Not any more -- it's 18 for all the young'uns now.
00:54:46 <lucidalise> They have more and more mindless and increasingly even more hopeless edumacation awaiting them, poor fuckers!
00:54:50 <pikhq> 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?
00:55:05 <lucidalise> pikhq: It's available until ... whenever you end up leaving university :P
00:55:06 <calamari> CakeProphet: the x86 reserves a part of low memory for pointers to interrupt handlers.. perhaps we could simply clone that idea?
00:55:10 <lucidalise> Or, well, college, if you can't get into uni.
00:55:18 <lucidalise> pikhq: But no, now it's mandatory until 18.
00:55:20 <pikhq> GAAAH
00:55:24 <pikhq> Fucking Europe.
00:55:24 <calamari> CakeProphet: would certainly make the implementation easy :)
00:55:27 <lucidalise> But not for me!
00:55:28 <lucidalise> H ha ha!
00:55:30 <lucidalise> pikhq: This is a UK thing
00:55:39 <lucidalise> I get out at 16. Anyway. Here is our system.
00:55:44 <pikhq> *You guys have public post-secondary education.*
00:56:00 <lucidalise> So do you guys.
00:56:02 <lucidalise> First school - after nursery. You know, regular shit.
00:56:14 <lucidalise> Middle school - I forget the exact age you start. 8 to 10 or something.
00:56:16 <lucidalise> Until like 13.
00:56:32 <pikhq> No, we have private post-secondary education and government-subsidised effectively private post-secondary education.
00:56:42 <lucidalise> 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.
00:56:54 <lucidalise> University - 18 to bearded and banana-eating.
00:57:08 <CakeProphet> calamari: would it increase the difficulty of compiler writing?
00:57:22 <lucidalise> pikhq: Hey, people here get bankrupt over student loans.
00:57:24 <lucidalise> It ain't easy.
00:57:42 <pikhq> lucidalise: Here it's impossible to get bankrupt over student loans.
00:57:48 <calamari> CakeProphet: that's what I'm trying to figure out.. how do you map BF "," without busy waiting?
00:57:51 <CakeProphet> I think our inter-mediate assembly language should have some kind of simple way to specify a hardware IO device.
00:57:53 <pikhq> ... BECAUSE THATS EXEMPT FROM BANKRUPTCY
00:57:57 <lucidalise> pikhq: Well, not bankrupt perhaps.
00:58:00 <lucidalise> But in deep shit.
00:58:09 <lucidalise> It ain't free here.
00:58:13 <pikhq> lucidalise: Cost per year on average?
00:58:21 <zzo38> 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.
00:58:25 <lucidalise> pikhq: Oxford is like £11,000 or something for tuition.
00:58:32 <lucidalise> Per term or something.
00:58:35 <lucidalise> It ain't free.
00:58:51 <pikhq> Youch. That is pretty pricy.
00:58:56 <lucidalise> 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.
00:59:12 <lucidalise> pikhq: Well, Oxford /is/ one of the top, say, four educational institutions in the world.
00:59:17 <pikhq> lucidalise: No, that's the upper end of tuition in the US.
00:59:23 <calamari> CakeProphet: I just remembered that a lot of this work has already been done for us
00:59:31 <calamari> CakeProphet: let me see if I can find it
00:59:34 <pikhq> lucidalise: What does that include, though?
00:59:34 <lucidalise> pikhq: I may be wrong. Google it.
00:59:59 * pikhq looketh
01:00:27 <lucidalise> pikhq: Little. Accommodation.
01:01:00 * pikhq cannot find a listed cost
01:01:06 <lucidalise> Try Wikipedia?
01:01:08 <pikhq> Ah, there.
01:01:41 <lucidalise> How much?
01:02:02 * pikhq does a spit take
01:02:30 <pikhq> For in-EU, £3,290.
01:03:01 <pikhq> That's per-year.
01:03:02 <pikhq> ($4,953 USD)
01:05:19 <pikhq> 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.
01:06:12 <lucidalise> I thought it was ... more.
01:06:17 <lucidalise> Oxford is ... cheap ...
01:06:41 <pikhq> (a community college, BTW, is post-secondary education, usually administered by a county or city government, that offers "adult learning" and associates' degrees.)
01:06:49 <lucidalise> pikhq: Now add exams, accommodation, books...
01:07:06 <pikhq> lucidalise: And you're talking pricy vs. pricy.
01:07:20 <calamari> CakeProphet: http://jonripley.com/easel/
01:07:26 <pikhq> Until you realise that you can plausibly pay $40,000 on tuition in the US.
01:07:27 <lucidalise> True ... and you do get Oxford, vs, say, some decent university.
01:07:37 <pikhq> (MIT, Harvard and the like.)
01:07:57 <pikhq> (I'd say MIT or Harvard are about the same caliber as Oxford. Agree?)
01:07:59 <CakeProphet> calamari: well then let's use that. :)
01:07:59 -!- Gregor has joined.
01:08:23 <lucidalise> pikhq: MIT, no.
01:08:43 <lucidalise> MIT have reduced their CS curriculum to Robots-in-Python. So, engineering is their only remaining discipline in which they excel.
01:08:50 <lucidalise> Harvard, okay, agreed, they're on the same level as Oxford.
01:08:59 <Gregor> What're we talking about?
01:09:16 <lucidalise> Gregor: Universities; specifically in comparison to Oxford w/ its $4,953/year tuition.
01:09:20 <pikhq> Gregor: Alise claimed that university in the UK was freaking expensive.
01:09:27 <Gregor> Ah
01:09:30 <lucidalise> pikhq: Still, would you rather say "I went to Harvard" or "I went to fucking OXFORD".
01:09:39 <Gregor> Not being paid to go to school must be weird :P
01:09:49 <pikhq> Gregor: Darned grad student.
01:10:11 <Gregor> I was aaaaalmost full-ride scholarshipped (THIS IS A WORD) all the way through undergrad.
01:10:20 <pikhq> YOU PUNK
01:10:29 * Gregor <3 Gregor
01:10:52 <lucidalise> pikhq: tbh, though, mit has a better system than the uk
01:10:55 <pikhq> 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.
01:10:59 <lucidalise> MIT: "Okay, here is money to pay your tuition."
01:11:17 <lucidalise> 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 ..."
01:11:30 <Gregor> Actually, almost all of my money right now is from the gov't.
01:11:40 <Gregor> Either the university itself (when TA'ing) or the NSF.
01:11:56 <pikhq> lucidalise: That's the standard US system except for one thing: *there isn't generally enough money to cover the costs*.
01:12:02 <pikhq> Gregor: Yeah, but you're a grad student.
01:12:21 <lucidalise> pikhq: Okay, new idea.
01:12:22 <Gregor> I would make an awesome thumbs-up smiley, but I don't know how. So imagine one here:
01:12:29 <lucidalise> We set up the #esoteric Institution for Higher Learning.
01:12:37 <pikhq> lucidalise: Oh, also. The loans increase in payout, and the tuition increases in response.
01:12:39 <Gregor> EIHL
01:12:43 <lucidalise> Based in, fucked if I know, Helsinki or Ontario or somewhere.
01:12:44 <Gregor> Or is it #IHL?
01:13:00 <pikhq> Making the damned loans into a way for the government to bleed money at universities.
01:13:19 <pikhq> Oh, wait. Loans.
01:13:19 <lucidalise> Gregor: Wat
01:13:21 <lucidalise> *Wat.
01:13:34 <pikhq> Sorry, for the *students* to bleed money at universities.
01:13:38 <lucidalise> Gregor: Oh I see.
01:14:06 <lucidalise> Gregor: Esoni for short, perhaps. (Esoteric-uni)
01:14:21 <lucidalise> Motto: Someone translate "[evil cackle]" into Latin.
01:15:34 <pikhq> 悪笑 suffice?
01:15:59 <pikhq> (valid CJK.)
01:16:05 <lucidalise> Latin!
01:16:20 <pikhq> AKUS WARAUS
01:16:28 <pikhq> There, Latinized.
01:16:28 <pikhq> :P
01:16:47 <lucidalise> 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...
01:16:52 <calamari> 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
01:16:57 <lucidalise> And free Ph.D.s for everyone.
01:17:16 <pikhq> lucidalise: Beautiful thing is, anyone can offer a degree.
01:17:28 <lucidalise> calamari: PESOIX, the only thing worse than PSOX.
01:17:38 <lucidalise> It was so bad that PSOX actually improved the state of the art.
01:17:40 <pikhq> Without accredation it's just a piece of paper, but still.
01:18:02 <lucidalise> pikhq: Accreditation is fucking easy: see, Maharashi University of Management.
01:18:04 <calamari> lucidalise: do you have a url for PSOX?
01:18:06 <lucidalise> It's a university ... and a cult!
01:18:08 * pikhq gives everyone a Ph.D. in Doctorism.
01:18:10 <lucidalise> calamari: No, but you don't want one.
01:18:11 <CakeProphet> calamari: this seems like a good idea.
01:18:22 <lucidalise> pikhq: Alas I even know someone intelligent who goes there /sigh
01:18:26 <calamari> CakeProphet: what does?
01:18:28 <lucidalise> Well, not know, but nomic-know. Agora-know.
01:18:35 <pikhq> lucidalise: Accredited by whom?
01:18:46 <lucidalise> pikhq: Whoever does that in the US.
01:18:55 <lucidalise> Consciousness-based education? Accredit'd
01:18:56 <pikhq> Several such entities.
01:18:59 <pikhq> That's private.
01:19:09 <pikhq> We love our capitalism.
01:19:18 <pikhq> Oh, wait.
01:19:27 <CakeProphet> calamari: assuming a language with more powerful i/o than bf.
01:19:29 <lucidalise> Run by the Transcendental Meditation cult famous for claiming its adherents can even, once advanced enough, fly.
01:19:31 <pikhq> It's accredited by one of the government ones.
01:19:34 <lucidalise> And being supported by David Lynch.
01:19:39 <pikhq> Fucking fuckfuck.
01:19:50 <lucidalise> Oh, and the Beatles spent time with the leader at some point.
01:19:51 <pikhq> How's Canada?
01:19:57 <lucidalise> While they were busy being stupid.
01:20:11 <pikhq> lucidalise: Y'mean, not smoking pot?
01:20:12 <lucidalise> Sexy Sadie? Yeah, that's about the leader of the cult.
01:20:20 <pikhq> (their music got better with pot)
01:20:34 <lucidalise> 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.
01:20:38 <calamari> http://esolangs.org/wiki/PSOX
01:21:04 -!- cheater99 has quit (Ping timeout: 248 seconds).
01:22:32 <lucidalise> 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.
01:22:43 <lucidalise> This achieves perfect conscious existence^W^W^Wfuck all.
01:23:20 <calamari> CakeProphet: which esolangs does that leave us?
01:23:48 <CakeProphet> 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
01:24:16 <calamari> which variant?
01:25:05 <calamari> I'm only seeing int and char i/o
01:25:37 -!- Wamanuz3 has quit (Ping timeout: 264 seconds).
01:26:46 -!- BeholdMyGlory has quit (Remote host closed the connection).
01:26:47 -!- FireFly has quit (Quit: swatted to death).
01:27:39 <pikhq> lucidalise: To be perfectly fair, the *were* experimenting with, uh, just about everything they could.
01:27:47 <pikhq> It was the 60s.
01:28:12 -!- Quadrescence has joined.
01:28:14 <pikhq> Also: nobody gives a shit about their personal beliefs, cause the music was pretty good. :P
01:28:51 <pikhq> Context jump: Maharishi University of Management seems like a freaking retarded school.
01:30:36 <pikhq> And yet, they offer CS degrees.
01:30:44 * pikhq wonders how good that program is.
01:30:54 * pikhq wonders if people who can fly can comment well.
01:34:10 -!- zzo38 has quit (Remote host closed the connection).
01:35:09 <lucidalise> pikhq: Pavitra is the Agora player who goes there. Studies math, says google. >_>
01:35:24 <pikhq> lucidalise: ...
01:35:26 <lucidalise> So maybe I Internet-stalked the guy's relation to the uni after the initial shock! So what >_>
01:35:30 <lucidalise> <_<
01:35:48 <lucidalise> 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.
01:38:53 <lucidalise> So, anyway, good night.
01:39:04 -!- lucidalise has quit (Quit: Page closed).
01:39:05 <pikhq> Gxis
01:39:38 <Gregor> So yeah ... EIHL ... maybe not :P
01:40:19 <CakeProphet> calamari: befunge98 I think?
01:40:22 <CakeProphet> whatever fungot is coded in
01:40:23 <fungot> CakeProphet: cruise mode holds it no one is my favorite. :d haha. if it is
01:40:32 <CakeProphet> allows network/file io I'm fairly sure.
01:40:38 <pikhq> Gregor: Clearly we should just genetically engineer humanity to make everyone inherently desire learning.
01:57:32 -!- poiuy_qwert has joined.
02:21:28 <CakeProphet> calamari: http://hpaste.org/fastcgi/hpaste.fcgi/view?id=27329#a27329
02:21:34 <CakeProphet> this a stub for the assembler
02:22:16 <CakeProphet> 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
02:25:04 <calamari> where are you handling labels?
02:26:06 <CakeProphet> nowhere at the moment. I don't know the format of our assembly, so I don't have them yet. :)
02:26:19 <CakeProphet> but this is the basic instruction translator
02:26:48 <CakeProphet> I know next to nothing about assembly languages.
02:27:03 <CakeProphet> how are labels going to be used?
02:27:22 <CakeProphet> because I have an idea of how to implement them
02:29:06 <calamari> they are converted to code offsets
02:29:31 <calamari> actually, think about labels in C
02:30:24 -!- aschueler has quit (Ping timeout: 248 seconds).
02:30:29 <calamari> with goto... and conditional gotos
02:30:30 <CakeProphet> so you make a label with a label declaration
02:30:44 <CakeProphet> and then goto instructions. How do these get translated to machine code?
02:31:09 <CakeProphet> so basically
02:31:17 <CakeProphet> I need to construct a table from label strings to.... what?
02:31:21 -!- coppro has joined.
02:31:34 <calamari> depends on the instruction.. can be absolute addresses or relative.. abosulte is not good tho.. relative is better for relocation
02:32:13 <calamari> okay sorry, let me explain better
02:32:32 <CakeProphet> ...yes
02:32:36 <coppro> we need ircfs
02:32:49 <coppro> 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
02:32:55 <coppro> then, it stores data on those bots
02:33:38 <calamari> 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
02:34:04 <coppro> wait what?
02:34:23 <calamari> relative would store it as 1234-2345 (plus or minus a few)
02:34:53 <calamari> coppro: sounds like a cool idea
02:35:14 <coppro> calamari: and how does that give 34 12?
02:35:28 <calamari> coppro: 1234 hex is 34 12
02:35:33 <coppro> oh ok
02:35:45 <coppro> yeah, relative jumps are awesome
02:35:49 <coppro> (see MMIX)
02:35:52 <Gregor> calamari is some kind of little-endian bigot!
02:35:59 <calamari> I think we should avoid absolute addressing tho
02:36:18 <calamari> Gregor: :P
02:36:40 <Gregor> Actually I figured out why (and that) little-endian is better, so I no longer care :P
02:37:28 <calamari> the mainframes I work on are big endian
02:37:46 <Gregor> MOAR LIEK LAME-ENDIAN
02:38:15 <calamari> System Z 0wnz y3w
02:38:42 <Gregor> zLinux (or is it Z/Linux? LinuxZ? Something) OWNZ
02:38:45 <calamari> actually got to see a z10 the other day.. the hot air blowing out and noise is intense
02:39:01 -!- CakeProphet has quit (Ping timeout: 245 seconds).
02:39:45 -!- CakeProphet has joined.
02:40:34 <CakeProphet> ...disconnected
02:40:37 <CakeProphet> fill me in.
02:40:39 * Sgeo wonders if he should design a PSOX2
02:41:08 <CakeProphet> 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)?
02:41:51 <calamari> CakeProphet: basically, yes
02:42:03 <calamari> jumps can be forward or back
02:42:13 <calamari> so depending on how you do it, you might need two passes
02:42:30 <CakeProphet> well I'll need a pass to find labels and preprocess
02:42:37 <CakeProphet> and then a pass to translate instructions
02:42:59 <CakeProphet> how would you do it in one?
02:43:53 <oerjan> CakeProphet: this being haskell, you want to use Tying The Knot
02:44:51 -!- coppro has quit (Read error: Operation timed out).
02:45:06 <calamari> http://www.haskell.org/haskellwiki/Tying_the_Knot
02:45:07 <calamari> cool
02:45:09 <oerjan> 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.
02:45:37 <oerjan> and because of laziness this actually works :D
02:45:47 <CakeProphet> so I just... don't worry about it and do it all at once?
02:45:51 <CakeProphet> are you sure?
02:46:24 <oerjan> _assuming_ the position of the labels is not affected by their values
02:46:57 <calamari> oerjan: yeah not gonna do that :)
02:47:00 <CakeProphet> the position of the label is its value... if I understood that correctly.
02:47:27 <oerjan> yeah
02:47:33 <calamari> 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
02:47:42 <oerjan> yeah like that
02:48:03 <CakeProphet> oh wait...
02:48:10 <oerjan> if that were the case it would break down
02:48:12 <calamari> so that is simple to solve.. don't make the instructions that way :)
02:48:22 <CakeProphet> so the offset is a byte offset? So I need to accumulate the offset value for each machine code byte?
02:48:35 <calamari> and since we control the machine code, don't worry about it :)
02:49:09 <CakeProphet> basically I've got a structure called AsmState, which is the state I'm carrying around in my parser
02:49:25 <oerjan> CakeProphet: you would want to have the current position yeah
02:49:27 <Gregor> http://www.wimp.com/cloudchamber/ This is so much more awesome than anything else ever.
02:49:35 <CakeProphet> AsmState = AsmState { output :: String, labels :: Map String ???, offset :: Word8}
02:49:49 <CakeProphet> er... maybe Word32 instead
02:50:23 <CakeProphet> so to write output code you do addOutput "string"
02:50:26 <calamari> Gregor: nice
02:50:56 <CakeProphet> so I guess in addOutput I can just accumulate the offset per character?
02:51:22 <CakeProphet> and when I encounter a label I add a new Map entry with the current offset?
02:53:03 * calamari sticks some Thorium in Gregor's pocket
02:53:46 <oerjan> CakeProphet: note you probably want to keep the labels you are building and the labels you are using as different fields
02:55:03 <CakeProphet> not sure I understand...
02:55:07 <oerjan> at least if you use Map, which is strict in the keys
02:55:09 <CakeProphet> I really don't know how Tying the Knot works. :P
02:55:13 <CakeProphet> aaah
02:55:18 <Gregor> "Is that thorium in your pocket, or are you just happy to see me"
02:55:19 <CakeProphet> I could import Map.Lazy right?
02:55:36 <oerjan> CakeProphet: i don't really know much about that one
02:55:50 <CakeProphet> oerjan: it's all lazy, as the name suggests.
02:55:54 <CakeProphet> same interface
02:56:05 <CakeProphet> at least I assume so.
02:57:40 <oerjan> CakeProphet: i think not passing both values makes it harder to handle missing label errors in a controlled way
02:58:36 <oerjan> hm you'd get an infinite recursion then, i think
02:59:04 <calamari> might not have to worry about missing labels since the assembler code will probably be compiler generated
02:59:11 <CakeProphet> okay so....
02:59:23 <CakeProphet> I need two maps? One contains already found labels and one contains?
03:00:06 <oerjan> if you have m = Map.insert key val m and then lookup anything _other_ than key, you get an infinite recursion
03:00:26 <oerjan> but if you use two maps you can get an actual lookup failure instead
03:01:25 <oerjan> 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
03:01:51 <oerjan> *initial parser state
03:02:23 <oerjan> the parser builds the first but uses the second for actual lookups
03:03:35 <CakeProphet> oerjan: ...I don't understand how I construct that second map for the parser before-the-fact.
03:03:59 <Sgeo> calamari, CakeProphet, would a redesigned PSOX be helpful?
03:04:08 <oerjan> this works fine as long as the lookups are never used for conditional branching in the parser or for building the first map
03:04:10 <Sgeo> No NULs, and tested with multiple languages
03:04:15 <CakeProphet> Sgeo: dunno, calamari will have to answer that.
03:04:31 <calamari> Sgeo: I haven't looked at PSOX enough to know
03:04:43 <CakeProphet> oerjan: I mean. How do I make the second map? What do I pass in?
03:04:46 <oerjan> CakeProphet: it is simply the first map from the final state of the parser, passed back into the initial state
03:04:59 -!- coppro has joined.
03:05:09 <CakeProphet> oerjan: ...oh my. okay, that makes sense. But I'm still not sure how...
03:05:13 <CakeProphet> like, how do I get that value?
03:05:21 <oerjan> that's the actual "tying" part of the knot :D
03:05:23 <Sgeo> First idea: The first character that the language sends to PSOX
03:05:56 <calamari> Sgeo: I don't know if PSOX worries about a non-PSOX environment, but that wouldn't be needed
03:06:06 <Sgeo> NUL if NULs etc. are the easiest, 1 if numeric I/O is available, C if ...
03:06:07 <Sgeo> hm?
03:06:13 * Sgeo is now talking about PSOX2
03:06:32 <CakeProphet> 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?
03:06:46 <CakeProphet> in Haskell code
03:06:48 <CakeProphet> an expression
03:06:50 <calamari> Sgeo: url for PSOX2?
03:06:51 <oerjan> let me see
03:06:53 <Sgeo> Better yet, a series of tests
03:07:01 <Sgeo> calamari, #esoteric
03:07:02 <Sgeo> Right now
03:07:07 <calamari> oh, lol okay
03:07:37 -!- Mathnerd314 has quit (Ping timeout: 264 seconds).
03:07:47 <calamari> I didn't realize was PSOX was, glad you kept going with PESOIX
03:07:53 <calamari> what
03:08:16 <Sgeo> The program outputs 0. The program outputs the largest number it can, or 0 if it can output theoretically any number
03:08:23 <Sgeo> Then maybe some more tests
03:08:28 <Sgeo> calamari, alise hates PSOX
03:08:35 <Sgeo> I didn't realize he hated PESOIX more >.>
03:09:00 -!- Mathnerd314 has joined.
03:09:03 <oerjan> CakeProphet: hm does Parsec have a MonadFix instance? that would make it easier i think
03:09:25 <calamari> Sgeo: really PESOIX and PSOX seem to be overkill
03:10:00 <calamari> Sgeo: at least if we are going wit hthe interrupt vector table idea
03:12:44 <CakeProphet> oerjan: don't think so
03:12:54 <CakeProphet> EsoAsm rev 2: http://hpaste.org/fastcgi/hpaste.fcgi/view?id=27329#a27330
03:15:19 <calamari> Sgeo: how did you handle blocking btw?
03:15:52 <Sgeo> calamari, as in?
03:16:24 <calamari> Sgeo: actually nm, I guess the underlying OS handled it for you
03:19:34 <CakeProphet> the state accessor function is awesome
03:19:46 <CakeProphet> o <- get offset
03:19:47 <CakeProphet> :)
03:19:57 <CakeProphet> getOffset = get offset
03:21:26 <CakeProphet> oerjan: you'll have to help me understand this Tying the knot thing because it looks like magic.
03:21:42 -!- oerjan has quit (Remote host closed the connection).
03:21:47 <CakeProphet> ha.
03:21:53 -!- oerjan has joined.
03:22:43 <CakeProphet> oerjan: you'll have to help me understand this Tying the knot thing because it looks like magic.
03:22:46 <CakeProphet> (resend)
03:23:03 <oerjan> CakeProphet: i cannot get to the logs so i don't know what i missed
03:23:04 <pikhq> It is magic.
03:23:05 <CakeProphet> could you show a simple example. I'm not following the wiki on the doubly linked list thing.
03:23:15 <CakeProphet> EsoAsm rev 2: http://hpaste.org/fastcgi/hpaste.fcgi/view?id=27329#a27330
03:23:16 <pikhq> Or perhaps sufficiently advanced technology.
03:23:17 <CakeProphet> oerjan: miss that?
03:23:27 <oerjan> no
03:23:50 <oerjan> my trouble here is remembering the actual Parsec functions :D
03:23:56 <Sgeo> You missed a ha
03:23:58 <CakeProphet> I can probably help with that.
03:24:17 <oerjan> !haskell :t Text.Parsec.runParser
03:24:46 <oerjan> yeah sure don't be helpful EgoBot
03:24:56 <oerjan> !haskell Text.Parsec.runParser
03:24:59 <Gregor> <EgoBot> 'K I won't
03:25:06 <CakeProphet> *EsoAsm Text.ParserCombinators.Parsec> :t runParser
03:25:06 <CakeProphet> runParser :: GenParser tok st a -> st -> SourceName -> [tok] -> Either ParseError a
03:25:38 <oerjan> barring an actual MonadFix, that function seems like the best place to do the knot tying, i think
03:25:46 <Sgeo> !haskell putStrLn "Hello world"
03:25:48 <EgoBot> Hello world
03:26:04 <CakeProphet> oerjan: BUT HOW.
03:26:15 <CakeProphet> like... how do I magically have a reference to a value that is built later?
03:26:31 <Sgeo> Wait, circular references are possible in Haskell?
03:26:43 <Gregor> With KNOTS.
03:26:45 <Gregor> And ... TYING.
03:26:52 <CakeProphet> ...
03:27:18 <CakeProphet> Sgeo: and yes. I believe so.
03:27:20 <pikhq> CakeProphet: Dude, circular references are done *all the time* in Haskell.
03:27:28 <CakeProphet> pikhq: yes, but I don't understand this particular one.
03:27:32 <Sgeo> pikhq, I was the one asking the question
03:27:35 <CakeProphet> if someone could, I don't know, explain?
03:27:42 <pikhq> x = 1 : x -- Glee!
03:27:48 <Sgeo> O
03:27:49 <Sgeo> Oh
03:28:42 <CakeProphet> oerjan: where could I get the st to plug into that function?
03:29:13 <CakeProphet> or part of the state rather, the second label map
03:29:36 <oerjan> ok assume your parser returns not just the result, but also the state
03:29:46 <CakeProphet> this is what it currently does, so alright.
03:30:37 <CakeProphet> asmFile = ... >> getState
03:31:03 <oerjan> tiedParser p st name toks = pRes where pRes = runParser (p) st{labels2 = l1}; Right (_, ASMState {labels1 = l1}) = pRes
03:32:05 <CakeProphet> is there a function name that goes in front of that Right?
03:32:12 <oerjan> no
03:32:22 <CakeProphet> ah. pattern binding, got it.
03:32:31 <oerjan> the pRes should be a Right if the parsing succeeds
03:32:45 <CakeProphet> ...that's magical.
03:32:59 <CakeProphet> I get it now. it's just some tricky referencing
03:33:47 <CakeProphet> hmmm, what would be good names for these label maps?
03:33:52 <CakeProphet> buildMap, labelMap?
03:34:00 <oerjan> it is of course vital that no attempt is made to strictly evaluate that l1 until the parser actually _has_ returned a Right
03:34:25 <CakeProphet> hmmm
03:34:30 <CakeProphet> isn't State strict?
03:34:48 <oerjan> i also missed some arguments on runParser, but you can fix that :D
03:35:33 <oerjan> it won't matter if ASMState isn't strict in labels2
03:36:09 -!- cheater99 has joined.
03:37:00 <CakeProphet> hmmm, okay.
03:37:53 <cheater99> hello
03:38:10 <oerjan> hi
03:39:47 <cheater99> oerjan: i wanted to say something to you but forgot what.
03:40:00 <oerjan> *MWAHAHAHA*
03:40:01 <cheater99> you mentioned something to me then disappeared for a week. damn you.
03:40:09 <cheater99> I HATE YOU
03:40:11 <cheater99> ok, bbl
03:40:12 <oerjan> O_o
03:40:23 <oerjan> i've been here about every day :D
03:40:24 <cheater99> j/k, i love you.
03:40:30 <cheater99> under a different nick perhaps
03:40:30 <CakeProphet> oerjan: what happens when pRes is Left?
03:40:40 <oerjan> no definitely this one
03:40:43 <Sgeo> Actually, what is so unplayable about death walz? Some poorly aligned notes is all it takes to make it nonsense?
03:40:44 <cheater99> not true
03:40:46 <cheater99> you weren't here
03:40:47 <Sgeo> >:D
03:40:57 <cheater99> i know because my autocomplete hasn't worked.
03:41:01 <oerjan> CakeProphet: then l1 should not be used, i hope
03:41:07 <oerjan> cheater99: i'm not here _all_ day
03:41:19 <cheater99> AHA
03:41:21 <cheater99> SO U LIED
03:41:31 <oerjan> cheater99: i said _every_
03:41:32 <cheater99> <oerjan> i've been here about every day :D
03:41:47 <oerjan> those are not the same thing
03:41:51 <CakeProphet> oerjan: don't you need to pattern match for Left somewhere?
03:41:55 <cheater99> yes, if you were here every day, that would mean for each day, you were here that day.
03:42:07 <cheater99> not half a day
03:42:09 <cheater99> not five minutes!
03:42:11 <oerjan> CakeProphet: no, the match is lazy and is only evaluated if l1 is
03:42:12 <cheater99> but a day!
03:42:20 * cheater99 feels duped :~(
03:43:02 <oerjan> like is generally the case for where and let
03:43:11 <oerjan> *only checked
03:43:23 <oerjan> *if l1 is evaluated
03:43:32 -!- augur has quit (Remote host closed the connection).
03:44:20 <CakeProphet> oh my god it compiles.
03:44:26 <cheater99> you are manipulating the facts, oerjan!
03:44:30 <cheater99> rewriting history!
03:45:04 <oerjan> cheater99: i am pretty sure i've been here for at least some hours nearly every day in recent memory
03:45:18 <cheater99> ok fine :(
03:45:26 <cheater99> but you weren't here when i needed u
03:45:31 <cheater99> :'(
03:45:40 <oerjan> sheesh
03:46:14 <oerjan> so did it have anything to do with math?
03:46:26 <cheater99> i'm not sure anymore :|
03:47:01 <cheater99> i think maybe computability or something.
03:47:10 <oerjan> ok that too
03:47:20 <oerjan> complexity, turing machines, P=NP?
03:47:31 <cheater99> complexity
03:47:44 * oerjan has started slowly going through rjlipton's blog archive
03:47:55 <cheater99> i mentioned your nick with it
03:47:58 <cheater99> when you weren't here :D
03:48:08 <oerjan> any particular day?
03:48:13 <cheater99> bout 2-3 days ago
03:48:24 <cheater99> just search for cheater99> oerjan:
03:49:13 <oerjan> <cheater99> oerjan: but functions in python aren't first-order objects
03:49:17 <cheater99> yes
03:49:26 <cheater99> we were talking about normalization
03:49:47 <oerjan> yes and what does that even _mean_ in the context of python, to start with
03:49:50 <cheater99> and you said that normalization does not happen in any lambda calculus that is touring complete
03:50:16 <cheater99> 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
03:50:22 <oerjan> well i'm not sure i said _exactly_ that, but something close
03:50:28 <cheater99> yeah something like that
03:50:32 * cheater99 waves his hands a little
03:50:59 <oerjan> ah but every infinite computation (which python must have) is essentially a break of normalization
03:51:14 <cheater99> why
03:51:25 <oerjan> because normalization in LC at least is the same as saying every evaluation strategy must terminate
03:51:32 <oerjan> (for strong)
03:51:38 <cheater99> ok
03:51:43 <cheater99> but most programs terminate
03:51:49 <cheater99> and you can easily factor out the non-terminating parts
03:51:52 <oerjan> and actually running a program is definitely an evaluation strategy
03:52:00 <CakeProphet> EsoAsm rev 3: http://hpaste.org/fastcgi/hpaste.fcgi/view?id=27329#a27331
03:52:02 <cheater99> SO, the bits that interest us are actually going to terminate
03:52:11 <cheater99> hence, they can be strongly normalized, no?
03:52:36 <oerjan> "easily factor out", have you _ever_ heard of the halting problem? :D
03:53:08 <ais523> most practical programs can be written in such a way that the nonterminating bits are confined to bits of the code
03:53:11 <ais523> e.g. the totality monad
03:53:20 <cheater99> oerjan: i don't know what you're talking about right now
03:53:25 <cheater99> oerjan: i don't write my apps to never terminate
03:53:29 <cheater99> oerjan: they always terminate
03:53:36 <CakeProphet> ah, I forgot to add some functions
03:53:41 <ais523> interpreters are an exception
03:53:45 <cheater99> oerjan: what ais523 said
03:54:11 <oerjan> cheater99: well then you are writing them to be at least weakly normalizing by design
03:54:15 <ais523> (in other words: the halting problem in unsolvable in general, but often solvable in any individual case, including many of the useful ones)
03:55:01 <cheater99> oerjan: in general, you only write non-terminating problems in the Wankers 101 class
03:55:06 <cheater99> irl, you don't
03:55:09 <CakeProphet> oerjan: so when I add labels I should refer to buildMap, and when I refer to labels I should use labelMap
03:55:35 <oerjan> 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
03:55:48 <cheater99> read what i just said
03:56:05 <oerjan> cheater99: yeah yeah
03:56:17 <oerjan> CakeProphet: yeah
03:56:20 <oerjan> (yeah)
03:56:24 <CakeProphet> haha... the State monad is great.
03:56:26 <cheater99> yeah yeah.
03:56:32 <CakeProphet> it's almost like programming in imperitive langs.
03:56:43 <CakeProphet> but better.
03:57:09 <CakeProphet> I wonder how much memory this parser will end up consuming
03:57:15 <Quadrescence> better?
03:57:20 <oerjan> CakeProphet: you are essentially getting two passes automatically just from the dataflow
03:57:21 <CakeProphet> well, safer.
03:57:25 <Quadrescence> How is using a state monad to do imperative work bett---okay
03:57:30 <Quadrescence> safer is fair
03:58:25 <ais523> Quadrescence: it lets you go functional-style and just use the imperative bits when they become relevant
03:58:40 <ais523> if you really want to mix imperative and functional a lot, though, ML is probably neater than Haskell
03:59:29 <Quadrescence> 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
03:59:33 <CakeProphet> olololol boilerplate code.
03:59:39 <CakeProphet> that is the only downside of using State so far.
03:59:50 <ais523> the only ML I know is OCaml
03:59:53 <CakeProphet> all the get/put convenience functions
03:59:58 <Quadrescence> ais523: Poor you :(
04:00:13 <ais523> Quadrescence: I'm aware of the existence of SML
04:00:19 <ais523> and really, the differences between the MLs aren't major
04:00:24 <Quadrescence> ais523: SML is just smaller and "neater"
04:00:27 <ais523> compared to the difference between, say, OCaml and Java
04:00:46 <Quadrescence> Yeah, the differences aren't huge. Mostly minor things, like bits of syntax and some little rules
04:00:48 <oerjan> 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?
04:01:22 <CakeProphet> no it does not.
04:01:34 <CakeProphet> getState, putState, updateState
04:01:39 <CakeProphet> I don't know why there isn't an instance.
04:02:05 <oerjan> because that would give you get, put and modify. although that's essentially the same as those anyhow
04:02:12 <oerjan> oh and gets
04:02:27 <oerjan> (applies a function automatically)
04:02:43 <CakeProphet> as far as I can tell they're exactly the same
04:03:04 <CakeProphet> GenParser and friends are have a State transformer
04:03:06 <CakeProphet> of some kind
04:12:40 <CakeProphet> behold! a knot-tying parser that can now add labels and access their offsets in a pseudo-magic fashion
04:12:44 <CakeProphet> http://hpaste.org/fastcgi/hpaste.fcgi/view?id=27329#a27332
04:12:51 <CakeProphet> the only thing missing is... instruction parsers. :)
04:14:56 <CakeProphet> of course I haven't tested it at all. But compiling with no type errors is a fairly good guarantee.
04:15:05 <CakeProphet> and I don't really know how I /could/ test it atm with no instruction set.
04:15:36 -!- Sgeo_ has joined.
04:17:21 -!- Sgeo has quit (Ping timeout: 245 seconds).
04:17:38 <oerjan> you could do subleq, maybe?
04:17:40 <Sgeo_> Someone should write music that has impossible stuff, but when you strip out the meaningless stuff, it's a rickroll
04:18:12 <CakeProphet> define impossible stuff
04:18:37 <CakeProphet> oerjan: dunno what subleq is...
04:18:58 <oerjan> CakeProphet: single-instruction TC machine code
04:19:01 -!- coppro has quit (Remote host closed the connection).
04:19:58 <oerjan> subtract and branch if less than or equal
04:20:14 -!- coppro has joined.
04:20:33 <oerjan> so just one instruction and labels should be enough to test a barebones assembler
04:20:49 <CakeProphet> calamari: you still there?
04:20:56 <calamari> CakeProphet: just got back
04:21:21 <CakeProphet> see link above for the latest update to the assembler (well, not the latest, I spotted a bug in the parser combinators)
04:21:55 <calamari> CakeProphet: I'm not really equipped to run haskell right now, so please hold onto it :)
04:22:26 <calamari> I think I'm going to need to call it a night unfortunately.. although the asm is nearly worked out
04:22:30 <CakeProphet> calamari: well, it doesn't really work yet. It's just a skeleton still
04:22:44 <CakeProphet> I need an actual instruction set to interpret. Which I'll do later because I've been working on this for a while now.
04:22:59 <oerjan> freefall :D
04:23:12 <calamari> oerjan: ?
04:23:20 <oerjan> (webcomic)
04:23:55 <oerjan> that bot is not really helping his case....
04:25:02 <CakeProphet> at the moment is fairly general purpose. You could plug in the parsers for any kind of instruction set at this point.
04:25:11 * CakeProphet will probably re-use this code for other crazy VM designs.
04:27:50 -!- calamari has quit (Quit: Leaving).
04:27:57 <CakeProphet> oerjan: due to the introduction of this knot-tying thing... I know cannot guess the evaluation order of my program at all.
04:28:03 <CakeProphet> *now
04:29:51 <oerjan> *MWAHAHAHA*
04:31:56 <CakeProphet> oerjan: I could use this same strategy for macros yes?
04:32:57 <oerjan> er how so?
04:36:32 -!- GreaseMonkey has joined.
04:41:09 -!- SevenInchBread has joined.
04:43:31 -!- CakeProphet has quit (Ping timeout: 276 seconds).
04:46:54 -!- coppro has quit (Remote host closed the connection).
04:47:39 -!- coppro has joined.
04:51:30 <SevenInchBread> oerjan: scan for macro definitions, add them to a build map, knot-tie a map that represents the finished macro map, and access that
04:51:35 -!- SevenInchBread has changed nick to CakeProphet.
04:59:31 <oerjan> CakeProphet: ok there could be trouble then if macros are allowed to do macro definitions
04:59:32 -!- Mathnerd314 has quit (Ping timeout: 265 seconds).
05:00:21 -!- Mathnerd314 has joined.
05:00:31 <oerjan> or alternatively if macros can _hide_ macro definitions, such as #if in C
05:00:36 <oerjan> *CPP
05:00:55 <CakeProphet> I don't actually know if we're going to implement a preprocessor
05:01:12 <CakeProphet> we could just use CPP
05:01:23 <oerjan> um that's not my point
05:02:25 <oerjan> 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
05:02:58 <pikhq> The worst thing about the CPP is there is no way for macros to produce further macros.
05:03:01 <pikhq> IMO.
05:03:29 <pikhq> ... That was a non sequitur that made sense when I typed it somehow.
05:03:31 <pikhq> My apologies.
05:03:31 * Gregor <3 m4c
05:03:44 <Gregor> (m4c is the imaginary language of C with M4 instead of CPP)
05:03:58 <pikhq> I'm not sure whether to vomit or applaud.
05:04:17 <Gregor> Vomit once you see my m4c "header" that gives OO to C :P
05:04:26 <ais523> m4 was invented as a general-purpose preprocessor that's more powerful than CPP, after all
05:05:00 <oerjan> CakeProphet: i understand this is a relevant problem in scheme, which says behavior is undefined if definitions can affect what is a definition
05:05:10 <coppro> m4 gives us autotools :(
05:05:22 <pikhq> coppro: No, *Stallman* gave us autotools.
05:05:34 <coppro> pikhq: I know; I was joking
05:05:35 <Gregor> And autotools gives us portable software.
05:05:46 <oerjan> but haskell knot-tying is more breakable than scheme macros, i suspect, at least without additional cleverness
05:06:00 <coppro> Gregor: autotools is not worth the effort it takes to get working
05:06:10 <Gregor> False.
05:07:44 <CakeProphet> oerjan: so #if would create such a situation?
05:08:10 <CakeProphet> if so, we could just leave it out. Macros would be immensly useful in an assembler... #if only somewhat (I think?)
05:08:10 <oerjan> xkcd XD
05:08:35 -!- kwertii has quit (Quit: bye).
05:08:46 <oerjan> CakeProphet: however this is all moot if macros can only be used after they're defined.
05:10:12 <CakeProphet> oerjan: so basically the code that builds the macro map can't access it or it will loop?
05:10:20 <oerjan> yep
05:11:08 -!- coppro has quit (Remote host closed the connection).
05:11:53 -!- coppro has joined.
05:21:23 -!- Oranjer has left (?).
05:28:22 -!- GreaseMonkey has quit (Ping timeout: 276 seconds).
05:29:56 -!- Gregor has quit (Remote host closed the connection).
05:30:27 -!- GreaseMonkey has joined.
05:34:37 -!- Mathnerd314 has quit (Ping timeout: 264 seconds).
05:35:27 -!- MizardX has quit (Read error: Connection reset by peer).
05:35:37 -!- MizardX has joined.
05:35:54 -!- Gregor has joined.
05:43:01 <CakeProphet> oerjan: ha. People on #haskell are tryin to convince me that using state is a bad idea. :)
05:43:28 <oerjan> parsec state in particular?
05:43:36 <coppro> using state in what sense?
05:44:00 <coppro> Parsec state should be avoided if possible; it may not be
05:45:08 <oerjan> technically a writer monad might be even better for building label maps, i think. but parsec doesn't come with that.
05:45:41 <oerjan> and you still need state for the current offset
05:47:11 <oerjan> or maybe not, i vaguely recall Maps may not have efficient union
05:48:27 <oerjan> it might be considered cleaner to use parsec to build a data representation without doing the actual label lookups inside it
05:48:35 <CakeProphet> they're suggested I carry around a monolithic data structure throughout the Parsec parser as return values
05:48:40 <CakeProphet> and build them together
05:50:10 <Sgeo_> :(
05:51:04 <coppro> CakeProphet: in any case, it should be impossible to have state anyways
05:51:13 <coppro> so not quite sure how you'd do anything else
05:51:56 <Sgeo_> CakeProphet, isn't that.. what State and/or ST do?
05:52:00 <Sgeo_> Well, ST not so literally
05:52:19 <ais523> State doesn't really give you state
05:52:24 <ais523> it just automates the passing-around of state
05:52:38 <CakeProphet> yes that's what MonadState in general does
05:52:47 <CakeProphet> and Parsec parsers implement a state monad.
05:54:43 <coppro> more or less
05:54:58 <coppro> Parsec's a tad more confusing
06:01:06 -!- MizardX has quit (Ping timeout: 260 seconds).
06:03:38 <CakeProphet> coppro: how so?
06:06:46 <coppro> CakeProphet: backtracking
06:07:25 <CakeProphet> ah... does it not reset state upon backtrack?
06:07:58 <CakeProphet> or it does and that's why it's more confusing?
06:08:33 <coppro> well, it (like all of Haskell), doesn't really have a state to start with
06:08:46 <CakeProphet> blah blah blah. :P
06:08:55 <coppro> if you're going to pretend it has state, then yes, it resets that state
06:08:59 <coppro> but it doesn't have state
06:09:06 <CakeProphet> I get what you're saying
06:09:13 <CakeProphet> semantically it makes no difference.
06:09:18 <CakeProphet> how you word it.
06:09:21 <CakeProphet> what is state?
06:09:48 <pikhq> What *is* State?
06:09:52 <coppro> semantically it makes a lot of difference
06:09:53 <pikhq> Does it have Buddha nature?
06:09:57 <CakeProphet> not having C-style state doesn't mean you don't use state. Haskell uses plenty of state.
06:10:09 <coppro> no, Haskell doesn't use state
06:10:29 * pikhq beats coppro with STM
06:10:33 <pikhq> Erm.
06:10:35 <CakeProphet> ah, so then the internal configuration of any kind of hardware that implements a Haskell program is just sitting still, right? motionless. no state.
06:10:39 <pikhq> Not that.
06:10:51 <pikhq> StateT, wasn't it? That's the strict state one.
06:10:55 <CakeProphet> no
06:10:57 <CakeProphet> State.Strict
06:10:59 <CakeProphet> is strict state
06:11:03 <CakeProphet> StateT is the state transformer
06:11:14 <pikhq> Rightrightright.
06:11:38 <pikhq> CakeProphet: Arguably, one does not execute a Haskell program, but rather executes the program described by the Haskell program.
06:11:53 <CakeProphet> ...rofl
06:11:54 <CakeProphet> ah
06:11:55 <CakeProphet> right.
06:11:59 <pikhq> This, I presume, is what coprro is referring to.
06:12:02 <CakeProphet> okay. then I guess Haskell /doesn't/ have state.
06:12:02 <coppro> yeah
06:12:22 <coppro> hence why IO is a monad
06:13:30 <CakeProphet> conceptually I think it has the equivalent of state. via recursive functions and various monads.
06:13:41 <CakeProphet> values however, do not change, no.
06:13:42 <coppro> certainly; it's TC
06:14:09 <CakeProphet> so I still say the distinction makes no difference. :P
06:14:35 <CakeProphet> sorry... -ahem-
06:14:48 <CakeProphet> I have been defending my design choices for the past hour
06:14:59 <CakeProphet> so I must debate everything, naturally.
06:15:26 <coppro> if I was implementing a complex parser in Parsec, I'd make an AST data structure through the monad
06:15:40 <Sgeo_> pikhq, that's a very concise and clear way of describing it
06:15:40 <CakeProphet> certainly.
06:16:00 <Sgeo_> main is ultimately a description of what to do
06:16:12 <coppro> Sgeo_: I liked ais523's description of Haskell simply returning a giant input->output mapping table
06:16:34 <CakeProphet> a giant-and-possibly-infnite table?
06:17:04 <coppro> yeah
06:18:35 <pikhq> A perfectly valid if abstract way of viewing the semantics of the IO monad.
06:19:00 <coppro> the program one is closer to the truth
06:19:20 <CakeProphet> you know
06:19:28 <pikhq> Fairly close to how it actually is implemented.
06:19:30 <CakeProphet> every program should model execution as salmon swimming upstream
06:19:41 <pikhq> Mmm, HOMESPRING.
06:19:42 <CakeProphet> isn't that what a program truly is?
06:20:05 <CakeProphet> UNIVERSE OF BEAR HATCHERY OBLIVION
06:23:09 -!- ineiros has quit (Ping timeout: 265 seconds).
06:23:50 -!- ineiros has joined.
06:24:25 -!- lifthrasiir has quit (Ping timeout: 264 seconds).
06:24:31 -!- lifthrasiir has joined.
06:31:45 -!- CakeProphet has quit (Ping timeout: 240 seconds).
06:31:56 -!- CakeProphet has joined.
06:36:48 -!- CakeProphet has quit (Ping timeout: 248 seconds).
06:38:39 -!- CakeProphet has joined.
06:41:17 -!- mycroftiv has quit (Ping timeout: 260 seconds).
06:42:51 -!- mycroftiv has joined.
06:43:15 -!- Gracenotes has quit (*.net *.split).
06:48:13 -!- coppro has quit (Remote host closed the connection).
06:51:59 -!- coppro has joined.
07:10:13 -!- cheater99 has quit (Ping timeout: 276 seconds).
07:22:49 <Gregor> ARGH
07:23:03 <Gregor> All that stands between me and finishing the laundry is four full, finished, but un-emptied driers.
07:23:12 <oerjan> advanced regret generating hell
07:23:13 <Gregor> At what point do you just take their clothes and throw them all over the room?
07:23:18 <Gregor> Fifteen minutes? Twenty? Thirty?
07:24:20 * oerjan is not getting it
07:24:24 <coppro> it's not a joke
07:24:40 <oerjan> well i'm _still_ not getting it
07:25:24 <oerjan> oh.
07:25:38 -!- cheater99 has joined.
07:25:43 * oerjan is not accustomed to the idea of doing laundry in public places
07:26:07 <fizzie> Yes, isn't that unseemly? Laundry is a dish best served behind closed doors, like the saying goes.
07:26:57 <oerjan> hm actually there was that during my half year in the US
07:27:09 <coppro> fizzie: not everyone has a personal laundry machine
07:27:37 <fizzie> 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.
07:28:36 <fizzie> 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.
07:29:23 <oerjan> how boringly uncathartic
07:29:51 <fizzie> Well, I think sometimes they left angry notes, too.
07:30:54 <oerjan> *-h+h, possibly
07:31:33 <fizzie> (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.)
07:32:17 <fizzie> I'm having trouble figuring out whether you want to remove the h from "think" or "they".
07:32:30 <oerjan> dammit the spelling was right the first time
07:32:50 <fizzie> You could plausibly claim that -h+h is a no-op.
07:33:19 <oerjan> it just looked wrong, and my browser chose _just_ this time to lock up (well with some help by something trashing my laptop)
07:34:18 <oerjan> (that was for uncathartic, btw)
07:34:55 -!- CakeProphet has quit (Ping timeout: 276 seconds).
07:36:15 <fizzie> The cold, cathartic wastelands of North.
07:37:26 <oerjan> yes, poor t-rex
07:40:13 <Gregor> So here's the thing.
07:40:39 <Gregor> Either way, if I'm taking these clothes out of the drier, then I'm pawing around in some uknown woman's underthings.
07:41:01 <Gregor> Which I hear unknown women don't usually appreciate?
07:41:16 <Gregor> So I decided to just wait her out :P
07:42:16 -!- Zuu has quit (Ping timeout: 276 seconds).
07:43:17 <oerjan> why, use a shovel
07:43:23 <fizzie> A ten-foot pole.
07:43:56 <Gregor> oerjan: What an extremely weird thing to say :P
07:44:01 <Gregor> fizzie: What an extremely gay thing to say :P
07:45:38 <fizzie> But it's *the* implement for not touching things!
07:46:49 <oerjan> driers & damsels
07:48:54 -!- CakeProphet has joined.
07:49:02 -!- Zuu has joined.
07:49:02 -!- Zuu has quit (Changing host).
07:49:02 -!- Zuu has joined.
07:50:25 <Gregor> Hmmmm
07:50:27 <Gregor> Lesse
07:50:39 <Gregor> Tomorrow is my first opportunity to wear my brand new, awesomely bright and shiny solid-color pink tie.
07:50:49 <Gregor> SO, should I wear it with a pink shirt, which is obviously appropriate,
07:50:55 <Gregor> or should I wear it with, say, a maroon shirt?
07:51:15 <Gregor> Decisions, decisions.
07:51:17 <fizzie> Didn't you have some sort of system(tm) for color-matching?
07:51:27 <Gregor> Both of these match wonderfully.
07:51:32 <Gregor> Which is the problem :P
07:51:57 <Gregor> I can match in the "these are the same color" sense.
07:51:57 <Gregor> Or in the "these go together sense"
07:51:57 <Gregor> Also I could wear a green shirt and match in the "these don't match" sense
07:52:21 <fizzie> I'm tempted to say "maroon" just because it's a funny word. Maroon, maroon, maroon, maroon. Marooned on Mars.
07:52:40 <Gregor> I do have some pretty spectacular maroon shirts.
07:54:03 <oerjan> Vengeance on Venus
07:54:51 <fizzie> Possibly, but that's not an episode of the Commander Keen series.
07:55:35 <oerjan> i didn't even know it _was_ a name of a story before i said it. although i of course suspected it.
07:56:00 <fizzie> "1. "Marooned on Mars" (first released as shareware on December 14, 1990)
07:56:00 <fizzie> 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."
07:56:00 <Gregor> Your Anal Sex on Uranus
07:56:42 <Gregor> Juffo-Wupp on Jupiter
07:57:09 <Gregor> Androids from Andromeda!
07:57:10 <oerjan> Tits of Titan
07:57:18 <fizzie> The Mercurian Meritocracy.
07:58:50 -!- CakeProphet has quit (Ping timeout: 265 seconds).
07:58:52 -!- coppro has quit (Ping timeout: 260 seconds).
07:59:59 -!- clog has quit (ended).
08:00:00 -!- clog has joined.
08:03:49 -!- tombom has joined.
08:03:49 -!- tombom has quit (Changing host).
08:03:49 -!- tombom has joined.
08:12:33 -!- oerjan has quit (Quit: leaving).
08:24:40 -!- MigoMipo has joined.
08:31:43 <Sgeo_> http://www.youtube.com/watch?v=vh2pc72CNek&feature=related
08:45:01 -!- Gracenotes has joined.
08:48:22 -!- choochter has joined.
09:02:46 -!- Gracenotes has quit (Changing host).
09:02:46 -!- Gracenotes has joined.
09:48:24 -!- CakeProphet has joined.
09:50:34 -!- AnMaster has joined.
10:11:24 -!- Wamanuz3 has joined.
10:31:09 -!- Gregor has quit (Ping timeout: 252 seconds).
10:50:10 <Sgeo_> How can someone know what a closure is and not know what first-class functions are?
10:50:56 <CakeProphet> I don't know but I know someone who used to be the same.
10:51:08 <CakeProphet> then I showed them Haskell. :)
10:51:26 <CakeProphet> but said person has always only halfway grasped everything they learn.
10:53:57 <Sgeo_> <TheRevoltingX> Runnable run = new Runnable() { public void run() { do_something() };
10:53:57 <Sgeo_> <TheRevoltingX> GuiView.post(run);
10:54:06 <Sgeo_> <Sgeo_> GuiView.post(() => { do_something();});
10:54:06 <Sgeo_> <Sgeo_> Or probably GuiView.post(do_something); would work in this case
10:55:52 -!- GreaseMonkey has quit (Quit: I'm using NO SCRIPT WHATSOEVER - Download it at file:///dev/null).
10:59:20 <Sgeo_> "it's definetly not as expressive"
10:59:30 <Sgeo_> "but damn it's easy to use"
11:01:48 <Sgeo_> Hm, do C's function pointers count as C having first-class functions?
11:02:03 <CakeProphet> hmmm...
11:02:08 <Deewiant> No
11:02:18 <CakeProphet> not quite. it's not the full meaning of first-class
11:02:20 <Deewiant> It doesn't have e.g. function literals
11:02:48 <CakeProphet> 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.
11:03:01 <CakeProphet> or anonymous functions.
11:06:24 <Ilari> Necressiting hacks like exporting pointers to static functions...
11:09:08 <CakeProphet> ...at least C /has/ function pointers
11:09:12 <CakeProphet> I suppose.
11:09:33 <CakeProphet> Java requires the most awkward construction ever with anonymous types.
11:09:46 <Sgeo_> CakeProphet, which is what this person is defending
11:10:11 <Sgeo_> Which is _still_ better than LSL.
11:10:22 <CakeProphet> eh. IMO delegate types are a better solution to that kind of problem.
11:10:33 <CakeProphet> ala C#
11:10:52 <Ilari> What I would like in Java is method pointers (with ability to combine them with instance).
11:11:04 <Ilari> (both precombine and combine on call).
11:11:24 <CakeProphet> delegate int Callback (string data);
11:11:34 <CakeProphet> Callback f;
11:12:05 <CakeProphet> void setCallback(Callback g) { f = g;}
11:13:19 <ais523> Ilari: Java 1.7 has that, IIRC
11:13:21 <CakeProphet> they're typesafe, and much less cumersome to work with.
11:13:30 <ais523> Class#method, instance#method
11:13:49 <CakeProphet> with the same kind of type safety mechanism?
11:14:01 <CakeProphet> I guess it has to...
11:14:15 <CakeProphet> I can't imagine what kind of reprecussions non-safe method pointers would have.
11:14:19 <CakeProphet> to Java.
11:14:40 <CakeProphet> actually I can: unexpected runtime errors.
11:17:02 <ais523> ofc, it's just sugar
11:18:59 <CakeProphet> I think the obstacle C-style languages having good type systems is the syntax
11:19:09 <CakeProphet> it is interleaved in with the program code.
11:19:49 <CakeProphet> so complex, Haskell-style types quickly become tedious and hard to read.
11:20:00 * CakeProphet has seen generics overdone in C# and Java both.
11:20:44 <CakeProphet> at least C# /has/ decent parameterized types.
11:20:53 <CakeProphet> Tuple<A, B> even. miraculous.
11:21:30 <Sgeo_> When did C# get Tuples?
11:21:45 <fizzie> I've seen more than one Java library which contains a custom generic "Pair" class.
11:22:31 <CakeProphet> I don't recall the library it is in
11:22:37 <CakeProphet> but they have a set of Tuple generics
11:22:41 <CakeProphet> as well as Action and Func
11:22:52 <CakeProphet> Action being a void-return function
11:23:24 <CakeProphet> so Action and Func kind of serve as "anonymous delegates"
11:23:37 <CakeProphet> Func<Int, Int, Tuple<Int,Int>>
11:23:54 <CakeProphet> Int -> Int -> (Int,Int)
11:24:29 <CakeProphet> er... substitute the C# Int with Integer. That's the correct boxed int type.
11:26:32 <Sgeo_> Wait, this person knows Erlang. How do they not understand what I'm trying to express?
11:26:52 <Sgeo_> "pointers are process ids"
11:26:53 <Sgeo_> erm
11:27:11 <Deewiant> Do they know anything other than Erlang? :-P
11:28:04 <Sgeo_> C++, Java
11:28:30 <Sgeo_> Perl
11:29:31 <Deewiant> If they know C++ that statement about pointers is somewhat unexpected
11:30:45 <Sgeo_> They were referring specifically to Erlang
11:31:36 <CakeProphet> perhaps they've just gone along this whole time
11:31:45 <CakeProphet> not really knowing anything, but getting along
11:31:57 <CakeProphet> like many programming professionals?
11:33:15 * CakeProphet invented this statistic out of his head, btw. It's far too early for me to still be awake.
11:36:02 <fizzie> As we all are well aware, 89 % of all statistics are made up on the spot.
11:37:10 <CakeProphet> isn't it something more like pi%?
11:37:30 <fizzie> I don't really know, so I just made it up (gasp).
11:42:25 <Sgeo_> What esolangs might have trouble outputting newlines as required by a spec?
11:43:19 <fizzie> Underload has trouble outputting characters you can't input, so if you can't input a newline... usually you can, though.
11:44:20 <Sgeo_> I think the first question that PSOX 2.0 will ask is if it wants to use PSOX 2.1 options
11:44:28 <Sgeo_> Well, third question
11:44:42 <Sgeo_> First being "What is false?" and second "What is true?"
11:46:30 <fizzie> Thue's conventions for outputting newlines are a bit vague, but I guess usually it's made possible.
11:47:24 <Sgeo_> I should choose a core set of languages that PSOX2 is known to work well with
11:47:53 <Sgeo_> Hm. Maybe the more "special needs" languages
11:49:30 <fizzie> Then there's those that don't really have output.
11:50:04 <Sgeo_> I don't care about those
11:50:23 -!- FireFly has joined.
11:51:49 <Sgeo_> Taxi will be a core language. Because I say so.
11:55:15 <Sgeo_> What languages can't easily output numbers and/or characters?
12:01:39 -!- FireFly has quit (Ping timeout: 252 seconds).
12:08:57 <Sgeo_> Are there languages that can't output, say, more than N characters to a line?
12:09:44 <CakeProphet> theoretically, yes. :)
12:10:04 <CakeProphet> er... theoretically no. Because languages have no semantics. But screw theoretics.
12:11:09 <Sgeo_> Underload doesn't take input?
12:11:13 <Sgeo_> Then it can't be supported
12:11:34 <Sgeo_> Actually, screw that.
12:11:41 <Sgeo_> I'm making Underload a core PSOX2 language.
12:12:25 <CakeProphet> force it to take input! That's the spirit.
12:12:43 <Sgeo_> No, Underload+PSOX will just have limited capabilities
12:13:17 <Sgeo_> It won't be able to say, react to events in an IRC chatroom, but it can still join one, say something, and leave.
12:18:50 -!- hiato has joined.
12:19:40 -!- BeholdMyGlory has joined.
12:20:21 <Sgeo_> 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
12:23:41 -!- augur has joined.
12:26:01 <Sgeo_> It's a language embedded directly in PSOX2
12:26:04 <Sgeo_> PSOX2-EZ
12:26:06 -!- wareya has quit (Read error: Connection reset by peer).
12:27:03 -!- wareya has joined.
12:27:30 <Sgeo_> You know what, I'll go ahead and make HQ9+ a core language.
12:27:33 <Sgeo_> (j/k)
12:27:46 * Sgeo_ wonders how that could be made to work, though
12:38:40 * Sgeo_ decides to call the embedded language PSOX.EZ, and a version not running in PSOX PSOZ.EZ-lite
12:38:45 <Sgeo_> erm
12:38:49 <Sgeo_> PSOX.EZ-lite
12:38:53 <Sgeo_> Although PSOZ is a cool name
12:40:35 <AnMaster> hm, while learning haskell I noticed that the opposite of the term "break even" must be "span odd" ;)
12:40:37 * AnMaster runs
12:42:54 <Sgeo_> ez.somefunc 1 "hello"2
12:43:05 -!- hiato_ has joined.
12:43:26 -!- hiato_ has quit (Client Quit).
12:43:26 <AnMaster> Sgeo_, explain that syntax?
12:43:40 <AnMaster> as in, what does the 2 at the end do
12:43:51 <Sgeo_> AnMaster, it's another argument to ez.somefunc
12:44:01 <Sgeo_> The string is terminated by the second "
12:44:11 <AnMaster> Sgeo_, so what about the trailing 2?
12:44:18 -!- hiato has quit (Ping timeout: 248 seconds).
12:44:26 <Sgeo_> AnMaster, that's another argument. The function accepts 3 arguments for some reason
12:44:49 <Sgeo_> Although I think I'll try something else
12:44:57 <AnMaster> Sgeo_, oh so how do you separate the arguments
12:44:58 <Sgeo_> Hm
12:45:05 <Sgeo_> AnMaster, depends on the type of argument
12:45:06 <AnMaster> I mean, it looked like it was separated by space there
12:45:10 <AnMaster> Sgeo_, urgh
12:45:25 <Sgeo_> Numbers are terminated by space, strings by "
12:45:28 <Sgeo_> So:
12:45:35 <Sgeo_> ez.somefunc 1 hello"2
12:45:50 <Sgeo_> Or strings could be terminated by space I guess
12:45:57 <Sgeo_> ez.somefunc 1 hello\ world 2
12:46:01 <AnMaster> yeargh
12:46:19 <AnMaster> Sgeo_, this was supposed to be embedded in PSOX?
12:46:27 <Sgeo_> You have to realize, I'm trying to make it so it resembles what would be output by a PSOX2 program
12:46:41 <Sgeo_> AnMaster, why not?
12:46:43 <AnMaster> hm
12:47:01 <Sgeo_> PSOX2 programs choose how they terminate numbers, how strings are delt with, etc
12:47:06 <AnMaster> Sgeo_, what do you mean "resembles what would be output by a PSOX2 program"?
12:47:17 <AnMaster> oh I see
12:47:48 <Sgeo_> Making PSOX.EZ-lite (Which isn't embedded in PSOX) helps me consider what options need to be available
12:47:55 <AnMaster> Sgeo_, so about 4/5 of bf hello world for PSOX will be spent at setting up various PSOX settings?
12:48:03 <AnMaster> or will it be passed from the outside?
12:48:08 <Sgeo_> AnMaster, the former
12:48:32 <AnMaster> Sgeo_, how can you set up the settings from inside before you set up the protocol :P
12:48:53 <AnMaster> sounds like a catch22 to me
12:48:59 <Sgeo_> AnMaster, I'm assuming that the program is capable of outputting one character for true and one for false
12:49:22 <Sgeo_> So the first thing the program does is output what it will use to represent false, then what it will use to represent true
12:49:23 <AnMaster> Sgeo_, what about languages that can only output whole lines?
12:49:48 <Sgeo_> AnMaster, the PSOX interpreter will be able to see the first and second characters of lines
12:50:03 <AnMaster> 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
12:50:05 <AnMaster> IIRC
12:50:32 <Sgeo_> Hm
12:50:41 <AnMaster> hm or maybe it could
12:50:42 <Sgeo_> Well, I could be false and V could be true
12:50:42 <AnMaster> not sure
12:50:55 <AnMaster> oh wait I'm right
12:50:58 <Sgeo_> But from there, where could it go?
12:50:59 <AnMaster> "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]"
12:51:29 <AnMaster> C-INTERCAL can do byte IO, so can CLC (though a completely different method)
12:51:52 <Sgeo_> So that's 4 major sections: Output of Numbers, Output of Strings, Input of Numbers, Input of Strings
12:52:02 <ais523> C- and CLC- each have compatibility modes to use the other's IO rules, though
12:52:09 <Sgeo_> Some of which may be optional, including both Input sections
12:52:12 <AnMaster> ais523, right
12:52:33 <AnMaster> Sgeo_, you must support intercal-72 ;P
12:52:49 <AnMaster> ais523, what does wikipedia mean with '"butchered" Roman numerals' I wonder?
12:52:50 <Sgeo_> AnMaster, I'm trying to figure out the best way to do that
12:52:52 <AnMaster> ais523, clock face?
12:53:02 <ais523> AnMaster: no, they're extended to go beyond the normal range
12:53:05 <ais523> using lowercase as well as overlines
12:53:27 <Sgeo_> I don't see how the PSOX2 interpreter should be expected to natively understand Roman Numerals
12:53:41 <Sgeo_> Without special casing everything for just one language's benefit
12:53:47 <Sgeo_> Although that would be kind of interesting
12:53:54 <AnMaster> ais523, you mean like after IVX<whatever, forgot order of L and C>M it turns into something else?
12:54:02 <ais523> yes
12:54:13 <AnMaster> wait, aren't there three between X and M?
12:54:17 <AnMaster> 50,100,500?
12:54:20 <ais523> IVXLCDM
12:54:23 <AnMaster> ah
12:54:34 <AnMaster> ais523, after M what then?
12:54:47 <Sgeo_> Are there languages besides INTERCAL-72 that would want Roman Numeral output?
12:54:54 <ais523> the same letters with bars over, then the same letters in lowercase
12:54:59 <ais523> so 5000 is \V
12:55:03 <AnMaster> Sgeo_, C-INTERCAL and CLC-INTERCAL
12:55:07 <ais523> well, that should be a line over rather than a backslash before
12:55:31 <ais523> Sgeo_: my advice is, recognise /patterns/
12:55:33 <AnMaster> Sgeo_, well, you can do byte IO but you would have to write the printf("%d", ...) equiv yourself
12:55:45 <AnMaster> ais523, did you see my haskell pun above?
12:55:48 <ais523> if the input says something 3 times and something else twice, that can be meaningful to psox
12:56:08 <Sgeo_> ais523, hm...?
12:56:24 <Sgeo_> Oh, I think I see
12:56:34 <AnMaster> Sgeo_, eh? I don't
12:56:37 <ais523> basically, you take input as binary, but what the individual bits are represented as is determined by looking at your input
12:56:37 <Sgeo_> So, for starters, True and False wouldn't be limited to one character?
12:56:48 <ais523> yep
12:57:01 <Sgeo_> But that question was based on a misunderstanding
12:57:37 <Sgeo_> Question: Please put False once, and True twice:
12:57:40 <Sgeo_> IVV
12:57:52 <Sgeo_> I'm not sure if that's the sort of thing you meant
12:59:10 <Sgeo_> Taken to some sort of extreme, would this allow HQ9+ support?
12:59:49 <AnMaster> ais523, so did you see it? :/
13:02:09 <Sgeo_> Now, how would I go about asking questions about Strings? Would I ask, say, "Use numbers to represent characters, or use characters directly?"
13:02:52 <ais523> you could have a flag to set whether strings were being taken literally, or in binary
13:03:29 <Sgeo_> literally, or numbers for each character, or binary?
13:04:15 <Sgeo_> BTW, the very first question is whether or not to use PSOX 2.1 features
13:04:45 <Sgeo_> This way, if PSOX 2.1 comes out, the opening.. stuff can mostly be changed
13:06:17 <Sgeo_> Actually, I might not need "Enter as binary" for strings, since I could have an option for numbers entered as binary
13:07:33 <Sgeo_> How do I separate the result from asking What is False and What is True from the rest of the questions' answers?
13:07:38 <AnMaster> Sgeo_, you want bool before asking for numbers
13:07:42 <AnMaster> or version
13:08:37 <Sgeo_> Yes, and I don't see how to separate bool from version and numbers
13:08:54 <Sgeo_> I mean, I can't really ask for separator, can I?
13:09:05 <Sgeo_> Unless I make the assumption that separator is one character
13:09:22 <Sgeo_> Even then, I'm not sure if I can do that
13:11:01 -!- Mathnerd314 has joined.
13:11:20 * Sgeo_ vaguely wonders how alise will react to all this
13:11:55 <AnMaster> ais523, doesn't INTERCAL-72 do one number per line?
13:12:02 <ais523> AnMaster: one number per two lines
13:12:07 <AnMaster> oh fun
13:12:08 <ais523> beause it needs an extra line to draw the overbars
13:12:35 <AnMaster> Sgeo_, remember that when deciding to support intercal-72 ;P
13:12:41 <AnMaster> it will be a PITA :D
13:12:47 <Sgeo_> So Newline is not good to be assumed to be separator
13:12:57 <ais523> don't assume anything separator
13:13:02 <ais523> just look at the sequence of bytes for repeats
13:13:07 <AnMaster> don't assume anything at all
13:13:14 <Sgeo_> AnMaster, impossible.
13:13:38 <AnMaster> Sgeo_, you could have a separate definition file containing the required stuff
13:13:53 <AnMaster> like:
13:13:54 <Sgeo_> 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
13:14:03 <AnMaster> (define parser standard-byte)
13:14:07 <AnMaster> or:
13:14:14 <AnMaster> (define parser (lambda ...))
13:14:27 <ais523> Sgeo_: yes, I was wondering about that; presumably it's an unsolvable problem in general
13:14:29 <AnMaster> Sgeo_, no way you can get more flexible than that
13:14:55 <ais523> but you could require, say, three trues, two falses, two trues, that needs a pretty perverse string to be recognised incorrectly
13:15:20 <AnMaster> Sgeo_, of course the equivalent can be done for languages like erlang, haskell and so on. Not sure about python
13:15:26 <AnMaster> lisp is probably _the_ easiest one
13:16:47 <AnMaster> well, shell wouldn't be too complicated either. Just messy.
13:16:47 <Sgeo_> AnMaster, I don't want to do that. I want all the information to be contained in the program
13:17:01 <AnMaster> Sgeo_, then what ais523 suggested seems like a good idea
13:18:36 <AnMaster> 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.
13:19:34 <Sgeo_> Hmm..
13:19:34 -!- Zuu has quit (Read error: Connection reset by peer).
13:19:46 <Sgeo_> Does the parser need to be TC?
13:20:32 * Sgeo_ wonders what role, if any, PSOX.EZ could play
13:21:16 <ais523> it probably /should/ be TC, so esolangs which aren't TC could use PSOX to add TCness
13:21:18 <ais523> just like it adds OS calls
13:21:19 <Sgeo_> 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
13:21:32 <Sgeo_> ais523, that's the point of PSOX.EZ
13:21:33 <AnMaster> ais523, through using the parser? Genius!
13:22:13 <AnMaster> Sgeo_, it is much more esoteric if you do it through using a custom parser function
13:22:54 <Sgeo_> PSOX.HARD
13:23:56 <AnMaster> hm?
13:24:19 <Sgeo_> Seriously, I'd have no clue how that would work out
13:25:23 <AnMaster> 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.
13:25:34 <AnMaster> I can't see any obvious such way for haskell
13:26:16 <Sgeo_> putStrLn :: String -> IO ()
13:26:25 -!- FireFly has joined.
13:26:35 <Sgeo_> Actually, I think there is a convention
13:26:38 <Sgeo_> Not sure what it is
13:26:44 <Deewiant> AnMaster: In what kind of situation would you need to disambiguate?
13:27:59 <AnMaster> Deewiant, well odd
13:28:02 <AnMaster> might be one
13:28:26 <Deewiant> ??
13:28:30 <AnMaster> Deewiant, even even could be good to disambig in some situations
13:28:30 -!- MizardX has joined.
13:28:37 <AnMaster> like that one
13:28:37 <Deewiant> Oh, those functions
13:28:45 <Deewiant> Hmm
13:28:56 <AnMaster> Deewiant, you see, you got all confused by it :P
13:29:08 <Sgeo_> AnMaster++... oh wait
13:29:11 <Deewiant> Because I asked about a situation and got a function back :-P
13:29:14 <AnMaster> Sgeo_, ?
13:29:29 <AnMaster> Deewiant, hm
13:29:38 <Sgeo_> AnMaster, tried to increment, but this is Haskell
13:29:42 <AnMaster> Sgeo_, right
13:30:04 <Deewiant> Well, one that always works is "the foo function" where you can even quote it (`foo`) if you want
13:30:09 <AnMaster> hm you can't define postfix functions/operators in haskell right?
13:30:11 <Deewiant> But I guess you wanted something shorter... dunno
13:30:25 <Deewiant> Not really, no
13:30:31 <AnMaster> hm
13:31:05 <AnMaster> Deewiant, oh btw, I guess from now on, not breaking even should be called spanning odd
13:31:11 <AnMaster> ;)
13:31:38 <Deewiant> s/not//
13:36:42 <Sgeo_> Maybe I don't _want_ all TCness to be in the parser
13:36:51 <Sgeo_> I mean, that's kind of insane
13:36:54 -!- Zuu has joined.
13:37:56 <Sgeo_> Ideally, PSOX.EZ-lite with an appropriate header should be fully turing-complete and I/O capable
13:38:28 <Sgeo_> If literally read into the PSOX2 intepreter
13:41:30 <Sgeo_> ais523, would regex be sufficient for parsing most languages?
13:41:39 <ais523> Sgeo_: far from it
13:41:45 <Sgeo_> blargh
13:41:46 <ais523> the vast majority of languages can't be parsed with a regex, in fact
13:41:56 <Sgeo_> erm, the output, I meant
13:41:57 <ais523> even ones like Python with a deliberately simple syntax
13:42:22 <Sgeo_> As a custom parser providable by the program for PSOX2
13:42:32 <Sgeo_> Although PSOX.EZ might be better
13:43:58 <AnMaster> ais523, can regex be parsed with regex?
13:44:11 <ais523> no, it allows nested parens
13:44:30 <AnMaster> ais523, could a regex with non-nesting parens self-parse?
13:44:50 <ais523> again no, unless it was incredibly simple
13:44:56 <AnMaster> ais523, why not?
13:45:20 * Sgeo_ needs to determine how PSOX2 should handle varargs
13:45:26 <ais523> AnMaster: think about backslashes, and escaping them
13:45:39 <Sgeo_> I want a PSOX.EZ function that can call PSOX functions
13:45:46 <Zuu> ais523: that is perfectly recognizable by a regular expression
13:45:46 <AnMaster> ais523, hm okay
13:46:10 <ais523> Zuu: yes, but not one without parens that's the same length as what it's recognising
13:46:11 <AnMaster> ais523, could PCRE self-parse? After all it allows recursive matching of nested parens
13:46:19 <ais523> possibly
13:46:26 <AnMaster> that is PCRE without cheating by escaping to "native" code
13:46:46 <AnMaster> Sgeo_, why varargs?
13:46:56 <AnMaster> Sgeo_, just take a list of arguments instead
13:47:03 <ais523> I think so
13:47:04 <AnMaster> Sgeo_, like io:format/2 in erlang
13:47:09 <AnMaster> it is analogous to printf
13:47:24 <Sgeo_> Well, then I need to figure out how to represent a list
13:47:27 <AnMaster> io:format("format string", [list,of,parameters,for,format,string]).
13:47:48 <Sgeo_> I was thinking of asking for a function ender, but a list separator and terminator might be better
13:48:19 <AnMaster> hm
13:49:03 <Sgeo_> 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
13:49:22 <Sgeo_> numbers and strings have their own terminators
13:49:38 <Sgeo_> But I still need to terminate the list somehow
13:55:39 <AnMaster> ais523, how does INTERCAL-72 output 0?
13:56:21 <ais523> an overline with nothing beneath it
13:56:27 <AnMaster> ah interesting
14:00:49 * Sgeo_ decides that there will be no PSOX.EZ-lite. Just PSOX-lite.
14:01:00 <Sgeo_> No reason not to include other PSOX functions in the language
14:02:19 -!- Mathnerd314 has quit (Ping timeout: 276 seconds).
14:04:46 <AnMaster> > zipWith<tab>
14:04:46 <AnMaster> zipWith zipWith zipWith3 zipWith3 zipWith4 zipWith5 zipWith6 zipWith7
14:04:57 <AnMaster> hm that seems somewhat annoying
14:05:53 <AnMaster> ais523, why do haskell not have some zipWithN that takes a list of lists and a function that takes a list of values?
14:06:15 <AnMaster> and why are there two "zipWith" listed there?
14:11:52 <Sgeo_> Is this a decent model for PSOX.EZ: The program calls an ez.edit function, that edits the function on a certain slot
14:12:13 <Sgeo_> Then it calls other .ez functions that add to the editied function's code
14:12:20 <Sgeo_> Then calls, say, ez.done or something
14:13:13 <ais523> Sgeo_: you're reaching almost zzo38 levels of lack of context there...
14:14:00 <Sgeo_> Well, by slot, I'm thinking an array of stored .. ezfunctions
14:32:10 -!- BeholdMyGlory has quit (Remote host closed the connection).
14:37:43 <Sgeo_> 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?
14:38:11 <ais523> binary > unary for that sort of thing
14:38:46 <Sgeo_> Hm, good point
14:39:04 <AnMaster> hm how does one find docs on a function in Prelude or Data.List or whatever? Anything like erl -man <name of module to bring up man page on> for haskell?
14:39:05 <Sgeo_> Although.. how many digits will be in the binary?
14:39:08 <AnMaster> ais523, ^
14:39:23 <ais523> AnMaster: there's a search engine for that sort of thing on haskell.org
14:39:25 <ais523> called Hoogle IIRC
14:39:30 <AnMaster> ais523, offline docs I meant
14:39:38 <Sgeo_> ais523, ^
14:39:49 <ais523> Sgeo_: there are ways to code it
14:39:56 <ais523> look up binary-coded-ternary, and base fibonacci
14:40:11 <AnMaster> 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
14:40:27 <AnMaster> local docs would be preferred due to cost and such
14:42:34 <Sgeo_> ais523, the only information on the former that I see is some.. optical thing?
14:42:48 -!- ais523 has left (?).
14:43:14 <Sgeo_> :(
14:43:18 <Sgeo_> I think I irritated him
14:47:44 <AnMaster> Sgeo_, Yeah probably you rather than me. Since you asked em a lot more questions than what I did
14:52:05 <Deewiant> AnMaster: zipWithN is ([a] -> [b]) -> [[a]] -> [[b]], which is not as useful since lists' elements have to have the same type
14:53:02 <AnMaster> Deewiant, oh right.
14:53:28 <Deewiant> 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)
14:53:57 <AnMaster> 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?
14:54:00 <AnMaster> is that right?
14:54:07 <Deewiant> No
14:54:11 <AnMaster> hm
14:54:19 <Deewiant> Lists are lazy data structures
14:54:31 <Deewiant> (a : b) doesn't have to evaluate a or b
14:54:32 <AnMaster> I remember reading that tail recursion + cons is possible to optimise though
14:54:40 <Deewiant> And if you request a, it isn't necessary to evaluate b
14:55:03 <AnMaster> Deewiant, yes but if you want to evaluate the whole thing you will end up evaluating it all anyway
14:55:20 <AnMaster> Deewiant, so there the laziness won't help
14:55:20 <Deewiant> Yes, you will, but often the list doesn't need to be created
14:55:25 <AnMaster> huh
14:55:34 <Deewiant> http://www.haskell.org/haskellwiki/Short_cut_fusion
14:55:59 <Deewiant> http://www.cse.unsw.edu.au/~dons/papers/stream-fusion.pdf
14:56:28 <AnMaster> Deewiant, for example: show (map (\x -> x*x) [1..100000000])
14:56:42 <AnMaster> not sure if map is tail recursive or not
14:56:47 <Deewiant> Can be done in O(1) space
14:57:04 <AnMaster> Deewiant, yes it can, but does ghc/ghci do that?
14:57:15 <Deewiant> Yes
14:58:04 <AnMaster> hm... You could in theory optimise a lot of bloated C++ into very efficient code. But no compiler is smart enough for it.
14:58:56 <AnMaster> Deewiant, couldn't lazy evaluation cause problems sometimes. Like with that "Fibonacci that is smart and count upwards instead of downwards"?
14:59:28 <Deewiant> Don't know what you're talking about re. Fibonacci, but yes, lazy evaluation is not a panacea
14:59:48 <Deewiant> http://paczesiowa.blogspot.com/2010/03/generalized-zipwithn.html defines a general zipWithN
14:59:55 <Deewiant> (It's nontrivial)
15:01:03 <AnMaster> Deewiant, well you know the usual "dumb" fib implementation (base cases left out for brevity)? fib n = fib (n-1) + fib (n-2) ?
15:01:06 -!- CakeProphet has quit (Ping timeout: 245 seconds).
15:01:24 <Deewiant> Yes, I know Fibonacci
15:01:35 <AnMaster> Deewiant, then there is the variant implementation that starts from the base cases and counts upwards to n
15:01:59 <AnMaster> which is O(n) instead of O(n^2) iirc. At least for other languages than haskell
15:02:46 <AnMaster> I don't remember the exact form of it
15:02:49 * AnMaster tries to find it
15:03:35 <Ilari> Isn't there way to calculate fibbonacci series in time (if integer operations are assumed to be O(1)) of O(log n)?
15:06:22 <AnMaster> meh can't find it
15:06:39 -!- ineiros has quit (Ping timeout: 240 seconds).
15:07:05 <AnMaster> basically it counts upwards and remember the values of n-1 and n-2 (memoising basically)
15:07:58 <AnMaster> Ilari, hm I think there is
15:09:03 -!- CakeProphet has joined.
15:09:41 <AnMaster> oh btw is there a way in haskell do make a function like: f :: [Int] | [Char] -> ...
15:10:19 <AnMaster> that is, one that can take a finite number of alternative different types. Probably handling them by two different pattern matches
15:10:57 <AnMaster> this is something that would be trivial in erlang. But of course since it is dynamically typed that is quite a different situation
15:11:04 <Sgeo_> data SomeType = I [Int] | C [Char]
15:11:06 <Sgeo_> ?
15:11:09 <AnMaster> hm
15:11:11 <Deewiant> f :: Either [Int] [Char] -> ...
15:11:15 <Sgeo_> Or that
15:11:17 <AnMaster> Sgeo_, well, somewhat bulky but could work
15:11:24 <Deewiant> But yeah, basically like that
15:11:29 <AnMaster> Deewiant, ah, I haven't learned about Either yet. Interesting
15:12:07 <AnMaster> Deewiant, could you have Either (a,b) (a,b,c) (a,b,c,d) and so on?
15:12:20 <Deewiant> No
15:12:25 <Deewiant> data Either a b = Left a | Right b
15:12:30 <AnMaster> hm
15:13:24 <Deewiant> 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
15:13:56 <AnMaster> 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
15:14:16 <fizzie> 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.
15:14:37 <Deewiant> AnMaster: That's dependent typing, which Haskell doesn't have.
15:14:52 <AnMaster> Deewiant, oh. So how is the type Integer declared?
15:15:14 <Deewiant> data Integer = S# Int# | J# Int# ByteArray#
15:15:32 <AnMaster> Deewiant, or what about this: A non-empty-list of non-empty lists. Even erlang's "optional" type system can represent that
15:15:53 <Deewiant> type NonEmpty a = (a,[a])
15:15:56 <AnMaster> Deewiant, that looks like it is abusing internal stuff
15:16:01 <AnMaster> Deewiant, that looks like a tuple
15:16:03 <AnMaster> not a list
15:16:10 <Deewiant> Lists can be empty.
15:16:23 -!- CakeProphet has quit (Read error: Operation timed out).
15:16:56 <AnMaster> 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. :/
15:17:03 <Deewiant> Again, that's dependent typing.
15:17:07 <AnMaster> ah
15:17:40 <Deewiant> 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)
15:17:52 <AnMaster> hm
15:19:03 <AnMaster> 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
15:19:28 <AnMaster> sure, can be done with guards, but somewhat more verbose syntax
15:19:29 <Deewiant> Yes, Miranda had that too, but Haskell doesn't for some reason.
15:19:38 <Deewiant> It rarely matters in practice.
15:20:53 <AnMaster> hm
15:22:37 <AnMaster> 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...
15:23:24 <Deewiant> Be lazy if it makes sense to observe only part of the output
15:23:40 <AnMaster> hm
15:24:04 -!- CakeProphet has joined.
15:24:06 <AnMaster> Deewiant, for a general library function like those in Data.List it could be very hard to know.
15:24:23 <Deewiant> How so
15:25:28 <AnMaster> 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.
15:25:50 <Deewiant> There are cases where it makes sense, so map should be lazy.
15:25:58 <AnMaster> hm
15:26:15 <Deewiant> The compiler can strictify stuff where necessary, but not lazify.
15:26:17 <AnMaster> Deewiant, is tail recursion with an accumulator lazy? I presume it isn't
15:26:29 <AnMaster> accumulator list I meant
15:27:25 <Deewiant> The accumulator is lazy.
15:27:35 <AnMaster> 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)
15:28:05 <AnMaster> 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
15:28:22 <AnMaster> so would that be lazy or not?
15:28:32 <Deewiant> reverse isn't lazy, because it has to traverse the whole list before giving any output.
15:29:00 <Deewiant> The parameter isn't evaluated until it gets to the reverse.
15:29:08 <Deewiant> (And until the reverse is evaluated.)
15:30:06 <AnMaster> 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
15:30:24 <AnMaster> it is quite feasible to do this, question is if ghc does it
15:30:32 <Deewiant> I don't know.
15:30:39 <Deewiant> Probably not.
15:31:09 <AnMaster> pity, that would make trivial implementations of many list functions a lot faster.
15:33:29 -!- BeholdMyGlory has joined.
15:39:53 <CakeProphet> AnMaster: generally speaking, GHC does optimizations of that kind. But I don't know if it's smart enough to /always/ do it
15:40:04 <AnMaster> hm
15:40:19 <CakeProphet> this question is probably better answered by some of the pricks on #haskell. :)
15:40:36 <CakeProphet> -ahem- I mean very nice people.
15:42:36 <AnMaster> heh
15:43:04 <AnMaster> sigh... reasoning about strict code is a lot easier than lazy code
15:47:53 <Sgeo_> PSOX2 types: bools, literals, numbers, strings, lists
15:48:03 <AnMaster> Sgeo_, literals being?
15:48:13 <Sgeo_> AnMaster, say the program is in HQ9+
15:48:19 <AnMaster> mhm?
15:48:35 <Sgeo_> And some function, maybe parser related, wants to know "Ok, how do you specify XYZ"
15:48:52 <AnMaster> HH?
15:49:07 <Sgeo_> It would be annoying to use strings for that because presumably, for strings, you're already set up to use binary for each character
15:49:31 <AnMaster> Sgeo_, eh? How will you represent strings for INTERCAL-72 then?
15:49:52 <AnMaster> Sgeo_, for input it needs to take spelled out numbers in English
15:49:53 <AnMaster> iirc
15:49:59 <AnMaster> like ONE FOUR NINER
15:50:02 <AnMaster> for 149
15:50:24 <AnMaster> Sgeo_, and output is roman numerals only
15:50:34 <AnMaster> so it isn't even symmetric
15:50:37 <Sgeo_> So instead, .. oh, let me answer that question
15:50:48 <Sgeo_> Input options and output options can be specified separately
15:50:52 <AnMaster> good
15:51:11 <Sgeo_> I currently don't know what the input options will look like
15:51:15 <AnMaster> right
15:52:06 <Sgeo_> Anyway, literals could be used for things like separators. Separate domain from function
15:52:47 <Sgeo_> So that, say, HQ9+ can say that a separator is h9h instead of having to spell out all the characters
15:53:43 <AnMaster> uhu
15:57:52 * Sgeo_ wonders how safe it would be to use q
15:59:05 <AnMaster> Sgeo_, what did q do?
15:59:09 <AnMaster> oh quine
15:59:10 <AnMaster> right
15:59:20 <AnMaster> depends on how soon you detect a repeating pattern
15:59:44 <AnMaster> it would need to be multi-line for INTERCAL-72 I think
16:00:23 <Sgeo_> Nothing wrong with multi-line
16:01:53 * Sgeo_ ponders adding symbol to the list of types
16:02:03 <Sgeo_> There would be a function that takes a literal and stores it somewhere
16:02:22 <Sgeo_> Then, a function that accepts a symbol would just wait for the .. thingy
16:02:26 <Sgeo_> Whatever the literal was
16:02:49 -!- cpressey has joined.
16:03:40 <Sgeo_> Was the type system one of PSOX's big problems?
16:03:49 <Sgeo_> Because PSOX2's type system is ever expanding :/
16:08:13 -!- Mathnerd314 has joined.
16:10:48 <pikhq> Sgeo_: The Brainfuck-side code should be reasonably simple.
16:12:03 <Sgeo_> I think it would be
16:15:06 <Sgeo_> Although this is not going to be BF-specific
16:15:15 <Sgeo_> I guess I shouldn't lose sight of BF though
16:15:36 <pikhq> Sgeo_: No, but what can be done easily in Brainfuck can be done easily in a very large number of esolangs.
16:15:55 <cheater99> * ☠ :Erroneous Nickname
16:15:55 <cheater99> :(
16:15:58 <Sgeo_> I thought PSOX's flaw was that it was too BF-specific?
16:15:58 <pikhq> Hence, one can reasonably consider it a "lowest common denominator" of capability.
16:16:29 <Sgeo_> I think HQ9+ is my lowest common denominator
16:16:33 <pikhq> PSOX's flaw was that it was too darned hard to use outside of Brainfuck, and slightly less hard in Brainfuck.
16:16:51 * Sgeo_ blinks
16:17:09 <Sgeo_> How was it hard to use in BF?
16:17:20 <pikhq> ... The bignums! The bignums!
16:18:15 <Sgeo_> Those were mostly optional
16:18:30 <CakeProphet> so does any of this fit into calamari's OS idea?
16:20:01 -!- ais523 has joined.
16:21:24 <Sgeo_> wb ais523
16:24:29 <cheater99> hello ais523
16:24:41 <ais523> hi
16:25:16 -!- sebbu has quit (Ping timeout: 260 seconds).
16:32:39 -!- relet has joined.
16:36:10 -!- sebbu has joined.
16:48:15 <AnMaster> hello ais523
16:48:26 <ais523> hi
16:50:02 <AnMaster> when was windows 2000 released? IIRC the support for it finally ends tomorrow
16:50:24 <pikhq> 2000.
16:50:34 <AnMaster> right, you can never know with microsoft
16:50:43 <pikhq> XP was 2001.
16:50:50 <AnMaster> wasn't windows 95 released in 96 or such?
16:50:52 <pikhq> Yes, really, it was obsoleted a year later.
16:50:59 <pikhq> No, just very late 95.
16:51:03 <AnMaster> right
16:51:10 <pikhq> Some of the OSRs were in 96.
16:51:15 <AnMaster> OSR?
16:51:39 <pikhq> Don't recall the expansion, but these were versions of 95 with added features for OEM usage.
16:51:45 <AnMaster> ah
16:51:56 <pikhq> Featuring stuff like USB support and built-in IE.
16:53:25 <AnMaster> wasn't that windows 95 SE and such? Second Edition or something
16:53:31 <AnMaster> or was it 98 that had those?
16:53:36 <pikhq> 98 had SE.
16:53:39 <pikhq> 95 had the OSRs.
16:53:42 <AnMaster> right
16:53:57 <pikhq> They're analogous, but 98 SE was actually sold to the general market.
16:54:01 <AnMaster> ah
16:54:16 <pikhq> Anyways: from 95 to 2001, there was effectively a Windows release every year.
16:54:31 <pikhq> And then... Nothing until Vista.
16:55:32 <AnMaster> pikhq, you don't count the service packs?
16:55:42 <AnMaster> XP SP1/2
16:55:48 <AnMaster> was there ever a third one?
16:55:50 <pikhq> Mmm, okay, we can count the service packs.
16:55:51 <AnMaster> not for xp 64-bit iirc
16:55:53 <pikhq> Yes, there was.
16:56:02 <pikhq> 64-bit skipped a service pack.
16:56:07 <AnMaster> indeed
16:56:15 <AnMaster> pikhq, did it skip at the start or the end?
16:56:18 <pikhq> ... Oh wait. No, that's not it at all.
16:56:28 <AnMaster> pikhq, eh?
16:56:35 <pikhq> XP 64-bit was actually a marketed-as-XP version of Server 2003.
16:56:42 <AnMaster> hah
16:57:03 <AnMaster> pikhq, it *feels* like XP 32-bit. I used both.
16:57:15 <pikhq> Yes, Server 2003 didn't diverge massively.
16:57:18 <AnMaster> it has the security center and all that iirc
16:57:44 <pikhq> Yeah.
16:58:06 <pikhq> It probably had the XP version of various UI widgets rather than the Server one.
16:58:09 <AnMaster> 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
16:58:12 <AnMaster> no idea why
16:59:03 <AnMaster> 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
17:01:02 -!- aschueler has joined.
17:07:30 -!- jberryman has joined.
17:12:47 <fizzie> 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.
17:13:55 <fizzie> 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.
17:16:08 -!- Gregor has joined.
17:23:34 <AnMaster> hm the value encoding for hdparm -S is definitely esoteric
17:24:19 <AnMaster> for example: "255 is interpreted as 21 minutes plus 15 seconds" (and there is much more strange things like that for other values
17:24:45 <AnMaster> fizzie, I got the x86_64 one from MSDNAA
17:29:10 -!- oerjan has joined.
17:37:24 <fizzie> AnMaster: Mhm. Well, this was quite a while ago, and it might not have been MSDNAA exactly.
17:37:24 <cpressey> Scanner encountered IMPOSSIBLE TOKEN today!
17:38:13 <AnMaster> cpressey, context?
17:38:31 <cpressey> AnMaster: No thank you. I'm full.
17:38:47 <AnMaster> cpressey, so you gone completely insane then? XD
17:38:56 <oerjan> <AnMaster> ais523, why do haskell not have some zipWithN that takes a list of lists and a function that takes a list of values?
17:39:07 <AnMaster> oerjan, I think I already got a full answer to it
17:39:09 <oerjan> you can easily do it with a bit of transpose
17:39:11 <oerjan> ok
17:39:19 <AnMaster> oerjan, thought not that bit
17:39:49 * Sgeo_ Futuramas
17:39:53 <AnMaster> hm does haskell have any printf equiv?
17:40:01 <Sgeo_> AnMaster, yes
17:40:12 <AnMaster> how? The type could vary?
17:40:15 <AnMaster> types*
17:40:27 <Sgeo_> It's some type that does weird things, I think
17:40:31 <AnMaster> ah
17:40:36 <Deewiant> forall r. (PrintfType r) => String -> r
17:40:50 <AnMaster> huh
17:40:54 <oerjan> !haskell Text.Printf.printf "%s: %d" "Like this" (42::Int)
17:40:57 <EgoBot> Like this: 42
17:41:00 <Sgeo_> AnMaster, also, how could you not have noticed that we're all insane?
17:41:40 <oerjan> AnMaster: the ::Int is necessary here to make sure it gets the right type. I think.
17:41:48 <AnMaster> 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.
17:42:25 <AnMaster> oerjan, hm.
17:42:40 <AnMaster> oerjan, does it validate the format string at compile time?
17:42:46 <Deewiant> No.
17:42:47 <oerjan> AnMaster: it's a very clever type hack with type classes
17:42:48 <AnMaster> ah
17:42:52 <AnMaster> I see
17:43:03 <AnMaster> would be cool if the type depended on the format string somehow
17:43:10 <Deewiant> Again, dependent types. :-P
17:43:11 <fizzie> 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.
17:43:22 <AnMaster> Deewiant, right. Whatever that is exactly, haskell should add it
17:43:36 <oerjan> AnMaster: however the interpretation of the format string depends on the actual types passed
17:43:42 <AnMaster> fizzie, hah
17:43:42 <Sgeo_> fizzie, you're an Esotericer. You are unable to determine bonkers from non-bonkers >.>
17:43:43 <Deewiant> AnMaster: I think that would be highly nontrivial
17:43:51 <cpressey> Cherish your special other meanings.
17:43:52 <Deewiant> AnMaster: Ask alise about it, she knows.
17:43:58 <oerjan> so that it is still type safe
17:44:09 <fizzie> Esoterice is the best rice ever.
17:44:45 <AnMaster> oerjan, so you mean it ignores %d if it has a string, and instead puts a string there?
17:44:56 <oerjan> um
17:45:11 <Sgeo_> Going to watch some Futurama now
17:45:12 <oerjan> !haskell Text.Printf.printf "%d" "test"
17:45:14 <EgoBot> *** Exception: Printf.printf: bad argument
17:45:14 <Deewiant> AnMaster: He means that if you say %d and give a float it'll error.
17:45:21 <AnMaster> well that makes more sense
17:45:39 <Sgeo_> Runtime errors are not type-s.. well, not statically-type-safe?
17:45:42 <Deewiant> !haskell Text.printf.printf "%s %s" "one"
17:45:55 <Deewiant> Fine, don't channelify.
17:45:56 <Sgeo_> Wouldn't that be a function?
17:45:57 <oerjan> Sgeo_: indeed, but it's memory safe
17:46:02 <AnMaster> Deewiant, it went to dcc?
17:46:16 <Deewiant> Aye
17:46:21 <Sgeo_> !haskell Text.printf.printf "%s %s" "one"
17:46:24 <AnMaster> Deewiant, large runtime error?
17:46:26 <Deewiant> I guess the type error is too long
17:46:35 <AnMaster> what? Type error?
17:46:42 <AnMaster> oh runtime one?
17:46:44 <Sgeo_> Parse error
17:46:53 <AnMaster> huh
17:47:01 <AnMaster> !haskell Text.printf.printf "%s %s" "one"
17:47:07 <AnMaster> hm
17:47:08 <Deewiant> !haskell Text.printf.printf "%s %s" "one" :: String
17:47:12 <AnMaster> ah dcc won't work here
17:47:13 <fizzie> !haskell Text.printf.printf "%s %s" "one"
17:47:19 <Sgeo_> !haskell Text.printf.printf "%s %s" "one" :: String
17:47:22 <Deewiant> Er, that shouldn't be an error.
17:47:25 <AnMaster> it will end up on wrong client, not the one I'm on atm
17:47:30 <Deewiant> Er, of course it should be.
17:47:33 <oerjan> _Printf_
17:47:35 <Deewiant> I can't type and everybody else is copy-pasting.
17:47:38 <Deewiant> !haskell Text.Printf.printf "%s %s" "one" :: String
17:47:39 <EgoBot> *** Exception: Printf.printf: argument list ended prematurely
17:47:52 <fizzie> Deewiant: I did notice the lowercasing, I just wanted to see the error. :p
17:47:55 <Deewiant> !haskell Text.Printf.printf "%s" "one" "two" :: String
17:47:56 <EgoBot> *** Exception: Printf.printf: formatting string ended prematurely
17:48:00 <Deewiant> fizzie: :-P
17:48:02 <fizzie> (Also I have no idea whether it's case-sensitive or not.)
17:48:15 <Deewiant> Haskell is.
17:48:19 <fizzie> Seems to.
17:48:22 <Sgeo_> Anways, back to Futurama for me!
17:48:48 <cpressey> !haskell Text.Printf.printf "%s %s" "one" "two"
17:48:50 <EgoBot> one two
17:49:08 <cpressey> (Sorry, I just needed closure on that.)
17:49:21 <Deewiant> :-)
17:49:37 <pikhq> Sgeo_: Y'know, I always did like that s... ALL GLORY TO HYPNOTOAD
17:50:03 <oerjan> fizzie: haskell is very case sensitive, in fact lower and upper case identifiers are completely different namespaces (variables vs. constructors/types)
17:50:38 <cpressey> Yes, it's very, very sensitive about case. Touchy, even.
17:51:02 <cpressey> Once it completely stormed out on me when I accidentally used a lower-case 'g'.
17:51:20 <oerjan> !haskell Text.Printf.printf "%s %s" "one" "two" :: String -- printf doubles as sprintf too
17:51:22 <EgoBot> "one two"
17:52:23 <AnMaster> cpressey, yes it does have impressively large errors
17:52:30 <Deewiant> Haha
17:52:31 <Deewiant> http://paczesiowa.blogspot.com/2010/07/two-dimensional-analog-literals-in.html
17:54:50 <cpressey> A bold attempt at lexical abuse, indeed.
17:55:46 <fizzie> "-- ghc for 4x4 rectangle needs 500 mb of memory (I don't have a machine capable of checking 5x5) --"
17:55:53 <fizzie> An entirely practical thing.
17:55:59 <Deewiant> Only the first solution.
17:56:07 <fizzie> Yes, I noticed. It still caught the eye.
17:57:22 -!- Mathnerd314 has quit (Ping timeout: 260 seconds).
18:02:28 -!- Mathnerd314 has joined.
18:03:23 <oerjan> <AnMaster> Deewiant, for example: show (map (\x -> x*x) [1..100000000])
18:03:59 <oerjan> while ghc optimizes such things, it's based on special rules for builtin list functions like map iiuc
18:04:18 <oerjan> so it doesn't apply to functions you build directly using cons and tail recursion
18:04:33 <oerjan> unless you also add such a rule pragma for it
18:05:28 <oerjan> http://haskell.org/ghc/docs/6.12.2/html/users_guide/rewrite-rules.html
18:06:44 <cpressey> Ah, Haskell, the PL/I of functional languages.
18:06:53 <AnMaster> 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
18:07:02 <AnMaster> cpressey, what do you mean by that?
18:07:03 <Deewiant> oerjan: It does execute that in O(1) even if you define your own map and enumFromTo.
18:07:26 <oerjan> Deewiant: well, that is laziness i guess.
18:07:32 <pikhq> I do love that you can write rewrite rules.
18:08:57 <AnMaster> also the list [0,2..] ... how is it represented internally? Some kind of special end-marker instead of [] ?
18:09:24 <AnMaster> oops, bbl food is ready
18:09:31 <cpressey> 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...)
18:09:38 <oerjan> AnMaster: enumFromThen 0 2
18:09:49 <oerjan> !haskell take 10 $ enumFromThen 0 2
18:09:51 <EgoBot> [0,2,4,6,8,10,12,14,16,18]
18:11:10 <oerjan> 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)
18:11:21 <oerjan> well Int and Char, it says
18:14:51 -!- Gregor-P has joined.
18:16:24 <oerjan> <AnMaster> oh btw is there a way in haskell do make a function like: f :: [Int] | [Char] -> ...
18:16:53 <oerjan> you can also make a class method for it
18:17:27 <pikhq> Typeclass, yeah.
18:17:42 <oerjan> class MyF a where { f :: [a] -> ... }; instance MyF Int where ...; instance MyF Char where ...
18:18:25 <AnMaster> oerjan, hah
18:19:04 <oerjan> enumFromThen is also a class method btw
18:19:12 <oerjan> !haskell :t enumFromThen
18:19:13 <EgoBot> enumFromThen :: (Enum a) => a -> a -> [a]
18:19:24 <pikhq> Mmm, Enum.
18:19:45 <AnMaster> I haven't got to typeclasses yet in this book. I think it is next chapter
18:19:53 <Deewiant> What book?
18:20:02 <fizzie> 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.
18:21:06 <AnMaster> 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
18:21:23 <AnMaster> I think it was ehird who recommended that one
18:21:41 <Deewiant> It's the best
18:22:01 <oerjan> <fizzie> 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.
18:22:11 <AnMaster> Deewiant, well I noticed some typos. Like mixing up which filename it used for a file one paragraph above or such
18:22:46 <oerjan> that probably breaks down with odd numbers. there's a more complicated version that gives you both fib(2n) and fib(2n+1) though
18:23:20 <AnMaster> 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
18:23:22 <AnMaster> that is annoying
18:23:26 <Deewiant> AnMaster: Submit errata if it's not already been submitted
18:23:26 <oerjan> based on multiplying matrices [fib(n) fib(n+1); 0 fib(n)] or something like that
18:23:32 <fizzie> 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.
18:23:39 <AnMaster> Deewiant, it was mentioned in a comment on that paragraph
18:23:48 <oerjan> fizzie: oh hm
18:24:27 <oerjan> maybe it works then. anyway see you.
18:24:30 -!- oerjan has quit (Quit: leaving).
18:24:47 <fizzie> (Then you again have the three consecutive fibs, and could proceed with duplications as long as it's necessary.)
18:26:03 <fizzie> 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.
18:26:33 <AnMaster> :info foldl' saying "foldl' :: (a -> b -> a) -> a -> [b] -> a" is far less helpful than something containing some sort of parameter names
18:26:54 <AnMaster> this takes longer to read if you need to check order of the parameters in the lambda
18:27:05 <AnMaster> "hm which one is a, *eyes jump around in the line*"
18:33:44 <Deewiant> If it gave you parameter names you'd get "foldl' f z xs"
18:35:04 <AnMaster> Deewiant, argh... mathematicians ;)
18:35:44 <Deewiant> My Haskell tends to look like that too, since it's obvious from the type what they mean ;-P
18:36:21 <AnMaster> Deewiant, I would like docs like: foldl' (\acc element -> acc') acc0 [list] -> final_acc
18:36:23 <AnMaster> or something like that
18:37:30 <AnMaster> 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
18:39:03 <AnMaster> Deewiant, and sometimes it might not be so clear. Something like isSuffixOf :: (Eq a) => [a] -> [a] -> Bool
18:39:17 <Deewiant> a `isSuffixOf` b
18:40:04 <AnMaster> 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
18:40:14 <AnMaster> and yes that one I remember, there are harder to remember cases however
18:40:30 <Deewiant> I know it's a dead key on the scandinavian layout
18:40:40 <AnMaster> btw how does something like: fromIntegral :: (Integral a, Num b) => a -> b work?
18:40:47 <AnMaster> black magic?
18:40:54 <Deewiant> And I recommend spending a key or getting a keyboard with more keys so you can have a non-dead version of ` :-P
18:41:07 <AnMaster> Deewiant, second is not an option on a laptop
18:41:10 <AnMaster> which is what I'm on atm
18:41:23 <Deewiant> fromIntegral = fromInteger . toInteger
18:41:28 <AnMaster> uh
18:41:48 <AnMaster> okay then, how does fromInteger work?
18:42:10 <Deewiant> class (Eq a, Show a) => Num a where ... fromInteger :: Num a => Integer -> a
18:42:26 <AnMaster> class? Oh type classes hm
18:42:45 <AnMaster> I guess that explains the seemingly magic breach of the type system
18:43:07 <Deewiant> Nothing is breached because of the (Integral a, Num b) constraint
18:43:17 <Deewiant> You can't do fromIntegral "foo" :: (Int,Int) :-P
18:43:49 <AnMaster> hm
18:44:33 <AnMaster> what about ord then (Data.Char)
18:44:49 <AnMaster> ord :: Char -> Int
18:44:53 <Deewiant> What about it
18:45:36 <AnMaster> it isn't a Num or Integral according to :info
18:45:41 <AnMaster> Char that is
18:45:51 <Deewiant> True, and?
18:45:53 <AnMaster> lookup table or what?
18:46:02 <Deewiant> Probably a low-level cast
18:46:04 <AnMaster> ah
18:46:17 <Deewiant> Or exploiting Char
18:46:25 <Deewiant> data Char = C# Char#
18:46:30 <AnMaster> Deewiant, so black magic at last. The lack of "this only works because it is special cased in runtime" stuff made me suspicious
18:46:35 <AnMaster> ;)
18:46:39 <Deewiant> It doesn't have to be black magic
18:46:44 <Deewiant> It's just more performant that way
18:46:47 <AnMaster> hm
18:46:58 <Deewiant> E.g. your lookup table would work fine
18:47:05 <cpressey> !haskell fromInteger 'c'
18:47:06 <AnMaster> Deewiant, for unicode?
18:47:11 <AnMaster> Hm how much space
18:47:19 <Deewiant> Like said, it's not performant :-P
18:47:34 <Deewiant> AnMaster: But also, ord = fromEnum.
18:47:37 <AnMaster> well, what is the size of Char?
18:47:42 <AnMaster> Deewiant, huh
18:47:53 <AnMaster> fromEnum :: (Enum a) => a -> Int
18:47:55 <Deewiant> !haskell (minBound,maxBound) :: (Char,Char)
18:47:56 <EgoBot> ('\NUL','\1114111')
18:47:57 <AnMaster> okay that looks like cheating
18:48:00 <AnMaster> Deewiant, heh
18:48:13 <Deewiant> !haskell join (***) fromEnum (minBound,maxBound) :: (Char,Char)
18:48:16 <Deewiant> !haskell join (***) fromEnum ((minBound,maxBound) :: (Char,Char))
18:48:23 <Deewiant> Meh, it doesn't import things.
18:48:28 <AnMaster> hm
18:48:32 <Deewiant> !haskell Control.Monad.join (Control.Arrow.***) fromEnum ((minBound,maxBound) :: (Char,Char))
18:48:35 <AnMaster> *** ?
18:48:51 <Deewiant> That should have worked :-/
18:49:00 <cpressey> !haskell "foo" `isSuffixOf` "anyfoo"
18:49:25 <Deewiant> !haskell print $ Control.Monad.join (Control.Arrow.***) fromEnum ((minBound,maxBound) :: (Char,Char))
18:49:27 <cpressey> All I get from EgoBot are strange-looking PM's.
18:49:33 <AnMaster> Deewiant, Enum? is that like data Foo = A | B | C ?
18:49:48 <Deewiant> AnMaster: Read up on type classes before asking more of these questions :-P
18:49:53 <cpressey> !haskell "Hello, world!"
18:49:55 <EgoBot> "Hello, world!"
18:50:19 <AnMaster> Deewiant, ah right. I'm just at the stage where I start spotting various logic flaws in what I have learnt so far ;P
18:50:55 <Deewiant> !haskell (fromEnum (minBound :: Char), fromEnum (maxBound :: Char))
18:50:57 <EgoBot> (0,1114111)
18:51:31 <cpressey> !haskell List.isSuffixOf
18:51:45 <Deewiant> !haskell "foo" `Data.List.isSuffixOf` "anyfoo"
18:51:47 <EgoBot> True
18:52:00 <cpressey> Data, of course.
18:52:12 <Deewiant> !haskell "foo" `List.isSuffixOf` "anyfoo"
18:52:13 <EgoBot> True
18:54:55 <cpressey> !haskell List.IsSuffixOf "foo" "anyfoo"
18:55:02 <Deewiant> s/I/i/
18:55:14 <cpressey> !haskell List.isSuffixOf "foo" "anyfoo"
18:55:16 <EgoBot> True
18:55:30 <cpressey> EgoBot's error messaging leaves a lot to be desired.
18:55:43 <Deewiant> Yep
18:57:10 <AnMaster> huh, why can't lambdas have multiple "entry points" like normal functions
18:57:25 <AnMaster> even erlang manages that
18:57:46 <Deewiant> Because pattern matching directly in definitions is just syntax sugar for case
18:58:18 <AnMaster> Deewiant, same goes for erlang if you ask the compiler to dump the stage just before it generates beam asm
18:58:23 <AnMaster> Deewiant, so that is not a good reason
18:58:56 <Deewiant> 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
18:59:49 <AnMaster> Deewiant, well it just needed two cases. Hm does all top level functions in a haskell source file become visible outside?
19:00:19 <Deewiant> Unless you specify what is visible, yes
19:00:26 <AnMaster> ah you can do that, nice
19:00:41 <AnMaster> useful in the case of a helper function being used by more than one top level function
19:02:20 <cpressey> Functions that are not to be exported must be written in invisible ink.
19:02:56 <AnMaster> :P
19:03:21 <AnMaster> cpressey, but I used all my invisible ink when coding in whitespace. I guess I need to buy more
19:03:28 -!- jberryman has quit (Ping timeout: 276 seconds).
19:07:21 -!- kar8nga has joined.
19:07:25 -!- myndzi\ has joined.
19:07:40 <AnMaster> why no 1-tupple? Sure it is pretty useless but it still seems strange to just have a hole in the valid range.
19:08:13 <Deewiant> Tuples are written (e1, ..., ek), and may be of arbitrary length k>=2.
19:08:28 <Deewiant> 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"
19:08:47 -!- choochter has quit (Ping timeout: 265 seconds).
19:09:32 <AnMaster> Deewiant, That doesn't really answer my question though. It just confirms thagt there is no 1-tuple.
19:09:40 <AnMaster> It doesn't explain why
19:09:44 <Deewiant> It says that () isn't really a tuple.
19:09:46 <AnMaster> hm
19:09:51 <cpressey> () isn't a tuple to me
19:10:00 <Deewiant> The trivial type is written as () and has kind *.
19:10:00 <cpressey> And 1-tuples ARE pretty useless.
19:10:04 <Deewiant> The tuple types are written as (,), (,,), and so on. Their kinds are *->*->*, *->*->*->*, and so on.
19:10:06 <AnMaster> that makes more sense
19:10:12 -!- myndzi has quit (Ping timeout: 240 seconds).
19:10:34 <Deewiant> If you prefer, just do type Void = () and forget about ()'s existence ;-P
19:10:36 <cpressey> 1-tuple, a.k.a. "single".
19:10:52 <AnMaster> Deewiant, kind?
19:10:59 <AnMaster> I guess I haven't got to that yet
19:11:02 <cpressey> I've never seen a mathematician concern themselves with a 1-tuple.
19:11:03 <Deewiant> Yep.
19:11:12 <AnMaster> Deewiant, type classes again?
19:11:34 <Deewiant> Nope.
19:12:35 <AnMaster> mhm
19:16:15 <CakeProphet> AnMaster: a kind has to do with type parameters
19:16:23 <CakeProphet> [a] has kind * -> *
19:16:30 <Deewiant> No, [a] is a type.
19:16:42 <CakeProphet> ....right/
19:16:43 <CakeProphet> ?
19:16:46 <Deewiant> It has type *.
19:16:51 <Deewiant> [] has kind * -> *.
19:16:54 <CakeProphet> er, well. bleh
19:16:55 <CakeProphet> okay.
19:17:19 <Deewiant> s/\Vtype */kind */
19:17:21 <CakeProphet> I thought he was learning Haskell not math. :P
19:17:37 <CakeProphet> the distinction is trivial to make.
19:17:44 <Deewiant> In Haskell, [a] has kind * and [] has kind * -> *.
19:18:01 <AnMaster> <Deewiant> [] has kind * -> *. <-- why is that then?
19:18:09 <Deewiant> Just read the book. :-P
19:21:16 <AnMaster> wait, does the lambdas to foldl and foldr have the acc/value parameters in different orders?
19:21:30 <AnMaster> Deewiant, is that correct?
19:21:33 <Deewiant> Yes. No, I don't know why.
19:21:36 <AnMaster> ah
19:21:48 <AnMaster> Deewiant, it explains this strange bug I have been hitting for a while now
19:24:10 <AnMaster> Occurs check: cannot construct the infinite type: a = [a]
19:24:16 <AnMaster> now I'm confronted with that instead
19:24:30 <cpressey> Stupid occurs check.
19:24:34 <cpressey> I want infinite types.
19:24:40 <Deewiant> No, you don't. :-P
19:24:54 <cpressey> They would have been very useful in that interpreter I was writing!
19:25:01 <AnMaster> I want to know what I did wrong instead
19:25:30 <AnMaster> or rather, what sort of thing could cause it hm
19:25:38 <Deewiant> http://www.mail-archive.com/haskell-cafe@haskell.org/msg18345.html says why infinite types are a bad idea
19:26:03 <AnMaster> In the first argument of `foldr', namely `step'
19:26:04 <AnMaster> hm
19:26:15 <Deewiant> AnMaster: (x:x) will cause that error, for example. (For any x.)
19:26:24 <AnMaster> where step val acc | f val = acc : val
19:26:24 <AnMaster> | otherwise = []
19:26:26 <AnMaster> like that?
19:26:27 <Deewiant> Well, not quite any x.
19:26:31 <AnMaster> it looks fine to me
19:27:49 <Deewiant> foldr :: (a -> b -> b) -> b -> [a] -> b
19:27:59 <Deewiant> So, step should have type a -> b -> b
19:28:01 <AnMaster> did I confuse the order of val and acc hm
19:28:43 <Deewiant> So assign 'val' the type 'a' and 'acc' the type 'b'
19:28:51 <cpressey> 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...
19:29:02 <Deewiant> 'acc : val' has the type of val
19:29:07 <cpressey> Ah, but I wasn't aware of "newtype" before.
19:29:38 <Deewiant> AnMaster: So, in short, yes.
19:30:02 <AnMaster> Deewiant, but it seems like first param must be element from list
19:30:07 <AnMaster> since a matches the type a there
19:30:21 <Deewiant> Yes
19:30:39 <Deewiant> But your 'step' function has type [a] -> a -> [a]
19:30:45 <Deewiant> This does not match a -> b -> b
19:30:51 <Deewiant> Since you cannot unify b with both a and [a]
19:30:52 <AnMaster> 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.
19:30:59 <AnMaster> Deewiant, ah hm
19:31:07 <AnMaster> val : acc
19:31:08 <AnMaster> that is it
19:31:13 <Deewiant> Right :-)
19:31:30 <AnMaster> Deewiant, it reported the error on the wrong line
19:31:32 <AnMaster> annoying
19:31:43 <Deewiant> If you had put a type annotation on step it probably would have reported it there
19:31:54 <AnMaster> Deewiant, can you do that inside a where?
19:31:56 <Deewiant> Yes.
19:32:01 <AnMaster> huh, how?
19:32:14 <Deewiant> Same way as at top-level.
19:32:28 <AnMaster> where step :: ...
19:32:34 <Deewiant> Yep
19:32:35 <AnMaster> step ... =
19:32:37 <AnMaster> and so ?
19:32:39 <AnMaster> huh
19:36:13 <cpressey> Oh, so newtype is basically a type alias? This reminds me of Pascal!
19:36:24 <Deewiant> type is basically a type alias. ;-)
19:38:04 <cpressey> Er, right. A newtype is a, what word would work better - "synonym"? It has the same structure but has a distinct identity.
19:38:36 <AnMaster> so you need explicit conversion functions?
19:38:45 <cpressey> I think I'm confused.
19:40:15 <cpressey> Actually, I can't see yet how newtype differs from data.
19:40:58 <Deewiant> http://www.haskell.org/haskellwiki/Newtype
19:41:24 <cpressey> Yeah, I read that, it wasn't very enlightening to me.
19:41:56 <Deewiant> newtypes have no overhead on top of what they wrap
19:42:14 <Deewiant> With data, you have the constructor
19:43:03 <cpressey> OK. That's more subtle than I was expecting.
19:43:44 <AnMaster> is !haskell ghc or ghci?
19:43:46 <Deewiant> Even if the data is strict in its parameter, _|_ and Data _|_ are distinct, but _|_ and NewType _|_ are identical.
19:43:54 <AnMaster> `ls
19:44:03 <HackEgo> 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
19:44:04 <Deewiant> ghci is ghc --interactive ;-)
19:44:13 <AnMaster> Deewiant, well you know what I meant though :P
19:44:38 <Deewiant> It's most likely GHC because you can import and define main and whatnot.
19:44:58 <AnMaster> ah
19:45:06 <Deewiant> s/GHC/ghc/
19:46:37 <AnMaster> the partially applied function thing seems fairly limited in that it is restricted to argument order
19:46:46 <AnMaster> or?
19:47:11 -!- Gracenotes has quit (Ping timeout: 240 seconds).
19:47:36 <AnMaster> for something like isSuffixOf partially applying either the first or the second parameter would both be useful, in different situations
19:49:00 <cpressey> (\ x y -> isSuffixOf y x) "foo"
19:49:09 <Deewiant> flip isSuffixOf
19:49:17 <cpressey> I'm sure there's ways to do that in "pointless" style -- yes, exactly
19:49:24 <Deewiant> !haskell ("foo" `isSuffixOf`) "foobar"
19:49:34 <Deewiant> !haskell ("foo" `List.isSuffixOf`) "foobar"
19:49:35 <EgoBot> False
19:49:47 <Deewiant> !haskell (`List.isSuffixOf` "foobar") "bar"
19:49:48 <EgoBot> True
19:52:15 <AnMaster> ah
19:52:29 <AnMaster> Deewiant, well, more than two parameters might be more of an issue :P
19:52:47 <Deewiant> Just write lambdas
19:53:26 <AnMaster> Deewiant, sure, but why do partial application at all then. Just syntax sugar?
19:54:15 <Deewiant> Sort of, but also how all application works :-P
19:54:24 <AnMaster> hm
19:54:40 <AnMaster> Deewiant, does ghc optimise that in the generated code?
19:54:51 <AnMaster> so it ends up like a function taking multiple parameters again
19:54:54 <Deewiant> Yes, or things would be unbearably slow
19:55:00 <AnMaster> right
19:57:35 <AnMaster> "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."
19:57:36 <AnMaster> um
19:57:49 <AnMaster> seriously? ghc doesn't optimise that?
19:58:11 <AnMaster> for context, the code was: noAsPattern (x:xs) = (x:xs) : noAsPattern xs
19:58:19 <Deewiant> Dunno
19:58:20 <AnMaster> if ghc doesn't optimise that.... wtf
19:58:53 <AnMaster> ah a comment points out that is only true for ghc without -O or such
19:59:11 <Deewiant> I think it's bad practice to write something which is both less clear and suboptimal anyway :-P
19:59:30 <AnMaster> Deewiant, well the comment also compares:
19:59:34 <AnMaster> foo (x:ys@(y:zs)) = ... foo ys ...
19:59:35 <AnMaster> vs.
19:59:36 <AnMaster> foo (x:y:zs) = ... foo (y:zs) ...
19:59:51 <AnMaster> Deewiant, I have to agree that the latter seems easier to read
20:00:22 <Deewiant> foo (x : ys@(y:zs)) is best IMO
20:00:31 <AnMaster> Deewiant, I find that harder to read
20:06:15 <AnMaster> Deewiant, hm... does . only work on functions with one parameter?
20:06:27 <Deewiant> All functions have only one parameter
20:14:12 -!- Gracenotes has joined.
20:18:15 -!- coppro has joined.
20:31:41 <AnMaster> Deewiant, well lets say an uncurried function then
20:32:10 <Deewiant> All functions have only one parameter
20:32:23 <Deewiant> If the parameter is of type (a,b,c,d) it's still one parameter.
20:32:30 <AnMaster> hm
20:33:26 <AnMaster> :type foldl . head
20:33:26 <AnMaster> foldl . head :: [a -> b -> a] -> a -> [b] -> a
20:33:34 <AnMaster> that looks strange
20:33:58 <Deewiant> \fs -> foldl (head fs)
20:34:26 <AnMaster> aha
20:34:46 <AnMaster> somewhat confusing still
20:40:18 <fizzie> 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
20:40:18 <fizzie> 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?!).
20:41:34 <Deewiant> (I dunno, really?!)
20:49:40 -!- augur has quit (Remote host closed the connection).
20:49:51 -!- augur has joined.
20:50:00 -!- augur has quit (Remote host closed the connection).
20:50:05 -!- augur has joined.
20:50:30 <AnMaster> Deewiant, hm seq can only be implemented inside the runtime I suspect. Or would there be a way in pure haskell?
20:52:06 <Deewiant> No, it's a primitive
20:52:27 <AnMaster> Deewiant, primitive meaning something implemented in the compiler itself?
20:52:48 <Deewiant> Meaning not definable in Haskell
20:52:58 <AnMaster> ah
20:53:28 <AnMaster> Deewiant, like a special form in lisp?
20:53:38 <Deewiant> Yep
20:55:45 -!- hiato has joined.
20:56:04 -!- sebbu has quit (Ping timeout: 265 seconds).
21:00:54 -!- aschueler has quit (Ping timeout: 265 seconds).
21:09:48 <cpressey> Meaning, those things all languages have
21:14:29 -!- Mathnerd314 has quit (Ping timeout: 265 seconds).
21:16:09 -!- MigoMipo has quit (Remote host closed the connection).
21:16:39 -!- MigoMipo has joined.
21:20:14 -!- Mathnerd314_ has joined.
21:20:33 -!- Mathnerd314_ has changed nick to Mathnerd314.
21:30:56 -!- CakeProphet has quit (Ping timeout: 258 seconds).
21:32:02 -!- CakeProphet has joined.
21:42:36 -!- coppro has quit (Remote host closed the connection).
21:42:49 <AnMaster> cpressey, hm trying to think of such in C. I guess for, while and other keywords would count as those there
21:42:59 <AnMaster> possibly the stuff in stdarg.h too
21:43:34 <cpressey> +
21:43:37 <AnMaster> though actually I seem to remember a pure C implementation of that. What a mess
21:43:49 <cpressey> %
21:43:56 <cpressey> sizeof
21:44:10 <AnMaster> cpressey, + can be implemented as a increment for finite types
21:44:12 <AnMaster> in theory
21:44:36 <AnMaster> % could be implemented without that too. Just very inefficient
21:44:41 <AnMaster> sizeof would be harder
21:44:57 <AnMaster> of course the syntax doesn't allow you to name a function + or %
21:45:05 <AnMaster> but the same feature could be implemented
21:45:11 <Deewiant> Difference is that those are actually keywords; seq isn't
21:45:22 <cpressey> You could of course implement seq in Haskell too, just write a Haskell interpreter in Haskell
21:45:54 <Deewiant> That is, of course, not the same thing :-)
21:45:58 <fizzie> You can get a sort-of sizeof with a pointer-arithmetics-based macro, but it's messy and probably not quite identical.
21:46:23 <AnMaster> ah I seem to remember the gnu extension alignof can be done with pointer arithmetic
21:46:43 <AnMaster> fizzie, you would need to know the last member + the size of it I think
21:46:56 <Sgeo_> Dear Chrome: Please stop ignoring me. Love, Sgeo
21:47:43 <AnMaster> hm is it possible to make a language entirely without special forms?
21:47:47 -!- kar8nga has quit (Remote host closed the connection).
21:47:52 <AnMaster> hm probably not
21:47:58 <AnMaster> except the null language
21:48:08 <cpressey> Not if you want strings to have meanings
21:48:30 <cpressey> The language (0|1)* has no special forms, as such
21:48:34 <AnMaster> cpressey, do natural languages have special forms I wonder...
21:48:42 <AnMaster> cpressey, hm good point
21:49:32 <fizzie> 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.
21:50:24 <AnMaster> fizzie, ooh fun
21:50:26 -!- p_q has joined.
21:50:52 <AnMaster> so sizeof is not a special form except possibly for "macros evaluate more than once"
21:50:59 <AnMaster> which there is a gnu extension to avoid
21:52:12 <fizzie> 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.
21:52:27 <fizzie> Then someone would just ask you to implement typeof() as a macro, and where would you be then?
21:52:37 -!- poiuy_qwert has quit (Ping timeout: 265 seconds).
21:52:46 <AnMaster> fizzie, reducing one problem to another
21:52:48 <AnMaster> :P
21:53:07 <AnMaster> mathematicians do it all the time. So it must be okay
21:53:39 <Sgeo_> I think that's if you can solve what the problem was reduced to
21:54:11 <AnMaster> Sgeo_, nah it is used to prove that solving something else would solve that problem as well
21:54:26 <AnMaster> or for finding if some logic function is universal
21:54:27 <AnMaster> or whatever
21:54:29 <Deewiant> Just reduce two problems to each other and let the compiler figure it out
21:54:46 <AnMaster> Deewiant, you could have typeof as a special form but not sizeof
21:54:51 <AnMaster> I don't see the issue with that
21:55:12 <cpressey> if
21:55:20 <Deewiant> then
21:55:21 <Deewiant> else
21:55:28 <cpressey> goto
21:55:29 <AnMaster> Deewiant, just reduce your special forms to the minimal possible set
21:55:36 <AnMaster> Deewiant, then? C doesn't use that
21:55:47 <cpressey> abort()
21:55:53 <Deewiant> }
21:55:54 <AnMaster> cpressey, not a special form
21:56:05 <cpressey> ?
21:56:17 <AnMaster> cpressey, I implemented abort() in C on an embedded platform. It calls _exit()
21:56:34 <cpressey> and _exit() is implemented in terms of abort()
21:56:40 <fizzie> #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 */
21:56:44 <AnMaster> cpressey, incorrect. _exit there calls the OS task manager
21:57:02 <cpressey> Oh no! cpressey is incorrect!
21:57:21 <AnMaster> cpressey, besides abort() on systems that have stuff like core dumps couldn't have _exit() implemented in terms of abort()
21:57:51 <AnMaster> cpressey, and there you could make abort() just do *0; or such (assuming that page was never mapped, like on linux)
21:58:20 <AnMaster> fizzie, :D
21:58:49 <cpressey> break
21:58:49 <fizzie> abort() on a hosted (non-freestanding) C system -- well, C99 anyway -- is defined in terms of raise(SIGABRT), though.
21:58:52 <AnMaster> cpressey, agreed
21:59:02 <AnMaster> fizzie, right
21:59:07 <cpressey> You agree with "break"? How?
21:59:31 <AnMaster> cpressey, that it is a special form, well or syntax. Is "let" a special form in haskell? I guess it is.
21:59:57 <cpressey> You can implement break with goto, if I'm not mistaken
22:00:05 <AnMaster> cpressey, oh good point
22:00:17 <AnMaster> cpressey, requires you to add a label at the end though
22:00:20 <fizzie> You need to put some labels in, though; you can't just #define ...
22:00:23 <fizzie> Right, what he said.
22:00:32 <cpressey> I wonder if that matters or not.
22:00:47 <AnMaster> depends on how exactly you define special form
22:00:49 <cpressey> You can't #define anything at all in Haskell.
22:01:08 <Deewiant> AnMaster: The semantics of let can be duplicated with lambdas.
22:01:14 <AnMaster> Deewiant, hm okay
22:01:22 <fizzie> 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.
22:01:26 <AnMaster> cpressey, you could define a function, or not
22:01:29 <fizzie> You'd get multi-level breaks for free, even.
22:01:46 <AnMaster> fizzie, hah
22:03:01 <fizzie> Could do the same for "continue", of course.
22:03:20 <AnMaster> fizzie, wouldn't that mess up the counter with continue; in for loops?
22:03:55 <fizzie> In fact, the C99 spec (6.8.6.2) defines "continue" in terms of a goto statement.
22:03:57 <AnMaster> you would need an extra line simulating that part of the for or while loop continue that is in the loop header
22:04:03 <AnMaster> huh
22:04:15 <AnMaster> fizzie, I can't see how that works in for loops
22:04:49 <Gregor-P> On a scale from one to ten, that's awesome.
22:04:57 <AnMaster> fizzie, oh wait
22:04:57 <fizzie> http://zem.fi/~fis/cont.png
22:04:58 <AnMaster> to the end
22:04:59 <AnMaster> I get it
22:05:01 <AnMaster> that works
22:05:16 <AnMaster> took a while to load it and find the section
22:05:27 <fizzie> You could have just waited for the .png.
22:05:44 <AnMaster> fizzie, I didn't know it was forthcoming
22:06:22 <AnMaster> Gregor-P, 9.5i
22:06:24 <fizzie> They didn't do the same for "break", but of course there's the switch mess to consider.
22:07:03 <AnMaster> fizzie, oh yes but that works there too as jumping to a label after the switch
22:07:08 <AnMaster> switch block*
22:08:53 <fizzie> Sure, but it might look messy. Three columns is already a bit much.
22:09:17 -!- pikhq has quit (Read error: Connection reset by peer).
22:09:38 <AnMaster> fizzie, why side by side, I see no reason for that
22:10:09 -!- cheater99 has quit (Ping timeout: 240 seconds).
22:11:23 <fizzie> 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.
22:13:33 <fizzie> Makes one wonder how many loops there are with only a "break" or a "continue" as the body.
22:16:47 -!- p_q has quit (Ping timeout: 265 seconds).
22:17:26 -!- p_q has joined.
22:18:42 <Gregor-P> whi
22:18:46 <Gregor-P> Erm
22:18:56 <Gregor-P> while (1) break;
22:19:35 <AnMaster> Gregor-P, do { break } while(0);
22:19:38 <AnMaster> even more confusing
22:19:53 <AnMaster> idea:
22:19:58 <AnMaster> Add this to a system header:
22:19:59 <fizzie> for (int temp = x(); do_something(temp); /* nice way to limit the scope of 'temp' */) break;
22:20:07 <AnMaster> #define break do { break } while(0)
22:20:11 <AnMaster> err
22:20:13 <AnMaster> add the ;
22:20:16 <AnMaster> of course
22:20:20 <AnMaster> now people will be all confused
22:20:24 <AnMaster> why break is a no-op
22:20:25 <Gregor-P> fizzie: Not C89 though
22:20:41 <AnMaster> Gregor-P, who cares about that
22:20:45 <AnMaster> I'm all C99
22:20:55 <Gregor-P> AnMaster: ... you could also #define break 0
22:21:16 <AnMaster> Gregor-P, gcc would warn about value that wasn't used iirc
22:21:21 <fizzie> Gregor-P: Yes, well, it *is* 2010 or something. Haven't you noticed all the flying cars outside?
22:21:40 <Gregor-P> AnMaster: #define break
22:21:48 <AnMaster> Gregor-P, that works
22:21:58 <Gregor-P> fizzie: You can have your future!
22:22:16 <Gregor-P> #define while if
22:22:37 <Gregor-P> #define int signed char
22:22:51 <fizzie> Or "#define break ;" and then wait for some unsuspecting guy to start putting "break" after all his lines because it seems to work.
22:22:54 -!- cheater99 has joined.
22:22:55 <Gregor-P> #define void long long
22:25:22 <fizzie> 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?
22:25:34 <AnMaster> <Gregor-P> #define int signed char <-- but but... int is supposed to be 16 bit!?
22:25:37 -!- GreaseMonkey has joined.
22:25:41 -!- hiato has quit (Quit: underflow).
22:26:17 <fizzie> AnMaster: Perhaps Gregor-P has big chars.
22:26:30 <AnMaster> Gregor-P, oh some DSP then no doubt
22:26:34 <AnMaster> err
22:26:35 <AnMaster> fizzie, ^
22:26:44 <AnMaster> though there it tends to be 32-bit
22:27:17 <fizzie> Oh, there are many 16-bit DSPs in the less-high-end range.
22:27:28 <AnMaster> ah
22:27:31 <AnMaster> good point
22:27:47 <fizzie> And many 24-bit ones too, though I don't know what their C implementations do.
22:28:09 <fizzie> Certainly you can fake 8-bit chars on architecture like that too.
22:28:24 <AnMaster> well true
22:30:36 <Gregor-P> lawl
22:32:54 <fizzie> Gregor-P: What about it, how big are your... chars?
22:35:00 <AnMaster> that sounded like innuendo. I blame the ...
22:35:04 <AnMaster> :P
22:46:20 <Gregor-P> fizzie: My chars are as big as they come ... and UNsigned.
22:46:53 <Gregor-P> Alternate:
22:47:13 <Gregor-P> fizzie: 8 bits, uncut ... I mean unsigned
22:47:40 -!- pikhq has joined.
22:50:16 -!- oerjan has joined.
22:53:23 -!- aliseiphone has joined.
22:53:31 <aliseiphone> Hi.
22:53:33 -!- aliseiphone has quit (Client Quit).
22:54:27 <oerjan> famous first and last words.
22:54:51 -!- aliseiphone has joined.
22:54:54 <aliseiphone> And hi again.
22:55:00 <ais523> rehi
22:55:31 <aliseiphone> ais523! Nice to see you at this time. Maintain that sleep schedule.
22:55:55 <ais523> aliseiphone: I've been awake for /well/ over 24 hours, being on call because there's a paper submission deadline coming up
22:56:10 <ais523> and I don't know what my supervisor's up to
22:56:41 <aliseiphone> Well, dammit, just make sure you're awake between 11 and midnight or so.
22:57:06 <aliseiphone> You could just sleep with your phone set to super-loud.
23:02:05 <Sgeo_> Hi aliseiphone
23:02:09 <Sgeo_> I'm working on PSOX2
23:02:49 <oerjan> <AnMaster> 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.
23:03:00 <ais523> aliseiphone: I don't have a mobile phone...
23:03:04 <ais523> we're contacting via email
23:03:06 <ais523> and svn
23:03:17 <aliseiphone> oerjan: Eh?
23:03:29 <oerjan> aliseiphone: haskell question
23:03:36 <aliseiphone> Oh. No. AnMaster is learning Haskell.
23:03:41 <cpressey> ais523: write a svn commit hook that starts playing your least favourite mp3 at maximum volume
23:03:46 <oerjan> case of ... with nothing between case and of is one way i've seen suggested
23:03:48 <aliseiphone> You will not see me for a while.
23:03:54 <aliseiphone> What cpressey said.
23:04:06 <aliseiphone> oerjan: Please STOP HIM.
23:04:11 <ais523> also, to go to sleep, I'd have to walk home
23:04:15 <ais523> which is not where my internet connection is
23:04:16 <aliseiphone> It is our ONLY hope.
23:04:18 * cpressey is entertained!
23:04:28 <ais523> aliseiphone: I /parted the channel earlier because both AnMaster and Sgeo were asking insane questions at once
23:04:40 <Sgeo_> ais523, sorry
23:04:48 <ais523> *inane
23:04:50 <oerjan> aliseiphone: he said he thought the book (real world haskell) he's reading was your suggestion, so it's all your own fault ;D
23:04:51 <ais523> insane questions are OK
23:04:55 -!- augur has quit (Remote host closed the connection).
23:05:07 -!- augur has joined.
23:05:12 <cpressey> ais523: What have you done with my CHEESE???
23:05:16 <aliseiphone> ais523: At least Sgeo is harmlessly utterly and completely reliant on our opinions for every minor detail in his life.
23:05:36 <aliseiphone> AnMaster, on the other hand, is liquid pain.
23:05:53 <Sgeo_> Eh, I think my questions were a bit painful
23:06:01 <Sgeo_> In my defense, the Googles did nothing
23:06:22 <aliseiphone> oerjan: I suggested a LYAH/RWH cocktail like I always do. He proceeded to dismiss LYAH because it had silly cartoon pictures.
23:06:37 <oerjan> ah.
23:06:59 <Sgeo_> aliseiphone, oh, btw, thank you for suggesting Dirk Gently's Holistic Detective Agencyt
23:07:01 <Sgeo_> *Agency
23:07:05 <aliseiphone> And AnMaster is a SERIOUS, MANLY ENGINEER with CHEST HAIRS.
23:07:27 <aliseiphone> Sgeo_: You're welcome. ...BUT TO WHAT?
23:07:59 <augur> aliseiphone!
23:07:59 <Sgeo_> ...read? Were you thinking I thought you suggested it as a paperweight?
23:08:05 <augur> ON A MONDAY?!
23:08:18 <oerjan> welcome to accidentally cause humanity to have never existed. possibly.
23:09:46 <Sgeo_> aliseiphone, unrelated, but I have learned first-hand how Java destroys brains
23:10:48 <aliseiphone> Sgeo_: C# does too.
23:11:02 <ais523> C# is just a slightly more insane version of Java
23:11:05 <Sgeo_> aliseiphone, I'd argue that it doesn't, and even if it does, it's not as bas
23:11:06 <aliseiphone> augur: Keyword iPhone.
23:11:07 <Sgeo_> *bad
23:11:13 <ais523> (Java's main insanity is being too /excessively/ sane for its own good)
23:11:19 <aliseiphone> ais523: With some useful stuff. Like closures.
23:11:24 <ais523> aliseiphone: yep
23:11:32 <ais523> C# is a very kitchen-sinky sort of language
23:11:39 <ais523> it reminds me vaguely of MAGENTA
23:11:43 <aliseiphone> ais523: Also, *Java 7. They're not versioning 1.x now.
23:11:43 <augur> aliseiphone: ah yes, true
23:11:46 <ais523> of course, many of those features are useful, probably all of them
23:11:58 <aliseiphone> Sgeo_: Guess why you think C# doesn't destroy minds?
23:12:01 <ais523> but, they still lead to a jankily large language when they're all combined
23:12:43 <aliseiphone> Because it's taking nibbles already. You're overengineering even more from what I've seen.
23:12:43 <oerjan> <Deewiant> If you prefer, just do type Void = () and forget about ()'s existence ;-P
23:13:02 <oerjan> except Void usually means something else in haskell (the type with _no_ non-bottom members)
23:13:22 <aliseiphone> Sheesh. Some people need slapping with unadorned C and being told to do something without making a sprawling framework for doing so first.
23:13:25 <Sgeo_> aliseiphone, what exactly have you seen?
23:13:34 <aliseiphone> type Unit = ()
23:13:51 <aliseiphone> Sgeo_: How do you expect me to answer that question?
23:14:12 <ais523> oerjan: I think a type like that should exist in other langs too
23:14:17 <ais523> to mean "this function never terminates normally"
23:14:20 <Sgeo_> aliseiphone, if I had any public projects since PSOX, those projects would be the answer. But I don't. So what have you seen?
23:14:23 <aliseiphone> oerjan: I take it AnMaster has been picking at irrelevant details of Haskell?
23:14:26 <ais523> you could actually enforce nonreturning in the type system
23:14:34 <ais523> by making a type that was impossible to construct an instance of
23:14:42 <aliseiphone> Sgeo_: You pastebin. You talk.
23:15:03 <oerjan> aliseiphone: well yeah. but then we all do, in principle. we are geeks after all.
23:15:06 <AnMaster> <aliseiphone> And AnMaster is a SERIOUS, MANLY ENGINEER with CHEST HAIRS. <-- uh... Thanks?
23:15:16 <aliseiphone> AnMaster: An insultb
23:15:20 <aliseiphone> *insult.
23:15:23 <Sgeo_> I think this project is underengineered
23:15:26 <AnMaster> aliseiphone, I can't see how it is one. Meh
23:15:31 <Sgeo_> I should have had parts be in Lua from the getgo
23:15:41 <aliseiphone> oerjan: AnMaster has a wonderfully irritating way of doing so, however.
23:15:48 <aliseiphone> AnMaster: Part of the problem.
23:16:13 <AnMaster> aliseiphone, perhaps you don't like chest hairs? I do have them. Not my fault. Genetics and so on.
23:16:33 <aliseiphone> Perhaps you should stop talking now.
23:16:33 <oerjan> 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
23:16:49 <aliseiphone> oerjan: *slow clap*
23:16:51 <Sgeo_> 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
23:17:30 <Sgeo_> aliseiphone, anyways, worst part about PSOX: BF-centrism, or type issues, or something else
23:17:31 <Sgeo_> ?
23:17:38 <aliseiphone> oerjan: dammit I learned from freaking YAHT and I kept writing shit until it worked. kids these days.
23:17:48 <aliseiphone> Sgeo_: Sheer pointlessness.
23:17:55 <Sgeo_> ...
23:18:00 <Sgeo_> why are you in this channel?
23:18:08 <aliseiphone> And your inability to engineer without under- or over-ing it?
23:18:13 * oerjan cannot actually recall how he learned haskell. except that at some time he read most of the haskell report.
23:18:30 <aliseiphone> Sgeo_: I only enjoy /interesting/ pointless things.
23:18:39 <aliseiphone> Or are you a fan of Ook!?
23:18:47 <Sgeo_> Is writing an HQ9+ IRC bot interersting enough?
23:18:49 <cpressey> 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.
23:18:51 <aliseiphone> And LOLCode?
23:18:57 <aliseiphone> Sgeo_: No.
23:18:59 <oerjan> aliseiphone: hey Ook! is interesting. once.
23:19:11 <cpressey> Ook! is a snicker. Once.
23:19:13 <aliseiphone> oerjan: no. not even once. :P
23:19:33 <ais523> Ook! is useful for getting people to realise that syntax really is irrelevant
23:19:38 <ais523> lots of people get fixated on it for some reason
23:19:39 <oerjan> aliseiphone: it's interesting as the first and only time you try doing that kind of obfuscation.
23:19:47 <oerjan> then you can move on.
23:19:54 <aliseiphone> ais523: I think that might have the opposite effect.
23:19:56 <Sgeo_> cpressey, idea for PSOX2: Multiple programs in different esolangs running
23:20:22 <aliseiphone> So, you know that ancient laptop
23:20:28 <aliseiphone> I upgraded?
23:20:36 <cpressey> Sgeo_: Yes, exactly, but then you don't really need to define a protocol, do you?
23:20:39 <aliseiphone> Over the weekend.
23:20:54 <Sgeo_> cpressey, why wouldn't I need to?
23:21:22 <aliseiphone> The teacher has /vetoed the nurses/ and made sure I can have it (without Internet). For homework.
23:21:43 <oerjan> <AnMaster> why no 1-tupple? Sure it is pretty useless but it still seems strange to just have a hole in the valid range.
23:22:19 <aliseiphone> I just need a 3G stick and I've been /handed a working, Internet-connected computer/ that I *don't even need to hide*.
23:22:21 <olsner> but a 1-tuple is just a single value, it barely even adds bottoms
23:22:33 <aliseiphone> oerjan: fail
23:22:45 -!- tombom has quit (Quit: Leaving).
23:22:45 <ais523> aliseiphone: ooh, impressive
23:22:49 <oerjan> 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.
23:22:50 <ais523> and rather fortunate
23:23:03 <ais523> you may want to hide the 3G stick, though, in case they catch on
23:23:12 <aliseiphone> ais523: Of course.
23:23:20 <cpressey> 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...
23:23:32 <aliseiphone> ais523: And getting used to 463mhz and 64mib of ram will suck.
23:23:45 <Sgeo_> Why would I be writing the client?
23:23:55 <aliseiphone> ais523: I'll put Puppy Linux or something onto a partition.
23:24:02 <Sgeo_> Sure, I'll write some test clients, but mostly other people will be writing clients
23:24:07 <Sgeo_> Hopefully
23:24:23 <aliseiphone> But still, dammit, I can type! Code! For this short portion of night...
23:24:40 <cpressey> aliseiphone: Explain what I mean to Sgeo_.
23:24:59 <oerjan> AnMaster: hm does <AnMaster> actually ping you? i keep just copying and pasting from the logs for convenience but it may not be optimal
23:25:01 <cpressey> No, nm, you don't have a real keyboard, that's unfair or me.
23:25:11 <aliseiphone> Sgeo_: He's telling you to make esolang programs talk to each other.
23:25:39 <aliseiphone> If you need a GUI, have a Zetaplex program to display it based on data provided to it by BF.
23:26:02 <aliseiphone> Essentially, drop PSOX and make an orgy of two-way esoteric pipes.
23:26:11 <aliseiphone> cpressey: Done. I love carpal tunnel.
23:27:07 <Sgeo_> Hm, that would be interesting
23:27:14 <cpressey> 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
23:27:19 <cpressey> Thank you aliseiphone.
23:27:37 <aliseiphone> "which produces ou"
23:27:42 <oerjan> <AnMaster> wait, does the lambdas to foldl and foldr have the acc/value parameters in different orders?
23:27:45 <aliseiphone> You got cut off.
23:27:52 <cpressey> tput which consists of those commands. End result: Unlambda drawing graphics.
23:28:13 <aliseiphone> cpressey: I wuv turtle graphics.
23:28:26 <aliseiphone> LOGO is a sweet language.
23:28:40 <cpressey> 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.
23:28:41 <AnMaster> oerjan, yes that still confuses me
23:28:50 <cpressey> aliseiphone: It is, it is.
23:28:52 <oerjan> 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))
23:28:52 <AnMaster> oerjan, and yes it pings me
23:29:09 <Sgeo_> Well, if it's a simple chain.. wait, two-way communication would be useful, wouldn't it
23:29:21 <AnMaster> oerjan, Hm I guess that does makes kind of sense
23:29:35 <aliseiphone> Sgeo_: All you need to write is a useful two-pipe unix utility.
23:29:50 * Sgeo_ doesn't want it to be UNIX-only
23:29:54 <Sgeo_> But there may be no choice
23:30:10 <aliseiphone> Only because you use Win "Shitty" dows.
23:30:17 <olsner> pretty sure you can do stuff like that in windows too, it's just a lot weirder
23:30:37 <olsner> (usually)
23:30:46 <Sgeo_> olsner, I would have loved to know that during the original PSOX's implementation
23:30:57 <Sgeo_> My inability to figure it out resulted in a major spec change
23:31:28 <cpressey> Just abstract the properties of pipes that you want and write different backends if you want to support different underlying OSes.
23:31:45 <aliseiphone> ais523: Any tips for enduring ultra-low-powered computers?
23:32:04 <ais523> try to use more efficient programs
23:32:24 <AnMaster> cpressey, so a bus for esolangs. Nice idea.
23:32:26 <ais523> it's surprising how wasteful many programs are nowadays
23:32:40 <aliseiphone> ais523: Like a non-Windows OS. :-)
23:32:44 <ais523> well, yes
23:32:51 <AnMaster> aliseiphone, DOS
23:32:54 <AnMaster> :P
23:32:56 <ais523> I find Windows almost unusuable nowadays just because of how slow it is
23:32:58 <aliseiphone> ais523: But I'm a web junkie.
23:33:08 <ais523> there are efficient web browsers
23:33:25 <ais523> really, the speed of your computer shouldn't matter for surfing, the speed of your connection matters more
23:33:31 <AnMaster> ais523, javascript
23:33:33 <AnMaster> slows things down
23:33:37 <aliseiphone> ais523: Supporting all the crap you need (I know you don't) nowadays?
23:33:38 <AnMaster> I bet aliseiphone consider that important
23:34:25 <aliseiphone> ais523: I mean... 64 MiB of RAM. Firefox never uses less than 100!
23:34:27 <olsner> 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
23:34:31 <ais523> it's important to be able to run JS, but having it off by default generally makes websites less annoying
23:34:45 <ais523> you could try using w3m, I suppose
23:34:54 <aliseiphone> ais523: No.
23:35:01 <ais523> it can even handle images, it shows them as links which download and open the image in a new window
23:35:07 <cpressey> I just explode in a frenzy of love every time I read the word LPVOID.
23:35:18 <aliseiphone> ais523: Anyway, rendering at 463 MHz?!
23:35:21 <ais523> but there are plenty of other low-resource browsers
23:35:22 <olsner> opera runs on many things with less than 64MB ram
23:35:30 <oerjan> <cpressey> Er, right. A newtype is a, what word would work better - "synonym"? It has the same structure but has a distinct identity.
23:35:36 <ais523> and rendering is rarely a bottleneck IIRC
23:35:38 <olsner> and with cpu:s slower than 450MHz
23:35:39 <Sgeo_> olsner, great, so how does the parent know when the child's requesting something on stdin?
23:35:46 <aliseiphone> btw, w3m can show images online on framebuffer
23:35:51 <ais523> (Chrome has the fastest renderer of all the common browsers IIRC, not that most people tend to care)
23:35:53 <oerjan> bad wording, since "type" defined names are officially _called_ type synonyms in haskell
23:36:00 <cpressey> oerjan: Oh, do confuse me more.
23:36:00 <olsner> Sgeo_: you can't "request" something on standard input, you can only block or poll
23:36:11 <Sgeo_> olsner, I think you can on UNIX
23:36:16 <Sgeo_> Maybe I'm misremembering
23:36:34 <aliseiphone> Sgeo_: you are.
23:36:36 <AnMaster> aliseiphone, opera mini runs on my phone. Not sure about RAM but it has 32 MB flash built in
23:36:37 <oerjan> cpressey: a newtype is sometimes called a "wrapper"
23:36:42 <ais523> incidentally, I installed a bunch of browsers for cross-browser testing
23:36:42 <AnMaster> RAM I guess around the same range or less
23:36:47 <cpressey> oerjan: It still does remind me of what you need to do in Pascal to make a linked list record.
23:36:50 <ais523> I had to uninstall Opera almost immediately because it was too anyoing
23:36:52 <ais523> *annoying
23:37:02 <ais523> whereas I can tolerate Chromium, although I dislike it
23:37:02 <olsner> AnMaster: mini should support down to 2MB of ram though :P
23:37:02 <wareya> I found another turing complete game
23:37:13 <wareya> but this one cheats because it has wires
23:37:20 <aliseiphone> DAMMIT RETARDS PHONES ARE NOT X86 LAPTOPS WITH MULTITASKING OPERATING SYSTEMS AND OPERA MINI ISN'T EVEN A REAL BROWSER
23:37:28 <aliseiphone> Stop failing :|
23:37:32 <AnMaster> <olsner> 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
23:37:42 <aliseiphone> *SYSTEMS RUNNING
23:37:46 <olsner> AnMaster: that's what I meant with poll though
23:37:49 <Sgeo_> AnMaster, I.. think that's what I meant
23:38:01 <AnMaster> aliseiphone, true. opera mini is J2ME
23:38:19 <aliseiphone> AnMaster: Opera Mini DOESNT RENDER.
23:38:23 <AnMaster> true
23:38:26 <AnMaster> their servers do it
23:38:29 <aliseiphone> The page is rendered on OPERA SERVERS.
23:38:33 <AnMaster> aliseiphone, I know this
23:38:35 <aliseiphone> *DOESN'T
23:38:35 <olsner> well I was referring to the proper opera, mobile or desktop, or maybe one of the custom versions for devices
23:38:44 <aliseiphone> Your advice is worse than useless.
23:38:46 <AnMaster> why are you shouting about this
23:38:54 <AnMaster> aliseiphone, what is the issue with opera servers rendering it
23:38:55 <cpressey> jaw drops
23:39:00 <Sgeo_> AnMaster, bandwidth?
23:39:05 -!- MigoMipo has quit (Read error: Connection reset by peer).
23:39:14 <aliseiphone> olsner: Opera on a 463 MHz Pentium II Celeron with 64 MiB of RAM?
23:39:15 <AnMaster> Sgeo_, it works fine on EDGE. Even faster on 3G
23:39:27 <ais523> is the DS web browser opera mini or opera mobile?
23:39:30 <aliseiphone> AnMaster: What is WRONG? For a desktop browser?
23:39:46 <AnMaster> aliseiphone, I was just saying it was lightweight
23:39:47 <olsner> ais523: it would be "one of the custom versions"
23:40:00 <ais523> yes, but I mean which codebase is it vaguely based on?
23:40:07 <aliseiphone> Are you fucking retarded? It reformats pages. Compresses images. Won't serve to things that run on things other than mobiles.
23:40:09 <olsner> it's not a mini thing though, it actually renders stuff
23:40:29 <oerjan> <AnMaster> is !haskell ghc or ghci?
23:40:39 <oerjan> AnMaster: both, it tries ghci first
23:40:51 <AnMaster> <ais523> 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
23:40:53 <aliseiphone> My toaster toasts bread with barely any power. Why does your universal constructor take so long to make toasted bread?
23:41:05 <AnMaster> !haskell :type True
23:41:07 <EgoBot> True :: Bool
23:41:09 <AnMaster> indeed!
23:41:18 <ais523> toasters use quite a lot of power...
23:41:18 * Sgeo_ compresses aliseiphone
23:41:23 <oerjan> AnMaster: this has the disadvantage of EgoBot giving _really_ crappy error messages for stuff that you intended to be sent to ghci
23:41:35 <aliseiphone> ais523: not nearly as much as a UC
23:41:47 <aliseiphone> !haskell :t fmap fmap fmap
23:41:48 <EgoBot> fmap fmap fmap :: (Functor ((->) (a -> b)), Functor f1, Functor f) =>
23:41:58 <Sgeo_> wareya, what game?
23:42:02 <aliseiphone> Aww, c'mon.
23:42:10 <oerjan> AnMaster: since it then tries the ghc (well, full module compilation) instead and ends up reporting _that_ completely irrelevent error message
23:42:45 <oerjan> Gregor-P: in fact it would have been nice to have a separate command for _just_ trying with ghci
23:43:05 <aliseiphone> ais523: I wish I had my iPhone set up to function as a modem. Free unlimited Internet!
23:43:16 <aliseiphone> 3G sticks cost so much per GB.
23:43:17 <AnMaster> oerjan, ah right
23:43:21 <ais523> !haskell :t \s.\m.\x.m(s x)
23:43:26 <oerjan> *irrelevant
23:43:29 <ais523> wait, wrong syntax
23:43:35 <ais523> !haskell :t \s m x->m(s x)
23:43:38 <EgoBot> \s m x->m(s x) :: (t -> t1) -> (t1 -> t2) -> t -> t2
23:43:38 <Sgeo_> It does occur to me that having turing-complete input-capable HQ9+ and .. some other languages would pretty much be Ook!ish
23:43:46 <AnMaster> aliseiphone, why can't your iphone do that?
23:43:51 <Gregor-P> oerjan: Meh meh meh your awesome bots are never awesome enough bleh bleh bleh I want more features blar
23:43:59 <AnMaster> aliseiphone, can't you do that easily on jailbroken ones anyway?
23:44:13 <ais523> it violates the phone contract IIRC
23:44:23 <Gregor-P> My Android can do that :P
23:44:25 <ais523> as in, not Apple's contract, but AT&T's or O2's
23:44:25 <aliseiphone> AnMaster: Because the networks don't allow it. My phone is not jailbroken at
23:44:31 <aliseiphone> *atm.
23:44:57 <Gregor-P> Hell, the new EVO does that out of the box.
23:44:58 <aliseiphone> ais523: Hell, I don't care. Certainly not Apple's fault though.
23:45:14 <ais523> if they find out, you might lose your mobile access
23:45:24 <aliseiphone> Gregor-P: Hell, the iPhone PREDATED ALL THOSE.
23:45:35 <AnMaster> aliseiphone, I checked several networks in Sweden. All allow tethering without extra cost but warns it won't work with iphone.
23:45:40 <AnMaster> XD
23:45:41 <oerjan> Gregor-P: PRECISELY
23:45:42 <aliseiphone> ais523: It'll look just like my usual traffic...
23:45:49 <ais523> I suppose so
23:45:50 <Sgeo_> PESOIX predated PSOX
23:45:53 <wareya> 18:41 < Sgeo_> wareya, what game?
23:45:55 <wareya> minecraft
23:46:00 <ais523> if you start accessing repositories over it, though, they might get suspicious
23:46:01 <Gregor-P> oerjan: So long as we're on the same page.
23:46:13 <ais523> that would look out-of-place, who accesses linux repos on an iPhone?
23:46:14 <AnMaster> Gregor-P, EVO?
23:46:20 <aliseiphone> ais523: Yeah. They have gnomes.
23:46:24 <aliseiphone> To SEARCH.
23:46:27 <Sgeo_> ais523, I tried to access an SVN repo on my N1
23:46:28 <AnMaster> oh and I tethered today using my old nokia
23:46:29 <Sgeo_> Didn't go so well
23:46:31 <AnMaster> over bluetooth
23:46:33 <AnMaster> no issues there
23:46:36 <aliseiphone> ais523: Its just http.
23:46:44 <AnMaster> works fine in ubuntu if you install blueman
23:46:46 <aliseiphone> I look at code often on this.
23:46:48 <ais523> aliseiphone: I know, it's the destination that's suspicious
23:47:11 <ais523> if I was asked to try to figure out which phones were being used illegally for tethering
23:47:13 <aliseiphone> ais523: Dude, deep packet inspection isn't even that clever.
23:47:17 <ais523> I'd check to see if they were accessing Windows Update
23:47:32 <ais523> which would be a big giveaway
23:47:32 <aliseiphone> Do you realise how many iPhone users there are?
23:47:39 <AnMaster> ais523, fun
23:47:45 <AnMaster> ais523, what about windows mobile?
23:47:49 <ais523> aliseiphone: I'm not sure how that's relevant
23:48:00 <ais523> AnMaster: presumably the update URL is at least slightly different
23:48:04 <AnMaster> hm
23:48:11 <aliseiphone> ais523: monitoring arbitrary deluged of packets is very hard
23:48:16 <Gregor-P> lawl @ Windows Mobile
23:48:21 <aliseiphone> *deluged
23:48:31 <aliseiphone> *deluges
23:48:47 <ais523> hmm, I wonder to what extent mobile internet uses http?
23:48:56 <aliseiphone> U
23:48:57 <ais523> is it just straight uninterpreted tcp packets that contain the http
23:49:02 <aliseiphone> *Um.
23:49:06 <aliseiphone> ais523: Yes.
23:49:11 <ais523> or is there some sort of mobile internet protocol used between the phone and the control towers?
23:49:14 <aliseiphone> I'm using a native IRC client.
23:49:33 <aliseiphone> This shit is just TCP over IP over wave.
23:49:33 <Sgeo_> aliseiphone, and nothing else =P
23:50:26 <aliseiphone> Sgeo_: I'm wearing a top hat and? (This is Jeopardy!, right?£
23:50:33 <aliseiphone> *right?)
23:50:47 <Sgeo_> I was referring to lack of multitasking on pre-iOS4
23:51:14 <aliseiphone> Hey, soothes the ADHD. Can't knock it.
23:51:45 <ais523> hmm, are there any sensible multitasking algos other than cooperative and competitive?
23:52:03 <aliseiphone> ais523: Capitalist!
23:52:16 <ais523> programs pay for timeslices?
23:52:27 <ais523> *cooperative and preemptive
23:52:29 <aliseiphone> Processes buy up bits of system time with credits they get by... Doing work for the system?
23:52:33 <ais523> you can tell I've been up for around 30 hours
23:52:47 <aliseiphone> Letting other processes run?
23:53:05 <AnMaster> ais523, competative?
23:53:16 <AnMaster> % spelling
23:53:21 <aliseiphone> ais523: Postemptive, of course.
23:53:22 <Sgeo_> AnMaster, see ais523's correctio.. oh
23:53:26 <AnMaster> oh right
23:53:37 <Sgeo_> Oh, n/m the oh
23:53:48 <ais523> come to think of it, wouldn't "modulo spelling" remove all the spelling from the word, leaving only the mistakes?
23:53:55 <Sgeo_> I thought you were commenting on ais523's spelling, until I saw what you wrote
23:53:58 <AnMaster> ais523, I would totally love competitive multitasking
23:54:05 <Sgeo_> erm, what ais523 wrote
23:54:12 <aliseiphone> It's called preemptive.
23:54:27 <aliseiphone> ais523: Argumentative multitasking.
23:54:30 <AnMaster> ais523, okay modulo mistakes then
23:54:44 <ais523> nah, preëmptive has an OS doing the preëmpting
23:54:55 <aliseiphone> ais523: Processes debate who deserves to run for a timeslice. The winner gets it.
23:54:57 <ais523> competitive multitasking would be along the lines of CoreWars
23:55:00 <oerjan> <AnMaster> cpressey, that it is a special form, well or syntax. Is "let" a special form in haskell? I guess it is.
23:55:07 <AnMaster> aliseiphone, that would take several timeslices!
23:55:09 -!- Mathnerd314 has quit (Ping timeout: 240 seconds).
23:55:14 <AnMaster> just debating
23:55:33 <oerjan> AnMaster: very special actually, it's one of the four haskell 98 keywords that introduce indentation blocks (let, do, where, of)
23:55:45 <AnMaster> oerjan, hm
23:55:50 <oerjan> there are a few more in extensions (mdo comes to mind)
23:55:55 <aliseiphone> Special Needs multitasking: processes that do their work slowly get extra time.
23:55:55 <ais523> oerjan: haskell 2010 too
23:56:02 <ais523> I was reading the spec of that pretty recently
23:56:11 * oerjan hasn't read it yet
23:56:19 * ais523 hasn't finished it yet
23:56:31 <ais523> OTOH, I don't know haskell 98 well enough to spot any differences
23:57:06 <aliseiphone> ais523: oh dear, I just realised that aliseOS is very like Feather
23:57:16 <ais523> aliseiphone: almost all good ideas are very like Feather
23:57:51 <cpressey> In fact, the only good idea which is not very like Feather is one called "Feather"
23:57:58 <aliseiphone> 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.
23:58:22 <aliseiphone> cpressey: no, feather is a bad idea
23:58:44 <ais523> aliseiphone: that's one of the best summaries of Feather I've ever seen
23:59:16 <AnMaster> ais523, please please put up everything about it on a wiki page if you decide to never implement it
23:59:21 <aliseiphone> ais523: And it doesn't even mention a single language feature!
23:59:21 <AnMaster> that way someone else could give it a go
23:59:38 <aliseiphone> AnMaster: ais523 would never do yhat to innocent minds
23:59:41 <aliseiphone> *that
23:59:42 <ais523> AnMaster: deliberately driving people insane is illegal in the uK
23:59:44 <ais523> *UK
23:59:52 <AnMaster> ais523, put a warning at the top then?
23:59:55 <ais523> perhaps
←2010-07-11 2010-07-12 2010-07-13→ ↑2010 ↑all