00:00:07 <elliott> Only co-ops can register .coops
00:00:30 <elliott> But seriously, co-operatives aren't nonprofit, so .org doesn't apply, and they're not really anything like a "traditional" business at all, so .com doesn't really apply either
00:00:33 <elliott> .coop seems reasonable to me
00:00:56 <elliott> 23:31:52: <CakeProphet> kallisti.name
00:00:56 <elliott> 23:31:54: <CakeProphet> doesn't have the same ring
00:01:01 <elliott> CakeProphet: Your name is CakeProphet Kallisti?
00:01:06 <elliott> Otherwise no go, you can't register it.
00:01:12 <Gregor> Except that .com, .net and .org mean "entity that thinks .com is a cool TLD", "entity that thinks that .net is a cool TLD" and "entity that thinks that .org is a cool TLD"
00:01:23 <zzo38> OK, that seems a sensible explanation. But maybe better is .msc for "miscellaneous" anything that the other TLD does not apply
00:01:56 <elliott> Gregor: That doesn't make introducing new TLDs with semantic purpose dumb :P
00:02:03 <elliott> Gregor: .org's derestriction is terrible though.
00:02:11 <elliott> I've seen straight-out businesses operating off .org.
00:02:17 <Gregor> elliott: Codu dot ORRRRRRRRG
00:02:42 <elliott> Gregor: You don't profit from codu, so it seems reasonable enough
00:02:50 <elliott> We really need a non-horrible "personal" TLD though
00:02:56 <Gregor> I just happen to be an org of one :P
00:03:00 <elliott> .name is awful, .me is awful
00:03:13 <Gregor> Also, .me is not actually a TLD for individuals, right?
00:03:21 <monqy> info is not suited for personal
00:03:26 <elliott> Gregor: It's been marketed as one since before it came out
00:03:36 <Gregor> elliott: Well of course.
00:03:43 <Gregor> elliott: Just because whatever country .me is isn't stupid :P
00:03:47 <elliott> Gregor: Well, their government is making tons of money off it. :P
00:03:53 <elliott> So it's as officially for people as it can be.
00:04:16 <Gregor> It's amazing that we live in a world where a government can make a ton of money for happening to have a good name :P
00:04:24 -!- copumpkin has quit (Quit: Computer has gone to sleep.).
00:04:35 <elliott> Gregor: I gotta wonder why Tokleau isn't rolling out the casinos and hookers
00:05:00 <elliott> Although I can't imagine .tk makes that much money, seeing as its entire appeal is being free
00:05:11 <Gregor> Also it has no meaning as a word :P
00:05:16 <elliott> A URL shortener that registers a new domain for every URL.
00:05:26 <elliott> Finally an idea so stupid I did not think of it first.
00:05:39 <zzo38> Both the official and unofficial DNS have TLDs according to mode of access; which is an idea I don't like. Mode of access would be the bottom level if anything, not the top level. It could also be by port number. (Some such TLDs are .mobi and .gopher)
00:05:43 <elliott> OK, who wants to set up a bot to shorten URLs with that constantly?
00:05:47 <elliott> We can exhaust the namespace in a few months.
00:06:12 <elliott> Oh wow, they even have an API.
00:06:14 <CakeProphet> elliott: my pretty newish Dell laptop starts to get very very slow once my population hits about 80
00:06:17 <elliott> "We never remove shortened URLs, as long as they are created in accordance with our terms & conditions."
00:06:19 <elliott> Yesssssssssssssssssssssssssssssssss
00:06:28 <elliott> CakeProphet: My pretty newish MacBook Air doesn't
00:07:06 -!- Nisstyre has quit (Ping timeout: 260 seconds).
00:07:18 <monqy> but what are their temrs ans conditieosn
00:07:44 <CakeProphet> elliott: also yeah VPN is probably the way to go. I just like the idea of running my own server, plus I can avoid hosting costs.
00:08:06 <elliott> Also, you "run your own" VPS. You get root.
00:08:17 <elliott> You can irrevocably fuck it up if you want. Nobody else can fix it for you.
00:08:22 <elliott> (Well, you can usually reset the HD.)
00:08:39 <zzo38> Running your own server is always best way you can configure whatever protocols you need and whatever server software you need; even if you use Apache you should need to configure it
00:08:39 <CakeProphet> still I'd be paying for one internet bill instead of an internet bill and a hosting bill.
00:08:40 <elliott> Also, it's like twenty dollars a month, which is way cheaper than a non-laughable connection would be.
00:08:49 <elliott> Add the COST of the computer...
00:08:59 <elliott> A VPN IS SOMETHING ENTIRELY DIFFERENT
00:09:04 <CakeProphet> elliott: I'll be getting a nice Desktop anyways.
00:09:07 -!- ralc has joined.
00:09:14 <itidus20> "Per IP address only 250 addresses maybe shortened per 24 hours. "
00:09:19 <coppro> CakeProphet: make sure you're allowed to run a server on your internet connection
00:09:22 <elliott> CakeProphet: Yes, and unless it's constantly idle it'll make a lousy server.
00:09:26 <coppro> CakeProphet: odds are good you aren't
00:09:34 <elliott> Especially since basically every major ISP tries to block nice ports such as, you know, eighty.
00:09:36 <coppro> check the licensing terms
00:09:42 <elliott> Eighty is also known as "port HTTP".
00:10:26 <zzo38> Not all ISPs block port 80 (or other ports). You can still run HTTP server on nonstandard port, or run different protocol servers too
00:10:43 <CakeProphet> what so I can't play Borderlands and Magicka and Dwarf Fortress on my home web server? :P
00:10:48 <CakeProphet> it's like you're expecting me to get actual traffic.
00:11:02 <elliott> Enjoy hosting everyone's blogs
00:11:06 -!- Nisstyre has joined.
00:11:12 <elliott> Or are you seriously planning to run a server on Windows
00:11:27 <CakeProphet> but it would be worth it to play Magicka I think.
00:11:27 <elliott> So you're planning to have a server that goes out for hours at a time at unpredictable intervals when you play games
00:11:48 <zzo38> My ISP has specifically said it is allowed to run servers on any port.
00:11:50 <CakeProphet> but do servers really "go out" because of that?
00:12:37 <zzo38> I don't know if they have that information public, but they have told me by telephone.
00:13:43 <elliott> The .me registry is operated by doMEn, which won a contract to do so after a bid process conducted by the government of Montenegro.
00:13:50 <elliott> Gregor: So .me is owned by do men.
00:14:03 <CakeProphet> ....I believe that's "do me in", but okay.
00:14:06 <elliott> Oh jesus, I just realised that .me is the successor of .yu X-D
00:14:50 <CakeProphet> "do me in" sounds like a very trustworthy company.
00:15:02 <elliott> Gregor: Don't worry, you can get libc.what after a few revolutions.
00:15:22 <Gregor> elliott: BTW, .tk's "tweak" service has an API.
00:15:26 <zzo38> And in fact I have servers on three ports. Later I might even add more.
00:16:18 <elliott> Man, web.archive.org is really bad at archiving.
00:16:49 <zzo38> I don't plan to change any, because of links coming in externally, I want to ensure the URLs remain valid.
00:17:01 -!- hagb4rd has quit (Ping timeout: 260 seconds).
00:17:37 <CakeProphet> elliott: by the way Magicka is an excellent game if you have a graphics card you should buy it
00:18:01 <Gregor> "if you have a graphics card"
00:18:17 <Gregor> I'll just dig out my old Hercules card, I think I've got an ISA slot spare.
00:18:18 <elliott> Unfortunately I use my MacBook Air via serial port.
00:18:49 <Gregor> OK, fine, so I'll dig out my first-generation VGA card.
00:18:54 <elliott> No. OS X has excellent support for serial ports.
00:19:03 <zzo38> Gregor: To play CGA collection games you need CGA card; Hercules won't work. You also need PC speaker.
00:19:13 <elliott> To get around the fact that my MacBook Air has no serial port, I just punched an appropriately-sized hole in the side.
00:19:34 <elliott> Then I realised that it was thinner than a serial port. So I pulled it open.
00:19:48 <elliott> CakeProphet: Everything I am saying is completely true.
00:20:09 <Gregor> It is SO TRUE that you can't even handle it.
00:20:20 <zzo38> Does the motherboard support serial ports even though there is none? If it isn't, I wouldn't expect that to work.
00:20:43 <elliott> zzo38: Yes. Apple may have welded the SSD directly to the motherboard.
00:20:47 <elliott> But they know that you don't fuck with serial ports.
00:20:58 <zzo38> In fact I am sure simply punching a hole in it won't work if the motherboard doesn't already support serial port.
00:21:32 <elliott> They just couldn't fit the actual hole.
00:23:51 <monqy> i'm two minutes too late because of log reading
00:24:05 <itidus20> crazy bastards just run something like dosbox
00:24:21 <monqy> responding snappily
00:24:23 <itidus20> and come to terms with the facts noone ever made cga games for linux
00:25:01 <monqy> not being able to fit in the hole for their port
00:25:06 -!- CakeProphet has quit (Ping timeout: 260 seconds).
00:25:18 <itidus20> or do a dos partition? i dunno
00:25:33 <itidus20> but installing an actual retro video card is not the answer i think
00:25:53 <elliott> monqy: Everything I am saying is completely true.
00:25:53 <monqy> sage advice as always
00:25:54 <zzo38> itidus20: Well, yes, you do not need an actual CGA card if you have a compatible card or an emulator.
00:26:00 <elliott> Gregor: itidus20 says you shouldn't install a CGA card.
00:26:10 <elliott> This is despite the fact that Hercules was a separate thing to CGA.
00:26:33 <zzo38> Hercules was pretty good monochrome card.
00:26:50 <monqy> elliott: "wow what" doesn't necessarily mean i believe it's true, just that it's ridiculous
00:26:54 <elliott> But what about the Hercules InColor Card??????????????????????
00:27:07 <itidus20> whatever.. i secretly want him to do it
00:27:15 <zzo38> There is color Hercules card? I don't know about that.
00:28:15 <zzo38> CGA Collection is also fully source codes available, so with a few modifications you might get it to compile on other computers too
00:28:44 -!- Tjr has left.
00:28:52 <zzo38> And it is public domain, so it is definitely allowed to do so.
00:28:53 <elliott> Wait, isn't Tjr that nethack guy?
00:29:31 <itidus20> elliott: I percieve two me's. The me of the past who did interesting things but not very well. And the me of the present who does nothing and who thinks the old me was better and also realizes the old me was a failure.
00:29:42 <zzo38> Actually, one of them is STARWARS is probably trademark infringement, but the copyright for the program is still public domain.
00:30:39 <itidus20> some people use confusing language to confuse. i use it to make complicated statements
00:31:35 <zzo38> CGA works in low-resolution mode (40x25 text or 320x200 graphics) and high-resolution mode (double the horizontal). CGA Collection games all use low-resolution (although some are text mode and some are graphics mode).
00:32:05 <zzo38> A collection of public domain games for DOS computers.
00:32:07 <itidus20> i bet it includes bill williams's alley cats
00:32:29 <zzo38> No it doesn't include that game. It only includes games in the public domain and with source-codes available.
00:33:05 <zzo38> I made the collection myself, but if you have any games meeting the requirement I could add that one too.
00:33:28 <zzo38> Such as, make up your own game!
00:34:08 <zzo38> You can download some of the games: http://zzo38computer.cjb.net/GAMES/cgacoll1.zip
00:34:16 <itidus20> in the past before i got the world wide web, creating things on my pc was more entertaining
00:34:24 <itidus20> the web is like the spoiling parents
00:34:47 <zzo38> Tell me if you like this game.
00:34:53 <zzo38> Or, other opinion, please.
00:35:34 <zzo38> If you make up levels for any of the games already in CGA Collection, I will add that too.
00:36:08 <elliott> oerjan: STILL NEEDS SOME RENAMIN'
00:36:15 -!- KingOfKarlsruhe has quit (Quit: ChatZilla 0.9.87 [Firefox 6.0.2/20110902133214]).
00:36:49 <itidus20> Virus scanner says: This game cgacoll1 is free of viruses however my heuristics indicate it is probably bollocks.
00:37:08 <itidus20> (i didnt really virus scan it)
00:38:16 <zzo38> It includes a lot of games although the linked URL is a ZIP file of only five of them. I will post more later. And possibly, update those that are already there, too.
00:38:58 <itidus20> i wish i had my old games from my 8086/80286 days
00:39:18 <itidus20> my games were nothing fancy at all.. just experiments of someone learning qbasic1.0
00:39:37 <zzo38> If you read the documentation file and have questions about any of the other games described there, you can ask me. I might be able to post them immediately or it might take a while
00:39:49 <itidus20> 10 crappy versions of pong. fixed at 45degree angle increments
00:40:04 <zzo38> itidus20: I made only one.
00:40:35 <zzo38> But I don't include those thing in CGA Collection.
00:40:35 <itidus20> i think i just renamed each improvement like pong1, pong2, pong3
00:40:58 <elliott> Jafet: I like the part where they're selling a game that came out this year
00:41:21 <elliott> Good Old Games without the old part... so Good Games... now we just need to find a bad game they're selling and it'll be Games
00:42:04 -!- Vorpal has quit (Ping timeout: 260 seconds).
00:42:19 <monqy> it'll be an old game eventually
00:42:23 <monqy> they're future-ready
00:42:55 <zzo38> All games in CGA Collection so far are games I programmed myself, although if anyone make up other games too, meeting the requirements, please tell me I might add it there too
00:43:01 <itidus20> i did vector graphics in turbo pascal 6 simply because my way of doing putpixel for every pixel was way too slow
00:43:41 -!- oerjan has quit (Quit: Good night).
00:44:10 <itidus20> like line(0,0,5,0) or whatever the syntax was.. ran faster than putpixel(0,0); putpixel(1,0); putpixel(2,0); putpixel(3,0); putpixel(4,0); putpixel(5,0);
00:46:02 <Jafet> elliott: perhaps the game was already old!
00:46:12 <zzo38> Try the five games I posted: BIGMAZE, PUZZLEX, STARSTAK, WUMPUS9, and ZNAK.
00:46:13 <itidus20> ok enough rambling.. i started bigmaze
00:46:14 <elliott> itidus20: What, you didn't try poking the byte before line?
00:46:16 <Jafet> Oh, it wasn't DNF.
00:46:23 <zzo38> itidus20: Did you read the documentation first?
00:46:31 <elliott> Jafet: Well, DNF would certainly remove the "Good" part.
00:46:49 <itidus20> i don't like over-reading documentations
00:47:27 <zzo38> OK, but at least be aware the controls are the arrow keys (or h,j,k,l if you prefer) and the space-bar to use dig.
00:47:43 <itidus20> big maze is reminiscent of minecraft innit
00:48:28 <itidus20> it "anticipates" minecraft, to use art-critic speak
00:49:00 <zzo38> OK, but I don't know. Write your own reviews though, if you like to do so.
00:49:19 <zzo38> I don't know art-critic speak either.
00:50:29 <itidus20> well anticipates means, it basically does something before something else does it in a more popular way
00:51:09 -!- ive has quit (Read error: Operation timed out).
00:51:36 <itidus20> hmm.. i like the ascii-maze style
00:52:13 <itidus20> also what seems to be hiding bits of the maze that are too far out of the way
00:53:51 -!- hagb4rd has joined.
00:55:23 <zzo38> Yes, the cross is a window.
00:56:07 <itidus20> zzo38: basically i try to add extra spice to some gaming experiences by intentionally not reading all of documentation
00:57:05 <zzo38> Well, it is not required to read the documentation. And then, you try to figure out.
00:58:09 <itidus20> there is a difficulty of if you give too many instructions the player will feel they are following instructions
00:58:47 <itidus20> im not saying bigmaze documentation does that.
01:00:03 <zzo38> Yes; I try to avoid discussing strategy in the documentation, and I also intentionally do not include everything, as much as possible.
01:00:44 <zzo38> I list the controls, command-line parameters, goals, and possibly a few other things. But not everything.
01:01:21 <itidus20> but still, i am spoiled by the worldwide web
01:01:31 <itidus20> entertainment coming from so many sources
01:03:23 <elliott> Sigh, when did oerjan escape
01:03:32 <elliott> Hey Deewiant, the burden falls onto you to rename Vector again
01:03:57 <zzo38> itidus20: Did you win? Did you lose?
01:04:05 -!- sebbu2 has joined.
01:04:05 -!- sebbu2 has quit (Changing host).
01:04:05 -!- sebbu2 has joined.
01:04:21 <itidus20> it was late on that i noticed the arrow
01:04:43 <itidus20> also.. i think i got confused about what digging actually caused..
01:04:57 <itidus20> since so much of the screen can change when digging
01:05:17 <zzo38> It digs around your location. However, some things are undiggable.
01:07:17 <zzo38> The WUNPUS9 game is much more difficult than the old "Wumpus" game. The goals are also different (in this game, simply to have a high score; you are guaranteed to die in this game)
01:08:18 <elliott> zzo38: can you relink again
01:08:21 -!- sebbu has quit (Ping timeout: 260 seconds).
01:08:30 <zzo38> http://zzo38computer.cjb.net/GAMES/cgacoll1.zip
01:11:00 <zzo38> elliott: It is not always the same amount.
01:11:34 <elliott> How many lines can I expect to wait for, since it's pretty slow :P
01:12:53 <elliott> It must be a very big maze
01:13:23 <elliott> zzo38: It's meant to look kinda squashed, right
01:13:39 <elliott> (Also, where's the documentation itidus20 mentioned?)
01:14:01 <zzo38> elliott: No it isn't; it is meant for 40x25 text screen
01:14:06 <zzo38> The documentation is CGACOLL.DOC
01:14:13 <itidus20> microsoft proprietry format .doc
01:14:18 <elliott> Hmm; here the face is squashed so it's much wider than high
01:14:22 <zzo38> It is a plain ASCII text file with printable line endings 75 columns
01:14:40 <zzo38> itidus20: It is not a Microsoft format; it is a plain ASCII format. It just has the .DOC extension.
01:14:42 <itidus20> sorry zzo for then for that accusation
01:16:20 <zzo38> No; just plain ASCII text.
01:17:57 <Gregor> What is that imaginary joke machine people mention when you start stepping on undefined behavior in C? And what is its best implementation? :P
01:17:58 <zzo38> Most of the files are missing; sorry. I will post whatever I can when I can. Possibly in a few days.
01:19:25 <elliott> Gregor: ...DS9K, and Deewiant has just started implementing one today... that we then talked about... for hours...
01:19:28 <elliott> Are you _trying_ to be synchronicious?
01:20:45 <Gregor> elliott: Um ... no? :P
01:20:53 <Gregor> elliott: I was trying to remember it for my C lab today.
01:20:56 <elliott> Gregor: Well you're succeeding.
01:21:14 <elliott> Gregor: I don't know of any implementations of C's abstract machine that deliberately try to trip code up; that's why we've discussed one a lot in here :P
01:21:54 <Gregor> Right, yeah, it's been talked a lot about in here, which is why I asked in here :P
01:21:57 <zzo38> I have old versions of some of the files but I don't want to post those. I believe I have the newest version of KNAR, though. (These files are on other computer and I need floppy disk to transfer them; that is why I don't have all files)
01:21:59 <Gregor> But you'd think SOMEBODY would have implemented it.
01:22:17 <elliott> Gregor: Maybe someone has, but it was probably bad
01:22:34 <elliott> Gregor: The problem is that almost every program relies on tons of UB.
01:22:53 <elliott> Gregor: You can either be an almost useless tool, or make UB /work/ but in a way that you can detect and log.
01:23:27 <Gregor> I think more precisely you'd want a sort of "undefinedness verbosity level"
01:23:48 <elliott> It's not that simple; either you let UB happen undetected, or you define things in a way that when UB happens, you know about it, and that makes it almost impossible to recover from
01:24:11 <elliott> Casting an int to a pointer is UB, right?
01:24:12 <Gregor> Well, but there are many undefined behaviors.
01:24:34 <Gregor> In principle, you could switch off in each of those cases and either do the expected thing or nonsense based on flags.
01:24:44 <elliott> You want your int-representations of pointers to be absolutely ridiculous to trip out things that expect them to be used normally; but if someone casts a pointer to an int, you log it as UB, but then you have to /have a useful result/.
01:24:58 <elliott> And if you have a useful result, then pointer -> integer -> pointer doesn't work, and that'll break every program that expects it to.
01:25:05 <elliott> i.e. most programs that cast integers to pointers.
01:25:34 <elliott> Gregor: Personally I think it should just be hardline about it because good programs should make you feel bad about yourself
01:25:52 <elliott> No harm in offering a resume feature when it can be done, but pointless to try and design around it
01:25:54 <Gregor> But wait ... OK, maybe I'm not following.
01:26:19 <Gregor> Let's say for simplicity that "undefined behavior" is always "program terminates with exit code 42", since it's easy to check for.
01:26:23 <elliott> Gregor: Your false assumption is probably that you can detect UB without changing the semantics of the implementation.
01:26:42 <elliott> You must use completely pathological representations to trip programs up.
01:26:50 <elliott> e.g. pointers cannot be integers, internally, you want something completely different.
01:26:56 <elliott> You want to keep track of the type in pointers.
01:27:12 <elliott> But hang on, you can convert anything in C to a bunch of bytes.
01:27:12 <Gregor> But the thing is, casting a pointer to an integer is something a compiler can see.
01:27:16 <elliott> Because you can cast anything to a char pointer.
01:27:19 <Gregor> It could simply write abort() instead of the code to do it.
01:27:29 <elliott> Gregor: Too bad that's not UB
01:27:46 <Gregor> You ... just said it is? :P
01:28:04 <Gregor> Either way, the compiler can see it.
01:28:08 <elliott> Gregor: s/compiler/interpreter/
01:28:18 <elliott> It must be some kind of interpreter or it can't catch tons of things.
01:28:31 <Gregor> Fair enough, but this one in particular is static :P
01:28:40 <elliott> Gregor: Anyway, the point is that the way you define things mean that operations like that /can't/ just "log but then go on".
01:28:48 <elliott> Because you have to change the representations to trip programs up.
01:28:52 <elliott> Which then makes those operations meaningless.
01:28:56 <Gregor> I don't argue for "log but then go on"
01:28:57 <elliott> Which is the whole point they're UB - they don't make sense everywhere.
01:29:07 <elliott> Gregor: What, then? "Be more like a real machine slider"?
01:29:19 <elliott> That would probably work, but is a pain to code, and you'd lose a lot
01:29:25 <Gregor> Well, more like a bunch of flags (with convenient presets), and if a UB is met, *boom*
01:29:49 <Gregor> No "go on", because ... why go on?
01:30:04 <elliott> Gregor: You're assuming every UB detection can look like this
01:30:13 <elliott> else return meaningful_result;
01:30:26 <elliott> I will say this one more time before I start typing in all-caps:
01:30:39 <elliott> You must change representations to catch as much UB as possible, and these changes make the relevant UB operations detectable but having _no meaningful result_.
01:30:50 <elliott> That is the reason a lot of things are UB: Because they only make sense given certain assumptions that aren't true everywhere.
01:30:56 <elliott> You must break those assumptions to trip programs up.
01:31:11 <elliott> The point is: "If my program works with DS9KCC, it works anywhere."
01:31:20 <elliott> Therefore, one must violate all assumptions possible.
01:31:55 <itidus20> one naive assumption is that a char is 8bits
01:32:03 <Gregor> I understand that you keep saying that, but I'm not yet convinced because you're yet to present an example :P. Although intuitively I'd agree with you that there are cases which are not detectable at runtime, I just haven't found a case in my head.
01:32:07 <itidus20> is that a good one to start with?
01:33:35 <Gregor> Well, that a char is 8 bits isn't a behavior ... that a char, shifted left by six bits, is something, is.
01:33:49 <Gregor> Though I suppose to define all such cases I end up in Rice's purgatory :)
01:34:07 <elliott> Gregor: Logread if you want examples
01:34:32 <itidus20> i will not try to wedge myself into the topic anymore.
01:34:41 <elliott> itidus20: Oh, you were talking? :P
01:34:50 <elliott> Gregor: Btw "that a char is 8 bits isn't a behavior" yes it is
01:35:13 <Gregor> Reading CHAR_BIT is behavior.
01:35:18 <Gregor> The fact that a char is 8 bits is not.
01:35:20 <elliott> Gregor: Incidentally, Valgrind with -fmudflap and all that nonsense is kind of a partial C DS9K
01:35:24 <elliott> Handling only memory management
01:35:40 <elliott> I think -fmudflap is the one that causes every memory access to go through a function, at least
01:35:55 <elliott> The great thing about a C DS9K is that you can give ridiculously detailed errors :P
01:35:56 <Gregor> I just said "reading" for a #define, but y'know, that sorta is reading at CPP-time :P
01:36:47 <zzo38> It is possible to do C preprocessor at the same time as reading other C codes.
01:36:47 <elliott> "The pointer (sdfdf + 999) in function foo at file:line:col was dereferenced, overflowing the bounds of the array blah at otherfile:line:col by N elements."
01:37:30 <elliott> Gregor: Oh yeah, and pointers to different types should look TOTALLY different (when read via char-pointer)
01:37:38 <elliott> Especially function pointers
01:37:53 <elliott> Even if there's an integer index SOMEWHERE in a pointer, it wants to be random :P
01:38:09 <elliott> And each pointer should be of a different, stupid size.
01:38:32 <Gregor> Hmmmm ... I truly thought that void * was guaranteed to be the same size as char * (but not function pointers) ...
01:38:48 <elliott> The only guarantee is that any pointer can be casted to (void *)
01:38:53 <elliott> (void *) can just be lolhuge.
01:38:56 <Gregor> Ahh, so void * --- right.
01:39:18 <Gregor> Essentially you could have an arbitrarily-retarded amount of space be usable for things of certain types :P
01:39:21 <elliott> In fact, (void *) could be smaller than (char *); maybe (char *) stores string length or something for debugging purposes :P
01:39:23 <itidus20> ok i looked up ds9k .. what a wonderful thing.. especially the name
01:39:24 <elliott> Then the cast would just throw that away.
01:39:53 <Gregor> elliott: Surely (char *) (void *) (char *) is supposed to work ...
01:40:11 <elliott> Gregor: Yeah, but that'd just note that no length info was available.
01:40:23 <Gregor> Oh right, I spose that since it's for debugging it doesn't matter :P
01:40:23 <elliott> Of course == would discard the length info in comparing equality.
01:40:28 <elliott> But it's still part of the size.
01:40:41 <elliott> Gregor: Basically, the main reason to fuck with (observable) representations isn't to catch UB that you couldn't otherwise (though it can aid in that, certainly), but to violate the assumptions programs make.
01:40:59 <elliott> Sure, it might just crash horribly rather than giving a nice error message, but the point is that a program that assumes those things will break.
01:41:14 <elliott> And besides, "crashing horribly" pretty much always means you get a luxurious error message when the machine is this clued-in.
01:41:48 <Gregor> Right, I guess my contention was just that this sort of thing isn't all cause /undefined/ behavior, the behavior is well-defined, it's just not what the programmer expected.
01:42:01 <elliott> Gregor: There's a problem similar to branch coverage though... e.g. if there's a signed overflow that only happens in extremely rare situations.
01:42:06 <Gregor> "isn't all cause" >_> ???
01:42:13 <elliott> You need a combination of static analysis and runtime DS9Kery... but those are basically entirely separate projects.
01:42:24 <elliott> Since DS9Kness is mostly in the backend, and static analysis is like compilation without a backend :P
01:42:27 <Gregor> elliott: Oh for piff sake, let's not go overboard :P
01:42:40 <elliott> Gregor: Dude, you call signed overflow overboard?
01:42:50 <elliott> Gregor: Do you REALISE how little you're allowed to do in C?
01:42:52 <Gregor> elliott: I call detecting that in all unreached branches overboard.
01:43:14 <elliott> The point is that lots of programs have UB that's only rarely reached.
01:43:18 <elliott> Most bugs are only rarely reached.
01:43:23 <elliott> That's why they haven't been fixed.
01:43:38 <elliott> So you need a separate static analyser to catch things less accurately but more ahead-of-time.
01:43:41 <elliott> But that's an entirely separate project.
01:43:54 <elliott> I'm just saying that a platonically perfect DS9K toolchain would include a static analyser.
01:44:06 <Gregor> I'm just --- right, "platonically perfect" is what I'm arguing about :P
01:44:09 <itidus20> there could be a C compiler which would simply not compile UB right?
01:44:28 <Gregor> elliott: Designing a system that is actually implementable within our lifetimes would be a nice first step :P
01:44:44 <elliott> Gregor: Deewiant wrote/is writing a parser, so /shrug
01:54:46 -!- myndzi\ has joined.
01:55:43 -!- Jafet1 has joined.
01:58:31 -!- mycrofti1 has joined.
01:58:55 -!- atehwa_ has joined.
01:59:33 -!- Jafet has quit (Ping timeout: 260 seconds).
01:59:34 -!- mycroftiv has quit (Ping timeout: 260 seconds).
01:59:34 -!- atehwa has quit (Ping timeout: 260 seconds).
01:59:35 -!- myndzi has quit (Ping timeout: 260 seconds).
02:04:23 <elliott> "Agda now knows where your (HTML5 geolocation compatible) browser is [...] I just came back from a walk round the block with my Android phone, and watched my coordinates update themselves."
02:04:26 <elliott> WHY ARE YOU DOING THIS TO POOR AGDA
02:05:23 <Sgeo> What do they mean by Agda? Surely not the language
02:07:04 <elliott> http://permalink.gmane.org/gmane.comp.lang.agda/3127
02:12:16 <itidus20> every software system tends to involve testing
02:12:53 <itidus20> because what the human creates is not always what the human desires
02:13:05 -!- ralc has quit (Quit: Leaving).
02:13:52 <itidus20> and also, that a program is only correct according to a standard being used by a human
02:14:57 <Sgeo> I'm wondering if I could make my VM vaguely resemble PicoLisp's
02:14:58 <itidus20> i wish i didn't have to do this monologue
02:16:44 <itidus20> humans created C standard. humans wrote programs in C. the programs are only wrong because they are measured against C standard. therefore humans shouldn't beat themselves up over it ^^;
02:17:27 -!- Jafet1 has changed nick to Jafet.
02:17:41 -!- quintopia has quit (Ping timeout: 260 seconds).
02:17:59 <itidus20> i am not sure whether humans act randomly. because a computer can easily act pseudorandomly.
02:20:57 -!- quintopia has joined.
02:20:57 -!- quintopia has quit (Changing host).
02:20:57 -!- quintopia has joined.
02:21:47 <itidus20> most applications are written in such a way that they expect the user to not operate at 100% efficiency of using the application.
02:22:35 <itidus20> slow typing, slow mouse moving, slow thinking, slow text reading, uncertainty, ignorance of features
02:22:40 <Gregor> Hulu's movie selection is like MST3K without the MST3K characters.
02:23:23 <itidus20> so the most efficient applications are the ones most removed from human interaction
02:24:56 <itidus20> ahh.. one could just feed a stream of 0s and 1s into a cpu
02:26:01 <elliott> `addquote <Gregor> Hulu's movie selection is like MST3K without the MST3K characters.
02:26:03 <HackEgo> 668) <Gregor> Hulu's movie selection is like MST3K without the MST3K characters.
02:27:53 <elliott> I wonder why FRP isn't more popular in JavaScript.
02:27:57 <elliott> Probably 'cuz it's called FRP.
02:28:08 <monqy> FUNCTIONAL IS HARD
02:28:34 <itidus20> as long as a human is not monitoring the calculations then a CPU which is getting it's data and instructions as a stream of 0s and 1s is correct computation
02:29:19 <itidus20> i suppose then error is defined by anything which interrupts the processing of the stream
02:29:23 <coppro> elliott: that's the dumbest acronym ever
02:30:03 -!- copumpkin has joined.
02:30:10 <elliott> coppro: Sorry, you misspelled best.
02:30:15 <elliott> It lets you vary the punctuation.
02:50:03 <Gregor> "The Rocky Horror and Bullwinkle Picture Show"
02:53:15 <itidus20> so the trouble with software is it gives feedback
02:54:01 <itidus20> feedback means it enters into the reward and punishment mechanisms.. as if software is judging us
02:55:33 <itidus20> contrasting with the leitmotifs used to build up associations between music and characters/themes
02:56:19 <itidus20> so i am being too crazy about it..
02:56:32 <itidus20> cause and effect is not judgement
03:00:20 <elliott> <edwardk> i redesigned the way i was plumbing diagnostic messages through trifecta. now there are a much simpler set of combinators, and many fewer twisty passages they must take going through the parser
03:09:47 -!- evincar has joined.
03:10:55 <lambdabot> evincar: You have 1 new message. '/msg lambdabot @messages' to read it.
03:11:39 <evincar> I don't suppose anyone cares much.
03:12:01 <Gregor> We care because now we have to type "el[tab]" for elliott instead of just "e[tab]" X-P
03:13:08 -!- evincar has changed nick to why.
03:13:16 <why> Aww, registered nick.
03:13:21 -!- why has changed nick to evincar.
03:13:35 <evincar> I'm not known by enough names that I can just switch.
03:19:45 -!- MDude has changed nick to MSleep.
03:20:04 <evincar> Holy shit. I earned $8.73 yesterday from ads?
03:22:05 <evincar> I did not know my blog was earning this much.
03:22:17 <elliott> A WHOLE EIGHT DOLLARS A DAY
03:22:39 <evincar> I know. That covers at least my food.
03:23:48 <evincar> I usually spend twenty minutes on a post, so if it makes me a few dollars, it still works out to a decent hourly rate.
03:23:53 <Jafet> "The best minds of my generation are figuring out how to make people click ads." ~ Jeff Hammerbacher
03:24:28 <evincar> I don't care too much about it. It's just a nice surprise.
03:25:01 <evincar> I'm more concerned with people reading my content than clicking the nearby salesmanboxen.
03:28:17 <evincar> Speaking of concerns, I'm concerned I'll need to rewrite the interpreter for my language. :(
03:29:58 <evincar> It's very modular and wonderfully lazy right now, and it would suck to break that...
03:30:05 <evincar> ...but the different levels of the language are heavily intertwined.
03:30:13 <evincar> So the interpreter may have to reflect that.
03:32:32 -!- itidus20 has quit (Quit: Leaving).
03:39:10 -!- ive has joined.
03:53:00 <zzo38> I found out something in Haskell, that if you import qualified, and then, you can define the class members for an instance without qualification.
04:07:16 <zzo38> And I think const = curry fst and flip const = curry snd
04:09:16 <zzo38> And fst = uncurry const and snd = uncurry $ flip const
04:15:04 <lambdabot> forall a b c. ((a, b) -> c) -> a -> b -> c
04:15:20 <Lymee> Oh, curry, not uncurry.
04:15:38 <elliott> Deewiant: edwardk says he was planning to add something to customise the tab width
04:17:22 -!- hagb4rd has changed nick to hagb4rd|zzZ.
04:20:45 <zzo38> Tab width in what?
04:25:16 -!- nys has quit (Quit: enden).
04:25:38 <zzo38> Can you set it to infinite?
04:26:41 -!- hagb4rd|zzZ has quit (Ping timeout: 260 seconds).
04:28:42 <elliott> http://www.moderngpu.com/intro/scan.html#Ballot
04:31:25 <elliott> Gregor: Remember that question you asked who's answer was LZO
04:31:30 <elliott> Gregor: http://code.google.com/p/snappy/ might be another answer
04:33:10 <elliott> <edwardk> but even so, he could largely ignore the column information i give, i have a column byte in delta as well that provides the offset from the beginning of line in bytes
04:33:11 <elliott> <edwardk> if he doesn't care about the rendering of the source line then he can just use that if he must
04:33:14 <elliott> <edwardk> (assuming he doesn't care about utf-8)
04:33:22 <elliott> This is so much more efficient than direct communication
04:34:24 <elliott> Gregor: What WERE you using it for, anyway?
04:34:47 <Gregor> elliott: Intermediate files produced while doing some music processing that ended up needing to be floating point.
04:35:33 <Gregor> Only that there are no lossless codecs for floating point audio.
04:35:43 <Gregor> Err, no lossless /compressed/ codecs anyway :P
04:35:47 <elliott> Were the files really that big uncompressed?
04:36:14 <Gregor> Well, for my ~4 minute audio file, before everything could finally be put together, it was about 5GB
04:36:35 <elliott> How many fucking bits/channels/whatever :-P
04:37:01 <elliott> 64-bit floating point? That... I don't think that's a commonly-used audio format.
04:37:18 <Gregor> Even 32-bit floating point isn't particularly common :P
04:37:34 <Gregor> But 32-bit floating point can't accurately store every 32-bit integer value, so converting /to/ it is lossy.
04:37:40 <Gregor> (I only go to 16-bit as my final step)
04:38:33 <Gregor> Human ears can't hear the difference, but cumulative errors are a bitch, and human ears can hear them real good.
04:38:46 <Gregor> More precision = less cumulative errors
04:38:53 <Gregor> (Or rather, lesser cumulative errors)
04:39:28 <elliott> Humans can't tell ~128 Kio/s MP3 from the original source
04:39:33 <zzo38> Then don't use the floating point format
04:39:34 <elliott> For an average definition of human
04:39:44 <Jafet> For an average definition of source
04:39:45 <elliott> Do you have any examples of such cumulative errors? ABX results? :-P
04:39:48 <Gregor> elliott: Shall I just repeat my last three lines, or would you prefer to read them again?
04:40:14 <Gregor> Precisely the cumulative errors I was getting was from combining multiple reverberations.
04:40:14 <elliott> Gregor: Just asking if you have any actual examples, since I don't think anyone in the world has yet resorted to 64-bit floating point audio :P
04:40:29 <Gregor> Oh, I'm overkilling it.
04:40:44 <Gregor> But suffice it to say I was very frustrated with the cumulative errors :P
04:41:14 <Jafet> I heard from a film commentary that they had to render some part of it with 64-bit colour instead of 32-bit colour, because it affected the results
04:41:26 <Jafet> It involved a diffraction shader or something
04:41:51 <elliott> <director> The infrared! You fucked up the goddamn infrared! Fix it!
04:42:02 <Gregor> Right, probably the same sort of idea. You can't tell the difference, but if there's an error in the difference 1000 times, you can.
04:42:04 <elliott> Tetrachromats must find films really disappointing.
04:43:00 <Gregor> Is there a term for hypothetical beings that can actually discern all colors? (Ignoring the physical plausibility of such an ability)
04:43:41 <elliott> It sounds an excellent recipe for a pretty but useless visual field.
04:46:25 <elliott> Deewiant: <edwardk> elliott: trying to figure out how i can make a modeline parser transformer for reading vim and emacs mode lines and adjusting tabstops, etc. appropriately
04:46:45 <elliott> My parsing library had better become exponentially more awesome overnight with this kind of shit to keep up with
05:25:05 -!- ive has quit (Quit: leaving).
05:34:29 -!- copumpkin has quit (Ping timeout: 240 seconds).
05:34:53 -!- copumpkin has joined.
05:39:14 <evincar> elliott: How do you measure the awesome of a library?
05:44:25 <elliott> http://www.thepimanifesto.com/
05:44:33 <elliott> Oh my god everybody shut up.
05:45:39 <monqy> why is pi vs tau a thing
05:46:09 <elliott> people don't have anything better to do
05:46:21 <elliott> "Tauists also claim that their version of Euler's formula is better than the original, but we will see that it is in fact weaker."
05:46:45 <elliott> im going to find a bunch of formulas where 3pi looks nicer and start the... uhh, lets look at the greek alphabet
05:47:41 <evincar> That's not even modern Greek. You're doing it right.
05:48:32 <evincar> As programmers, aren't we guilty of stuff like this though?
05:49:43 <zzo38> I think pi is better, but the reason has nothing to do with circles.
05:50:14 <evincar> Pi has to do with circles...
05:50:20 <evincar> ...anything that has to do with pi has to do with circles.
05:50:28 <monqy> shut up shut up shut up
05:51:24 <zzo38> evincar: No it doesn't. Various things with circles have pi, but not everything, and not everything pi is circles.
05:51:53 <evincar> I'm much too lazy to argue.
06:01:23 <evincar> Blog posts about programming languages --> 0-100 views.
06:01:33 <evincar> Blog posts about stuff I don't really care about --> 100-1000 views.
06:01:45 <evincar> I appear to be doing it wrong.
06:01:51 <coppro> woot, almost finished getting down linear algebra notes
06:06:44 -!- acommasplice has joined.
06:08:59 <HackEgo> Welcome to the international hub for esoteric programming language design and deployment! For more information, check out our wiki: http://esolangs.org/wiki/Main_Page
06:11:11 <Jafet> Which esoteric programming languages have been deployed?
06:14:29 <evincar> Jafet: What do you mean by "deployed"?
06:15:11 <Jafet> HackEgo: What do you mean by "deployment"?
06:15:22 <Jafet> The silent type, eh.
06:15:34 <elliott> Silenter than it should be.
06:15:37 <HackEgo> 2009-05-07.txt:21:57:15: <ais523> ah, I always get a warm fuzzy nostalgic feeling when we have "the international hub for esoteric programming language design and deployment" in the topic
06:15:56 <elliott> I think it's just a play on them practical channels' topics.
06:16:10 <evincar> So I'm thinking about a package system for my language.
06:16:12 <Jafet> We should be the intergalactic hub
06:16:36 <HackEgo> 2011-09-17.txt:06:16:31: <elliott> `log intergalactic hub
06:16:47 <HackEgo> 2011-09-17.txt:06:16:31: <elliott> `log intergalactic hub
06:16:56 <HackEgo> 2007-07-09.txt:16:55:15: <CakeProphet> I HATE YOU
06:17:32 <evincar> Do you suppose it makes sense for a package to have a canonical URL?
06:17:40 <elliott> They are sentiments I share.
06:17:51 <evincar> Or should there be an alias and a central repo of redirects to real URLs, in case of change?
06:18:22 <elliott> What is it with me and long, verbose wiki comments lately.
06:18:26 <evincar> I don't want to set up any central stuff...
06:18:38 <elliott> But two is, like, significantly more than one.
06:18:46 <elliott> I'd like to point out that two is much greater than zero.
06:19:02 <elliott> And thus by the "zero, one, infinity" rule we can conclude that I'll be making long, verbose wiki comments for the rest of my life.
06:19:14 <elliott> That isn't quite infinity though. I guess I've assured my own immortality?
06:19:37 -!- acommasplice has quit (Quit: acommasplice).
06:20:47 <evincar> So like http://company.com/very/package.vp versus very://company/package
06:21:27 <elliott> Meanwhile, a very esoteric work:
06:21:28 <elliott> http://hackage.haskell.org/package/gutenberg-fibonaccis
06:21:36 <evincar> Where the latter would go to cvan.com/company/package.vp and possibly be redirected to the former.
06:21:36 <elliott> "The fibsLen function returns the number of Fibonacci numbers - |in the first1001Fibs list."
06:21:48 <elliott> Thank god Gutenberg are preserving the fibonacci numbers for generations to come.
06:22:17 <evincar> We might lose them otherwise.
06:22:35 <evincar> I guess decentralised > centralised?
06:22:48 <evincar> And then if you're changing your URL, you'll notify people anyway.
06:22:54 <evincar> And old software will just be broken.
06:23:07 <evincar> Or you could put it on github or something and save yourself the trouble.
06:23:39 <elliott> I wonder if that guy is anticipating further Gutenberg fibonacci releases.
06:23:49 <elliott> You know, so he can make it bigger, and then maybe fibsLen would be useful.
06:24:01 <elliott> When we discover more Fibonacci numbers.
06:24:06 <evincar> They come out in episodes of 1001 each.
06:25:04 <evincar> Also, is it a good idea for a web framework to validate generated code?
06:25:18 <evincar> Or should it stay out of the way?
06:25:23 <Jafet> Why would generated code be invalid?
06:25:36 <elliott> Jafet: It might break its knee.
06:26:03 <evincar> I dunno, you could write something that's syntactically fine but semantically invalid.
06:26:06 <Jafet> Is this why some programmers worry about padding?
06:26:19 <elliott> Jafet: Health and safety is vital when programming.
06:26:22 <elliott> It's a rough world out there.
06:27:02 <Jafet> Why would a code generator produce something semantically invalid?
06:27:11 <Jafet> Find that code generator and break its knee.
06:27:38 <evincar> I dunno, say someone writes <span><p>...</p></span>. Am I responsible?
06:27:56 <Jafet> Did they include a doctype?
06:28:23 <evincar> Assume <!DOCTYPE html> I guess.
06:28:30 <monqy> evincar: you could put that in the type system if you wanted to
06:28:30 <elliott> Jafet: I, too, advocate violence against invalids.
06:28:45 <monqy> evincar: but why are you talking about this
06:29:07 <evincar> monqy: Writing a basic web framework for my language?
06:29:27 <monqy> evincar: anyway you wouldn't check the output; you'd put it in the type system and catch errors at compile time
06:29:33 <Jafet> Okay, then validate it as HTML5. If that's even possible.
06:29:54 <Jafet> For bonus points, validate all actionscript
06:29:55 <evincar> monqy: Yeah. Well, I'd do it at compile-time, but not in the type system.
06:30:07 <monqy> then where would it be?
06:30:14 <monqy> if not in the type system
06:30:38 <evincar> In a function that is evaluated at compile time.
06:30:55 <monqy> and what would it do
06:31:11 <elliott> monqy: this is beautiful poetry.
06:31:11 <monqy> I have a feeling you're wrong about something and I have an idea as to what it is
06:32:20 <monqy> evincar: indeed you could be Wrong about multiple things
06:32:35 <evincar> Well, I've got a family of macros (such as <span>) that read cdata and other SGML-like macros.
06:32:36 <monqy> evincar: it is very possible your naive approach would be computationally impossible
06:32:56 <evincar> So they'd just report any elements that show up that shouldn't be in them.
06:33:10 <monqy> evincar: and how would it know what elements show up in them
06:33:16 <monqy> evincar: how would you determine this at compile time
06:33:56 <evincar> There are plenty of ways to check.
06:33:56 <monqy> what do you mean reading them
06:34:11 <evincar> Maintain a stack of parent element names, and blow up if they're wrong.
06:34:11 <elliott> Not as well as boats though.
06:34:33 <monqy> evincar: what happens if it doesn't halt
06:34:40 <monqy> evincar: is your language sub-TC?
06:35:07 <monqy> i mean your language
06:35:35 <monqy> if you can use your language to embed arbitrary tags and stuff in html, and your language is TC, you've got a Real Problem if you're doing it your way
06:36:21 <evincar> I don't know what you mean by "embed arbitrary tags and stuff in html".
06:36:27 <evincar> And I think you might be misunderstanding me.
06:36:37 <evincar> Because I haven't really explained myself. :P
06:36:58 <monqy> I assure you, you're Wrong
06:37:12 <elliott> Actually most things starting with capital letters are.
06:37:46 <shachaf> English would be far superior if they were completely eliminated.
06:37:46 <monqy> evincar: if you don't feel like explaining, that's fine too; honestly, I'd rather not bother
06:38:03 <monqy> evincar: just know that you're Wrong
06:38:46 <evincar> monqy: It's simple. Tags are macros, which expand to functions that act like templates.
06:39:02 -!- acommasplice has joined.
06:39:03 <monqy> evincar: and how does this catch html errors at compile time
06:39:40 <evincar> By including simple validation tests in the tag macros?
06:39:52 -!- acommasplice has left.
06:39:54 <monqy> and how would that catch html errors at compile time
06:40:07 <monqy> look, you're severely underthinking it
06:40:41 <evincar> There's not much to think about.
06:40:50 <evincar> Write a function that validates some HTML.
06:41:03 <evincar> Now define it as a macro so it evaluates at compile-time.
06:41:22 <monqy> how about an example
06:42:07 <monqy> (define f (don't terminate)) (span f)
06:42:39 <evincar> If the code you put in a template doesn't terminate, you can't expect the template to terminate.
06:43:09 <monqy> so your compilation will silently hang
06:43:34 <monqy> just embed it in the type system
06:43:35 <evincar> That's like saying <?php function f() { don't terminate } ?><span><?php f(); ?></span>
06:43:41 <monqy> or some other sub-tc language
06:43:55 <monqy> writing your web framework
06:43:57 <monqy> in a sub-tc language
06:44:04 <monqy> nothing can ever not terminate
06:44:28 <monqy> evincar: people make mistakes. mistakes make infinite loops.
06:44:48 <monqy> evincar: why not embed it in the type system? does your language not have a good type system?
06:45:35 <evincar> monqy: It would be possible to do it in the type system, but not as pretty.
06:45:49 <elliott> Can I have a number sign monqy?
06:45:51 <elliott> It'd be very nice and lovely.
06:46:08 <elliott> You can stop your poetry now though.
06:46:28 <evincar> You're the one who was arguing.
06:46:35 <evincar> I just asked if it was a good idea to validate the output at all.
06:56:52 <evincar> Not all problems are interesting.
06:59:49 <monqy> except this channel is for ones that are
07:02:21 <evincar> Care to help me figure out how I ought to implement this beast then?
07:02:38 <monqy> be a better language / be a better person
07:04:32 <evincar> It has an irrational obsession with metaprogramming.
07:04:52 <monqy> irrational obsession sounds Bad
07:05:14 <Jafet> Rational obsession?
07:05:20 <evincar> Sounds bad, but feels good.
07:05:36 <elliott> Irrational Obsession: a good b- no it's not who am I kidding.
07:05:49 <elliott> I wonder what the ratio of things people have said are good band names to good band names is.
07:06:58 <Jafet> Queen is a really shitty band name.
07:07:20 <evincar> I resent successful bands with bad names because it perpetuates bad naming.
07:07:50 <elliott> Jafet: Not as bad as King.
07:10:04 <evincar> All the layers of the language are intertwined problematically.
07:10:23 <evincar> I fear I'll end up with a one-function interpreter, with no modularity.
07:18:16 -!- itidus21 has joined.
07:19:16 <monqy> A Refreshing Change of Pace
07:19:40 <elliott> a refreshing change of itidus21
07:27:16 <elliott> monqy: nother number sign please?
07:27:25 <monqy> ############################################
07:33:17 -!- CakeProphet has joined.
07:33:17 -!- CakeProphet has quit (Changing host).
07:33:17 -!- CakeProphet has joined.
07:40:08 <CakeProphet> assholes. doubting my multitasking skills.
07:41:14 <itidus21> i wish i could do social stuff
07:42:17 <itidus21> because the fact that i can't is merely symptomatic of my mental problems
07:42:51 <CakeProphet> which, is more difficult to change than it sounds, I realize.
07:43:08 <itidus21> i struggle to enjoy moment to moment existence
07:43:13 <elliott> CakeProphet: s/only if you think about it that way/only if you think about it that way, or actually have mental illness/
07:43:44 <CakeProphet> and like I said it's more difficult than it sounds, for anyone.
07:43:47 <itidus21> im always stressing about fear of vertigo, or fear of heights or fear of open spaces
07:44:30 <CakeProphet> I too have fears about Self. it's a scary idea.
07:44:44 <itidus21> you know that superman movie where they send the villains into space in a polygon
07:44:47 <evincar> When you have fears about Self, just make Smalltalk.
07:44:59 <itidus21> sometimes i wonder if my existence is really squashed like that
07:45:13 <elliott> CakeProphet: "Think your problems away" is basically the premise of that awful The Secret book. Though psychiatry is something like homeopathy, so it's not much better.
07:45:28 <evincar> itidus21: Would it really be relevant to your daily life if your existence were squashed?
07:46:06 <evincar> For all practical purposes, you can ignore most probing existential questions.
07:46:08 <CakeProphet> elliott: well, I'm not saying it works quite like that. But in essence any kind of therapy that isn't drug-based follows this kind of path.
07:46:20 <CakeProphet> it's important to think of yourself as not helpless
07:46:28 <itidus21> evincar: i do ponder them... some people forced them on me i guess
07:46:42 <elliott> CakeProphet: Sure, but that's one of them "necessary, but not sufficient" conditions.
07:47:15 <itidus21> ive never been quite the same since i started to think of myself as a kind of 2 dimensional thing
07:47:49 <itidus21> it just amplifies all my other fears
07:48:41 <evincar> itidus21: Do you engage in enough physical activity? How's your diet?
07:48:54 <evincar> I find that I hate the world if my blood sugar is low.
07:48:59 <evincar> Or if I haven't exercised lately.
07:49:35 <evincar> Your sugar can really fuck with your emotions.
07:49:55 <itidus21> no money, no job, no schooling, can't drive/no car
07:50:08 <monqy> evincar what are you doing
07:50:18 <itidus21> and lots of people who like to manipulate me
07:50:20 <CakeProphet> elliott: perhaps we're not in disagreement here, just emphasizing different points that are both true.
07:51:05 <evincar> monqy: Trying to be helpful based on experience?
07:51:36 <monqy> experience with being itidus21? ouch.
07:51:50 <evincar> Experience with having fucked up blood glucose.
07:52:08 <elliott> toast :))))))))))))))))))))))))
07:52:15 <CakeProphet> dunno how to help with that. I manage somehow.
07:52:37 <itidus21> i can't really be myself in my house because my brother has chronic explosive anger which can be triggered by anything
07:52:59 <itidus21> gradually i am learning that my mom and i are too passive, so the imbalance goes both ways
07:53:39 <itidus21> i need to get regular sleeping pattern to improve my diabetes
07:53:56 <itidus21> but... it seems like i am always being counted on occasionally to be awake in the morning
07:54:08 <itidus21> sometimes my brother will be sleeping in when he works..
07:54:24 <itidus21> or it could be an internet technician visiting early
07:55:23 <itidus21> its like when i go outside i start losing a sense of inside and outside
07:55:49 <CakeProphet> I've decided that sleeping properly in the modern world is close to impossible.
07:55:50 <itidus21> combined with the existential pondering
07:56:53 <evincar> Is the difference important?
07:57:06 <itidus21> i have pondered whether i have some problem with vestibular system
07:58:32 <itidus21> so i try various things.. opening the curtains.. turning on radio
08:00:38 <itidus21> a few times too much existential pondering leads me to start shaking.. at which times i got a cup of whiskey off my broter
08:00:43 <CakeProphet> knowing all sorts of shit about gravity and other forces.
08:00:45 <elliott> the words CakeProphet learned today
08:01:23 <evincar> Alcohol isn't...the best thing.
08:02:44 <evincar> I've never quite gotten past the fact that it tastes like and is poison.
08:03:07 <itidus21> every freaking channel is like a science lab :P
08:03:09 <evincar> And I get drunk quickly and sober quickly because I don't weigh a lot.
08:03:19 <CakeProphet> yeah but it's a great poison, and also a macronutrient!
08:03:24 <elliott> itidus21: it's for open projects
08:03:27 <elliott> which in practice reduces to programming
08:03:39 <CakeProphet> second highest in caloric content per mass below fat.
08:04:17 <CakeProphet> it's like, delicious poison fuel that makes it easier to socialize and relax and want to drink more.
08:04:53 <evincar> My progression is generally:
08:05:00 <evincar> One shot, can't feel face.
08:05:08 <evincar> Three shots, can't taste alcohol.
08:05:24 <evincar> Wait fifteen/twenty minutes, repeat.
08:05:42 <evincar> So I'm probably exaggerating.
08:05:52 <itidus21> Patashu: x + y = 0 is always equally dependant on x as it is on y >:-)
08:07:01 <itidus21> unfortunately expectations increase needs
08:08:46 <CakeProphet> I'm going to rephrase what you said to make it sound trivial because I'm kind of a jerk -- elliott
08:08:53 <evincar> Alcohol is excellent for practicing a language though.
08:09:07 <elliott> CakeProphet: but that's literally what he said
08:09:22 <elliott> also commutative is not a trivial word
08:11:18 <monqy> commutativbe is a baby word
08:13:16 <itidus21> all im saying is when i stagger into my brothers room laying down having a whiskey from him while my body is shaking.. which all seems caused by existential pondering
08:13:37 <itidus21> i have been less upset when my father died honestly
08:13:40 -!- zzo38 has quit (Remote host closed the connection).
08:15:21 <CakeProphet> and stay away from all those saccaride things.
08:15:55 <itidus21> dont even know what saccaride is
08:16:10 <CakeProphet> sugars. either simple or complex carbohydrates.
08:16:21 -!- nooga has joined.
08:16:31 <itidus21> i have to eat a lot of sugars cos my blood sugars drop too easily
08:16:33 <monqy> "a good place to be"
08:16:47 <itidus21> i cant control my sugar until i sleep better
08:16:50 <CakeProphet> but yeah #esoteric isn't an advice channel so I hope you're not like
08:17:09 <elliott> i thought diabetes was having too much blood sugar
08:17:23 <itidus21> the insulin can make it drop if everything is not controlled
08:17:27 <monqy> theres lots of things called diabetes......
08:17:33 <elliott> diabetes "im dont know how to blood sugar" -- diabetes
08:17:40 <itidus21> insulin without food = low sugar
08:17:57 <itidus21> its about mastering that balance
08:18:06 <monqy> do you get to put needles in yourself
08:18:09 <monqy> is that how it works
08:18:21 <itidus21> CakeProphet: perhaps just for you i will monitor my blood sugar better
08:18:34 <elliott> monqy: diabetes.....heroin addiction.....the same thing???
08:18:35 <itidus21> now my comment before was a bit morbid
08:18:42 <itidus21> but when im losing my mind.. what can be worse
08:19:50 <CakeProphet> itidus21: I believe the trick is to eat small, frequent meals with very few simple sugars.
08:19:57 <CakeProphet> things that will metabolize slowly over time.
08:21:16 <itidus21> everyone of the comments in here must be helping
08:21:44 <CakeProphet> yes #esoteric-self-help is coming along nicely.
08:21:58 <itidus21> it was reading freud comments on subconcious which really gave me the shakes
08:22:14 <elliott> finally CakeProphet says something smart
08:22:24 <monqy> freud will Hurt you
08:22:37 <evincar> Immortalise him in the quote thing.
08:23:01 <elliott> CakeProphet: how many jerk accusations before the jerkhood flips... this is what i wish to know....
08:24:54 <itidus21> now this fear about 2d... makes me worry.. about 1)depth perception 2) reading books 3)watching videos
08:25:33 <monqy> poop is a Bad Word
08:26:21 <CakeProphet> itidus21: you might have extra-dimensional crises when you realize that there is also depth to your width and height.
08:26:33 <CakeProphet> or... width to your depth and height. or height to your depth and width
08:26:40 <CakeProphet> depends on what kind of 2-dimensional thing you are.
08:26:50 <elliott> <monqy> poop is a Bad Word
08:26:53 <CakeProphet> also point of reference as to where axes are plot.
08:27:16 <itidus21> this isnt a game.. this is pain i endure
08:27:40 <itidus21> to some extent locking me out of enjoyment of traditional 2d media
08:27:46 <itidus21> although i still enjoy some of it
08:29:15 <itidus21> which is ironic in a bedroom full of bookshelves
08:30:09 <itidus21> the solvability of it has started to make me unable to find real purpose in it
08:30:39 -!- evincar has quit (Quit: Goodnight all.).
08:30:45 <monqy> good night evin car
08:31:28 <itidus21> theres a lot which built up to it
08:31:36 -!- derrik has joined.
08:31:47 <itidus21> constant bullying and manipulation from people the whole time growing up
08:32:06 <itidus21> at the end i turned out to be more fragile than i expected
08:35:51 <monqy> he didn't expect to be as fragile as he observes himself now
08:36:06 <itidus21> its a certain anxiety and heavy tiredness in my eyes
08:36:45 <monqy> he had an expectation of how fragile he would be. he observes himself to be more fragile than this.
08:37:02 <CakeProphet> Perhaps your plans have something to do with this.
08:38:08 <HackEgo> 59) <Warrigal> I think hamsters cannot be inert.
08:38:33 <CakeProphet> constant bullying and manipulation from people the whole time growing up
08:39:35 * CakeProphet should really go to sleep so he can do this metric shit ton of work tomorrow.
08:40:40 <fungot> Available: agora alice c64 ct darwin discworld europarl ff7 fisher homestuck ic irc* jargon lovecraft nethack pa sms speeches ss wp youtube
08:40:43 <fungot> Selected style: alice (Books by Lewis Carroll)
08:40:48 <fungot> Selected style: agora (a large selection of Agora rules, both current and historical)
08:40:59 <fungot> Selected style: ct (Chrono Trigger game script)
08:41:06 <fungot> Selected style: pa (around 1200 transcribed Penny Arcade comics)
08:41:11 <fungot> Selected style: ss (Shakespeare's writings)
08:41:15 <fungot> CakeProphet: ham. it is the bishop of winchester, a page with a torch.
08:46:52 <fungot> CakeProphet: bast. my lord protector will come this way by and by
08:49:59 <fungot> CakeProphet: des. what, angry, sir. an early stirrer, by the king your father, and bid mee fetch thee fnord? i will find out logs, and fnord
08:53:52 <fizzie> "fetch thee fnord? i will find out logs, and fnord".
09:01:30 <itidus21> ok feeling better with some drawing therapy
09:13:58 <fungot> CakeProphet: no visor does become black villany so well as i: nothing confutes me but eyes, and then to beslubber our garments with it, it shall be still thy true loues recompence, my heart
09:16:15 <fungot> Available: agora alice c64 ct darwin discworld europarl ff7 fisher homestuck ic irc jargon lovecraft nethack pa sms speeches ss* wp youtube
09:16:32 <fungot> Selected style: youtube (Some YouTube comments)
09:16:45 <fungot> itidus21: again--not sent via this medium. you can't lie about things that they say: put up or shut up.
09:17:07 <itidus21> fungot, i invoke thee pray tell
09:17:07 <fungot> itidus21: wat language was the aircraft with sofisticate computers, but i think they can keep their bullsh*t straight anymore.
09:17:52 <fungot> itidus21: crappy actors, this video is wrong. the plane was empty ( no people were the days) or... how? like wtf
09:18:09 <itidus21> fungot so many aircraft oriented
09:18:10 <fungot> itidus21: its called takeoff go around button and thats fucking awesome
09:20:04 <itidus21> fungot are you partial to amelia earhart?
09:20:15 <fungot> CakeProphet: or you will find that there was a fly by at an airshow. look over jorma's shoulder when he first came on snl.
09:20:31 <fungot> Selected style: europarl (European Parliament speeches during approx. 1996-2006)
09:20:34 <fungot> CakeProphet: mr president, the first of these is concerned, the use of all the legislation involved. this is a benchmark we must not bury our heads in the right place for these ideas to third countries or the countries currently members of the committee of inquiry into drugs in the first place when nitrofen has been banned for years.
09:20:54 <fungot> CakeProphet: madam president, i would like to draw the honourable members' commitment in the house, have had some very intensive talks with the un human rights committee to investigate the possibilities for aid for the victims of that crash. i feel that many more documents are being supplied in both the products and technologies used. this morning, seemed to me at all that right-wing forces have been involved in these four proc
09:21:39 <itidus21> australian parliament is also interesting
09:23:26 <itidus21> mr speaker, i would like to say to the leader of the opposition mr speaker that the opposition's policies are a betrayal of the australian public mr speaker
09:25:23 <itidus21> heres a random sample http://www.youtube.com/watch?v=aaLLP4sc_6Q
09:27:23 <elliott> this is just uk parliament but wimpier
09:29:58 -!- monqy has quit (Read error: Connection reset by peer).
09:30:01 -!- monqy_ has joined.
09:30:41 <CakeProphet> it's like twice the tomfoolery with half of the sense.
09:33:07 -!- derrik has quit (Ping timeout: 252 seconds).
09:34:04 <CakeProphet> oh hey I just found the Ordering negation operator
09:34:35 <CakeProphet> well I wouldn't say it's immediately obvious..
09:35:01 <CakeProphet> "oh hey why don't I compare comparison values"
09:36:37 -!- monqy_ has changed nick to monqy.
09:39:49 -!- sebbu2 has changed nick to sebbu.
09:50:49 -!- FireFly has joined.
10:13:30 -!- Vorpal has joined.
10:35:27 <monqy> http://esoteric.voxelperfect.net/wiki/User:Aptennap what could it be
10:35:42 -!- yorick has joined.
10:41:59 -!- oerjan has joined.
10:43:59 <oerjan> <elliott> Sigh, when did oerjan escape
10:47:03 <elliott> that amounts to (Value,Value
10:47:16 <elliott> I want to rename my Vector type
10:47:31 <elliott> I guess Vector might be a misnomer in the first place, I basically use it for position and delta
10:47:41 <elliott> oerjan: um Value is integral if that helps
10:48:00 <oerjan> delta is usually a vector-like quality
10:48:16 -!- nooga has quit (Ping timeout: 252 seconds).
10:48:36 -!- monqy has quit (Quit: hello).
10:50:55 <oerjan> it seems hard to think of delta as something other than a vector...
10:51:59 <elliott> it's just a coordinate pair :P
10:52:07 <elliott> except sometimes instead of coordinates it is a delta :-|
10:52:14 <elliott> maybe what I need to do is have two type
10:52:31 <elliott> Coords would work but is kind of bluh
10:52:34 <elliott> Position and Delta might work
10:52:41 <elliott> I think Point and Delta is nicer thouhg
10:52:46 <oerjan> itidus21: it's the delta that makes it not quite like a point
10:53:02 <elliott> the annoying thing is that i'll have to define all the same things for positions and deltas
10:53:08 <elliott> but I guess I just need a simple typeclass for (.+.) and (.-.)
10:53:29 <oerjan> elliott: type Position = Delta, problem solved.
10:53:38 <elliott> oerjan: yes. so well-type-checked.
10:54:02 <oerjan> elliott: newtype Position = Position Delta deriving Everything
10:54:09 <CakeProphet> elliott: make a GADT, phantom types, and then type synonyms
10:57:04 -!- elliott has quit (Read error: Connection reset by peer).
10:57:12 -!- elliott has joined.
10:57:19 <CakeProphet> obviously elliot left because he was disgusted by my design.
10:58:02 <elliott> oerjan: now the problem being, I still need a type underlying the Point and Delta newtypes ;P
10:58:16 <oerjan> elliott: see CakeProphet
10:58:17 <elliott> oerjan: and that needs a name :D
10:58:22 <elliott> oerjan: no Pointlike is the worst.
10:58:26 <elliott> also using the phantom type like that is silly.
10:58:35 <CakeProphet> I think elliott just hates GADTs with phantom types.
10:59:05 <oerjan> i'd say this is precisely what phantom types are for
10:59:39 <CakeProphet> though by the time elliott weighed all of these pros and cons he could have probably already written two instances.
10:59:43 <oerjan> itidus21: i think he wants longer vectors than that.
10:59:54 <CakeProphet> itidus21: also naming isn't really an issue here.
11:00:11 <CakeProphet> so just spewing names out of the front of your face is not helping.
11:00:27 <elliott> oerjan: not really phantom types -- they're two types that happen to be composed of two values underneath
11:00:32 <elliott> and i was wrong wrt .+. and .-.
11:00:36 <elliott> they only have the possible types
11:00:41 <elliott> (.+.) :: Point -> Delta -> Point
11:00:49 <elliott> (.-.) :: Point -> Delta -> Point
11:00:58 <elliott> (.-.) :: Point -> Point -> Delta
11:00:59 <CakeProphet> yes, so you can use one type to represent both, and then the phantom type is used to distinguish them for the purposes of typechecking....
11:01:01 <elliott> but I don't think I need that :P
11:01:23 <CakeProphet> well, you wanted to avoid that, and that seems like the best way to avoid it.
11:01:28 -!- nooga has joined.
11:01:36 <elliott> data Point = (:@) {-# UNPACK #-} !Value {-# UNPACK #-} !Value deriving (Eq, Ord, Show)
11:01:37 <elliott> data Delta = (:/) {-# UNPACK #-} !Value {-# UNPACK #-} !Value deriving (Eq, Ord, Show)
11:02:17 -!- derdon has joined.
11:02:17 <elliott> CakeProphet: it comes down to
11:02:22 <elliott> data Point = Value :@ Value
11:02:25 <elliott> data Delta = Value :/ Value
11:02:29 <elliott> it's just added optimisation sauce on top of that
11:03:16 <elliott> <CakeProphet> but now you have... instance Point ...
11:03:16 <elliott> <CakeProphet> and instance Delta...
11:03:20 <elliott> what? where do I have these?
11:03:34 <elliott> I think you will find that very few operations make sense identically on both points and deltas in context.
11:03:41 <oerjan> elliott: how do you define .+. without
11:04:02 <elliott> obviously origin is a Point, and the rest are Deltas
11:04:03 <elliott> CakeProphet: no, i was mistaken
11:04:12 <oerjan> elliott: without a typeclass
11:04:22 <elliott> oerjan: (.+.) :: Point -> Delta -> Point
11:04:47 <elliott> oerjan: adding two deltas is rather fundamentally different from that, so it should have another name
11:04:50 * oerjan goes to turn on his brain
11:05:08 <oerjan> ...sorry, out of batteries.
11:05:20 <elliott> your last task is to give Delta a nicer constructor name :P
11:05:33 <elliott> (:@) is nice for Point because it has the nice "at" connotation.
11:06:46 <itidus21> dunno why vertex didn't occur to me sooner.. it may not be appropriate but it's better than most of my efforts
11:06:55 <oerjan> (it clashes if you use Seq, though)
11:07:05 <elliott> I don't like :>, it's too directional and that conflict as you said
11:07:18 <CakeProphet> I don't like :> because it's a stupid little face
11:07:26 <oerjan> elliott: but deltas _are_ directions >:)
11:07:38 <CakeProphet> but not directional between its arguments.
11:09:26 <oerjan> itidus21: that's not legal, no letters
11:10:00 <oerjan> > let (\/:) = (+) in 2 \/: 2
11:10:20 <elliott> oerjan: ah hm, turns out I do need addition on points
11:10:31 <CakeProphet> :\/ is not bad for delta except that it's annoying to type.
11:10:31 <elliott> the storage offset (which is a point) plus a coordinate within that offsetted area
11:10:36 <elliott> I can define it separately
11:11:16 <oerjan> itidus21: sorry, no brackets either
11:11:35 <CakeProphet> I bet you'll need addition on deltas as well.
11:11:57 <itidus21> well my intention with \/ is it spells v
11:12:08 <CakeProphet> .+. :: Pointlike a -> Pointlike a -> Pointlike a
11:12:11 <itidus21> otherwise i don't men much by it
11:14:43 <CakeProphet> so then is P -> P equivalent to Pointlike a -> Pointlike a or Pointlike a -> Pointlike b?
11:15:11 <oerjan> it's equivalent to (forall a. Pointlike a) -> (forall a. Pointlike a)
11:15:58 <oerjan> which cannot take a plain Pointlike a as argument.
11:16:53 <CakeProphet> perhaps I don't understand rank-n types very well... or, I guess this is an existential?
11:16:58 <oerjan> a polymorphic value of type forall a. Pointlike a
11:17:57 <oerjan> the forall in the result type is easy to remove, though.
11:18:26 <olsner> hmm, the function gets a rank-2 type, but the type P isn't in itself? or is it?
11:18:51 <oerjan> CakeProphet: hopefully you would have some functions that are polymorphic in a...
11:19:11 <elliott> <p>The REFC fingerprint allows vectors to be encoded into
11:19:11 <elliott> and decoded from single scalar cell values.
11:19:14 <elliott> oerjan: Point or Delta :-P
11:19:35 <oerjan> AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAaaaaaaaaaaaa
11:19:55 <CakeProphet> and then special functions that treat one point as a delta.
11:20:17 <elliott> Why don't we just have one type of data
11:20:20 <elliott> And functions that treat it specially
11:20:20 <oerjan> itidus21: that's not what we usually call S
11:20:25 <elliott> Oh right, because this isn't Tcl
11:20:52 <CakeProphet> yeah but they're essentially the same thing the only difference is that you have operations that have an operand that treats the point as a delta.
11:21:02 <oerjan> itidus21: sadly greek letters count as letters, so no.
11:21:03 <elliott> yeah but they're essentially the same thing the only difference is that you have operations that have an operand that treats the string as a list.
11:21:42 <oerjan> otherwise everyone would be using real λ in haskell by now
11:21:51 -!- Taneb has joined.
11:22:09 <CakeProphet> (mappend :: Point -> Point -> Point) point delta
11:23:10 <oerjan> CakeProphet: in four different ways :P
11:23:25 <CakeProphet> oerjan: makes me wonder why there is no typeclasses for monoids like that.
11:23:44 -!- derdon has quit (Remote host closed the connection).
11:24:09 <CakeProphet> and would prefer having Monoid classes with more than one mappend.
11:24:11 <oerjan> &&, ||, /=, ==, const and const id are all monoid operations for Bool
11:24:32 <oerjan> scratch those const ones
11:24:35 <elliott> isn't mempty `mappend` ... yeah
11:24:40 <oerjan> they're just semigroups
11:25:09 <fungot> \o| |o| |o/ \m/ \m/ |o/ \o/ \o| \m/ \m/ \o| |o| |o/
11:25:10 <myndzi\> | | | `\o/´ | | | `\o/´ | | |
11:25:10 <myndzi\> >\ |\ >\ | >\ /'\ /`\ | /'\ |\ /<
11:25:20 <oerjan> itidus21: i have no idea what haskell considers those chars as
11:25:32 <itidus21> i just got inspired playing around with character map
11:25:59 <oerjan> CakeProphet: well yes but are they legal operator characters? :P
11:26:18 <Taneb> Somebody's made another brainfuck derivative
11:26:25 <CakeProphet> does Haskell even allow Unicode aside from a few special cases?
11:26:25 <oerjan> > let a ╔ b = a + b in 2 ╔ 2
11:26:49 <elliott> haskell has full unicode support
11:27:05 <oerjan> CakeProphet: at least ghc uses the unicode character classifications to decide. somehow.
11:27:23 <CakeProphet> ╔ is an operator that takes uh two.... uh... somethings and TURNS RIGHT,
11:27:29 <elliott> > let æßð = "yes"; (→) = const in æßð → "a"
11:27:29 <lambdabot> <no location info>: parse error on input `
11:27:40 <elliott> > let æßð = "yes"; → = const in → æßð "a"
11:27:41 <lambdabot> <no location info>: parse error on input `
11:27:50 <CakeProphet> you could also have it turn one thing right by being postifx.
11:29:06 <CakeProphet> elliott: there you go, your delta-application function. :)
11:29:16 <CakeProphet> obviously with type Point -> Delta -> Point
11:29:22 <itidus21> It is cheerfully describes it as Black Up-Pointing Triangle
11:30:45 <lambdabot> <no location info>: parse error on input `
11:30:47 <itidus21> cheerfully described as "Increment"
11:31:12 <oerjan> > (sin :: Double → Double) 2
11:31:14 <CakeProphet> now I just need a unicode keyboard so I can sanely program with these operators.
11:31:31 <Taneb> My chair has speakers in it
11:31:39 <oerjan> it wasn't illegal, just taken.
11:31:51 <Taneb> I am going to play some Queen music
11:31:53 <itidus21> i didnt mean to define all of these things
11:32:04 <itidus21> i hope im not making a mess of lambdabot
11:32:45 <CakeProphet> there should be a Haskell IDE or somesuch in which you can assign numpad keys to unicode characters
11:32:50 <oerjan> itidus21: > let doesn't actually define things permanently
11:32:52 <CakeProphet> with some kind of graphical bank displayed.
11:33:10 <itidus21> at least i have kind of opened the possibility of the unicodes :D
11:33:18 <oerjan> you need @let for ... slightly more permanent, but not really.
11:33:19 <itidus21> beginning with my /\ tomfoolery
11:34:25 <CakeProphet> also other nice features like automatically inserting type signatures, renaming functions globally across multiple files, etc.
11:34:45 <CakeProphet> but the unicode bank would actually make unicode operators convenient
11:36:18 <oerjan> today's http://www.mezzacotta.net/postcard/ has a nice disclaimer
11:38:10 <oerjan> *(no, the picture is not broken)
11:38:33 <elliott> depending on your definition of broken
11:38:52 <elliott> oerjan: only four more IWC strips left ;D
11:39:08 <fungot> AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA ...too much output!
11:40:13 <CakeProphet> other Haskell IDE ideas: builtin (un)?pl, (un)?do, djinn, shell (which obviously includes ghci), hoogle, documentation viewer stuff
11:40:58 <oerjan> CakeProphet: there is a way to plug lambdabot into ghci. ostensibly.
11:41:16 * itidus21 starts pondering other potential uses of unicode characters.
11:41:41 <oerjan> itidus21: maybe you could use them to write in strange languages
11:42:07 <CakeProphet> oerjan: ah yes that would work I think. though also a source-code transform version of each would be neat.
11:42:22 <CakeProphet> so you right-click on a type signature, run djinn, and it spits out a function definition
11:42:36 <CakeProphet> right-click on a function and then transform via do/pl
11:42:52 <elliott> oerjan: not really ostensibly, IIRC it's even maintained still.
11:42:53 <CakeProphet> as you may not necessarily want what pl gives you. :P
11:43:01 <elliott> CakeProphet: djinn is not very useful in practice at all.
11:43:15 <elliott> I guess it's nice if you want to generate large swathes of the Prelude, but apart from that.
11:43:16 <CakeProphet> if it ever does become useful in practice.
11:43:28 <elliott> It's not some collection of hacks; it's a defined, immutable algorithm.
11:43:35 <elliott> Do you know how djinn works?
11:43:58 <elliott> "For the curious, Djinn uses a decision procedure for intuitionistic
11:43:58 <elliott> propositional calculus due to Roy Dyckhoff. It's a variation of
11:44:28 <CakeProphet> okay, but that's not to say it couldn't be improved.
11:44:51 <elliott> You would like it to just make shit up if that fails?
11:45:10 <CakeProphet> well no, but if it had access to more functions
11:46:08 <oerjan> djinn does have a way to define data types. they just cannot be recursive.
11:46:14 <lambdabot> djinn provides: djinn djinn-add djinn-del djinn-env djinn-names djinn-clr djinn-ver
11:46:18 <lambdabot> data Either a b = Left a | Right b
11:46:22 <lambdabot> class Monad m where return :: a -> m a; (>>=) :: m a -> (a -> m b) -> m b
11:46:24 <lambdabot> class Eq a where (==) :: a -> a -> Bool
11:46:26 <lambdabot> class Applicative f where pure :: a -> f a; (<*>) :: f (a -> b) -> f a -> f b; (*>) :: f a -> f b -> f b; (<*) :: f a -> f b -> f a
11:46:32 <elliott> I'm honestly impressed djinn can even do typeclasses.
11:46:43 <CakeProphet> well I don't mean define data types. I mean if it had a collection of functions and their type information
11:47:00 <CakeProphet> it could decide that a function has the correct type to satisfy the proof, so to speak.
11:47:25 -!- Taneb has quit (Quit: what a big quitter he is, eh?).
11:47:30 <oerjan> well that would be equivalent to having some extra axioms in the logic.
11:47:42 <oerjan> so probably possible in principle
11:47:54 <elliott> oerjan: I'm pretty sure you'd have to modify the search procedure for each new axiom.
11:48:13 <CakeProphet> yes, and it would make it more practical as you could say "write a program for this type and here's a function, module, etc to use"
11:48:15 <elliott> so the answer to the question "can djinn do lists if we special-case it to do lists" is... yes!
11:48:41 <oerjan> elliott: it would still be limited to non-recursive types i think
11:48:57 <elliott> yeah, I just couldn't think of a type :P
11:48:59 <elliott> :t (((. head . uncurry zip . splitAt 1 . repeat) . uncurry) .) . (.) . flip
11:49:00 <lambdabot> forall b c a. (b -> a -> c) -> (b -> a) -> b -> c
11:49:38 <CakeProphet> but a sufficiently sophisticated djinn could list a bunch of alternatives and have the user decide which one to insert.
11:49:38 <oerjan> elliott: in fact you can in principle already do this with @djinn as it stands - just add your axioms as extra a1 -> a2 -> parts
11:50:01 <oerjan> well, those cannot be polymorphic i guess.
11:50:06 -!- nooga has quit (Ping timeout: 252 seconds).
11:50:10 <elliott> oerjan: wasn't that obvious? :P
11:50:18 <elliott> you can also define any data type by just including the relevant function as its only field.
11:51:54 <oerjan> @djinn Monad m => m (m a) -> m a
11:52:12 <oerjan> ...something tells me the monad support is rather limited
11:52:37 <oerjan> @djinn Monad m => a -> m a
11:53:46 <oerjan> @djinn Monad m => (a -> m b) -> m a -> m b
11:55:48 <elliott> hm is there a way to tell GHC to use irrefutable patterns for a datatype by default?
12:00:41 <twice11> elliott: None I know of, as irrefutable patterns destroy the ability of matching multiple patterns.
12:01:04 <twice11> Depending on what you try to do, you could replace your datatype by a newtype.
12:01:25 <twice11> As newtypes are single-constructor only, matches on them are inherently irrefutable.
12:01:57 <oerjan> i assume the useful case would be single-constructor, multiple fields
12:03:42 <elliott> twice11: There's only one constructor.
12:04:04 <elliott> Newtyping a tuple isn't viable, the whole reason I'm using this in place of a tuple is that it's strict and unboexd :-)
12:04:56 <oerjan> also this would be tricky, what about case (x, (y:z)) of ... where the tuple does this by default, but it would still be wierd to error out if the second element is an empty list...
12:04:58 <twice11> oerjan: Doesn't work? For me it certainly does.
12:05:03 <twice11> newtype Test = Test (Int,Bool, String) deriving Show
12:05:10 <twice11> main = print $ Test (3,True,"why?")
12:05:11 -!- Sgeo has quit (Ping timeout: 260 seconds).
12:05:22 <oerjan> twice11: doesn't work to achieve a useful irrefutable pattern default
12:05:54 <elliott> I'm sure oerjan knows what he's talking about, having written half the Haskell Report. :p
12:07:15 <oerjan> case Test (1, True, "") of Test (_, _, (x:xs)) -> ... would still error out too early.
12:07:56 <twice11> In this case, the match on the list would need to be irrefutable, though, not the match on the type "Test".
12:08:49 <twice11> Of course there is no way to make the match on members of a data type irrefutable by just playing around with the data type.
12:08:50 <oerjan> > case (1, True, "") of ~(_, _ x:xs) -> "testing"
12:08:51 <lambdabot> <no location info>: Parse error in pattern
12:08:59 <oerjan> > case (1, True, "") of ~(_, _, x:xs) -> "testing"
12:09:54 <twice11> OK, I'm not gonna split hairs here, but the "~" character is obviously "recursive", applying to all sub-patterns too.
12:09:58 <elliott> "hough, not the match on the type "Test".
12:09:58 <elliott> <twice11> Of course there is no way to make the match on members of a data type irrefutable by just playing around with the data type."
12:10:00 <elliott> I was thinking more a flag.
12:10:12 <elliott> Admittedly INLINE doesn't change semantics
12:10:37 <twice11> So like "data Test = Test Int Bool String {#-IRREFUTABLE-#}"?
12:10:46 <oerjan> twice11: it's not clear what should be the semantics if someone _did_ provide a way to make irrefutable default patterns
12:10:54 <twice11> So that matches on the string fields would be irrefutable.
12:10:59 <elliott> data Test = Test Int Bool String
12:11:22 <elliott> data Point = (:@) {-# UNPACK #-} !Value {-# UNPACK #-} !Value deriving (Eq, Ord, Show)
12:11:45 <elliott> Erm, {-# ... #-} not {#- ... -#} of course.
12:12:52 -!- MSleep has changed nick to MDude.
12:12:54 <twice11> for the top-level match, newtype-of-tuple provides the required irrefutability:
12:13:07 <twice11> data Test2 = Test2 Int Bool String deriving Show
12:13:18 <twice11> foo3 ~(Test2 _ _ _) = True
12:13:28 <twice11> foo1 and foo3 can be called with "undefined".
12:13:46 -!- hagb4rd|zzZ has joined.
12:14:06 <oerjan> twice11: but you can actually define any variables in foo1
12:14:15 <elliott> twice11: But not the required unpacking or strictness.
12:14:20 <elliott> If I didn't need them, I would just use a tuple.
12:14:38 <twice11> elliott: I guess "unboxed tuples" are too limited for you.
12:16:47 <twice11> foo4 (Test (_,_,_)) can not be called with undefined (of course), so I just moved the refutability by introducing a non-refutable futile further layer of indirection.
12:17:03 <elliott> I love how cabal, when a package fails to build, just builds a random other number of them before reporting the error.
12:17:15 <elliott> twice11: Clearly we just need an infinite stack of irrefutability.
12:20:24 <twice11> elliott: Do you want irrefutability for performance or for being able to pass undefined?
12:21:24 <elliott> Performance. Not that I expect it'll help much or perhaps even at all... I'd just like to try everything before actually having to replace my fungespace :-P
12:22:10 <twice11> So saying !Point instead of Point and relying of ghc's worker split-off would do the job nicely.
12:22:27 <twice11> No, I don't know a way of getting the bang everywhere.
12:22:47 <elliott> Preferably I'd like to localise the Horrific Cthulian Directives, though. :p
12:23:00 <twice11> Also, !Point is a pattern does not work...
12:23:55 <twice11> Modifying actual patterns instead of type signatures would be even more ugly.
12:24:24 <elliott> You can say !Point as a type?
12:25:12 <elliott> Fun Haskell-derivative feature number 9999: Strictness polymorphism.
12:25:27 <twice11> That's what I meant when I wrote "!Point is a pattern", wanted to type "!Point in a pattern" and meant "!Point in a signature".
12:26:07 <elliott> To expand on that feature: Every type is, by default, takes either "strict" or "lazy". It then passes this on to all the types mentioned in its definition that don't have an explicit override.
12:26:39 <elliott> So you can define lists once and get lazy lists with lazy elements, spline-strict lists with lazy elements, element-strict lists with lazy splines, ...
12:28:43 -!- oerjan has quit (Quit: leaving).
12:31:41 -!- itidus21 has quit (Quit: Leaving).
12:37:34 -!- Taneb has joined.
12:41:55 -!- itidus21 has joined.
12:44:28 <Taneb> Does anyone else do Project Euler?
12:46:38 -!- itidus21 has quit (Client Quit).
12:50:21 -!- itidus21 has joined.
12:50:53 -!- itidus21 has quit (Client Quit).
12:56:47 -!- itidus21 has joined.
12:59:03 -!- Taneb has quit (Remote host closed the connection).
13:01:45 -!- Taneb has joined.
13:02:26 <Jafet> The thing that isn't a project and has nothing to do with Euler
13:03:32 <Taneb> That has nothing to do with my question
13:03:49 <cheater> what is the keyboard combination to change readline to vi mode and emacs mode?
13:03:58 <Jafet> elliott: data Lazy a = Lazy a; data StrictList a = SNil | SCons !a (StrictList a); type LazyList a = StrictList (Lazy a)
13:04:43 <elliott> Jafet: Cute. But doesn't let you parameterise spline strictness.
13:05:29 <Jafet> data ElliottIsAFag s a = SNil | SCons !a !(spn (ElliotIsAFag spn a))
13:05:44 <Jafet> ...I think that would work.
13:06:04 <elliott> Congratulations, you've proved that strict languages admit explicit laziness
13:06:27 <Jafet> Damn, I was trying to prove the converse.
13:06:28 <elliott> The idea with this is that you wouldn't have to define all that, and also wouldn't have to pack/unpack Lazy values (i.e. the reason laziness is awful in strict languages) :P
13:07:14 <Jafet> You can usually fix that with more polymorphism.
13:09:44 <Jafet> The Prelude does not have polymoarphism.
13:10:32 <Jafet> Also, you can't unbox that !a.
13:10:41 <elliott> class O o where pack :: a -> o a; unpack :: o a -> a
13:10:57 <Jafet> More like Num a => Num (Lazy a)
13:11:13 <elliott> data List o a = Nil | Cons !(o a) !(o (List o a))
13:11:22 <elliott> Jafet: who cares about the prelude
13:11:28 <Jafet> And don't have pack or unpack, just roll both into cast
13:11:40 <elliott> Jafet: Anyway, one problem there is that yo uca'n't override strictness of the element type
13:11:49 <elliott> You need to define your own newtype that discards its argument
13:12:16 <elliott> i.e. spline-strict list of lazy integers
13:12:25 <elliott> (List! Int) == fully strict list because the ! is passed on
13:12:30 <elliott> I dunno, it sounds interesting :-P
13:12:46 <elliott> (List Int!) -- polymorphic on spline strictness but with strict elements
13:13:08 <Jafet> Programming with splines sure is
13:14:15 <Jafet> ,,,smooth? Visually appealing?
13:14:45 <elliott> The other nice thing is that functions become the automatic "correct" strict implementation
13:14:54 <elliott> As in you don't need to rewrite map for efficiency on strict lists
13:15:43 -!- itidus21 has quit (Read error: Connection timed out).
13:15:46 <Jafet> How would it be more efficient?
13:16:11 -!- itidus21 has joined.
13:16:20 <Jafet> map on a non-strict list.
13:16:30 <elliott> It wouldn't, it'd just be properly strict
13:16:32 -!- sllide has joined.
13:16:45 <elliott> I guess that Haskell stuff gtes you the same, but really nobody wants to write in that
13:17:23 <Jafet> That would suck, actually, since you'd need a stack or a reversal.
13:18:27 <Jafet> Either way, it's a linear amount of extra space.
13:20:12 <Jafet> map on strict lists.
13:20:45 <elliott> Jafet: Well, I'm not saying strict languages are a party.
13:20:56 <elliott> But people do map over strict lists quite an awful lot In The Real World, it has to be said. :p
13:21:10 <Jafet> It's kind of egregious when a strict solution uses more space than the lazy one.
13:21:27 <elliott> But the main thing is that I could write !(Value,Value) as a type, dammit, rather than defining my own fucking tuples.
13:21:31 <Jafet> Well, you save a bit of space from unboxing, but it's not enough.
13:22:32 <Jafet> Do you need strict tuples that often, or do you just want unboxed tuples
13:22:50 <elliott> data Point = (:@) {-# UNPACK #-} !Value {-# UNPACK #-} !Value deriving (Eq, Ord, Show)
13:23:06 <elliott> Except without the part where I reimplement tons of things for them and the constructor/destructor syntax isn't as nice as (a,b)
13:23:15 <elliott> Unboxed tuples wouldn't even remotely work, I need to return these things
13:23:23 <Jafet> Well, you can fix the tuple type system while you're at it.
13:24:06 -!- Taneb has quit (Read error: Connection reset by peer).
13:24:22 <Jafet> So you can write tail (a,b,c...) and get (b,c...)
13:24:36 -!- elliott has changed nick to Clippy.
13:24:40 <Jafet> Then init (x,y,z,w) = (x,y,z)
13:24:42 <Clippy> It looks like you're writing HLists.
13:24:50 <Clippy> - Bug the GHC developers
13:24:51 -!- Clippy has changed nick to elliott.
13:25:52 <elliott> If you disagree, reconsider your opinions.
13:26:12 <Jafet> Eh pops up at the right time and doesn't afraid of anything.
13:26:31 <Jafet> @google openoffice.org clippy
13:26:32 <lambdabot> http://www.oooforum.org/forum/viewtopic.phtml?t=50110
13:26:44 <elliott> Finally I can switch to Linux.
13:28:37 <Jafet> http://www.oooforum.org/forum/viewtopic.phtml?t=22401
13:28:46 <Jafet> 10% of people actually want it.
13:29:54 <Jafet> That's probably more people than the people who want, say, auto-turn-everything-that-could-possibly-be-interpreted-as-a-date-into-a-date-even-American-so-called-dates in spreadsheets.
13:30:32 <elliott> Really, American dates aren't that bad. PDPs had integers like that, you know.
13:30:45 <elliott> I wonder if PDPs were fast at handling American dates.
13:33:06 -!- sebbu has quit (Read error: Connection reset by peer).
13:35:24 -!- sebbu has joined.
13:35:24 -!- sebbu has quit (Changing host).
13:35:24 -!- sebbu has joined.
13:38:35 -!- ais523 has joined.
13:45:53 <ais523> something that came up at my job, and people might have ideas on here: what's the easiest (ideally fully-automated) way to get all the email sent to a gmail account into an mbox file or equivalent easily machine-readable format?
13:46:05 <ais523> I'm assuming it involves IMAP somewhere
13:47:46 <elliott> gmail has imap interface, so just enable it and... use a client
13:47:53 <ais523> yep, I'm wondering where to get an appropriate IMAP client
13:48:03 <ais523> using Evolution is obviously silly
13:48:12 <elliott> note: joke. joke. joke. no. joke.
13:48:32 <elliott> ais523: At least do Maildir rather than mbox.
13:48:42 <ais523> what's the difference?
13:49:18 <ais523> well, the application is: I want to perform an operation on the text and subject line of every email emailed to a particular gmail account
13:49:28 <elliott> It has a file per message and actually supports more than one application accessing a file without like totally rewriting it.
13:49:28 <ais523> (using gmail wasn't my choice here, and seems a little inappropriate for the task)
13:49:42 <elliott> It's easy to implement, http://en.wikipedia.org/wiki/Maildir#Technical_operation
13:49:48 <ais523> there's only the one application accessing the account
13:49:50 <elliott> ais523: bayes has code for this :-)
13:49:53 <ais523> it's dedicated for the one task only
13:49:58 <elliott> though you'd have to ask comex if he has a copy of it
13:50:01 <ais523> elliott: aha, it probably does
13:50:09 <elliott> well, I forget what bayes operated on
13:50:12 <ais523> language isn't really important, although I don't like Python
13:50:14 <elliott> might have been imap, might have been mbox
13:50:21 <elliott> but python has imap too so that's like three extra lines
13:50:24 <elliott> ais523: i don't either but it worked at the time
13:50:33 <elliott> ais523: I'm really surprised Bayes worked, really
13:50:46 <ais523> elliott: the same is true of most programs
13:50:47 <HackEgo> 2007-08-19.txt:22:24:16: <Overand> Gurami: my favorite language for web development is english - I requie all web users to phrase queries in plain english, then I write my answer out in cursive german, which an OCR program will scan, and translate to english, then feed back to the user.
13:50:47 <HackEgo> 2005-07-16.txt:07:25:12: <calamari> that's interesting though.. I wonder what a programming language would look like if the ancient egyptians had computers
13:50:55 <ais523> I'm surprised my quick hacks to OCaml's parser this morning worked
13:51:00 <ais523> and to its main evaluation loop
13:51:05 <elliott> did Bayes ever actually do well at the AAA?
13:51:15 <elliott> it played perfectly, but I don't remember if that translated into real success
13:51:16 <ais523> the AAA collapsed before it had much of a chance, IIRC
13:51:19 <HackEgo> 2008-04-04.txt:19:06:07: <ais523> but it's really important in sed
13:51:27 <HackEgo> 2011-09-17.txt:13:51:16: <itidus21> `log really important
13:51:34 <HackEgo> 2010-01-25.txt:22:02:48: <cpressey> If it was really important for me to get clang running, I probably would have tried it in the VM. But for kicks, it's hey, let's try cygwin!!
13:51:46 <HackEgo> 2010-10-16.txt:15:01:08: <elliott> catseye: is the windows partition really important? i'd have just upgraded the ubuntu install
13:52:22 <elliott> ais523: hmm, partnerships weren't stripped of personhood, right?
13:52:41 <HackEgo> 2010-10-20.txt:00:04:00: <cpressey> trees have personhood
13:52:49 <HackEgo> 2010-10-20.txt:00:04:00: <cpressey> trees have personhood
13:52:53 <ais523> I know I tried to argue that they were still nonetheless players
13:52:58 <elliott> hmm, I thought that was ruled R101-violating
13:52:58 <ais523> until someone explicitly deregistered them
13:53:01 <HackEgo> 2010-09-12.txt:07:51:52: <Sgeo> Does U.S. Law, which might contain legal fictions (corporate personhood, for example), constitute a fictitious world?
13:53:11 <ais523> but I think it was decided that the undefinition of concepts caused partnerships to cease to exist
13:53:13 <elliott> seems an easy way to circumvent R101; depersonalise something, abuse it, then repersonalise it
13:53:24 <HackEgo> 2010-09-17.txt:05:44:25: <pikhq> Less so culturally, but very much so economically.
13:53:41 <HackEgo> 2007-12-28.txt:00:17:49: <ihope> Small world, I guess. I conclude that everyone here is interested in Nomic.
13:53:53 <ais523> egrep recognises \b? nice
13:54:12 <HackEgo> 2008-05-08.txt:15:36:17: <ehird> Monticello recognizes your monkey patches and even version controls them
13:54:23 <ais523> elliott: ooh, that sounds useful
13:54:41 <elliott> ais523: I'm sure Feather's VCS could do that
13:54:42 <HackEgo> 2007-04-17.txt:02:37:31: <SevenInchBread> if the filesystem recognizes content types... then it can be smart about handling them. audio is typically large, and edited infrequently... while a swap file stays roughly the same most of the time, but will be written and read from frequently.
13:54:42 <ais523> I was planning to diff my unpacked OCaml directory against the original, ignoring files that didn't exist in both, to find my monkeypatches
13:54:48 <ais523> elliott: Feather has a VCS?
13:54:53 <elliott> Monticello is a Smalltalk thing, so presumably?
13:55:07 <HackEgo> 2010-03-01.txt:11:58:55: <scarf> one thing I've been thinking about recently is designing my own VCS
13:55:18 <elliott> Ha, what does that scarf know about VCSes.
13:55:24 -!- ais523 has changed nick to scarf.
13:55:24 <elliott> It'll beat whatever crappy idea HE has.
13:55:29 -!- scarf has changed nick to ais523.
13:55:55 <HackEgo> 2011-03-16.txt:02:53:07: <quintopia> indeed, it is impossible to give an answer inadvertently
13:55:56 <elliott> ?tell scarf I'm from the future! Turns out your VCS sucks. Actually it wiped out half the human population. Thanks a bunch.
13:56:19 * itidus21 leaves lesions and trauma on `log
13:56:24 <ais523> elliott: you're getting sg and feather muddled again
13:56:33 <ais523> anyway, I'm pretty sure I know what a Feather program is
13:56:39 <elliott> ais523: the folly is pretending all these concepts can be separated
13:56:49 <ais523> it's a sequence of program fragments that, when run, transform a Feather interpreter into a new state
13:57:01 <ais523> I'm not sure if output is possible, but luckily it's an esolang, so I don't really mind
13:57:34 <HackEgo> 2010-04-19.txt:16:38:52: -!- Tritonio_GR has quit (Read error: Connection reset by peer).
13:57:45 <HackEgo> 2010-03-13.txt:18:25:41: <Gregor> pikhq: Y'know, I'm starting to think that metric fucktons aren't even a real unit!
13:58:53 <HackEgo> 2010-10-17.txt:17:57:02: <elliott> pikhq: I think we are up for a FUCKTON of flashbacks.
13:59:46 <itidus21> why are people always addressing pikhq with the word fuckton i wonder
14:00:24 <HackEgo> 2011-09-17.txt:13:58:50: <itidus21> `log fuckton
14:00:31 <HackEgo> 2011-09-12.txt:03:52:40: <Gregor> As per how many files, roughly a metric fuckton.
14:00:57 <itidus21> so it seems gregor's faith in that metric is stable
14:01:06 <itidus21> ok my sample size was too small
14:01:37 <HackEgo> 2009-06-18.txt:21:10:58: <ehird> pikhq: metric fuckton?
14:01:59 <itidus21> wtf.. some freeeaky pattern there
14:13:46 -!- Taneb has joined.
14:17:59 -!- hagb4rd|zzZ has changed nick to hagb4rd.
14:29:06 -!- Taneb has quit (Read error: Connection reset by peer).
14:35:24 -!- Patashu has quit (Ping timeout: 258 seconds).
14:39:15 -!- Taneb has joined.
15:13:04 -!- derrik has joined.
15:15:31 -!- Taneb_ has joined.
15:17:56 -!- sebbu2 has joined.
15:18:08 -!- Taneb has quit (Ping timeout: 252 seconds).
15:21:20 -!- sebbu has quit (Ping timeout: 252 seconds).
15:25:06 -!- Taneb_ has quit (Ping timeout: 252 seconds).
15:38:18 -!- sebbu2 has changed nick to sebbbu.
15:39:20 -!- calamari has joined.
15:59:28 <HackEgo> http://codu.org/projects/hackbot/fshg/index.cgi/raw-file/tip/paste/paste.3409
16:00:35 <Gregor> Welp, I'm the first person to ever say "fuckton" in this channel.
16:00:47 <Gregor> Also the first person to say "metric fuckton"
16:01:13 <ais523> isn't a metric fuckton slightly smaller than an imperial fuckton?
16:01:24 <Gregor> ais523: According to our own logs, slightly /larger/
16:01:57 <Gregor> `run sed 's/\(.*metric\)/ \1/gi' paste/paste.3409 | paste
16:01:59 <HackEgo> http://codu.org/projects/hackbot/fshg/index.cgi/raw-file/tip/paste/paste.5111
16:02:32 <Gregor> Looks like about half of all fuckton mentions are qualified.
16:28:08 -!- sebbbu has quit (Read error: Connection reset by peer).
16:30:37 -!- sebbbu has joined.
16:35:33 -!- sebbbu has changed nick to sebbu.
16:35:47 -!- sebbu has quit (Changing host).
16:35:48 -!- sebbu has joined.
16:46:35 -!- ive has joined.
16:46:43 -!- Freedom666 has joined.
16:47:36 -!- Freedom666 has left.
16:48:07 <lambdabot> Language.Haskell.TH appsE :: [ExpQ] -> ExpQ
16:48:07 <lambdabot> Language.Haskell.TH listE :: [ExpQ] -> ExpQ
16:48:07 <lambdabot> Language.Haskell.TH tupE :: [ExpQ] -> ExpQ
16:48:17 <lambdabot> Data.List transpose :: [[a]] -> [[a]]
16:48:17 <lambdabot> Control.Monad msum :: MonadPlus m => [m a] -> m a
16:48:17 <lambdabot> Test.QuickCheck oneof :: [Gen a] -> Gen a
16:48:53 -!- derrik has quit (Quit: gone).
16:49:21 <Deewiant> elliott: (Parsec3, Text) -> (Trifecta, ByteString): 6 files changed, 263 insertions(+), 202 deletions(-)
16:49:41 <elliott> Deewiant: I logpinged you repeatedly
16:50:12 <Deewiant> Nice to know that the tab thing is in the works
16:51:12 <Deewiant> Dang, 12% of this file is imports now
16:51:29 <elliott> Deewiant: Be thankful, you're not dealing with TH like I am
16:51:34 <Deewiant> I don't think I've ever had 8 qualified imports in one module
16:52:00 <elliott> Gotta love a library where the recommended calling convention for the API functions is "they all take monadic values and return monadic values, except that, if it's a list, it's actually a pure list of monadic values, and..."
16:55:27 <Deewiant> Whoops, make that 214 deletions
16:59:32 <elliott> Deewiant: Can you shoot whoever wrote the cereal package for me, thanks
16:59:52 <elliott> What kind of horrible person adds functions for serialising WordNs for various N in little-endian BUT NOT INTS
17:00:05 <elliott> (Okay I guess I can just fromIntegral it and it'll be fine but still)
17:01:43 <Deewiant> elliott: That'd be "Galois Inc." and some others
17:03:14 <elliott> Deewiant: DAMN YOU GALOIS INC.
17:03:20 <elliott> module MC.Protocol.Helpers
17:03:26 <elliott> Finally my code is becoming a mess already
17:03:31 <elliott> Just what I always secretly wanted
17:19:21 -!- azaq23 has joined.
17:19:22 -!- azaq23 has quit (Changing host).
17:19:22 -!- azaq23 has joined.
17:28:09 -!- calamari has quit (Quit: Leaving).
17:48:02 <fizzie> Deewiant: My xmonad.hs has six qualified imports, and they're named using the "1-3-letter all-uppercase cryptic acronyms" style elliott hates. (Though three of them probably have no real business to be qualified.)
17:49:40 <elliott> fizzie: I thought you used so-called ``awesome''.
17:49:53 <Deewiant> At least I can recognize five of these eight abbreviations out of context
17:50:02 <elliott> Also, as far as hating them goes, I realised my style was totally inconsistent and switched to Deewiant's
17:50:06 <elliott> Bit of an existential crisis there
17:50:23 <elliott> Deewiant: I gently request "B" instead of "BS", on behalf of programmers worldwid.e
17:50:35 <fizzie> elliott: I made the plunge a month ago.
17:50:43 <fizzie> Deewiant: HT, W, T, DBA, DBC, DBT.
17:50:47 <Deewiant> Actually I just remembered that BSL should be BL
17:50:51 <elliott> fizzie: I hope you've enjoyed your plungerating.
17:51:00 <fizzie> elliott: At Least It's Not Lua(tm).
17:51:22 <Deewiant> Anyway, BS is intentional precisely because it's BS
17:51:49 <Deewiant> UTF8 should probably be BS_UTF8 but meh
17:52:26 <elliott> fizzie: I should probably try out xmonad sometime myself. I mean, there's something to be said for being under fifty lines.
17:52:32 <elliott> Deewiant: What exactly is the BS_UTF8 module
17:53:44 <elliott> Meanwhilst, from the land of generated code:
17:53:45 <fizzie> elliott: So far I like it, even though my setup (Gnome-2 session running XMonad as the WM, with a gnome-panel instance holding all those indicator schwubblets and a systray) is probably something that would make "real XMonadists" go up in flames.
17:53:52 <elliott> (Control.Applicative.pure CLogin)
17:53:54 <elliott> MC.Protocol.Helpers.putInt32be)
17:53:56 <elliott> MC.Protocol.Helpers.putTextUCS2be)
17:53:58 <elliott> MC.Protocol.Helpers.putInt64be)
17:54:00 <elliott> MC.Protocol.Helpers.putInt32be)
17:54:02 <elliott> Data.Serialize.Put.putWord8)
17:54:04 <elliott> Data.Serialize.Put.putWord8)
17:54:08 <elliott> Data.Serialize.Put.putWord8)
17:54:10 <elliott> Data.Serialize.Put.putWord8 } }
17:54:13 <fizzie> Oh no, I messed up the pretty triangle. :(
17:54:16 <elliott> fizzie: Pretty sure PROMINENT XMONAD COMMUNITY MEMBERS(tm) do the Gnome thing too.
17:54:22 <elliott> And yes, you are disgusting.
17:54:41 <elliott> Now if you stay quiet for a second, you will hear the sound of Deewiant yelling USE <ASTERISK>
17:54:43 -!- DH____ has quit (Read error: Connection reset by peer).
17:54:47 <elliott> He will then type the asterisk, enabling my use of it
17:55:04 -!- DH____ has joined.
17:55:20 <elliott> Also he might tell me that it should be get instead of put there and he'd be EXACTLY RIGHT.
17:55:57 <elliott> 1 -> ((((((((Control.Applicative.pure CLogin
17:55:57 <elliott> MC.Protocol.Helpers.getInt32be)
17:55:57 <elliott> MC.Protocol.Helpers.getTextUCS2be)
17:55:59 <elliott> MC.Protocol.Helpers.getInt64be)
17:56:03 <elliott> MC.Protocol.Helpers.getInt32be)
17:56:09 <elliott> Data.Serialize.Get.getWord8)
17:56:16 <elliott> Data.Serialize.Get.getWord8)
17:56:17 <elliott> Data.Serialize.Get.getWord8)
17:56:21 <elliott> Data.Serialize.Get.getWord8) } }
17:56:28 <Deewiant> elliott: Do you need those brackets
17:56:31 <fizzie> I also have a dzen2-for-each-monitor statusbars thing fed by a separate proggie that receives status updates via DBus, and the XMonad.Layout.IndependentScreen thing that makes workspaces local per screen (as in Awesome), which I guess are non-conventional things to do also.
17:56:32 <Deewiant> elliott: Also btw henceforth when I use first/second if you yell at me about arrows I'll say they're from Data.Bifunctor
17:56:45 <elliott> Deewiant: (a) This is GHC printing its generated splice code
17:56:58 <elliott> copumpkin: Do you have a highlight on applicative or something
17:57:10 <elliott> Or were you just expressing general disapproval of my beautiful exhibits
17:57:36 <Deewiant> elliott: And if you can find me an (&&&) outside Control.Arrow I can drop arrows entirely
17:57:50 <lambdabot> forall (a :: * -> * -> *) b c c'. (Arrow a) => a b c -> a b c' -> a b (c, c')
17:58:31 <Deewiant> It exists in various places IIRC but nowhere nice :-P
17:58:38 <elliott> http://hackage.haskell.org/packages/archive/data-aviary/latest/doc/html/Data-Aviary-Functional.html#v:(&&&)
17:58:38 <elliott> http://hackage.haskell.org/packages/archive/uulib/latest/doc/html/UU-Util-Utils.html#v:split
17:58:40 <elliott> http://hackage.haskell.org/packages/archive/pointless-haskell/latest/doc/html/Generics-Pointless-Combinators.html#v:(/\)
17:58:41 <elliott> http://hackage.haskell.org/packages/archive/Agda/latest/doc/html/Agda-Utils-Tuple.html#v:(/\)
17:58:43 <elliott> http://hackage.haskell.org/packages/archive/hamusic/latest/doc/html/Music-Analysis-PF.html#v:split
17:58:48 <elliott> I suggest the Agda or hamusic one. :p
17:59:10 <elliott> http://hackage.haskell.org/package/pointless-haskell-0.0.5 does not look so bad, though it depends on haskell98 and duplicates a lot of edwardk packages ;-)
17:59:29 <Deewiant> Yes, the duplication is the main problem :-P
17:59:31 <elliott> uulib is apparently the parsing library? I assumed it'd just be a grab-bag of Utrecht-style insanity
17:59:44 <elliott> Oh, data-aviary is just a set of combinator birds
17:59:52 <elliott> Though it certainly has all the stupid names. :p
18:00:05 <elliott> Oh, Data.Aviary.Functional: "This is for reference (obviously) and is not intended for use."
18:00:17 <elliott> Deewiant: In conclusion, I recommend depending on Agda
18:00:31 <elliott> Deewiant: It uses the older Haddock CSS
18:01:00 <elliott> Deewiant: More seriously though, I might just make my own package of "Arrow shit except specialised to functions"
18:01:15 <elliott> The question is where to put them, module-wise :P
18:01:19 <elliott> Data.Function.Extra is gross
18:01:20 <Deewiant> Make it a "tuple helpers" instead
18:01:28 <elliott> Deewiant: What about arrowchoice
18:01:45 <elliott> Deewiant: But okay, tuple helpers sounds decent
18:02:01 <Deewiant> Data.Tuple.ElliottsExtrasEmporium
18:02:08 <elliott> Yes, which is why I'm trying to think of logical other names
18:02:21 <Deewiant> I meant that I'd put it under Data.Tuple
18:02:40 <elliott> That seems reasonable, if a little long
18:02:54 <Deewiant> System.Console.Terminfo.PrettyPrint is long
18:02:58 <elliott> Your mind is warped by the trifecta
18:03:30 <Deewiant> And hey, Data.ListTrie.Patricia.Map.Enum
18:03:44 <elliott> Deewiant: I'm so glad I put GPipe stuff on the back-burner
18:03:46 <Deewiant> But it's only ever imported qualified so it doesn't matter for my alignment purposes
18:03:56 <elliott> Means I'm not dealing with your awful library :-D
18:04:12 <elliott> OK, beautiful library with ugly typeclasses.
18:04:28 <Deewiant> Or where did we end up with that
18:04:32 <elliott> Like I said, I put GPipe stuff on the backburner
18:04:44 <elliott> It's not hard to fix at all, it's just a lot of tedious work :P
18:04:46 <Deewiant> I'm just wondering if you'd given up on it or if we were stuck on something else
18:04:58 <elliott> Deewiant: So (&&&) isn't a very nice name
18:05:16 <elliott> You probably care about whether it's infix or not
18:05:26 <Deewiant> I'm fine with bimap instead of ***
18:05:41 <Deewiant> I haven't used either *** or &&& lately
18:05:44 <elliott> What type does (\f g -> bimap f g . join (,)) actually come out to
18:06:01 <Deewiant> \f g -> bimap f g . join (,) :: (c -> b) -> (c -> d) -> c -> (b, d)
18:08:17 <elliott> Oh, I thought it'd end up with some funky bifunctor crap in the type
18:08:39 <Deewiant> And that's the only bifunctor crap there could be
18:09:06 <ais523> <Esolang> Brainlove adds a few more commands to brainfuck in order to make it easier to program in.
18:09:12 <lambdabot> Numeric showHex :: Integral a => a -> ShowS
18:10:10 <ais523> it seems to be BF + one register that can be copied to/from tape + until loop + instruction that makes while/unless into if/unless
18:11:29 <Deewiant> I always think of http://i.imgur.com/6Ybge.jpg when elliott says "augh"
18:12:38 <elliott> Has anyone here who is Deewiant used lazy bytestrings
18:13:03 <elliott> Deewiant: I take it doing the equivalent of getContents for a lazy bytestring isn't a Done Thing
18:13:16 <elliott> It's only that, I just realised that cereal only works on bytestrings
18:13:20 <elliott> And the data is variable length
18:13:27 <elliott> So I have no idea how many bytes to read
18:13:35 <elliott> I could do my own buffering but I'd rather it be more automatic
18:13:38 <elliott> The parse failed. The String is the message describing the error, if any.
18:13:38 <elliott> Partial (ByteString -> Result r)
18:13:39 <elliott> Supply this continuation with more input so that the parser can resume. To indicate that no more input is available, use an empty string.
18:13:45 <elliott> The parse succeeded. The ByteString is the input that had not yet been consumed (if any) when the parse succeeded.
18:13:48 <elliott> Yeah okay this should work
18:13:56 <elliott> I'll still have to keep my own buffer but that's pretty good
18:14:01 <elliott> Deewiant: You're very welcome
18:14:18 <elliott> Deewiant: To thank you for your help, here's a horrible function: http://sprunge.us/ASLM
18:14:30 <elliott> Actually that's probably the prettiest TH code I've written yet
18:14:36 <Deewiant> The average identifier length far exceeds 1
18:14:42 <elliott> Deewiant: Quick, what does it do, tell me in ten seconds
18:14:58 <elliott> Also no looking at the function body which makes it obvious :-P
18:15:10 <Deewiant> Too late, I already looked before you asked
18:15:41 -!- copumpkin has quit (Quit: Computer has gone to sleep.).
18:15:43 <elliott> let x = 0 of type UNSIGNED byte
18:15:43 <elliott> while (x = read byte from stream) does not equal 127:
18:15:44 <elliott> select based on value of (x >> 5):
18:15:44 <elliott> case 0: read byte from stream
18:15:44 <elliott> case 1: read short from stream
18:15:44 <elliott> case 2: read int from stream
18:15:46 <elliott> case 3: read float from stream
18:15:48 <elliott> case 4: read string (UCS-2) from stream
18:15:50 <elliott> case 5: read short, byte, short from stream; save as item stack (id, count, damage, respectively)
18:15:52 -!- zzo38 has joined.
18:15:53 <elliott> case 6: read int, int, int from stream; save as extra entity information.
18:15:59 <elliott> What a beautiful serialisation.
18:16:01 <elliott> By beautiful, I mean ``augh''.
18:19:50 <ais523> is that pseudocode? or some language I'm not aware of?
18:19:54 <Deewiant> elliott: (x *> ((:) <$> y) <* z <*> w) or ((:) <$> (x *> y) <* z <*> w) or ((:) <$> (x *> y <* z) <*> w)
18:19:59 <ais523> oh, must be pseudocode because of the "respectively"
18:20:12 <ais523> the only language I can think of that has something even vaguely corresponding to that is COBOL
18:20:33 <ais523> err, pun unintentional
18:20:35 <elliott> ?. undo unpl ((:) <$> (x *> y) <* z <*> w)
18:20:35 <lambdabot> (((((:)) <$> (x *> y)) <* z) <*> w)
18:20:41 <ais523> and probably will be missed unless you know at least a bit of COBOL
18:20:44 <elliott> ?. do unpl ((:) <$> (x *> y) <* z <*> w)
18:20:45 <lambdabot> (((((:)) <$> (x *> y)) <* z) <*> w)
18:20:53 <elliott> ?. do unpl ((:) `fmap` (x *> y) <* z `ap` w)
18:20:53 <lambdabot> (do { b <- ((fmap ((:)) (x *> y)) <* z); a <- w; return (b a)})
18:21:00 <elliott> ?. do unpl ((:) `fmap` (x >> y) <* z `ap` w)
18:21:00 <lambdabot> (do { b <- ((fmap ((:)) (do { x; y})) <* z); a <- w; return (b a)})
18:21:25 <elliott> ?do let q a b = do x <- a; b; return x in (do { b <- ((fmap ((:)) (do { x; y})) `q` z); a <- w; return (b a)})
18:21:26 <lambdabot> let { q a b = do { x <- a; b; return x}} in (do { b <- ((fmap ((:)) (do { x; y})) `q` z); a <- w; return (b a)})
18:21:36 <elliott> Deewiant: Yeah, I recommend something that looks nothing like that
18:21:58 <Deewiant> I'll just take the first option then
18:22:59 <Deewiant> Well, I suppose I could use (:) <$> between x z y <*> w
18:25:40 <elliott> Hey Deewiant, what should I prefix/suffix/whatever field constructors with
18:25:49 <elliott> "string" and "bool" are a bit too close to clashing wit things for comfort
18:26:02 <elliott> f_ prefix is ugly, fInt is hideous, intF/stringF/... are just kinda weird
18:26:09 <elliott> Clearly you have the perfect solution
18:26:12 <Deewiant> Some say "don't, import qualified"
18:26:15 <olsner> Deewiant: or something with liftA2 (:) or liftM2 (:), if you haven't already been there
18:26:21 <elliott> Deewiant: Hmm, that might actually be a good idea here
18:26:59 <elliott> Although "TF." is a bit long a prefix
18:27:06 <elliott> I don't want F., that's reserved for Foldable
18:38:39 -!- Taneb has joined.
18:40:26 <Taneb> I'm not sure why I said that
18:49:51 -!- copumpkin has joined.
19:04:11 -!- Taneb has changed nick to Taneb|Hovercraft.
19:04:34 -!- oerjan has joined.
19:04:58 -!- Zuu has quit (Ping timeout: 244 seconds).
19:12:38 -!- Taneb|Hovercraft has changed nick to Taneb.
19:23:39 <zzo38> One feature idea I have for Haskell, is ability to define equivalence classes where you can specify that it should assume everything listed there is equivalent to each other. If the name of an equivalence class is mentioned, it will select whichever one has a matching type (or kind), and if more than one has, it selects one arbitrarily. The equivalence class has its own fixity.
19:24:29 <Taneb> What does anyone think of Salesman?
19:24:37 <Taneb> I'm trying to get opinions and feedback of it
19:24:51 <zzo38> Taneb: OK I will read it
19:24:56 <Taneb> http://esoteric.voxelperfect.net/wiki/User:Taneb/Salesman
19:26:39 <zzo38> OK. Although, examples should be given, and a line break in the description of command 3
19:31:17 <ais523> hmm, the joys of orthogonality: IMAP has a pair of commands that returns a message's UID, one takes a sequence number as argument, the other takes a message's UID as argument
19:31:56 <fizzie> So it takes a message's UID and returns the message's UID?
19:32:29 <fizzie> Does it return some sort of an error for a nonexistent message?
19:32:31 <ais523> the Perl library I'm reading actually has a wrapper for that command that actually sends it across the network
19:32:42 <ais523> but I'm not sure from the docs
19:32:42 <fizzie> Then it's not so id-eal.
19:34:22 <oerjan> @hoogle Set key -> key -> Maybe key
19:34:23 <lambdabot> Did you mean: Set Key -> Key -> Maybe Key /count=20
19:34:23 <lambdabot> Data.Dynamic dynApply :: Dynamic -> Dynamic -> Maybe Dynamic
19:35:03 <oerjan> that could be a useful command for monadic chaining
19:35:50 <oerjan> i think someone suggested that once...
19:36:11 <oerjan> @hoogle (x -> Bool) -> x -> m x
19:36:11 <lambdabot> Prelude until :: (a -> Bool) -> (a -> a) -> a -> a
19:36:11 <lambdabot> Data.IntMap filter :: (a -> Bool) -> IntMap a -> IntMap a
19:36:11 <lambdabot> Data.Foldable find :: Foldable t => (a -> Bool) -> t a -> Maybe a
19:36:20 <oerjan> @hoogle MonadPlus m => (x -> Bool) -> x -> m x
19:36:20 <lambdabot> Prelude until :: (a -> Bool) -> (a -> a) -> a -> a
19:36:21 <lambdabot> Data.IntMap filter :: (a -> Bool) -> IntMap a -> IntMap a
19:36:21 <lambdabot> Data.Foldable find :: Foldable t => (a -> Bool) -> t a -> Maybe a
19:37:00 <fizzie> Unfortunately it doesn't do the inverse.
19:37:08 <Deewiant> ?ty \x s -> fmap (const x) $ guard (Data.Set.member x s)
19:37:08 <lambdabot> forall a (f :: * -> *). (Functor f, Ord a, MonadPlus f) => a -> S.Set a -> f a
19:37:14 <fungot> >>,[[-<+2>[-<+>[-<+>[-<+>[-<+>[-<+>[-<+>[-<+>[-<+>[<[-]+>->+<[<-]]]]]]]]]]>]<2[>+6[<+8>-]<-.[-]<]+32.[-]>>,]
19:37:28 <oerjan> fizzie: hm shouldn't be _too_ hard
19:37:43 <elliott> Deewiant: Can't type dem numbers either
19:39:08 <Deewiant> > map chr [fromIntegral (minBound :: Char)..]
19:39:08 <lambdabot> No instance for (GHC.Real.Integral GHC.Types.Char)
19:39:19 <Deewiant> > map chr [ord (minBound :: Char)..]
19:39:20 <lambdabot> "\NUL\SOH\STX\ETX\EOT\ENQ\ACK\a\b\t\n\v\f\r\SO\SI\DLE\DC1\DC2\DC3\DC4\NAK\S...
19:39:46 <ais523> hmm, interesting that the backslash-single-character escapes are in a block like that
19:41:11 <fungot> 106 111 105 106 105 111
19:41:45 <fungot> 97 115 116 101 114 105 115 107
19:41:50 <lambdabot> lexical error in string/character literal at chara...
19:42:43 <Lymee> > chr 1 : "ACTION hugs oerjan" ++ [chr 1]
19:42:51 <Lymee> > text $ chr 1 : "ACTION hugs oerjan" ++ [chr 1]
19:46:11 -!- Taneb has quit (Remote host closed the connection).
19:46:50 -!- Taneb has joined.
19:51:01 <fizzie> ^bf ,[>[->++++++++++<]>[-<+>]<<------------------------------------------------[>+<-],]>.!42
19:51:06 <fungot> ^<lang> <code>; ^def <command> <lang> <code>; ^show [command]; lang=bf/ul, code=text/str:N; ^str 0-9 get/set/add [text]; ^style [style]; ^bool
19:51:17 <fizzie> ^def chr bf ,[>[->++++++++++<]>[-<+>]<<------------------------------------------------[>+<-],]>.
19:51:32 <fizzie> (Not that elliott can still write any numbers.)
19:52:05 <fizzie> (Human interest point: I first did that the wrong way around.)
19:52:19 <fizzie> ^bf ,[>,]<[>>[-<++++++++++>]<<------------------------------------------------[>+<-]<]>>.!24
19:52:52 <fungot> ,[>[->+10<]>[-<+>]<2-48[>+<-],]>.
19:52:55 -!- Taneb has quit (Remote host closed the connection).
19:54:34 <oerjan> <elliott> The idea with this is that you wouldn't have to define all that, and also wouldn't have to pack/unpack Lazy values (i.e. the reason laziness is awful in strict languages) :P
19:55:01 <oerjan> if you could do this with data/codata instead, it might be useful for dependently typed languages...
19:56:24 <fizzie> ^bf +.,[.,]+.!ACTION still doesn't filter CTCP *shame*
19:56:24 * fungot still doesn't filter CTCP *shame*
19:56:38 <oerjan> how does agda handle this? does it just define most functions twice for lists and streams?
19:57:18 <oerjan> fizzie: secretly we all prefer it that way, just don't tell any admins
19:58:48 -!- augur has quit (Remote host closed the connection).
19:59:23 <oerjan> or make an exception for ACTION
20:06:25 <fizzie> If I manage to gather the willpower to actually filter it, maybe checking the first word wouldn't be such a huge hassle, yes.
20:09:01 <elliott> Well, we're Plazmaless. :p
20:10:28 <oerjan> elliott: also, i thought you were the resident agda expert
20:11:09 <oerjan> as in you've actually tried it, or something
20:11:48 <oerjan> i guess some of the #haskellers might be even more likely
20:12:12 <oerjan> (re my data/codata question)
20:15:19 <copumpkin> yeah, you just define functions twice
20:15:56 <copumpkin> the closest thing to a haskell list is a colist in agda
20:16:09 <oerjan> yes, but it seems like it would be more annoying the more variations of a list there are
20:16:26 <copumpkin> which is why people are especially interested in generics in dependent languages
20:16:37 <copumpkin> the levitation stuff in epigram, for example
20:24:34 <zzo38> I want to change rules of Magic: the Gathering cards, I have a lot of ideas.
20:25:12 <zzo38> * Each object which is a card has an initial state, which corresponds to what is printed on the card and is immutable. Other objects have no initial state and cannot be given any.
20:25:59 <zzo38> * When an object moves from one zone to another, except for stack->play, and phasing, the old object is destroyed and a new object created from the old object's initial state is placed in the new zone.
20:26:45 <zzo38> * There is no state-based effect for tokens out of play ceasing to exist. Instead, the above rule applies, which has a similar effect.
20:26:55 <zzo38> * Copies of spells on the stack are the same things as tokens.
20:27:31 <zzo38> * No state based effects for auras or equipments that are also creatures. Something that is both a creature and an aura still is both things with no conflict.
20:27:54 <zzo38> * If a nonexistent object would deal damage, that damage is prevented.
20:27:59 <ais523> hmm, next issue: what if someone sends an HTML email, or GPG-signed email (both quite likely to happen on our systems)
20:28:40 <zzo38> * Losing due to being unable to draw a card is not a state based effect; it happens immediately.
20:28:51 <ais523> elliott: with the system I'm writing for work
20:28:54 <zzo38> (Before state-based effects are checked)
20:29:02 <ais523> what we really want is just to receive plain text as the email body
20:29:03 <elliott> ais523: I mean, why is that an issue?
20:29:11 <elliott> GPG is just cruft above and below the message
20:29:14 <ais523> because I can't exactly run HTML through an OCaml parser
20:29:21 <elliott> Grep Python's stdlib for MIME :P
20:29:33 <elliott> whatever you're doing, stop, I don't care who told you to do it
20:29:42 <ais523> elliott: running arbitrary code emailed to me?
20:29:52 <elliott> I believe I already told you to stop
20:29:55 <ais523> nah, I'm not quite that mad
20:30:06 <elliott> I don't really care what it is, I know enough
20:30:24 <ais523> just you telling me to stop won't stop me designing something I'm being paid to do
20:30:42 <zzo38> * Mana burn still works (that is one of the rules changed in the new rules; I don't know all the changes)
20:30:55 <elliott> ais523: i can no longer talk to you in good conscience :(
20:30:57 <ais523> gmail being involved is ridiculous enough as it is
20:31:04 <ais523> seriously, though, why are you so upset about this?
20:31:16 <ais523> parsing user input is hard, especially when it comes from students
20:31:24 <oerjan> <ais523> because I can't exactly run HTML through an OCaml parser <-- just consider it a CHALLENGE
20:31:31 <elliott> you're feeding html mail into the ocaml parser
20:31:40 <ais523> at least, I don't want to
20:31:51 <elliott> you want to turn it into text then feed it into the ocaml parser which is just as bad
20:31:53 <zzo38> * Rules for playing land cards no longer overrides rules for other types. (Existing Artifact Lands will still act as they do; but if you make an Artifact Land with a mana cost, you can now play the card as either an Artifact or as a Land, because the mana cost allows you to do so.)
20:31:53 <ais523> so the challenge is to figure out when I'm sent HTML mail, and look for the plaintext portion, or at worst detag it myself
20:32:21 <ais523> elliott: there's no way you're going to get a yearful of students to get it right when they can't even do CSV right
20:32:31 <elliott> what language are you writing this in, I mean?
20:32:33 <ais523> I'm using Perl for the glue code, but the OCaml parser itself is in OCaml
20:32:57 <zzo38> ais523: Would it help to convert HTML mail into ANSI escape sequences?
20:33:21 <ais523> zzo38: I'd prefer to convert it into plain Unicode
20:33:23 <oerjan> i recall back when i found ocaml, ocamlyacc still was based around a modified yacc in C
20:33:30 <ais523> or even ASCII would do
20:34:12 <zzo38> ais523: OK, that would do, I suppose. Although it loses formatting in case there is any important formatting
20:34:28 <ais523> elliott: it'd be fun to punish the students for sending HTML email, but I really doubt I could get away with that
20:34:37 <ais523> especially because it's basically impossible to do in most webclients
20:34:45 <elliott> ais523: p.s. I want to confess that I've just willingly used git to version control something that I could have put into darcs without much trouble
20:34:51 <ais523> zzo38: well, they're meant to be sending programs, and I think I can dispense with syntax highlighting
20:35:10 <elliott> "especially because it's basically impossible to do in most webclients" -- what, send html mail? :-)
20:35:12 <ais523> git might be utterly broken, but it still works well enough to be usable
20:35:15 <ais523> elliott: send plaintext mail
20:35:18 <elliott> ais523: is it ok if I partly did it for github? :-P
20:35:35 * ais523 laughs at the question, but doesn't answer
20:35:53 <elliott> oh lame, github's haskell syntax highlighting doesn't recognise template haskell's overloading of the character quoting character
20:36:03 <elliott> (TH has the worst syntax imaginable)
20:36:11 <elliott> (character literal in haskell: 'a', '\n')
20:36:17 <elliott> (reference to name foo in template haskell: 'foo)
20:36:33 <elliott> (pop quiz: how do you get a reference to the name x', which is of course perfectly legal?)
20:36:34 <ais523> OCaml uses 'a for type variables
20:36:41 <elliott> (hint: you don't, you have to use mkName manually)
20:36:58 <elliott> oh, and ''Foo is the same at the type level
20:37:03 <elliott> because it wasn't confusing enough
20:37:43 <ais523> elliott: I was really impressed with Kate's syntax highlighting of Perl
20:37:44 <zzo38> I recognized that problem immediately when reading about Template Haskell syntax.
20:37:52 <ais523> it managed stuff that confused all the other editors I tried
20:38:11 <oerjan> starting things with $ also doesn't seem very nice, but at least you can use space then
20:38:12 <elliott> ais523: well, the KDE folks need _something_ to win the flamewars with
20:38:21 <elliott> so they got a perl junkie to spend a few weekends on it :P
20:38:43 <elliott> "oh, well, I quite like ema-" "CAN YOUR PRECIOUS EMACS HIGHLIGHT THIS????"
20:38:46 <ais523> I actually downloaded a Perl port of the source for Kate's syntax highlighter
20:38:54 <ais523> for reasons I can't quite remember
20:39:05 <ais523> maybe it'll come in useful some day
20:39:06 <zzo38> I happen to think Template Haskell syntax works OK, though, even though there is that problem
20:39:17 <elliott> it works, it just isn't very nice
20:40:01 -!- monqy has joined.
20:40:18 <elliott> arcane monqy. how are the curts wronrging.
20:40:19 <zzo38> Currently at FreeGeek Vancouver, UNIX-to-UNIX mail doesn't work. The system administrator says he will fix it soon, and that the software already has this capability it only has to be configured. He also says Internet-to-UNIX mail will be configured (UNIX-to-Internet already works).
20:40:32 <ais523> now I need to work out how to send an HTML email, as a test for this thing
20:40:36 <ais523> just to see what it comes up with
20:40:52 * ais523 tries to work out how to send HTML mail from Evolution
20:41:13 <ais523> ah, there's a dropdown
20:41:26 <elliott> be a bad person: [yes] [no]
20:42:23 <elliott> you must now face the consequences :(
20:43:14 <zzo38> elliott: Actually, I mean to a different user on the same computer.
20:43:17 <ais523> aha, Evolution sends a plaintext component, then the HTML component after that
20:43:20 <ais523> that's actually really nice behaviour
20:43:44 <ais523> anyone here who uses Thunderbird? could you send me an HTML mail with a bit of formatting in, so I can see how it behaves?
20:44:06 <monqy> oh no, as i feared, brainlove is Bad
20:44:19 <elliott> hmm, apparently the fucking weather is fucking ...alright
20:44:27 <elliott> i don't know whether to agree or not
20:44:36 <elliott> ais523: can i still send html mail
20:44:57 <ais523> well, that's less useful, because the students /should/ be using their University accounts
20:45:12 <ais523> which means that they should be sending from Thunderbird or Outlook Web Access (*shudder*)
20:45:27 <ais523> and I definitely don't trust OWA to do anything sane, but I was hoping with Thunderbird
20:45:30 <elliott> MC/Protocol.hs:1:1: Error: Unused LANGUAGE pragma
20:45:30 <elliott> {-# LANGUAGE TemplateHaskell #-}
20:45:30 <elliott> because it's not unused, you presumptuous program >:(
20:45:47 <ais523> elliott: "should" in that we're at least justified if we deny them marks for using something else
20:46:01 <elliott> ais523: deny someone marks for avoiding Outlook Web Access?
20:46:04 <ais523> because those are the only clients they're given on their University account, which is the one they're meant to use
20:46:09 <elliott> I don't like the new ais523
20:46:12 <ais523> hey, I didn't make the rules
20:46:22 <elliott> that's what the Nazis said!
20:46:25 <ais523> how I'd love to say "use mail(1) only"
20:46:31 <ais523> and avoid all these issues
20:47:02 <zzo38> I too would say use UNIX mail, if the computer is UNIX you would use it. However, some people might use other program anyways.
20:56:03 -!- augur has joined.
20:58:32 <zzo38> Did someone tell me before that do-notation with the (x ->) monad does correspond to something in Curry-Howard? Can you please remind me?
20:58:34 <fizzie> My inbox has bazillion emails from Thunderbird (it's the quasi-official client in our desktop installation, I think) but so far all of them have been plaintext-only.
20:59:47 <fizzie> "Microsoft Office Outlook 12.0" has sent a multipart/alternative message, with a text/plain copy first, and a text/html copy after. That I think is the "usual way".
21:01:30 <ais523> I think what I'll do is parse it, and take the first text/plain part I come across
21:01:32 <elliott> ais523: I sent you some HTML mail just in case
21:01:41 <elliott> I think your spam filter might block it thoug
21:01:59 <ais523> I haven't received it, at least
21:02:06 <elliott> "viagra cialis" appears more than once.
21:02:10 <elliott> Also there's some Haskell in it.
21:02:34 <fizzie> I did get one incredibly complicated-looking MIME subpart tree from a student once.
21:02:39 <elliott> Wow, the text/plain version is almost not entirely fucked up, too.
21:02:46 <fizzie> (Mutt's message-part-viewer shows it as a tree.)
21:04:02 <ais523> hmm, I'm going to send myself some OCaml as an attachment, just to see what content-type it gets
21:04:04 <elliott> Deewiant: So what manner of trifunctory stuff would you want to see in the hypothetical tuple-combinators
21:04:13 <ais523> I'm hoping for text/x-ocaml, but that seems really implausible
21:04:36 <Deewiant> elliott: trimap, first3/second3/third3
21:04:56 <Deewiant> (Do we already have thd/trd and friends in base somewhere?)
21:05:01 <elliott> Deewiant: What signature would trimap have exactly, I'm trying to think of a use-case for this
21:05:25 <ais523> hmm, at least the involvement of gmail was the least complex part in all of this
21:05:28 <elliott> I have this kind of belief that using anything more than a tuple is bad. Is that bad of me?
21:05:40 <elliott> It feels like once you get to that point you need to start naming something.
21:06:15 <fizzie> I think I took a screencap of the complicatedness, but it's hard to find anything when all the names are like "florb.png".
21:06:23 <lambdabot> forall k a. (Ord k) => k -> M.Map k a -> (M.Map k a, Maybe a, M.Map k a)
21:06:33 <elliott> Deewiant: I'd kind of prefer Trifunctor to be in a separate trifunctors package, but that feels like it's a slippery slope towards Kmett package dominance
21:06:50 <elliott> Finally we can replicate Control.Arrow specialised to functions with only fifty import
21:07:54 <fizzie> Also there's a "blurg.png".
21:07:58 <ais523> elliott: a 3-item tuple is called a triple
21:08:05 <ais523> given that people here seem to have had issues finding the name
21:08:20 <elliott> I wish I had a nicer name than tuple-combinators
21:08:21 <fizzie> Perhaps it should be called a "trubble", because it's nothing but trouble?
21:08:21 <oerjan> zzo38: i think i said something about the "decision theorem", which i then failed to google, but it's essentially about proving a -> b by assuming a locally as an axiom and proving b from that, which to me seems similar to what the (x ->) monad allows you to do
21:08:33 <ais523> elliott: Subject: [SPAM?] SPAM: example viagra cialis hexham didgeridoo
21:08:46 <ais523> it seems to have been greylisted and marked as possible spam by one filter and certain spam as another
21:08:52 <ais523> but not to the extent that it wasn't delivered at all
21:08:55 <elliott> I hope I'm on blacklists now
21:09:03 <ais523> what's with all the GIF images?
21:09:05 <elliott> Deewiant: Yo, better name than tuple-combinators, hit me
21:09:14 <elliott> Gmail supports them nowadays.
21:09:22 <monqy> viagra cialis hexham didgeridoo
21:09:33 <elliott> But I doubt you have a font with the PILE OF POO character in it, so I used the images instead.
21:09:40 <ais523> wow, it hit a 7.4 on spam score
21:09:43 <elliott> I neglected to include GOAT.
21:09:51 <elliott> It's a pretty spammy message.
21:10:40 <ais523> strangely, it was knocked down 0.7 for the reputation of your account
21:10:48 <ais523> it'd have been 8.1 from an unrecognised sender
21:10:53 <zzo38> oerjan: OK, yes I suppose I can see how that works with do-notations.
21:11:17 <elliott> good to know I have the karma
21:11:43 <ais523> the pharmaceutical-related words make up most of the spam score, it seems
21:11:58 <oerjan> zzo38: oh wait now i suddenly remembered and no wonder i couldn't google it, it's called the _deduction_ theorem. http://en.wikipedia.org/wiki/Deduction_theorem
21:12:06 <ais523> also, it seems it has 10 nested blockquotes
21:12:15 <fizzie> ais523: One of our departmental "little christmas" parties had (as one of the multitude of activities they usually have) a SPAM competition; there was a console set up on a desk, and you typed a handle and a message, and then it ran SpamAssassin on the message and showed a highscore list of handles and corresponding spam scores.
21:12:29 <zzo38> oerjan: Yes, and I think what you describe is also like what is called "fantasy rule" in Hofstadter's book, which I already figured out before, which is why I asked about do-notation, because it seem to do the fantasy rule.
21:12:45 <ais523> it might be quite hard to get control of a blacklisted spam domain to bump the score up higher
21:13:00 <elliott> Deewiant: Hmm, wait, isn't bimap a superset of (&&&)'s type
21:13:02 <ais523> although we managed it with Normish, seems the IP had belonged to a spammer before Normish gained it
21:13:08 <fizzie> I think it just fed the message as-is to SA, so you got to write all kinds of headers into it.
21:13:10 <ais523> and it took a while to get it off the blacklists
21:13:28 <Deewiant> elliott: No, it's a superset of (***) restricted to functions
21:13:55 <elliott> I'm new to this fancy bifunctor shit :-P
21:14:24 <elliott> Is there really no way to avoid the explicit (,) in that triple-ampersands implementation?
21:14:48 <Deewiant> If you can think of a way of going from a to (a,a) without a (,), sure
21:15:09 <zzo38> Deewiant: It seem to me, the way would be: join (,)
21:15:18 <Deewiant> zzo38: That's not without a (,)
21:15:33 <zzo38> Deewiant: I know. But I don't know why you don't want (,)
21:15:38 <oerjan> zzo38: oh there's something possibly relevant in that wp article: "Under the Curry–Howard correspondence, the above conversion process for the deduction meta-theorem is analogous to the conversion process from lambda calculus terms to terms of combinatory logic, where axiom 1 corresponds to the K combinator, and axiom 2 corresponds to the S combinator. Note that the I combinator corresponds to the theorem schema P→P.
21:15:46 <Deewiant> zzo38: elliott just stated why.
21:16:31 <zzo38> Of course you can write (a,a) but I don't know if that counts.
21:16:39 <oerjan> and the SKI combinators are ap, return, ask in the (x ->) monad
21:17:16 <zzo38> I know return = const so that is K combinator.
21:17:33 <zzo38> I have not heard of "ask"
21:17:40 <elliott> thread :: (a -> b) -> (c -> d) -> (a,c) -> (b,d)
21:17:40 <elliott> combine :: (a -> b) -> (a -> c) -> a -> (b,c)
21:17:44 <elliott> Deewiant: Whaddya think of those names
21:17:49 <elliott> With thread just being defined as bimap ofc
21:17:58 <monqy> there's a MonadReader instance for (a ->)
21:18:13 <Deewiant> They sound as arbitrary as the names of the polarities of bfjoust
21:18:24 <elliott> Deewiant: I put thought into those :(
21:18:40 <Deewiant> "combine" is about as generic a name as possible
21:18:41 <elliott> Deewiant: With the first, you can imagine two completely separate bits of string that you want to meet at the inputs and outputs
21:18:52 <elliott> So you thread them together through two little holes
21:18:58 <elliott> And that threading is the result
21:19:02 <Deewiant> I can imagine that, or I can imagine something completely different
21:19:13 <Deewiant> forkIO could be called thread :-P
21:19:14 <elliott> Gimme nice operator names then :P
21:19:28 -!- MDude has quit (Ping timeout: 252 seconds).
21:19:30 <elliott> "split" would be good for combine
21:19:35 <elliott> but it's taken by Data.List.Split
21:19:43 <lambdabot> forall g. (RandomGen g) => g -> (g, g)
21:19:48 <lambdabot> forall k a. (Ord k) => k -> M.Map k a -> (M.Map k a, M.Map k a)
21:19:57 <zzo38> But of course I is id, and K is const.
21:20:04 <elliott> Hmm, pointless-haskell does
21:20:11 <elliott> (/\) :: (a -> b) -> (a -> c) -> a -> (b, c)
21:20:18 <elliott> (><) :: (a -> b) -> (c -> d) -> (a, c) -> (b, d)
21:20:26 <lambdabot> Data.Sequence (><) :: Seq a -> Seq a -> Seq a
21:20:26 <lambdabot> Data.Graph.Inductive.Query.Monad (><) :: (a -> b) -> (c -> d) -> (a, c) -> (b, d)
21:21:30 -!- MDude has joined.
21:21:42 <fizzie> Thread[f[args]] "threads" f over any lists that appear in args
21:21:46 <Deewiant> That second (><) is the same one though
21:21:46 <fizzie> See, that's what "thread" does.
21:21:48 <elliott> Deewiant: Heh, it then goes on to do (\/) :: (b -> a) -> (c -> a) -> Either b c -> a
21:22:09 <Deewiant> I'd have \/ and /\ the other way around
21:22:10 <oerjan> zzo38: ask is a method of MonadReader, which (x ->) belongs to
21:22:34 <elliott> Which logical operator is /\ again
21:22:41 <elliott> The one that's and should be the tuple one :P
21:23:14 <elliott> ?hoogle (a -> b) -> (c -> d) -> (a,c) -> (b,d)
21:23:14 <lambdabot> Data.Graph.Inductive.Query.Monad (><) :: (a -> b) -> (c -> d) -> (a, c) -> (b, d)
21:23:17 <oerjan> <zzo38> But of course I is id, and K is const <-- i meant that they are monadic functions from the (x ->) monad
21:23:25 <elliott> Nobody has a nicer operator name for it? :-P
21:23:37 <lambdabot> forall (a :: * -> * -> *) b d c. (ArrowChoice a) => a b d -> a c d -> a (Either b c) d
21:24:04 <elliott> (asteriskasteriskasterisk)
21:24:35 <elliott> Deewiant: I'd go for || were it not taken
21:24:49 <elliott> Deewiant: Actually >< is quite brilliant graphically, it shows the two unrelated functions "meeting" in the middle
21:24:52 <Deewiant> I'd go for |,| if you don't want to override |||
21:24:53 <elliott> Input below/above, output above/below
21:25:05 <zzo38> But |,| is not a name in Haskell
21:25:20 <elliott> And a single output value at the top
21:26:18 <Deewiant> I guess you want . to bind tighter
21:26:35 <oerjan> Deewiant: commas are punctuation and cannot be used in operators
21:26:54 <oerjan> same with semicolons. although not colons...
21:28:29 <oerjan> also not brackets or quotes, except ' is generally messed up
21:30:27 -!- elliott has quit (Ping timeout: 260 seconds).
21:30:58 <fizzie> "Comma is a semi-semicolon", to quote a Perl document.
21:31:08 <fizzie> I don't know why but it sounds funny.
21:31:42 <ais523> it's because they were really stretching for mnemonics at that point
21:31:51 <ais523> and pretty much admitted as much
21:31:57 <oerjan> > let a |!@#$%&/=?+\^~*-:. b = a + b in 2 |!@#$%&/=?+\^~*-:. 2
21:32:18 <oerjan> > let a |!@#$%&/=?+\^~*-:.<> b = a + b in 2 |!@#$%&/=?+\^~*-:.<> 2
21:33:27 -!- pikhq has joined.
21:33:41 <fizzie> I might think a semi-semicolon would be some sort of a "two commas vertically" instead. Haven't found a real character for that from Unicode yet, though of course you can put a "combining comma above" on a comma, like ,̓ that.
21:34:20 <HackEgo> http://codu.org/projects/hackbot/fshg/index.cgi/raw-file/tip/paste/paste.21829
21:35:14 <fizzie> 35 of every 80 fucktons are metric.
21:37:44 <zzo38> The character ' in Haskell is a letter that is neither uppercase nor lowercase. (I think)
21:39:29 <ais523> Content-Type: text/x-ocaml;
21:39:33 <ais523> oh Evolution I love you
21:39:45 <ais523> although I'm not entirely sure how you figured it out
21:39:59 <ais523> perhaps from the extension, although .ml could mean all sorts of ML-family languages
21:41:28 <fizzie> <glob pattern="*.ml"/> and <glob pattern="*.mli"/> are in my /usr/share/mime/text/x-ocaml.ml.
21:41:33 <fizzie> (And no other conditions.)
21:42:04 -!- pikhq_ has joined.
21:42:11 <ais523> fizzie: ditto in mine, that must be it
21:42:14 <ais523> I didn't know that file existed
21:42:33 <ais523> it also has "OCaml source code" translated into a lot of languages
21:42:35 <fizzie> It's the modern way to do /etc/mime.types.
21:43:29 <ais523> so there's a good chance I will get text/x-ocaml attachments after all
21:44:02 <ais523> I suppose I could just run an OCaml parser over every part of the message (after decoding and deHTMLing) to see which parsed correctly
21:44:36 <oerjan> monqy: ' is used for character constants, but also in otherwise alphanumeric identifiers. but because of the former it cannot be used at the beginning of identifiers.
21:45:14 -!- pikhq has quit (Ping timeout: 260 seconds).
21:45:47 <fizzie> I guess it could also be using "file --mime", which has a magic-db contents of http://p.zem.fi/hws1
21:46:01 <oerjan> monqy: "neither uppercase or lowercase" sort of fits to characterize that in haskell, because haskell distinguishes those in meaning at the beginning of identifiers. btw _ is then lowercase.
21:46:01 <fizzie> (Do they all really start with "Caml1999"?)
21:46:30 <fizzie> I suppose that's for the more compiled file types, not the source.
21:46:58 <oerjan> monqy: and : is the only uppercase _operator_ character :P
21:47:32 <ais523> hmm, the author of MIME::Parser is insistent that storing parsed MIME components of email in memory is a security risk in case someone emails you a many-gigabyte attachment
21:47:58 <ais523> I'm getting around it by refusing to parse emails more than a megabyte long, on the basis that that's /quite/ enough for one short OCaml program
21:48:38 <ais523> fizzie: the standard compiled bytecode actually starts with a shebang
21:51:14 <monqy> : being the only uppercase operator character...is that why all the type/data constructor operators start with :
21:51:54 <monqy> At least I think I've only seen them ever start with :
21:52:17 <ais523> bleh, a search for "which punctuation marks are uppercase?" gave me no results
21:52:25 <ais523> (with the quotes; without, it gave only irrelevant results)
21:52:35 <ais523> I was hoping for some crazy answer
21:53:31 <ais523> and "uppercase punctuation" gives me just pages which meant to say "uppercase, punctuation" or "uppercase/punctuation" but screwed up the punctuation mark between them
21:57:59 <zzo38> Is there any standard function for "foldr (.) id"?
22:02:36 <oerjan> @hoogle [b -> b] -> b -> b
22:02:36 <lambdabot> Data.Generics.Schemes everywhere :: (a -> a) -> a -> a
22:02:37 <lambdabot> Data.Generics.Schemes everywhere' :: (a -> a) -> a -> a
22:02:37 <lambdabot> Prelude until :: (a -> Bool) -> (a -> a) -> a -> a
22:02:45 <oerjan> zzo38: i don't know of any
22:03:15 <oerjan> i think that's equivalent
22:03:52 <zzo38> I suppose I can define it in my program then. What should it be called?
22:04:03 <oerjan> @hoogle f (b -> b) -> b -> b
22:04:03 <lambdabot> Data.Generics.Schemes everywhere :: (a -> a) -> a -> a
22:04:03 <lambdabot> Data.Generics.Schemes everywhere' :: (a -> a) -> a -> a
22:04:03 <lambdabot> Prelude until :: (a -> Bool) -> (a -> a) -> a -> a
22:04:20 <monqy> compose? composes? composed?
22:04:58 <oerjan> @hoogle (a -> m) -> t a -> m
22:04:59 <lambdabot> Prelude ($!) :: (a -> b) -> a -> b
22:04:59 <lambdabot> Data.Function ($) :: (a -> b) -> a -> b
22:05:25 <oerjan> @hoogle (Monoid m, Foldable f) => (a -> m) -> f a -> m
22:05:25 <lambdabot> Data.Foldable foldMap :: (Foldable t, Monoid m) => (a -> m) -> t a -> m
22:05:25 <lambdabot> Data.Traversable foldMapDefault :: (Traversable t, Monoid m) => (a -> m) -> t a -> m
22:05:25 <lambdabot> Data.Foldable all :: Foldable t => (a -> Bool) -> t a -> Bool
22:05:25 <zzo38> Is @hoogle broken?
22:05:48 <oerjan> :t Data.Foldable.foldMap Endo
22:05:49 <lambdabot> forall a (t :: * -> *). (Data.Foldable.Foldable t) => t (a -> a) -> Endo a
22:06:17 <oerjan> hm or is that in the direction
22:06:41 <zzo38> It makes responses which don't match
22:07:05 <oerjan> zzo38: yes it tries to guess if you meant something different if there's no exact match
22:07:20 <fizzie> 12.8 htkallas 9/18 01:07 0+00:00:00 [????????????????]
22:07:26 <fizzie> That does not look good.
22:07:40 <fizzie> It's supposed to say where my job is running.
22:09:50 <oerjan> @hoogle (Arrow a) => [a b b] -> a b b
22:09:50 <lambdabot> Data.Map unions :: Ord k => [Map k a] -> Map k a
22:09:51 <lambdabot> Data.Graph.Inductive.Internal.Heap mergeAll :: Ord a => [Heap a b] -> Heap a b
22:09:51 <lambdabot> Data.Graph.Inductive.Basic grev :: DynGraph gr => gr a b -> gr a b
22:10:12 <fizzie> XMonad calls it (well, something a bit like it; in fact it composes ManageHooks) "composeAll".
22:11:07 <oerjan> zzo38: what worries me more is that it required me to add the Monoid and Foldable class before it gave anything useful, that's stupid.
22:11:08 <fizzie> But that's possibly because it also has a composeOne, which runs only the first on the list that actually does something.
22:11:17 -!- sebbu has quit (Ping timeout: 260 seconds).
22:12:00 <oerjan> it seems obvious to me that adding those should be a smaller change than modifying the actual type part to something incompatible...
22:12:18 -!- sebbu has joined.
22:13:31 <oerjan> @hoogle (Category a) => [a b b] -> a b b
22:13:31 <lambdabot> Data.Map unions :: Ord k => [Map k a] -> Map k a
22:13:31 <lambdabot> Data.Graph.Inductive.Internal.Heap mergeAll :: Ord a => [Heap a b] -> Heap a b
22:13:31 <lambdabot> Control.Category (.) :: Category cat => cat b c -> cat a b -> cat a c
22:14:41 <lambdabot> forall a a1. (a -> (a1 -> a1) -> a1 -> a1) -> [a] -> a1 -> a1
22:22:23 -!- ive has quit (Ping timeout: 252 seconds).
22:59:47 <CakeProphet> it seems to just associate an integer count to a value.
23:01:08 <CakeProphet> count (One a) = 1; count (Many a) = 1 + count a
23:01:14 <oerjan> like Nat with an extra parameter
23:01:54 <oerjan> also it's isomorphic to that delayed monad thing
23:02:15 <zzo38> What delayed monad thing?
23:02:19 <oerjan> data Delayed a = Now a | Later (Delayed a)
23:02:31 <oerjan> (not sure i have the name right)
23:02:34 <zzo38> If you want to apply a number of things, you can also use church numerals
23:02:47 -!- copumpkin has quit (Quit: Computer has gone to sleep.).
23:03:36 <CakeProphet> data Lol a b = Nothing | Left a | Right b | Both a b | Many (Lol a b)
23:03:51 <monqy> is this abomination your doing
23:04:22 -!- DH____ has quit (Ping timeout: 260 seconds).
23:04:30 <zzo38> I made genCurry i = do { n <- mapM id $ replicate i (newName "x"); f <- newName "x"; lamE (varP f : map varP n) (appE (varE f) . tupE $ map varE n); };
23:05:38 <CakeProphet> type Lol a b = Many ( Maybe (Either (Either a b) (a,b)))
23:06:00 <monqy> zzo38: mapM id? isn't that the same as sequence?
23:06:17 <zzo38> monqy: O, maybe it is.
23:07:40 <oerjan> zzo38: in fact i think mapM id $ replicate i = replicateM i
23:08:09 <zzo38> So, in other words, curry = $(genCurry 2)
23:09:05 <zzo38> OK, I fixed it to use replicateM and it works.
23:10:21 <monqy> I was about to comment on that
23:11:59 <zzo38> Now I can understand how the "newName" command works. The documentation doesn't say what it is but I figure it out.
23:12:12 <zzo38> The document just says the type.
23:12:49 <oerjan> i guess it's for inventing a fresh variable name
23:13:12 <oerjan> almost like lisp gensym
23:13:12 <zzo38> Yes, that is what it does. But you still need to indicate its name anyways!
23:13:39 <zzo38> Why does it require you to indicate the name anyways, even though it is always a new name?
23:14:02 <oerjan> zzo38: i assume it uses the x as a prefix
23:14:04 -!- CakeProphet has quit (Ping timeout: 260 seconds).
23:14:17 <oerjan> zzo38: it might help if you want to read core output, perhaps
23:14:30 <zzo38> Yes it does use it as a prefix
23:15:29 <oerjan> or generated output, there's probably an option for printing it just after the TH step
23:16:18 <zzo38> Generated output printing after TH step by -ddump-splices shows the name you specify as prefix, and the other stuff in []
23:17:08 <zzo38> But I suppose one other thing, is to tell whether you want uppercase or lowercase, but it should be able to figure that out by itself.
23:18:15 <oerjan> might be tricky in some cases
23:18:21 <zzo38> But perhaps they don't want one name used in both ways, but it can anyways because it is for type levels and value levels
23:19:20 <oerjan> zzo38: but constructors appear both places.
23:20:20 <zzo38> If you do something like f = X :: X; then both X are different
23:21:07 <oerjan> yes but what about x = X :: X x
23:21:51 <zzo38> Then I also think both x are different, too, isn't it?
23:22:11 <oerjan> zzo38: i thought you were talking about distinguishing upper and lower case
23:23:55 <zzo38> But those don't seem to be problem there, if you can use a name in multiple places
23:23:57 -!- ive has joined.
23:24:06 <oerjan> all of those might be produced from newName "x" if it were to change the case everywhere
23:24:47 <oerjan> anyway it probably _could_ decide, since the actual definition site inserted would probably tell what it was
23:25:04 <zzo38> oerjan: Say, you have a different function newName' which takes no argument.
23:25:05 <oerjan> but it might require some awkward tying of the knots
23:25:30 <zzo38> But it could not use newName' for either of the X here.
23:25:49 <zzo38> I don't think it could use newName either.
23:26:20 <oerjan> oh so newName isn't general for all names?
23:26:26 <lambdabot> Language.Haskell.TH newName :: String -> Q Name
23:26:26 <lambdabot> Language.Haskell.TH.Syntax newName :: String -> Q Name
23:26:27 <lambdabot> Language.Haskell.TH.Syntax qNewName :: Quasi m => String -> m Name
23:26:59 <zzo38> oerjan: newName can do uppercase or lowercase names, but in the example "x = X :: X x" it couldn't do because X would need to be defined already for that to be accepted
23:27:29 -!- sllide has quit (Ping timeout: 258 seconds).
23:28:46 <oerjan> zzo38: right, so newName requires that you're generating a splice which includes the definition.
23:28:51 <zzo38> Actually I suppose there is still some difficulty, that you have [d| data X = $x; y = $x; |] the answer is still obvious but the program to determine it might not be entirely simple.
23:29:03 <monqy> the best part of TH is using mkName to make impossible names, like ones with alphanumeric and operator charaters mixed together
23:29:04 <zzo38> oerjan: Yes, because it is the Q monad.
23:29:42 <zzo38> But I suppose you can have newVar = newName "name___"; newCon = newName "Name___";
23:29:58 <oerjan> monqy: those actually _work_?
23:30:04 <monqy> oerjan: I've done it!
23:31:03 <oerjan> monqy: in that case, does it work to use the name in a spot with the "wrong" case for it?
23:31:18 <ais523> monqy: /why/ did you do it?
23:31:21 <monqy> I've never tried, but I'm guessing yes it will work
23:31:35 <monqy> ais523: bad reasons, naturally
23:31:51 <oerjan> zzo38: ok if what monqy says is true then it's likely TH doesn't actually _care_ about the case used
23:32:05 <zzo38> Actually it works as long as the *first* character is of the correct case.
23:32:12 <ais523> hmm, idea my supervisor had for sandboxing OCaml (whilst preventing uses we don't want of the standard library): reject all mentions of modules other than Pervasives, combined with rejecting the stuff in Pervasives we don't want them to use
23:32:15 <zzo38> Everything else can be any symbols it doesn't matter.
23:32:17 <monqy> ais523: I was too lazy to parse haskell but I wanted to do some syntactic modifications where I could mark a haskell expression, pull it out, put it somewhere else, and leave a stump in its place
23:32:25 <ais523> so I've hooked the parser to recognise only Pervasives as a legitimate module name
23:32:31 -!- CakeProphet has joined.
23:32:31 -!- CakeProphet has quit (Changing host).
23:32:31 -!- CakeProphet has joined.
23:32:31 <oerjan> zzo38: oh so that is required.
23:32:32 <ais523> is this going to be a crazily flawed solution?
23:32:58 <monqy> I used the syntactically invalid identifier to mark the expressions I wanted to pull out
23:33:00 <ais523> (that is, in any context where a module name is expected, if it isn't "Pervasives" error out)
23:33:02 <zzo38> Now instead of f <- newName "x"; I can write f <- newVar;
23:33:06 <ais523> monqy: can you see any flaws with it?
23:33:22 <monqy> oh you were not talking about what I was doing there
23:33:31 <monqy> I was talking about my thing being falwed
23:34:27 <monqy> but it does have a sort of ugliness similar to what i was doing
23:34:42 -!- kmc has quit (Ping timeout: 260 seconds).
23:34:58 <oerjan> never cross the conversations!
23:36:25 <monqy> dunno if this quite applies to ocaml at all, but perhaps make a wrapper module, always included, which exports only the stuff you want from Pervasives, and make all module imports syntactically invalid?
23:36:44 <monqy> or would that be going against a goal or two
23:37:24 -!- CakeProphet has quit (Ping timeout: 260 seconds).
23:38:45 <ais523> yep, the idea is to verify that input programs use a particular subset of OCaml
23:39:00 <ais523> I haven't yet got around to the idea of conditionally banning if, mostly because it's so easy to work around
23:39:20 <ais523> there are any number of ways to express an if in OCaml, just as in most languages
23:39:49 <monqy> the ugliest part is rejecting the stuff in Pervasives you don't want them to use
23:39:50 <Gregor> Heh, one of the places where I buy cheap Chinese junk just sent me an email saying that they now have a US warehouse for their most popular wares, and so can offer 3nd day delivery. Whatever "3nd day delivery" is :P
23:40:12 <monqy> I can't think of any clean way to do it without making a new module :(
23:40:19 <monqy> and making a new module is also ugly :(
23:41:20 <ais523> I could reject module imports and qualifies altogether, because Pervasives is loaded by default
23:41:30 <ais523> but yes, I agree, the issue's rejecting things like file opens
23:42:00 <ais523> Gregor: I can pronounce it as a word somewhere between "third" and "second", and yet even though it's obvious how to pronounce it, I still don't know what it means
23:42:01 -!- Patashu has joined.
23:43:46 <zzo38> One idea is, to have a macro system in Haskell with its own syntax and its own types. Such as, MetaExp, MetaPat, MetaName, MetaLcName, MetaUcName, MetaNewLcName, MetaNewUcName, MetaLocalLcName, MetaLocalUcName, MetaInt, MetaOrder, MetaLayout, etc.
23:44:00 <zzo38> And each keyword is its own type.
23:44:03 -!- CakeProphet has joined.
23:44:03 -!- CakeProphet has quit (Changing host).
23:44:03 -!- CakeProphet has joined.
23:49:06 <oerjan> zzo38: i somehow had the idea that was what template haskell is...
23:50:27 -!- kmc has joined.
23:51:50 <zzo38> oerjan: No, it isn't. What I mean is something, you can define macro called "j" of type (MetaNewUcName -> Q [Dec]) to make a declaration "j K" permitted and it means K is a new name to this module instead of imported or something like that. And same with the other things; including make up new syntax and affecting what is already there, such as making up do-notation instead require it already have do-notation.
23:52:57 <zzo38> Or possibly different monad not Q, it would be different to do the different thing, but in addition to the Q stuff of Template Haskell too.
23:54:53 <oerjan> i see. i think that would require intertwining TH with parsing?
23:55:25 <zzo38> Yes, unless you did it different so that it is a separate step from TH.