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:31 <oerjan> !haskell main = loop 1; loop n = do putStr (' ':show n); hFlush stdout;
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:02:04 <zzo38> Do you like GNU long options? Or not
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:37 <lucidalise> sounds like a very un-pipey pipe dream.
00:05:43 <calamari> the ever vaporware esoteric os
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: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: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: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: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:18 <lucidalise> {} is usually pointless in C as opposed to ;.
00:09:35 <lucidalise> Maybe set a control structure followed by ; differently.
00:09:40 <lucidalise> Bold the ; and adjust the spacing, say.
00:10:04 <CakeProphet> I don't know what the problem at hand is. So I have nothing else to comment. :)
00:10:40 <lucidalise> But now it is C, and Knuth uses CWEB, which iirc he co-authored.
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:20 <lucidalise> CakeProphet: Mocking Knuth, then ignorance of one of his projects -- unforgivable!
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: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:46 <CakeProphet> if the assembler can be written in any language. I'd love to write it in Haskell using the Parsec library.
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: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: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: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: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:20:11 <CakeProphet> I suppose the assembly language will take a simple command format right? like most assembler.
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: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: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:49 <calamari> CakeProphet: there are no types to worry about
00:26:58 <CakeProphet> surely a port is different from a register.
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: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: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: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: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: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: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: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: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:38 <CakeProphet> at least for the VM. maybe not for the hardware code.
00:41:14 <CakeProphet> memory mapping is new to me as well, actually.
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:14 <lucidalise> gets its requests for writes and reads sent to some hardware
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:24 <CakeProphet> lucidalise: sounds like implementing hardware support in brainfuck. :)
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: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: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:39 <lucidalise> calamari: It's going to be Plan 9 turned up to 11: which is one of my more conservative designs.
00:49:59 <lucidalise> aliseOS, of course, has basically infinite uniqueness and practicality: but it will, at least, be undeniably perfect.
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: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: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 <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:24 <calamari> CakeProphet: would certainly make the implementation easy :)
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: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: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: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: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: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?
01:01:00 * pikhq cannot find a listed cost
01:02:30 <pikhq> For in-EU, £3,290.
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: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 -!- Gregor has joined.
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: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: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: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:43 <lucidalise> Based in, fucked if I know, Helsinki or Ontario or somewhere.
01:13:00 <pikhq> Making the damned loans into a way for the government to bleed money at universities.
01:13:34 <pikhq> Sorry, for the *students* to bleed money at universities.
01:14:06 <lucidalise> Gregor: Esoni for short, perhaps. (Esoteric-uni)
01:14:21 <lucidalise> Motto: Someone translate "[evil cackle]" into Latin.
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: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:08 * pikhq gives everyone a Ph.D. in Doctorism.
01:18:22 <lucidalise> pikhq: Alas I even know someone intelligent who goes there /sigh
01:18:28 <lucidalise> Well, not know, but nomic-know. Agora-know.
01:18:35 <pikhq> lucidalise: Accredited by whom?
01:18:55 <lucidalise> Consciousness-based education? Accredit'd
01:18:56 <pikhq> Several such entities.
01:19:09 <pikhq> We love our capitalism.
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:50 <lucidalise> Oh, and the Beatles spent time with the leader at some point.
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: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: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: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:26 <lucidalise> So maybe I Internet-stalked the guy's relation to the uni after the initial shock! So what >_>
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:39:04 -!- lucidalise has quit (Quit: Page closed).
01:39:38 <Gregor> So yeah ... EIHL ... maybe not :P
01:40:23 <fungot> CakeProphet: cruise mode holds it no one is my favorite. :d haha. if it is
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: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: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: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: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: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:45 <coppro> yeah, relative jumps are awesome
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: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: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: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: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: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: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: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: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: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:50:23 <CakeProphet> so to write output code you do addOutput "string"
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: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:18 <Gregor> "Is that thorium in your pocket, or are you just happy to see me"
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: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: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: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: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: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:53 <Sgeo> Better yet, a series of tests
03:07:01 <Sgeo> calamari, #esoteric
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: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: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: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: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:23:03 <oerjan> CakeProphet: i cannot get to the logs so i don't know what i missed
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:50 <oerjan> my trouble here is remembering the actual Parsec functions :D
03:23:56 <Sgeo> You missed a ha
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: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: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: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:42 <pikhq> x = 1 : x -- Glee!
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: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:31 <oerjan> the pRes should be a Right if the parsing succeeds
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: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: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:39:47 <cheater99> oerjan: i wanted to say something to you but forgot what.
03:40:01 <cheater99> you mentioned something to me then disappeared for a week. damn you.
03:40:23 <oerjan> i've been here about every day :D
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: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: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:11 <oerjan> CakeProphet: no, the match is lazy and is only evaluated if l1 is
03:43:02 <oerjan> like is generally the case for where and let
03:43:32 -!- augur has quit (Remote host closed the connection).
03:44:26 <cheater99> you are manipulating the facts, oerjan!
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:26 <cheater99> but you weren't here when i needed u
03:46:14 <oerjan> so did it have anything to do with math?
03:47:01 <cheater99> i think maybe computability or something.
03:47:20 <oerjan> complexity, turing machines, P=NP?
03:47:44 * oerjan has started slowly going through rjlipton's blog archive
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: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:59 <oerjan> ah but every infinite computation (which python must have) is essentially a break of normalization
03:51:25 <oerjan> because normalization in LC at least is the same as saying every evaluation strategy must 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:41 <ais523> interpreters are an exception
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: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:56:32 <CakeProphet> it's almost like programming in imperitive langs.
03:57:09 <CakeProphet> I wonder how much memory this parser will end up consuming
03:57:20 <oerjan> CakeProphet: you are essentially getting two passes automatically just from the dataflow
03:57:25 <Quadrescence> How is using a state monad to do imperative work bett---okay
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:39 <CakeProphet> that is the only downside of using State so far.
03:59:50 <ais523> the only ML I know is OCaml
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: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:02:05 <oerjan> because that would give you get, put and modify. although that's essentially the same as those anyhow
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: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: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: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: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:31:56 <CakeProphet> oerjan: I could use this same strategy for macros yes?
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:55 <CakeProphet> I don't actually know if we're going to implement a preprocessor
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:29 <pikhq> ... That was a non sequitur that made sense when I typed it somehow.
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: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: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: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: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:58 <coppro> Parsec's a tad more confusing
06:01:06 -!- MizardX has quit (Ping timeout: 260 seconds).
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: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: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: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:51 <pikhq> StateT, wasn't it? That's the strict state one.
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: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: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:14:09 <CakeProphet> so I still say the distinction makes no difference. :P
06:14:48 <CakeProphet> I have been defending my design choices for the past hour
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: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: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:28 <pikhq> Fairly close to how it actually is implemented.
06:19:30 <CakeProphet> every program should model execution as salmon swimming upstream
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: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:40 <oerjan> well i'm _still_ not getting it
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: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: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: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: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: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: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: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:57:09 <Gregor> Androids from Andromeda!
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: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: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:06:24 <Ilari> Necressiting hacks like exporting pointers to static functions...
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: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: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:15 <CakeProphet> I can't imagine what kind of reprecussions non-safe method pointers would have.
11:14:40 <CakeProphet> actually I can: unexpected runtime errors.
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: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:23:24 <CakeProphet> so Action and Func kind of serve as "anonymous delegates"
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:27:11 <Deewiant> Do they know anything other than Erlang? :-P
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: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: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: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: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: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: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:42:54 <Sgeo_> ez.somefunc 1 "hello"2
12:43:05 -!- hiato_ has joined.
12:43:26 -!- hiato_ has quit (Client Quit).
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: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:25 <Sgeo_> Numbers are terminated by space, strings by "
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: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: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: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: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:42 <Sgeo_> Well, I could be false and V could be true
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: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: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:13 <AnMaster> wait, aren't there three between X and M?
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: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: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: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: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?
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: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: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: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:14 <Sgeo_> AnMaster, impossible.
13:13:38 <AnMaster> Sgeo_, you could have a separate definition file containing the required stuff
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: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 -!- 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: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:28:30 <AnMaster> Deewiant, even even could be good to disambig in some situations
13:28:30 -!- MizardX has joined.
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:38 <Sgeo_> AnMaster, tried to increment, but this is Haskell
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:31:05 <AnMaster> Deewiant, oh btw, I guess from now on, not breaking even should be called spanning odd
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: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: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: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:26 <AnMaster> that is PCRE without cheating by escaping to "native" code
13:46:56 <AnMaster> Sgeo_, just take a list of arguments instead
13:47:04 <AnMaster> Sgeo_, like io:format/2 in erlang
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: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
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 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: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:23 <ais523> AnMaster: there's a search engine for that sort of thing on haskell.org
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: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: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: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: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:57:04 <AnMaster> Deewiant, yes it can, but does ghc/ghci do that?
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
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: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: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: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: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:11 <Deewiant> f :: Either [Int] [Char] -> ...
15:11:17 <AnMaster> Sgeo_, well, somewhat bulky but could work
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:25 <Deewiant> data Either a b = Left a | Right b
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:56 <AnMaster> Deewiant, that looks like it is abusing internal stuff
15:16:01 <AnMaster> Deewiant, that looks like a tuple
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: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: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: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: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: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: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: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: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: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:19 <CakeProphet> this question is probably better answered by some of the pricks on #haskell. :)
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:13 <Sgeo_> AnMaster, say the program is in HQ9+
15:48:35 <Sgeo_> And some function, maybe parser related, wants to know "Ok, how do you specify XYZ"
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:50:24 <AnMaster> Sgeo_, and output is roman numerals only
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:51:11 <Sgeo_> I currently don't know what the input options will look like
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:57:52 * Sgeo_ wonders how safe it would be to use q
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: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: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:25:16 -!- sebbu has quit (Ping timeout: 260 seconds).
16:32:39 -!- relet has joined.
16:36:10 -!- sebbu has joined.
16:50:02 <AnMaster> when was windows 2000 released? IIRC the support for it finally ends tomorrow
16:50:34 <AnMaster> right, you can never know with microsoft
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:10 <pikhq> Some of the OSRs were in 96.
16:51:39 <pikhq> Don't recall the expansion, but these were versions of 95 with added features for OEM usage.
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:57 <pikhq> They're analogous, but 98 SE was actually sold to the general market.
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:50 <pikhq> Mmm, okay, we can count the service packs.
16:56:02 <pikhq> 64-bit skipped a service pack.
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:35 <pikhq> XP 64-bit was actually a marketed-as-XP version of Server 2003.
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: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: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: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:53 <AnMaster> hm does haskell have any printf equiv?
17:40:27 <Sgeo_> It's some type that does weird things, I think
17:40:36 <Deewiant> forall r. (PrintfType r) => String -> r
17:40:54 <oerjan> !haskell Text.Printf.printf "%s: %d" "Like this" (42::Int)
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:40 <AnMaster> oerjan, does it validate the format string at compile time?
17:42:47 <oerjan> AnMaster: it's a very clever type hack with type classes
17:43:03 <AnMaster> would be cool if the type depended on the format string somehow
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 <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: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: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:56 <Sgeo_> Wouldn't that be a function?
17:45:57 <oerjan> Sgeo_: indeed, but it's memory safe
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:47:01 <AnMaster> !haskell Text.printf.printf "%s %s" "one"
17:47:08 <Deewiant> !haskell Text.printf.printf "%s %s" "one" :: String
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: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:02 <fizzie> (Also I have no idea whether it's case-sensitive or not.)
17:48:22 <Sgeo_> Anways, back to Futurama for me!
17:48:48 <cpressey> !haskell Text.Printf.printf "%s %s" "one" "two"
17:49:08 <cpressey> (Sorry, I just needed closure on that.)
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:52:23 <AnMaster> cpressey, yes it does have impressively large errors
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: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: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:42 <oerjan> class MyF a where { f :: [a] -> ... }; instance MyF Int where ...; instance MyF Char where ...
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:45 <AnMaster> I haven't got to typeclasses yet in this book. I think it is next chapter
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: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: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: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: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: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: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:23 <Deewiant> fromIntegral = fromInteger . toInteger
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: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:44:33 <AnMaster> what about ord then (Data.Char)
18:45:36 <AnMaster> it isn't a Num or Integral according to :info
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:39 <Deewiant> It doesn't have to be black magic
18:46:44 <Deewiant> It's just more performant that way
18:46:58 <Deewiant> E.g. your lookup table would work fine
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:53 <AnMaster> fromEnum :: (Enum a) => a -> Int
18:47:55 <Deewiant> !haskell (minBound,maxBound) :: (Char,Char)
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:32 <Deewiant> !haskell Control.Monad.join (Control.Arrow.***) fromEnum ((minBound,maxBound) :: (Char,Char))
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: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:51:45 <Deewiant> !haskell "foo" `Data.List.isSuffixOf` "anyfoo"
18:52:12 <Deewiant> !haskell "foo" `List.isSuffixOf` "anyfoo"
18:54:55 <cpressey> !haskell List.IsSuffixOf "foo" "anyfoo"
18:55:14 <cpressey> !haskell List.isSuffixOf "foo" "anyfoo"
18:55:30 <cpressey> EgoBot's error messaging leaves a lot to be desired.
18:57:10 <AnMaster> huh, why can't lambdas have multiple "entry points" like normal functions
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: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: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:44 <Deewiant> It says that () isn't really a tuple.
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: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: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:16:15 <CakeProphet> AnMaster: a kind has to do with type parameters
19:17:21 <CakeProphet> I thought he was learning Haskell not math. :P
19:17:44 <Deewiant> In Haskell, [a] has kind * and [] has kind * -> *.
19:18:01 <AnMaster> <Deewiant> [] has kind * -> *. <-- why is that then?
19:21:16 <AnMaster> wait, does the lambdas to foldl and foldr have the acc/value parameters in different orders?
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: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: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: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: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: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:31:30 <AnMaster> Deewiant, it reported the error on the wrong line
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: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: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:46 <Deewiant> Even if the data is strict in its parameter, _|_ and Data _|_ are distinct, but _|_ and NewType _|_ are identical.
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: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:46:37 <AnMaster> the partially applied function thing seems fairly limited in that it is restricted to argument order
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: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:47 <Deewiant> !haskell (`List.isSuffixOf` "foobar") "bar"
19:52:29 <AnMaster> Deewiant, well, more than two parameters might be more of an issue :P
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: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: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: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: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: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:33:26 <AnMaster> foldl . head :: [a -> b -> a] -> a -> [b] -> a
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: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:27 <AnMaster> Deewiant, primitive meaning something implemented in the compiler itself?
20:52:48 <Deewiant> Meaning not definable in Haskell
20:53:28 <AnMaster> Deewiant, like a special form in lisp?
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:37 <AnMaster> though actually I seem to remember a pure C implementation of that. What a mess
21:44:10 <AnMaster> cpressey, + can be implemented as a increment for finite types
21:44:36 <AnMaster> % could be implemented without that too. Just very inefficient
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: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: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: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: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: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: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: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: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:49 <fizzie> abort() on a hosted (non-freestanding) C system -- well, C99 anyway -- is defined in terms of raise(SIGABRT), though.
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: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: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: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: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: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 <fizzie> http://zem.fi/~fis/cont.png
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: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: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:19:35 <AnMaster> Gregor-P, do { break } while(0);
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:20 <AnMaster> now people will be all confused
22:20:41 <AnMaster> Gregor-P, who cares about that
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:58 <Gregor-P> fizzie: You can have your future!
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: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: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: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: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:46:20 <Gregor-P> fizzie: My chars are as big as they come ... and UNsigned.
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:33 -!- aliseiphone has quit (Client Quit).
22:54:27 <oerjan> famous first and last words.
22:54:51 -!- aliseiphone has joined.
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: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:29 <oerjan> aliseiphone: haskell question
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: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:28 <ais523> aliseiphone: I /parted the channel earlier because both AnMaster and Sgeo were asking insane questions at once
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:59 <Sgeo_> aliseiphone, oh, btw, thank you for suggesting Dirk Gently's Holistic Detective Agencyt
23:07:05 <aliseiphone> And AnMaster is a SERIOUS, MANLY ENGINEER with CHEST HAIRS.
23:07:59 <Sgeo_> ...read? Were you thinking I thought you suggested it as a paperweight?
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: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: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: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: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: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: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: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 <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: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:38 <aliseiphone> oerjan: dammit I learned from freaking YAHT and I kept writing shit until it worked. kids these days.
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: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:59 <oerjan> aliseiphone: hey Ook! is interesting. once.
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: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:36 <cpressey> Sgeo_: Yes, exactly, but then you don't really need to define a protocol, do you?
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: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:23:03 <ais523> you may want to hide the 3G stick, though, in case they catch on
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: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: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:42 <oerjan> <AnMaster> wait, does the lambdas to foldl and foldr have the acc/value parameters in different orders?
23:27:52 <cpressey> tput which consists of those commands. End result: Unlambda drawing graphics.
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: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: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:17 <olsner> pretty sure you can do stuff like that in windows too, it's just a lot weirder
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:56 <ais523> I find Windows almost unusuable nowadays just because of how slow it is
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: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: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: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: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: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: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: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:35 <olsner> well I was referring to the proper opera, mobile or desktop, or maybe one of the custom versions for devices
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: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: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:48 <EgoBot> fmap fmap fmap :: (Functor ((->) (a -> b)), Functor f1, Functor f) =>
23:41:58 <Sgeo_> wareya, what game?
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:21 <ais523> !haskell :t \s.\m.\x.m(s x)
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: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: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:42 <aliseiphone> ais523: It'll look just like my usual traffic...
23:45:50 <Sgeo_> PESOIX predated PSOX
23:45:53 <wareya> 18:41 < Sgeo_> wareya, what game?
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: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:44 <AnMaster> works fine in ubuntu if you install blueman
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: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:11 <aliseiphone> ais523: monitoring arbitrary deluged of packets is very hard
23:48:47 <ais523> hmm, I wonder to what extent mobile internet uses http?
23:48:57 <ais523> is it just straight uninterpreted tcp packets that contain the http
23:49:11 <ais523> or is there some sort of mobile internet protocol used between the phone and the control towers?
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:47 <Sgeo_> I was referring to lack of multitasking on pre-iOS4
23:51:45 <ais523> hmm, are there any sensible multitasking algos other than cooperative and competitive?
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:53:22 <Sgeo_> AnMaster, see ais523's correctio.. 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: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: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: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: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: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:42 <ais523> AnMaster: deliberately driving people insane is illegal in the uK
23:59:52 <AnMaster> ais523, put a warning at the top then?