←2011-09-17 2011-09-18 2011-09-19→ ↑2011 ↑all
00:12:50 -!- FireFly has quit (Quit: FireFly).
00:22:52 <zzo38> But one thing should be in TH, is an expression that it require the list of expression and select the first one that typechecks.
00:23:02 <zzo38> (If none of them typecheck it is error)
00:25:01 -!- Vorpal has quit (Ping timeout: 276 seconds).
00:31:14 <oerjan> > let a ☺ b = a / b in 2 ☺ 3
00:31:15 <lambdabot> 0.6666666666666666
00:32:47 <Gregor> Divisiooooooon is the loneliest op'rator you'll eeeeever dooooooooo
00:34:06 <ais523> so why does smiley face count as an operator not an identifier?
00:34:52 <ais523> one of the problems with Unicode is that nobody's memorized the difference between lowercase/uppercase letters and lowercase/uppercase punctuation in it
00:35:27 <oerjan> well since i picked it out from a SO discussion linked on reddit of why that char isn't allowed in javascript identifiers: because it's not a unicode letter.
00:36:40 <ais523> ☺ is easy enough to type if you have a working compose key
00:36:43 <Gregor> Yeah, JS tokenization actually uses the Unicode categories.
00:37:10 <oerjan> as does ghc
00:37:19 <Gregor> So there ya go :P
00:37:46 <Gregor> > let 4 = 2 in 4 + 4
00:37:47 <lambdabot> 8
00:38:39 <ais523> o
00:39:20 <Gregor> > let 2 = 4 in 4 + 4
00:39:21 <lambdabot> 8
00:39:23 <Gregor> Hm
00:39:30 <oerjan> ...don't tell me you don't understand that one yet.
00:39:56 <Gregor> "Yet"? I haven't used Haskell in years :P
00:41:37 <ais523> and I've never bothered to inquire into that particular corner of Haskell
00:41:39 <ais523> I understand this one
00:41:47 <ais523> > let 2 + 2 = 3 in 2 + 2
00:41:48 <lambdabot> 3
00:41:58 <Gregor> Oh right, that's what I was looking for :)
00:41:59 <ais523> but the examples above don't seem to be following that pattern
00:42:16 <ais523> (in particular, I don't get why "let 4 = 2" isn't a parse error)
00:42:17 <Gregor> Because you can specific cases for functions, but can't redefine literals I guess.
00:42:29 <Gregor> Right, seems like that ought to be caught earlier.
00:43:00 <oerjan> ais523: 4 is a legal pattern so may be on the left side of = , it just doesn't actually bind any variables.
00:43:18 <ais523> ah right
00:43:23 <Gregor> So then it should be a /semantic/ error >_<
00:43:32 <ais523> so how can you tell whether the pattern matched or not?
00:43:56 <ais523> it doesn't seem to have anything to match
00:43:59 <oerjan> also, patterns in let are lazy so are not checked until a variable in them is used - in this case never, since there aren't any.
00:44:28 <Jafet> > let !4 = 2 in ()
00:44:29 <lambdabot> *Exception: <interactive>:3:4-9: Non-exhaustive patterns in pattern binding
00:44:31 <oerjan> it's just a logical but unintuitive consequence of orthogonal features.
00:45:14 <ais523> > let a + 2 = 4 in a
00:45:15 <lambdabot> a
00:45:42 <ais523> > let a + 2 = 4 in a + 2
00:45:43 <lambdabot> 4
00:45:50 <oerjan> heh
00:46:01 <oerjan> the right a isn't in the scope of the first one
00:46:02 <ais523> I take it a here is a value, rather than a variable?
00:46:05 -!- azaq23 has quit (Quit: Leaving.).
00:46:24 <oerjan> so it's actually one of lambdabot's predefined Expr values.
00:46:31 <ais523> yep, I thought it'd be something like that
00:46:43 <ais523> > let ttt + 2 = 4 in ttt
00:46:44 <lambdabot> Not in scope: `ttt'
00:46:50 <ais523> > let ttt + 2 = 4 in ttt + 2
00:46:51 <lambdabot> Not in scope: `ttt'
00:46:54 <ais523> that's way saner
00:46:58 -!- CakeProphet has quit (Ping timeout: 260 seconds).
00:47:45 <Jafet> That defines (+).
00:47:51 <Jafet> > let (x + 2) = 4 in x
00:47:52 <lambdabot> <no location info>: Parse error in pattern
00:48:03 <Jafet> That attempts to use a horrible deprecated feature.
00:48:31 <oerjan> lambdabot already has a ghc version without it?
00:48:37 <oerjan> @version
00:48:37 <lambdabot> lambdabot 4.2.2.1
00:48:37 <lambdabot> darcs get http://code.haskell.org/lambdabot
00:48:47 <oerjan> doesn't say which ghc version
00:48:59 <oerjan> > let f (n+1) = n in f 2
00:48:59 <lambdabot> <no location info>: Parse error in pattern
00:49:04 <oerjan> indeed
00:50:16 <Jafet> It has always been possible to turn that off.
00:50:43 <ais523> hmm, I sent CTCP SOURCE to lambdabot, but didn't get a reply
00:50:50 <ais523> why does nobody implement that nowadays?
00:50:56 <ais523> (also, did anyone ever implement that ever?)
00:52:48 <ais523> haha, INTERCAL will have that feature all to itself now!
00:53:20 <ais523> (admittedly, it doesn't actually /work/, but it's nontrivial to make it do so without bruteforcing all possible values in the representable range for every variable and constant in the expression)
00:53:59 <oerjan> ais523: you need to work more on your maniackal laughter.
00:55:12 <Gregor> I don't think I've ever seen CTCP SOURCE ....
00:55:56 <ais523> it's standard!
00:56:20 <Gregor> Yeah, but I've got four quarts of curry in my 'fridge.
00:56:22 <Gregor> So there's that.
00:56:27 <oerjan> <ais523> haha, INTERCAL will have that feature all to itself now! <-- i thought you were referring to CTCP SOURCE here
00:56:40 <ais523> no, to putting expressions on the LHS of an assignment
00:57:02 <ais523> you can end up with expressions overloading arbitrary identifiers in INTERCAL anyway, so it was more or less inevitable
00:57:06 <oerjan> if no one uses CTCP SOURCE, then clearly INTERCAL should.
00:57:30 <ais523> (C-INTERCAL won't let you do that with a completely different data type from the one that's meant to be there; CLC-INTERCAL will)
00:58:00 <monqy> hm, maybe I should learn INTERCAL sometime.
00:58:31 <ais523> perhaps I should give lessons in-channel, so elliott doesn't have to walk all the way from Hexham to attend them
01:00:39 <zzo38> I didn't implement CTCP SOURCE because I didn't know the proper response
01:01:30 <oerjan> maybe the joke is that CTCP SOURCE is actually unimplementable
01:02:53 <ais523> well, you're meant to give details of an FTP server you can get the source of the IRC client from, and where on the server to look
01:03:25 <zzo38> An FTP URL would give those details, I think.
01:04:02 <ais523> yep, but there's a different format defined in the standard, IIRC, that nobody uses
01:04:23 <zzo38> However I do not run an FTP server and I don't know FTP server to put it on. If you have any FTP server, then I will be glad to upload my IRC client source code to that server and program it to give that information.
01:05:16 <Gregor> It is the nineties, and there is time for FTP server.
01:05:27 <ais523> I think that's the real reason CTCP SOURCE isn't implemented much, the people who remember it exists don't have FTP servers handy
01:05:53 <Gregor> Surely IRC doesn't predate URLs ...
01:06:39 <oerjan> i assume the frc stuff is still on the nvg ftp server where i put it
01:07:02 <oerjan> or else somewhat would probably have complained
01:07:06 <oerjan> *someone
01:07:10 -!- augur has quit (Remote host closed the connection).
01:10:44 -!- CakeProphet has joined.
01:10:44 -!- CakeProphet has quit (Changing host).
01:10:44 -!- CakeProphet has joined.
01:11:32 <CakeProphet> <Gregor> > let 4 = 2 in 4 + 4
01:11:43 <CakeProphet> I must be master of Haskells for understanding that one.
01:12:05 <oerjan> IT'S COMPLETELY LOGICAL, I SAID
01:12:15 <CakeProphet> yeah not a semantic error
01:12:20 <CakeProphet> just a failed pattern match
01:14:02 <CakeProphet> = as equality is a lie!
01:14:40 <CakeProphet> no equality in Haskell. it is a fascist language.
01:15:19 <CakeProphet> > let [] = 4 in undefined
01:15:20 <lambdabot> No instance for (GHC.Num.Num [t])
01:15:20 <lambdabot> arising from the literal `4' at <inter...
01:15:49 <CakeProphet> yeah okay. I wasn't sure if it could give "types" to patterns or not.
01:15:57 <zzo38> You could mention properties of URLs (depending on URI scheme, but sometimes also on other parts of the URL): interactive, readable, writable, enumerable, fileable, displayable, ...
01:16:24 <zzo38> (Although some things depend on the system, such as which URLs are displayable type of URL, and so on)
01:16:27 <CakeProphet> interactive = readable + writable?
01:17:16 <zzo38> CakeProphet: No, not quite.
01:17:50 <zzo38> HTTP URLs are readable and writable but not interactive.
01:18:05 <CakeProphet> ah interactive as in stateful
01:18:29 <zzo38> Telnet is interactive.
01:18:59 <oerjan> as is ftp
01:19:11 <CakeProphet> right.
01:19:16 <CakeProphet> sustained connection.
01:19:20 <CakeProphet> I forgot the term.
01:20:29 <CakeProphet> persistentI know HTTP is referred to as a stateless protocol, so an interactive protocol would be the opposite of a stateless one I think.
01:20:39 <CakeProphet> >_>
01:21:36 <CakeProphet> my subconscious must be at work.
01:21:48 <zzo38> I was thinking of a system with the following URI schemes: ftp gopher http telnet tape sprunge file h o s x (h = hard drive, o = optical drive, x = USB Plan 9 or network Plan 9, s = active saver directory, tape = encode data in audio I/O)
01:21:58 * CakeProphet sits in an armchair and consternates.
01:22:35 <CakeProphet> don't forget data
01:22:46 <zzo38> Where the commands are LOAD, SAVE, and DISPLAY with one URL, and COPY with two URLs. (These are in BASIC. However, it will also have corresponding Forth commands)
01:22:58 -!- oerjan has quit (Quit: Good night).
01:23:30 <CakeProphet> I think being inspired by BASIC should be against the rules.
01:24:36 <zzo38> O, and the sprunge URL is write-only URL that is treated like HTTP, but the # if any is the name of the form field to send to ("sprunge" is the default), and there can be a status message.
01:25:26 <zzo38> For example: sprunge://sprunge.us/#sprunge is an upload URL for text programs, and then it has a status message is the "http://" URL which downloads the file. (If you upload to "http://" directly it uses PUT method)
01:25:48 <CakeProphet> zzo38: I have an idea for a chess variant you might be interested in.
01:26:07 <zzo38> CakeProphet: OK.
01:27:08 <CakeProphet> you begin the game with a king, and two portals (knights)
01:27:28 <zzo38> OK
01:27:45 <CakeProphet> all of your other available pieces are in a pool at the start of the game. When a portal moves it can optionally leave behind a piece from the pool.
01:28:07 <zzo38> OK.
01:28:27 <zzo38> Does the knight still move and capture as in FIDE chess or is there different rules?
01:28:56 <CakeProphet> there are two cannons (rooks), four arrows (pawns with a sharpie mark to indicate a direction), missiles (pawns), and... some other pieces I haven't decided on yet.
01:29:15 <CakeProphet> different movement rules for everything, except the king who is pretty much the same at this point.
01:29:23 <CakeProphet> though I may give him some special rules.
01:29:48 <CakeProphet> haven't workd out the movement rules
01:29:50 <zzo38> OK. Is there castling?
01:30:03 -!- SgeoN1 has joined.
01:30:30 <CakeProphet> but the basic idea is that when a cannon is adjacent to a missile, then the missile is expended and anything in a straight line from the missile going away from the cannon is captured.
01:30:45 <CakeProphet> missiles can be fired cardinally or diagonally.
01:31:04 <CakeProphet> no castling
01:31:08 <zzo38> OK
01:31:08 <CakeProphet> nothing from chess is given.
01:31:30 <CakeProphet> okay, so portals and arrows have directionality. at the end of their move they can be rotated a different direction, also diagonally or cardinally.
01:31:59 <CakeProphet> when an arrow is in the path of a fired missile, it redirects the path of capturing in the direction of its nose (arrows are knights)
01:32:20 * SgeoN1 badmoods
01:32:31 <monqy> I thought arrows were sharpied pawns
01:32:36 <monqy> make up your mind!!!
01:32:39 <itidus21> CakeProphet: thats a fantastic damn idea
01:32:55 <CakeProphet> if a missile is fired at a portal, and the sharpie mark on the portal is facing the path of the projectile, then the path of fire continues out of the other portal on the board.
01:33:06 <Jafet> Are they sidewinders? They must be sidewinders.
01:33:13 <CakeProphet> also, if a portal is captured, its corresponding linked portal explodes and captures itself and all pieces adjacent to it. :)
01:33:51 <CakeProphet> pieces can also move through portals, by moving "on top" of the portal, their path of motion continues in the direction the other portal is facing.
01:34:01 <ais523> "captures itself" is ridiculous terminology
01:34:11 -!- augur has joined.
01:34:11 <CakeProphet> for a piece that only moves one square this means that they appear on the other side in front of the portals opening.
01:34:20 <ais523> why not just use "dies" or whatever, given that you're changing everything else about chess?
01:34:21 -!- sebbu has quit (Read error: Connection reset by peer).
01:34:42 <CakeProphet> so portals act as teleporters as well. these rules are independent of piece color. So you can use enemy portals and arrows just as well as your own. and fired missiles can capture any piece regardless of color.
01:35:18 <Jafet> Because it wouldn't be a chess variant any more!
01:35:22 <CakeProphet> the goal is to capture the king.
01:35:32 <monqy> is the number of pieces the same as in chess or can you portal-place at most more or less than chess
01:35:34 <CakeProphet> that's probably the only thing that stays the same.
01:36:12 <itidus21> there is a reason that people don't play much chess on video game consoles
01:36:34 <monqy> oh? this has always puzzled me
01:36:41 <CakeProphet> same number of pieces. you get two portals (knights), two cannons (tooks), one king, one queen (whose role is undecided), two bishops (role also undecided), and four arrows (four specially marked pawns)
01:37:02 <CakeProphet> the remaining pawns are replenishable so when they are captured they return to your spawn pool for replacement by a portal.
01:37:24 <CakeProphet> originally the queen was going to be the piece-spawner but I realize the queen would then serve no purpose once all pieces are spawned, other than to place missiles and capture normally.
01:37:31 <itidus21> monqy: i suppose my argument isn't fair because chess is free
01:38:26 -!- sebbu has joined.
01:38:26 -!- sebbu has quit (Changing host).
01:38:26 -!- sebbu has joined.
01:40:21 <CakeProphet> cannons are slow moving pieces, I'm thinking one square any direction per turn, with no capturing. portals have large movement spans, perhaps 3-4 squares with jumping though I haven't decided if there are any restrictions to how they can move. they can only capture in the direction of their portal, and can only be captured from directions that their portal is not facing otherwise you piece just teleports to the other sid
01:40:46 <CakeProphet> s/you/the/
01:41:20 <CakeProphet> arrows move like bishops and can't capture. kings movement and capturing is the same.
01:41:57 <CakeProphet> most pieces can't move very quickly, thus making the missile firing and teleporting more valuable.
01:42:28 <CakeProphet> also I've got some rules for how infinite loops work with the projectiles.
01:42:52 <CakeProphet> because you can easily set up an infinite loop with four arrows or two portals and any number of arrows.
01:43:21 <Jafet> ALL THE PORTALS ASPLODE.
01:43:56 <CakeProphet> so an arrow in an infinite loop can capture in any direction by simply turning, which then breaks the loop but gives one free capture.
01:44:06 <CakeProphet> same with portals.
01:44:31 <CakeProphet> you could also have multiple circuits the loop could take, with arrows and portals acting as switches.
01:45:29 <CakeProphet> but I imagine in practice the setup time would often not be worth the gain.
01:46:56 <CakeProphet> the idea is to make capturing somewhat difficult. you have to rely on misguiding your opponent with convoluted portal/arrow setups.
01:47:17 <monqy> knight pieces would make the best arrows, as they clearly point in a single direction, so no sharpie, but you specify 4 arrows, and there are only 2 knmights
01:47:27 <CakeProphet> well portals have direction as well
01:47:30 <CakeProphet> and there are only two of those.
01:47:35 <CakeProphet> I like four arrows because it allows more craziness.
01:47:51 <CakeProphet> four portals would be, perhaps, too much craziness. :P
01:48:12 <CakeProphet> some bishop pieces have notches on them as well, so arrows could be bishops in that case but then there are only two.
01:48:20 <CakeProphet> not sure what the bishop does at this point.
01:48:38 <CakeProphet> I was thinking one piece would be special in that if a friendly projectile passes through it it would change the nature of the projectile
01:48:42 <monqy> I dunno how anyone would use arrows
01:48:43 <CakeProphet> perhaps allowing the capturing of arrows.
01:48:51 <CakeProphet> monqy: strategically.
01:48:52 <monqy> it might be interesting to program bots for this game and see what people do
01:48:52 <CakeProphet> :P
01:49:02 <monqy> CakeProphet: but how? what strategies?
01:49:11 <CakeProphet> well cannons are slow, arrows are fast.
01:49:26 <CakeProphet> so you don't want to move cannons all over the board, you would just redirect projectiles via arrows.
01:50:03 <monqy> I'm also thinking you could guard your cannon and then use arrows to move around
01:50:10 <CakeProphet> also you can point your arrows at opponent arrows/portals and utilize them / force them to move elsewhere.
01:50:19 <monqy> by move around I mean go into dangerous places
01:50:29 <CakeProphet> essentially the strategy would be much like chess in that you could set up situations where your opponent has to choose between two pieces.
01:50:34 <monqy> can arrows capture? I think they'd be most intesting if they can't
01:50:41 <CakeProphet> they can't
01:50:43 <monqy> good
01:50:46 <monqy> er
01:50:49 <monqy> intesting/interesting
01:50:53 <CakeProphet> also they are difficult to capture because they redirect projectiles.
01:50:55 <monqy> intesting is _not a word_
01:50:58 <monqy> as far as I know at least
01:51:19 <CakeProphet> though I was thinking one of the queens abilities would be to change friendly projectiles that pass through her so that they can capture arrows.
01:51:32 <CakeProphet> or perhaps the king.
01:51:34 <CakeProphet> but
01:51:42 <CakeProphet> utilizing the king in that way to capture arrows seems not so smart.
01:52:04 <monqy> do arrows have a fixed direction or is repositioning them a valid move or part of a valid move
01:52:12 <CakeProphet> also not sure how missiles work. if they can move/capture.
01:52:14 <monqy> and how does portal repositioning go
01:52:23 <CakeProphet> repoisition is a valid move and can be done after they are moved normally
01:52:31 <CakeProphet> so you can turn them and leave them in the same place
01:52:36 <CakeProphet> or move them and then turn them in one turn.
01:52:48 <CakeProphet> same rules for portals.
01:52:53 <CakeProphet> all of the directional pieces have this rule.
01:52:58 <CakeProphet> currently there are only two directional pieces.
01:53:07 <zzo38> How do you use the (Maybe Dec) parameter of the VarI constructor?
01:53:38 <zzo38> CakeProphet: You could have a rule for rooks to flip if you need that too, flip right-side-up or upside-down
01:53:38 <CakeProphet> I believe portals will be highly valuable due to their mobility and their ability to make other things mobile
01:53:44 <CakeProphet> also you don't want to lose them because they asplode.
01:53:57 <CakeProphet> zzo38: yes I've seen that in Ultima
01:54:06 <CakeProphet> I've considered a possible use for that but don't have one so far.
01:54:43 <zzo38> In the game Baroque (a.k.a. Ultima) you do have one rook up and one upsidedown, but they don't ever flip during the game.
01:54:50 <CakeProphet> right.
01:55:03 <CakeProphet> I probably wouldn't do that as two cannons seems like a good number
01:55:06 <CakeProphet> one would be very limiting.
01:55:17 <zzo38> OK.
01:55:18 <CakeProphet> but the cannons could have two different moves of operation somehow.
01:55:21 <CakeProphet> *modes
01:55:25 <zzo38> OK, maybe.
01:55:45 <CakeProphet> bahahaha terran siege tanks.
01:56:04 <CakeProphet> siege mode allows firing, tank mode allows faster movement.
01:56:06 <CakeProphet> (no, this is a bad idea)
01:56:49 <CakeProphet> still need to figure out the queen and bishop
01:57:03 <zzo38> But I realized, that even in FIDE chess, you might have flippable rooks; start upsidedown but flip them the right way up as soon as they make a move or if the king moves. This is used in case it is difficult to remember if you are allowed you castle; now you can know for sure castling or not.
01:57:03 <CakeProphet> the queen should obviously do something kind of queen-like.
01:57:19 <CakeProphet> ah, yes.
01:57:25 <zzo38> (I implemented Chess.zrf in a similar way to this, actually)
01:57:42 <zzo38> (This is a public domain prorgam, an alternative to the standard Chess.zrf)
01:57:42 <Jafet> How do people forget whether they're allowed to castle
01:58:00 <CakeProphet> in some earlier mental drafts the queen could swap places with any other piece but the king, and spawned pieces at the beginning of the game like portals currently do.
01:58:11 <CakeProphet> I don't think I like that though.
01:58:32 <zzo38> Jafet: Even if the people do not forget, I used a similar method to make the computer keep track of if castling is allowed
01:59:40 <CakeProphet> but the idea is for the queen to be similar to that in chess. a very powerful piece but something you wouldn't want to sacrifice and thus limited by that in the early game.
01:59:41 <pikhq_> Jafet: Well, it's possible due to being a form of game state that's not directly encoded.
01:59:46 <CakeProphet> not sure how that would work with these rules.
02:02:39 <CakeProphet> I also considered, simply for the fun of the though, that bishops could be prisms. So when they are hit by a projectile the projectile branches in the other three cardinal (or diagonal, depending on the original path) directions.
02:02:51 <CakeProphet> this is however a terrible idea. but fun to consider.
02:03:00 <CakeProphet> s/though/thought/
02:03:33 <CakeProphet> or the queen could do this.
02:04:33 <CakeProphet> there are still some issues to work out.
02:05:04 <itidus21> on the topic of chessvariants, one move scheme i thought of one time is giving a piece 2 options. a short move which can capture, and a longer move which cannot capture
02:05:08 <zzo38> I have implemented many variants including 123456 Chess and Chess with Wickets.
02:05:22 <CakeProphet> itidus21: there are variants with exactly this sort of scheme
02:05:45 <itidus21> i was thinking of street fighter 2 when i thought of it
02:05:51 <CakeProphet> in particular one problem is that, if your piece spawner dies, you now have a finite supply of missiles.
02:06:06 <itidus21> and such things.. where you have this speed vs strength trade off
02:06:18 <itidus21> and just in general this tradeoff exists eh
02:06:36 <CakeProphet> so perhaps I should use the original rules, where the cannons spawn missiles adjacent to them, and then the subsequent turn they're fired. making projectiles a 2-turn process, but this also has disadvantages.
02:06:50 <itidus21> the nimble weakling vs the stumbling oaf
02:07:45 <itidus21> :D :D oh man.. i wonder if they ever made chess variants based off of animes
02:07:58 <CakeProphet> hmmm./
02:08:22 <itidus21> like dragon ball z, naruto, bleach, these kinds of things
02:08:28 <CakeProphet> I guess no one is interesting in offering suggestions so I'll shush now. I was hoping for some ideas.
02:08:39 <itidus21> sorry.. im off-topicing
02:08:48 * itidus21 sidles away.
02:09:01 <CakeProphet> itidus21: DBZ checkers. when you reach the end of the board you're promoted to super saiyan.
02:09:31 <itidus21> i like the idea of a cannon and a cannonball(which you have called a missile)
02:09:49 <CakeProphet> yes but there are issues with strategy and overall game progression
02:10:00 <CakeProphet> such as what happens when you lose all of your cannons, or both of your portals, etc.
02:10:18 <CakeProphet> if missile spawning is tied to a piece that's expendable then you have a situation where cannons are basically useless.
02:10:18 <itidus21> its a bit like a pinball scheme you have dreamed up.. where the cannon is the launcher
02:10:41 <CakeProphet> and once cannons are useless then arrows are useless.
02:10:47 <itidus21> and the arrows are those bouncy parts
02:11:39 <CakeProphet> so perhaps cannons should spawn their own missiles.
02:11:53 <itidus21> or something like gregor's 2L which i was peeking at the other day
02:12:41 <CakeProphet> hmm
02:13:05 <itidus21> see im really not a chess guy.. ill drop out here and let someone who better understands in
02:14:13 <CakeProphet> there could be no missile pieces.
02:14:17 <CakeProphet> cannons can just fire...
02:14:31 <CakeProphet> and then pawns are some sort of expendable but useful thing.
02:15:03 <CakeProphet> ah, one-time use trampolines. :)
02:15:06 <CakeProphet> perhaps.
02:15:36 <CakeProphet> this gives them a defensive use while also making them not overpowered. They're not invincible.
02:15:50 <CakeProphet> but they protect pieces behind them in the line of fire.
02:15:53 <CakeProphet> for one shot.
02:15:57 <CakeProphet> perhaps.
02:16:20 <CakeProphet> nah...
02:18:44 <CakeProphet> but it definitely makes sense for cannons not to rely on a missile piece for firing.
02:20:44 <CakeProphet> ah okay.
02:21:17 <CakeProphet> the two cannons are different. one fires diagonally one fires cardinally. otherwise they'd be ridiculous.
02:21:30 <CakeProphet> also help what is a sidewinder.
02:22:54 <zzo38> I have played pinball games with nonstandard launch, such as JiggleBox.
02:23:26 <zzo38> CakeProphet: Yes, that is idea; you could use rook upsidedown to indicate that, too.
02:24:23 <CakeProphet> right that was implied.
02:24:45 <CakeProphet> so that removes the cumbersome missile requirement without making cannons like super-queens
02:24:57 <CakeProphet> well, slow super-queens :P
02:25:37 <CakeProphet> perhaps the piece spawning mechanic should also be ditched.
02:25:40 <zzo38> I do know about Chinese cannons (in Xiangqi and some other chess variants), but I suppose your game is entirely different cannons and has nothing to do with that.
02:26:15 <CakeProphet> yes the cannons are vital. portals are probably second most vital.
02:26:25 <CakeProphet> arrows are probably more useful than I currently realize.
02:26:55 <CakeProphet> okay, nevermind, I now realize they are useful.
02:27:03 <CakeProphet> than I previously realized, or whatever. :P
02:27:46 <CakeProphet> okay so either the queen or the two bsihops have the arrow-destroying property.
02:29:30 * CakeProphet is going to go read some chess variant rules for inspiration.
02:30:14 <zzo38> Do you know Emperor-Wars? I had a book about it once, but now I lost it. It is also a chess variant.
02:31:05 <zzo38> Here is my chess variants using mostly normal chess pieces. All URLs start with http://www.chessvariants.org/index/msdisplay.php?itemid=
02:32:36 <CakeProphet> the queen /could/ be like an arrow with no direction.
02:32:45 <CakeProphet> the player can freely choose in which direction it redirects.
02:33:00 <CakeProphet> but then there is no drawback to this. there isn't the same sacrifice-dynamic here.
02:33:51 <zzo38> MS123456chess MS2choicechess MSblandchess MSchecker-captur MSchesswithcheck MSchesswithquant MSchesswithwicke MScommunistchess MSinvisiblekingc MSvariantswithqu
02:33:51 -!- augur has quit (Remote host closed the connection).
02:35:25 <zzo38> These are list of my variants using mostly normal chess set. A chess/checkers/backgammon set is preferred.
02:37:24 <CakeProphet> perhaps two arrows is sufficient.
02:37:33 <CakeProphet> so then bishops could be arrows.
02:37:49 <zzo38> OK.
02:39:26 <zzo38> Do you know about Shogi or Xiangqi?
02:39:33 <CakeProphet> Xiangqi yes.
02:41:25 <zzo38> I know how to play both.
02:43:24 <CakeProphet> perhaps there could be... no pawns.
02:43:39 <zzo38> And I especially like Tsume Shogi.
02:43:59 <CakeProphet> otherwise I think they should be trampolines (think befunge #)
02:48:46 <zzo38> Here are some chess variants: http://www.chessvariants.org/fiction.dir/hitchhiker/zork_and_turn.html (I like many of the variants by Claude Chaunier and Joao Pedro Neto)
02:48:46 <zzo38> It defines chess variants as follows: Chess is a class of games that comply with the following restriction: There must be at least one special piece, called King. Each player must protect his own King and loses if it is captured or checkmated.
02:48:59 -!- EgoBot has quit (Ping timeout: 252 seconds).
02:49:35 -!- Zetro has quit (Quit: End of Stream).
02:49:36 -!- EgoBot has joined.
02:49:42 -!- Zetro has joined.
02:51:38 -!- MDude has changed nick to MSleep.
02:54:20 -!- augur has joined.
02:55:05 <ais523> so suicide chess isn't a chess variant?
02:55:20 <zzo38> ais523: I think it is a chess variant, actually.
02:55:32 <ais523> but it doesn't have any special powers involving the king
02:55:36 <zzo38> The definition that description gives is not completely accurate, I think.
02:55:45 <zzo38> ais523: Some forms of suicide chess allow castling.
02:55:59 <monqy> is suicide chess anything like strip chess
02:56:11 <ais523> but the capture or checkmate of the king doesn't end a game of suicide chess
02:56:13 <ais523> monqy: not really
02:56:38 <CakeProphet> zzo38: I would think the only real technical requirement of a chess variant is that it bear some semblance to chess. Either using the same board, a similar rule, or the same pieces.
02:56:43 <zzo38> ais523: I know; that is why I say I think that definition is inaccurate
02:57:07 <monqy> I dunno how strip chess would work. Is there a good ruleset?
02:57:12 <zzo38> CakeProphet: That definition is also inaccurate, I think, as seen by the various chess variants existing.
02:57:48 <CakeProphet> so if a chess variant has a completely different board, completely different pieces, and no rules in common with chess
02:57:52 <CakeProphet> is it still a chess variant?
02:57:52 <monqy> loser retroactively takes off clothes? is that fair?
02:57:54 <ais523> monqy: normally on captures, is how chess is adapted to the usual forfeit-related game-patterns
02:58:10 <ais523> although that probably works better with alcoholic chess than strip chess
02:58:33 <CakeProphet> yeah, you could also employ piece values to determine various things.
02:58:35 <zzo38> Oops! GHC told me to report a bug because the 'impossible' happened.
02:58:48 <CakeProphet> in drinking chess the piece value would determine how much or what you drink.
02:58:56 <ais523> indeed, it does
02:59:14 <ais523> "please report a bug: it's not that anything drastic's gone wrong internally, we're just lonely"
03:00:07 <CakeProphet> okay so the only things to figure out now are a) starting piece position b) purpose of the queen c) make the movement rules a bit more precise
03:01:13 <zzo38> Oops! The database for GHC bug tracker is locked.
03:01:20 <monqy> the queen can swap with any piece? is that too useless or powerful or similar to other pieces?
03:01:20 <zzo38> Therefore I cannot report a bug.
03:02:06 <CakeProphet> monqy: it's not useless it would actually give it a similar sacrifice dynamic. it would be similar to the portal but more useful I think. Also it needs to have some other purpose besides that
03:02:30 <CakeProphet> originally it was to spawn pieces, but I later ditched that. Also I considered some kind of sacrifice dynamic where pieces adjacent to the queen could be sacrificed and replaced by other pieces.
03:02:36 <CakeProphet> but that could be a little wonky.
03:02:44 <zzo38> Type of classInstances is classInstances :: Name -> [Type] -> Q [Name] different from the documentation, and the code producing error is $(classInstances ''Num [ConT ''Integer] >>= reify . head >>= runIO . print >> [| 0 |])
03:03:27 <CakeProphet> monqy: I think the queen should permit the capturing of arrows by cannons. perhaps it could also change the nature of friendly projectiles so that they clear an entire path instead of capturing only one piece, but this might make it incredibly easy to checkmate.
03:03:47 <CakeProphet> you wouldn't want your king in an enclosed area where it can't move.
03:03:55 <zzo38> What does "reifyType PredTy" mean?
03:04:11 <monqy> CakeProphet: my idea would give the queen the job of positioning important pieces, rescuing important pieces, and fleeing by swapping with an unimportant piece
03:04:38 <CakeProphet> rescuing and what way?
03:04:44 <monqy> CakeProphet: important pieces mainly being clumsy slowmoving things like the king and the cannons
03:04:54 <monqy> rescuing as in swapping out with a piece in danger
03:04:59 <CakeProphet> well I would specifically not allow swapping with the king.
03:05:02 <CakeProphet> I think.
03:05:03 <monqy> what!!!
03:05:13 <monqy> special cases are not cool!!!
03:05:21 <CakeProphet> sure they are. the king is already a special case.
03:05:37 <monqy> diaf, cakechess
03:06:29 <CakeProphet> so then the queen basically becomes a very useful support tool that is very difficult to capture. Not sure I like that.
03:07:04 <monqy> what's not to like? not a rhetorical question; I honestly haven't thought much about my queen, beyond what I already said
03:07:17 <zzo38> OK, I managed to report bug now
03:07:31 <CakeProphet> the best way to capture the queen would be to put the king in a check in which the only way to escape is to swap with the queen.
03:07:44 <CakeProphet> otherwise the queen can just disappear as it pleases.
03:10:16 <monqy> disappear as it pleases at the cost of sacrificing your pieces!! of coruse all pieces would have to be fairly valuable for this to be meaningful
03:10:16 <CakeProphet> also the portal fills a similar role albeit in a different way.
03:10:31 <CakeProphet> all pieces except pawns are extremely valuable.
03:10:59 <monqy> portal sort of fulfiles the moving a piece into attack role except only once when it places the piece
03:11:31 <monqy> CakeProphet: so then i guess you place pawns either when you're out of other stuff to place or you want queen escape teleport fodder?
03:11:33 <CakeProphet> yes sort of makes the cannons slowness less of an issue, in a way similar but different to arrows.
03:12:31 <CakeProphet> monqy: oh by the way I ditched the portal spawning stuff.
03:12:35 <monqy> oh
03:12:35 <CakeProphet> you begin the game with all pieces on the board.
03:12:44 <monqy> that makes queens more problematic
03:12:49 <CakeProphet> but portal however can still teleport pieces. a piece walks into the direction the portal is facing
03:12:53 <CakeProphet> and comes out the other side.
03:12:55 <CakeProphet> like a poral.
03:12:59 <CakeProphet> portals are portals.
03:13:01 <monqy> i was going on the assumption that you had to take turns to place pawns for use with queens
03:14:10 <CakeProphet> the queen could always just be a simple piece adept at capturing.
03:14:19 <CakeProphet> something that is lacking in this game.
03:14:28 <CakeProphet> currently arrows are very tricky to capture.
03:14:37 <CakeProphet> and are very valuable when strategically placed.
03:14:38 -!- augur has quit (Remote host closed the connection).
03:15:08 <monqy> also i forgot about portals actually working as portals oops
03:15:19 <CakeProphet> yes portals will be fun.
03:15:21 <monqy> also i remember you saying something about portals having a direction? what's that about
03:15:53 <CakeProphet> the direction is the direction the portal is facing. you can't capture it from that direction because you just pass through.
03:16:08 <CakeProphet> projectiles pass through as well as pieces.
03:16:24 <CakeProphet> all other directions are open for capture though.
03:16:51 <monqy> directional capturing? what's that about
03:16:54 <CakeProphet> not sure how or if portals capture. Perhaps that can capture in one direction, making them kind of useful defensively.
03:17:05 <CakeProphet> ...I mean, I hoped it was kind of an intuitive concept but I guess not.
03:17:15 <zzo38> "People usually think great things about Planets. The fact is planets are just small and rocky or big and foggy gravity modeled spheres, where complex biological cells try to grab to its surface as hard as they can, in order to invent cable television."
03:17:18 <monqy> if anything has knightsmoves, will portals not work for them?
03:17:36 <CakeProphet> knights still have a direction in which they're moving when capturing, so it will still work
03:17:43 <CakeProphet> also I don't plan on having anything that moves like a knight
03:17:49 <CakeProphet> except that portals can hop.
03:18:22 <CakeProphet> .....also I have no considered what happens when a portal tries to pass through a portal it is linked to.
03:18:26 <CakeProphet> I'd thinkt his isn't possible.
03:18:47 <CakeProphet> or they just explode or something.
03:18:51 <CakeProphet> which could be useful.
03:19:12 <CakeProphet> a portal is bound to explode at some point. it's in their nature.
03:19:47 <CakeProphet> (explode meaning that all adjacent pieces and the piece itself are captured)
03:20:28 <ais523> how big's the board? 8x8 would be hilarious given this complexity
03:20:43 <CakeProphet> 8x8 I'd imagine. I don't have fancy boards.
03:23:27 <CakeProphet> I've been running situations in my head and if you use a starting board placement that's exactly the same as normal chess it works out similarly.
03:23:47 <CakeProphet> well, actually I'll probably modify it a little bit.
03:24:38 <CakeProphet> but basically it works similarly to chess from what I can except that where you should move pieces is now drastically different.
03:24:51 <CakeProphet> you should basically have no need to move cannons until the endgame.
03:25:50 <CakeProphet> the cannon essentially acts as a piece that turns other friendly pieces in its path of fire into projectiles.
03:26:04 <CakeProphet> put a portal directly in front of a cannon and now your second portal can shoot things.
03:26:23 -!- evincar has joined.
03:27:21 <CakeProphet> also what is being sacrificed is not directly straightforward, for example. say you have your portal set up directly in front of your cannon, and an arrow is placed so that the enemies cannon can capture your portal.
03:27:34 <CakeProphet> so, you spend your turn to turn your portal to face the arrow so that the portal won't be captured.
03:28:17 <CakeProphet> ...but now you've either sacrificed some other piece you own on a completely different location on the board, or you've pointed the potential projectile at an enemy piece and thus caused them not to fire.
03:28:28 <CakeProphet> wildly different things could happen as the result of a single move.
03:29:32 <evincar> I thoroughly endorse these shenanigans.
03:30:04 -!- copumpkin has joined.
03:34:17 <monqy> hi evincar
03:35:23 <zzo38> Make a chess variant based on this idea: "A Black Hole is a place where all the White squares has been removed from the local representational Chess board."
03:35:48 <pikhq_> ... Relativistic chess?
03:36:21 <zzo38> I don't know.
03:40:42 <CakeProphet> I need a name for my game.
03:40:53 <monqy> I've been calling it cakechess, once.
03:40:59 <zzo38> CakeProphet: I don't know.
03:41:20 <evincar> Cakechess is fine as a working title.
03:41:43 <CakeProphet> I was thinking shellshock but I'm almost certain that's already the name of something.
03:41:46 <evincar> monqy: Ohai.
03:43:48 <CakeProphet> there's some stupid online game called shellshock
03:43:53 <CakeProphet> so I could call my game shellshocked
03:44:34 <CakeProphet> I think cannon placement will be somewhat problematic
03:44:39 <CakeProphet> for the starting layout.
03:45:38 <CakeProphet> though I think pawns will perhaps mitigate the problem to a degree.
03:46:21 <CakeProphet> essentially since capturing by cannon is indirect there's no defenses for things like bishops and rooks in chess
03:46:35 <CakeProphet> where you have many units surrounding the piece to capture it
03:46:42 <CakeProphet> because the cannon can just capture from afar.
03:47:03 <CakeProphet> I suppose it's the same thing you just have to think about it differently.
03:47:28 <CakeProphet> those above sentences probably make no sense to anyone else but me.
03:49:06 <CakeProphet> okay so assuming the diagonal cannon is on queenside and the cardinal cannon on kingside.
03:49:17 -!- pikhq has joined.
03:49:29 <CakeProphet> moving g2 to g3, then f1 to g2
03:49:46 <CakeProphet> er no, wrong side.
03:49:54 -!- pikhq_ has quit (Ping timeout: 260 seconds).
03:50:01 <CakeProphet> b2 to b3. then c1 to b2.
03:50:05 <CakeProphet> would be a good starting move for white.
03:50:38 <CakeProphet> because the arrow protects your diagonal cannon while also allowing you to aim it
03:50:43 <CakeProphet> but there are likely other good starting moves.
03:51:16 <CakeProphet> and then black will need to do very different things in order to react defensively to white.
03:52:05 <CakeProphet> also strange things could easily happen very quickly. :P
03:53:48 <CakeProphet> infinite loops between two opposing arrows would be, uh, interesting.
03:55:03 <CakeProphet> yeah I'm thinking the queen could act as a directionless arrow.
03:55:19 <CakeProphet> that can also capture.
03:55:24 <CakeProphet> but doesn't move as quickly.
03:58:23 <zzo38> I have read about program to make up the Haskell function from the type, but can it work with Template Haskell?
03:58:53 <copumpkin> just integrate @djinn
03:58:59 <copumpkin> @djinn a -> Not (Not a)
03:59:00 <lambdabot> f a b = b a
03:59:12 <copumpkin> @djinn Either (Not a) (Not b) -> Not (a, b)
03:59:13 <lambdabot> f a =
03:59:13 <lambdabot> case a of
03:59:13 <lambdabot> Left b -> \ (c, _) -> b c
03:59:13 <lambdabot> Right d -> \ (_, e) -> d e
03:59:14 <CakeProphet> meaning that a friendly projectile can be redirected to any path across the queen, and will at that point be able to capture arrows, but enemy projectiles will still capture her. (yes, a special case.)
04:00:37 <CakeProphet> so this is something that is incredibly useful, but vulnerable
04:00:47 <zzo38> copumpkin: That is seem a function taking two parameters, the type specifies only one, what is the Not type?
04:01:00 <copumpkin> type Not a = a -> Void
04:01:11 <zzo38> And how do I do djinn? I cannot find the information it seem broken
04:01:38 <copumpkin> you just give @djinn a type and it will try to write a function (prove) of that type
04:01:55 <copumpkin> what I wrote up there was one of the deMorgan laws
04:02:22 <zzo38> OK, I understand those things. But it still doesn't explain how to integrate @djinn into another program, because I do not have the information of that program.
04:02:22 <copumpkin> oddly enough, in haskell, only three out of the four deMorgan laws are true
04:02:43 <copumpkin> http://hackage.haskell.org/package/djinn-th
04:02:54 <copumpkin> and http://hackage.haskell.org/package/djinn
04:03:42 <zzo38> OK thanks
04:03:59 <itidus21> CakeProphet: to avoid infinite loops you could possibly give each arrow a finite number of arrowings per turn
04:04:07 <itidus21> just a thought
04:04:14 <itidus21> im sure theres other ways to get around it
04:04:41 <CakeProphet> itidus21: I have no intention of avoiding infinite loops
04:04:46 <itidus21> lol..
04:04:55 <CakeProphet> the only annoying about them is that you need to verbally declare that you have created one
04:05:03 <CakeProphet> which is kind of annoying and not very chess-like.
04:05:21 <CakeProphet> I guess you could just say "loop" or something like that, similar to check.
04:05:29 <itidus21> you have to declare check right?
04:05:39 <itidus21> (i don't know chess )
04:05:42 <CakeProphet> yes.
04:05:48 <itidus21> so it is chesslike really
04:05:51 <itidus21> not to worry
04:05:53 <CakeProphet> ...yes it's a chess variant.
04:06:07 <CakeProphet> using chess pieces, on a chess board, with what is currently the exact same starting layout.
04:06:16 <itidus21> i mean declaring a state of the game is chess-like
04:06:25 <CakeProphet> oh, well, right I just don't want it to be like
04:06:31 <itidus21> precidented on "check"
04:06:47 <itidus21> ^precedented
04:06:49 <CakeProphet> "oh uh, by the I just fired this cannon here and made this loop here that follows this path like so..."
04:06:55 * CakeProphet gestures and points awkwardly
04:07:17 <CakeProphet> which is normally not very chess-like as most of the time it's completely silent.
04:07:31 <CakeProphet> so I think saying "loop" would be sufficient except in cases where multiple possible loops can happen.
04:07:33 <zzo38> copumpkin: Which deMorgan laws not true in Haskell?
04:07:52 <copumpkin> @djinn Not (a, b) -> Either (Not a) (Not b)
04:07:52 <lambdabot> -- f cannot be realized.
04:08:07 <copumpkin> it's not provable in constructive logic
04:08:50 <zzo38> Is there a way to do different kind of logic?
04:09:10 <CakeProphet> "a player may simply declare "loop" in the event that they've fired a projectile that forms an infinite loop. If the opponent wishes the player to clarify, then they must do so."
04:09:19 <copumpkin> no, most programming (and proof assistants) model an intuitionist (constructive) logic
04:09:20 <CakeProphet> sounds good to me.
04:09:40 <copumpkin> classical logic is very non-computational
04:10:08 <zzo38> copumpkin: I know, Curry-Howard uses intuitionistic logic, and sometimes it is good, but sometimes you might want different logic and I think I read someone can somehow make it using different logic too
04:10:29 <CakeProphet> itidus21: actually I forsee loops being a useful defensive and offensive strategy.
04:10:31 <copumpkin> some type systems encode substructural logics
04:10:43 <zzo38> What are substructural logics?
04:10:46 <copumpkin> but you typically don't get classical logic
04:10:46 <itidus21> is a loop the end of a game?
04:10:54 <CakeProphet> either to respond to an enemies arrow placement with your own arrow pointing in the opposite direction, or to form defensive walls.
04:11:13 <CakeProphet> (part of the loop rules include that firing a projectile into an existing loop cancels both the loop and the fired projectile)
04:11:21 <copumpkin> substructural logics basically place restrictions on what you can do with your context, which in programming language terms, means that you put restrictions on how many times you can (or must) use your variables
04:11:28 <itidus21> oh so the loop persists between turns? :D
04:11:30 <copumpkin> some say that a variable must be used exactly once
04:11:32 <zzo38> OK, Wikipedia does have article about substructural logic, I will read that too
04:11:35 <copumpkin> others say at least once
04:11:35 <CakeProphet> loops work similarly to how you would imagine them to work, if you imagine the projectile as a deadly laser death wall
04:11:38 <copumpkin> others say at most once
04:11:38 <CakeProphet> itidus21: yes.
04:11:40 <copumpkin> and so on
04:11:41 <CakeProphet> itidus21: until the loop is broken.
04:11:41 <itidus21> dude you're good at this.
04:11:51 <copumpkin> even more strict ones say that you must use variables in the same order you declare them
04:12:06 <CakeProphet> itidus21: so all you have to do is turn an arrow in the loop and you immediately capture something. loops are a very dangerous situation.
04:12:23 <copumpkin> ATS and clean have type systems that support certain kinds of substructural logics
04:12:27 <CakeProphet> or turn a portal.
04:12:46 <itidus21> this thing you're describing is so far the coolest chess variant i have heard of
04:13:10 <monqy> of how many chess variants have you heard, anyhow
04:13:25 <itidus21> 1,220,005
04:13:26 <CakeProphet> actually I can forsee some situations in which the best way to counteract an infinite loop being used to capture something is to form another chain in the loop
04:13:35 <copumpkin> is this laserchess?
04:13:38 <CakeProphet> yes.
04:13:40 <copumpkin> I loved laserchess
04:13:45 <copumpkin> had to write an AI for it a while back
04:13:46 <CakeProphet> oh, is that a thing? nevermind
04:13:52 <copumpkin> oh
04:13:54 <CakeProphet> no this is something I've come up with that might be similar.
04:14:04 <copumpkin> you should check it out. It's lots of fun
04:14:08 <copumpkin> you have a laser and mirrors
04:14:09 <copumpkin> and rotation
04:14:14 <copumpkin> and the complexity is way higher than regular chess
04:14:32 <CakeProphet> yes it basically looks like this game but with way more arrows.
04:14:41 <CakeProphet> and different kinds of arrows
04:14:47 <CakeProphet> I've added portals as well.
04:14:52 <zzo38> Wikipedia does mention "Correspondence between classical logic and control operators", it has to do with continuations, apparently.
04:15:15 <CakeProphet> ah and mirrors don't work exactly like arrows.
04:15:28 <CakeProphet> an arrow forced the direction of a projectile into one specific direction. the mirrors can reflect two different ways.
04:15:49 <CakeProphet> er multiple different ways.
04:16:20 <itidus21> monqy: ok i will say there is no best chess variant. but basically, some games are more memorable than others independant of factors like marketing
04:16:33 <itidus21> ^and word of mouth
04:16:54 <CakeProphet> I think portals will be great fun.
04:17:08 <itidus21> i never even really followed the portal part of it
04:17:22 <CakeProphet> bah, I've explained it so many times now. :P
04:17:35 <itidus21> i can read log if i have to
04:17:39 <itidus21> its all there
04:17:42 <copumpkin> zzo38: yeah
04:18:03 <CakeProphet> portals are knights. the direction of their nose is the direction of the portal. You can literally think of it as a portal. If you move a piece into the opening they come out the other opening, moving as they normally would through the portal
04:18:15 <itidus21> a game only has to be slightly more memorable than the other games in order to achieve mainstream popularity
04:18:16 <CakeProphet> projectiles can travel through the portal opening as well.
04:18:18 <CakeProphet> for great fun.
04:18:20 <CakeProphet> and profit.
04:18:59 <CakeProphet> if you capture a portal its corresponding portal EXPLODES and everything around it and itself is captured.
04:19:17 <CakeProphet> portals can't point to nothing, and obviously this requires that they explode.
04:19:41 <CakeProphet> also trying to pass a portal through its sister portal will cause them to EXPLODE in the same fashion
04:19:44 <CakeProphet> paradox is not allowed.
04:19:58 <itidus21> like if i wrote a simulation where people play games and talk about them, the games which were talked about even slightly more would have iterated positive feedback
04:20:02 <CakeProphet> and obviously causes explosions.
04:20:35 <CakeProphet> also, if any other rules I discover cause annoying side-effects, you can be sure something will explode.
04:21:57 <CakeProphet> hmm, perhaps I should have four arrows again instead of just two.
04:22:03 <CakeProphet> sounds more fun.
04:23:40 <zzo38> I think I can understand why Pierce's law is not deducible, though. If it is a function type, you have a value of type ((a -> b) -> a) there is nothing to call the function because you need (a -> b) which you don't have. Is that correct? (I know there is unsafe functions, and undefined, but I believe you have to be limited to safe and halting computations)
04:26:13 <zzo38> I know there is (x ->) monad and I have suggested using do-notation for fantasy rule. Would you simply use different monads, or...?
04:32:03 <CakeProphet> so basically as it currently stands if you lose a portal, cannon, or prism (queen) you are very likely to lose.
04:32:12 <CakeProphet> especially a portal, as a portal takes many pieces with it.
04:32:24 <Lymee> :t fix($)
04:32:25 <lambdabot> forall a b. a -> b
04:32:34 <Lymee> zzo38, what do you mean by "you don't have"
04:32:41 <Lymee> @djinn (a->b) -> a
04:32:41 <lambdabot> -- f cannot be realized.
04:33:14 <CakeProphet> can anyone think of any interesting ideas for pawns? Currently they move and capture exactly as chess pawns.
04:33:44 <CakeProphet> which is perfectly fine with me. pawns are definitely one of the most useful pieces in chess.
04:35:09 <zzo38> Lymee: Isn't that an infinite loop though?
04:35:33 <CakeProphet> they will be even more expendable in this game though, as capturing a pawn with a cannon does not place any of your pieces in danger like capturing a pawn would in chess.
04:35:39 <Lymee> zzo38, yes.
04:35:45 <Lymee> But it fits the type signature.
04:36:42 <Lymee> Can you even write a function with the signature (a->b)->a?
04:36:48 <Lymee> @djinn a->b->c
04:36:49 <lambdabot> -- f cannot be realized.
04:37:25 <Lymee> @djinn a->b->(e->d->c->a->b)->c->d->e->(b->r)->r
04:37:25 <lambdabot> f a _ b c d e f = f (b e d c a)
04:37:40 <Lymee> @djinn a->b->(e->d->c->a->x)->c->d->e->(x->r)->r
04:37:40 <lambdabot> f a _ b c d e f = f (b e d c a)
04:38:09 <Lymee> @djinn a->([a]->(a,b,c)->x)->b->(e->e->e->x->x)->c->d->e->(x->r)->r
04:38:09 <lambdabot> Error: Undefined type []
04:38:11 <Lymee> :(
04:38:16 <Lymee> @djinn a->(a->(a,b,c)->x)->b->(e->e->e->x->x)->c->d->e->(x->r)->r
04:38:17 <lambdabot> f a b c d e _ f g = g (d f f f (b a (a, c, e)))
04:38:22 * Lymee stops silly
04:38:41 <CakeProphet> hmmm
04:38:57 <CakeProphet> I have a feeling shellshock AI will be more difficult than chess AI.
04:39:04 <zzo38> Lymee: Maybe you can if you have infinite loop and all of that stuff, but for all 'a' and 'b' you probably do not have such a function that is always defined output for all defined input.
04:39:46 <zzo38> But even if you can, what you need is (((a -> b) -> a) -> a)
04:40:39 <zzo38> Which means you require (a -> b), at least I think it does.
04:46:19 <CakeProphet> hmmm, here's an interesting idea. perhaps a portal could swap places with any friendly pieces in its movement radius.
04:46:27 <CakeProphet> monqy: ^^^
04:47:02 <CakeProphet> this is perhaps a bad idea though.
04:47:13 <monqy> so that would be any place to which it can move?
04:47:17 <CakeProphet> yes
04:47:26 <CakeProphet> which, currently is three spaces in any direction.
04:47:30 <CakeProphet> but might be shortened to two.
04:47:39 <CakeProphet> I will play with my first draft and then go from there.
04:47:54 <CakeProphet> also portals can hop.
04:48:07 <CakeProphet> which puts them near the top of the mobility list, below arrows.
04:48:36 -!- evincar has quit (Quit: Night.).
04:49:14 <CakeProphet> because both portals and arrows will need to get to places quickly and often.
04:49:37 <CakeProphet> as they're the primary defensive pieces.
04:49:41 <CakeProphet> and offensive pieces.
04:49:43 <CakeProphet> >_>
04:50:27 <Patashu> Has anyone in here played DROD (Deadly Rooms of Death) and Braid?
04:51:14 <CakeProphet> Braid sounds familiar.
04:52:55 <zzo38> What is a "dependent product type"? The article about Curry-Howard mentions it, but the article about dependent types, while I read it, I still don't know what dependent product type is.
04:53:06 <monqy> I've played some braid and I think I've played some drod as well. don't remember either that well.
04:55:33 <CakeProphet> hmmm, I'll need to clarify the rules involving infinite loops and prisms.
04:56:47 <Patashu> I had an idea two nights ago in bed to combine the time travel elements of braid with drod
04:56:52 <Patashu> Drod already lets you undo as many moves as you like
04:56:57 <Patashu> So why not introduce achronal elements into it?
04:59:59 <Lymee> @let abaa :: ((a -> b) -> a) -> a; abaa p = fix($)
04:59:59 <lambdabot> <local>:3:39:
04:59:59 <lambdabot> Couldn't match expected type `a1' against inferred type `...
05:00:05 <CakeProphet> dude shellshock is going to be so fun I can't wait to play it.
05:00:38 <monqy> i'm still going to call it cakechess it sounds better to me
05:00:41 <Lymee> @let abaa :: ((a -> b) -> a) -> a; abaa p a = fix($)
05:00:42 <lambdabot> <local>:3:30:
05:00:42 <lambdabot> Couldn't match expected type `a1'
05:00:42 <lambdabot> against inf...
05:00:56 <Lymee> Wait, never mind.
05:01:01 <CakeProphet> laser chess would be a good name but that's already taken.
05:01:03 <CakeProphet> maybe portal chess.
05:03:10 <CakeProphet> arrows might be equally important as cannons, or just slightly below importance.
05:03:17 <CakeProphet> portals are pretty vital I think.
05:04:05 <CakeProphet> portal, cannon, prism, arrow. perhaps.
05:04:19 <CakeProphet> but losing any of them would be very much like losing a queen in chess.
05:06:27 <CakeProphet> anybody play sc2
05:06:31 <CakeProphet> I'm thinking about getting back in.
05:19:19 <CakeProphet> a similar game: http://en.wikipedia.org/wiki/Khet_(game)
05:19:25 <CakeProphet> to my chess variant.
05:19:44 <CakeProphet> more like laser chess though
05:21:25 <CakeProphet> it has actual lasers too. this is something portal chess cannot do because of portals. :P
05:21:48 <CakeProphet> well, no, if the portal pieces were electronic, they could have a sensor/laser combo on one of their sides.
05:21:52 <itidus21> i started taking down some notes on a dbz-chess
05:21:55 <CakeProphet> and a wireless transmitter. :P
05:22:00 <CakeProphet> itidus21: oh god no.
05:22:03 <CakeProphet> don't do it.
05:22:06 <itidus21> cos thats how i like to pass 10 minutes on a sunday
05:22:18 <CakeProphet> chess does not work like that.
05:22:29 <CakeProphet> also, no stealing my ideas.
05:22:43 <itidus21> feh
05:23:14 <itidus21> you're encouraging me to actually take down more notes!
05:23:23 <CakeProphet> no
05:23:25 <itidus21> however.. to also be mindful of not stealing your ideas
05:23:33 <CakeProphet> your game will be horrible and unbalanced. while mine is obviously not.
05:23:37 <monqy> good idea: explosion chess.
05:23:41 <monqy> I'll leave the rest up to you
05:23:48 <CakeProphet> yes explosions are always good
05:23:52 <CakeProphet> especially to avoid rule paradox.
05:23:58 <CakeProphet> such as portals going into portals.
05:24:03 <itidus21> i am probably subconciously stealing ideas.
05:24:15 <CakeProphet> itidus21: well it's difficult to have DBZ chess without ENERGY BEAMS
05:24:44 <CakeProphet> so basically you'd have something where like... every piece can shoot some kind of projectile, and so everything would just die very quickly and it would be lame.
05:24:47 <CakeProphet> bad game.
05:25:20 <CakeProphet> and you could give some piece cool powers like the queen could be cell which would absorb other pieces and take their leet powerz
05:25:33 <CakeProphet> but it wouldn't matter because everything else would just shoot everything to deth. the end.
05:25:35 <itidus21> oh.. i would scrap the whole idea of using chess pieces
05:26:14 <itidus21> *sigho* as long as you're not getting genuinely too upset.
05:26:21 <CakeProphet> either way unless you have a lame hit points system you will have a) projectiles b) rapid death
05:26:32 <CakeProphet> yes I'm furious.
05:26:32 <itidus21> someone else mentioned that some of your ideas are similar to laserchess
05:26:40 <CakeProphet> yes but it's not the same.
05:27:06 <CakeProphet> it's actually very different. the only similarity is that there are cannon pieces and there are pieces that redirect the direction of the cannons fires.
05:27:29 <CakeProphet> but the way they redirect is very different..
05:27:51 <itidus21> maybe you're furious because i don't like chess
05:27:54 <CakeProphet> as is the number of pieces that redirect.
05:28:05 <itidus21> and my ideas are basically attempts to destroy it
05:28:08 <CakeProphet> nah I'm just saying dbz chess is probably not a good idea.
05:28:14 <CakeProphet> you can't destroy chess.
05:28:23 <CakeProphet> that's like saying "today I'm going to destroy communism"
05:28:36 <CakeProphet> or "today I'm going to destroy object-oriented programming"
05:28:46 <Patashu> mr fischer, tear down this board
05:28:56 <Patashu> *checkmate*
05:29:19 <CakeProphet> Did you think to kill me? There's no flesh or blood within this cloak to kill. There's only an idea. Ideas are bulletproof.
05:29:21 <itidus21> months ago i had ideas about streetfighter style fighting game with chess characters drawn in that style
05:30:11 <itidus21> i even had an idea about a chess platform game
05:30:28 <Patashu> itidus21
05:30:33 <Patashu> have you been to www.chessvariants.com
05:30:41 <CakeProphet> no don't encourage him.
05:31:10 <itidus21> well ya see.. the characters: King, Queen, Knight, Bishop, Pawn, Rook can be abstracted entirely out of the gameplay structure
05:31:13 <Patashu> I figure either he'll get better ideas or be overwhelmed by all the stuff on the site and ruminate
05:31:37 <CakeProphet> hmm also another neat idea for a chess variant inspired from Khet
05:31:38 <itidus21> heck, you could even make chess the sitcom
05:31:50 <CakeProphet> where your pieces are all arranged in a massive block and movement is done by swapping out pieces.
05:32:01 <CakeProphet> not sure what the objective would be.
05:32:08 <itidus21> chess the sitcom: "Welcome home King." "Thanks Queen." *canned laughter*
05:32:30 <itidus21> "Wheres our little pawns?" "Oh they're watching TV" *more canned laughter*
05:32:54 <CakeProphet> all the pawns would obviously die in horrible ways to protect other pieces.
05:32:55 <Patashu> CakeProphet: Castlingmost Chess
05:33:23 <CakeProphet> and the queen would always run away.
05:33:30 <CakeProphet> and the knight would always hop out of danger.
05:33:39 <itidus21> "King: It was a busy day at work today. 3 of our men got captured"
05:33:44 <CakeProphet> meanwhile the bishop is doing something strategic.
05:34:11 <CakeProphet> and sneaky
05:34:31 <itidus21> "Moooom! Timmy says he's gonna capture me!"
05:34:39 <CakeProphet> okay this can't continue.
05:35:04 <itidus21> i think there may have been an xkcd comic about a chess raft
05:35:19 <CakeProphet> the punch line so far is: "haha anthropomorphic chess family" "haha capturing"
05:35:37 <itidus21> maybe its just in my head
05:35:40 <monqy> haha
05:35:49 <Patashu> I remember that comic
05:35:53 <Patashu> they were going to settlers of catan
05:35:59 <Patashu> and the knights was having an argument with the bishop
05:36:34 <CakeProphet> so how does one post a contribution to chessvariants?
05:36:38 <CakeProphet> I must write up ze rules.
05:36:46 <itidus21> CakeProphet: yes anthropomorphic chess characters.
05:36:49 <Patashu> http://www.chessvariants.com/index/membersubmission.php presumably
05:36:52 <CakeProphet> of what is either portal chess or shellshock I can't decide.
05:36:57 <Patashu> I'm not sure if stuff is still getting added to it though...
05:37:11 <CakeProphet> well, I still need to work out a final draft after some test plays
05:37:17 <itidus21> so taking something like a manga.. and importing it into chess is simply an inverse operation of anthropomorphizing chess pieces
05:37:19 <CakeProphet> but surely they will see the awesomeness and allow it.
05:38:11 <Patashu> ah, yes. there are still new pages
05:38:16 <CakeProphet> excellent.
05:38:33 <CakeProphet> they shall witness what is probably the most excellent game ever made. well, maybe, after extensive testing.
05:38:50 <Patashu> yeah, you better playtest it :fistshake:
05:38:56 <CakeProphet> oh I will.
05:38:58 <Patashu> in my youth I had an overwhelming desire to come up with chess variants
05:39:01 <Patashu> but no desire to playtest them
05:39:03 <Patashu> so yeah it was awful
05:39:15 <CakeProphet> well playtesting is where you figure out if your game is actually good.
05:40:07 <CakeProphet> I have a feeling it will be extremely fun to begin with, and then get gradually less fun for one person as they lose all of the incredibly important pieces. hopefully at that point losing will be swift.
05:40:29 <Patashu> just gg out when you can't win
05:40:30 <Patashu> I guess
05:40:54 <CakeProphet> sidenote: it is probably always a bad idea to have a portal next to a king
05:41:15 <itidus21> basically i don't like chess for exactly the same reason that chessplayers do like it. i don't like knowing that it takes 50 years to learn to do anything in the game which hasn't been done before redundantly :D
05:41:38 <CakeProphet> I wonder if I should include some kind of indirect check rule in which portals can be placed in check if capturing the portal would result in capturing the king.
05:41:43 <CakeProphet> or if I should just not care.
05:41:55 <CakeProphet> and include that "oh by the way if a portal explodes on a king you lose"
05:42:21 <CakeProphet> itidus21: chess isn't about breaking the mold, really.
05:42:45 <itidus21> one idea i had was to make the tiles shaped as golden ratio instead of squares
05:42:55 <Patashu> good luck with that
05:43:04 <CakeProphet> a golden ratio is not a... shape.
05:43:14 <itidus21> a golden ratio rectangle
05:43:37 <CakeProphet> that's not an actual thing.
05:43:48 <itidus21> an approximation of a golden ratio rectangle
05:43:54 <CakeProphet> you need more than one.
05:44:15 <CakeProphet> ah wait, no you don't.
05:44:37 <CakeProphet> still what does changing the dimensions of the squares do exactly?
05:44:45 <itidus21> it doesn't mean anything yeah
05:45:26 <itidus21> it could unfortunately make certain distances on the board seem larger than they are also
05:45:46 <CakeProphet> do you mean make a golden SPIRAL?
05:46:03 <CakeProphet> or just have squares whose side ratios are phi?
05:46:26 <itidus21> yeah, i just mean take the sqaures and turn them into rectangles whose side ratios are pi
05:46:47 <CakeProphet> I see.
05:47:09 <itidus21> it would create a false sense of distance though
05:47:22 <itidus21> but i wonder if that would matter
05:47:26 <CakeProphet> I doubt it.
05:47:57 <CakeProphet> hmmm, just found some more things I need to clarify
05:48:03 <CakeProphet> these rules are going to get pretty large I think.
05:48:40 <CakeProphet> ah wait, no. I don't need the rule I was thinking of. I was thinking in terms of lasers but that's not how it will work.
05:48:49 <Jafet> Chess rules are hard enough to write down.
05:48:53 <Jafet> @google joke chess problem
05:48:54 <lambdabot> http://en.wikipedia.org/wiki/Joke_chess_problem
05:48:54 <lambdabot> Title: Joke chess problem - Wikipedia, the free encyclopedia
05:49:07 <CakeProphet> I was thinking if at any point the projectile crosses its own path it would nullify itself
05:49:14 <CakeProphet> but that would only make sense if it were imagined as a laser
05:49:35 <CakeProphet> and not as an abstract path thing.
05:49:37 <Jafet> Laser beams can cross themselves...
05:49:44 <Jafet> Do you mean TRON? Star Wars?
05:49:45 <CakeProphet> also that.
05:49:48 <CakeProphet> yes.
05:50:11 <CakeProphet> however I am making it a rule that infinite loops act basically like big laser death walls.
05:50:30 <CakeProphet> and if you fire a projectile /at/ an infinite loop then it cancels the projectile that was fired as well as the loop.
05:50:46 <CakeProphet> they collide.
05:51:09 <CakeProphet> also if an infinite loop captures a piece it ceases to exist. no permanent death walls.
05:51:47 <CakeProphet> basically you can imagine it as a pointlike projectile move around very very quickly inside the circuit. it collides with anything that crosses the circuit and then goes away.
05:51:59 <Jafet> TRON chess, the next big thing since trek chess
05:52:20 <CakeProphet> ha
05:52:24 <CakeProphet> tron chess would be madness
05:52:30 <CakeProphet> you'd need some kind of piece to keep track of the walls.
05:52:34 <CakeProphet> checker pieces I guess.
05:52:41 <Jafet> Play on a whiteboard
05:52:54 <CakeProphet> here I think the loops are simple enough that you can simply use your memory to locate loops.
05:52:59 <Jafet> Also, every piece moves every turn.
05:53:30 <CakeProphet> though perhaps I will precisely define how loops should be handled
05:53:41 <CakeProphet> I think you should have to redeclare a loop if you create a new loop from an existing loop.
05:54:14 <Patashu> how about chess where the board's colours update every round according to a CA (game of life or day and night would be appropriate) and then movement is determiend as follows: http://www.chessvariants.org/boardrules.dir/piedchess.html
05:54:21 <CakeProphet> ...
05:56:11 <CakeProphet> hmmm the simplest loop I think would be a wall structure. on a single row, column, or diagonal you could have: (canon) >> <<
05:56:55 <CakeProphet> you could also have an L-shaped circuit, but that would involve the opponent's arrow. shared loops are nasty situations.
05:57:23 <CakeProphet> and then you could have an L-shaped loop between two portals and a connecting arrow inbetween them.
06:01:08 <CakeProphet> ...bah, I think I'll actually need to give loops a directional quality as well.
06:01:33 <CakeProphet> in a portal-arrow-portal loop only one portal could change directions wouldn't being captured.
06:01:49 <CakeProphet> the other would change directions and then collide with the looping projectile.
06:05:32 <CakeProphet> so basically in any portal-based loop there's an in-portal and an out-portal, based on the direction the projectile was originally fired.
06:06:20 <CakeProphet> rotating the in-portal without moving it would cause it to be captured, the out-portal can rotate and move freely, thus breaking the loop and capturing the piece directly in front of it at the end of the turn.
06:06:40 <CakeProphet> yeah... that's probably the most complex rule of the game.
06:09:07 <CakeProphet> it also makes the out-portal an extremely deadly thing
06:09:41 <CakeProphet> as it can, in one turn, move three spaces in any direction, hoping over any piece, and face any direction... capturing whatever is in front of it at the end of the turn as it breaks the loop.
06:29:58 <CakeProphet> http://www.chessvariants.org/diffsetup.dir/pattsch.html
06:30:46 <Patashu> haha, that's hilarious
06:32:01 <CakeProphet> I don't really see how that's a double stalemate.
06:32:07 <CakeProphet> you can easily move one of the pawns forward.
06:32:14 <Patashu> no
06:32:22 <Patashu> look at where they start
06:32:24 <Patashu> then look at a normal board
06:32:27 <Patashu> notice something different?
06:32:47 <CakeProphet> aside from the two pawns above the rank no.
06:33:12 <CakeProphet> also the colors are flipped.
06:33:29 <CakeProphet> so, is that implying the pawns move backwards?
06:35:11 <CakeProphet> help
06:35:21 <Patashu> think
06:35:25 <CakeProphet> I am.
06:35:40 <Patashu> 'the players start the game in a position in which they are both stalemated.'
06:35:43 <Patashu> Is the page lying?
06:36:04 <CakeProphet> "it's a stalemate because it says it is" is not a valid explanation.
06:36:47 <CakeProphet> my only guess is that pawns move backwards because they reversed the locations of the pieces.
06:37:09 <Patashu> bravo
06:37:24 <CakeProphet> you'll note that I said that several lines ago.
06:37:38 <CakeProphet> and you didn't confirm it.
06:38:07 <Patashu> you should have been able to figure it out on your own lol
06:38:22 <Patashu> I didn't deny it
06:38:47 <CakeProphet> asshole.
06:38:58 <Patashu> wow
06:39:13 <CakeProphet> oh wait
06:39:20 <CakeProphet> I forgot the :P
06:39:25 <CakeProphet> see now everything is better.
06:39:32 <Patashu> yes
06:40:01 <CakeProphet> hahaha you're a terrible person just kidding hahaha
06:40:14 <Patashu> hahahaha
06:40:15 <Patashu> :)
06:40:58 <Patashu> anyway yeah
06:41:00 <Patashu> on chess variants
06:41:04 <Patashu> always assume fide rules and rule zero to the letter
06:41:18 <Patashu> until it says something contradictory
06:41:42 <Patashu> fide rules for instance explicitly says white starts on THIS side black starts on THIS side white's pawns go THIS way
06:41:44 <Patashu> and so on
06:45:40 -!- ive has quit (Quit: leaving).
07:08:26 -!- augur has joined.
07:11:58 <itidus21> in some book i downloaded(stole) it began by explaining its easier to describe fairy chess pieces relative to standard pieces... (please note: i am using my own words here in this paraphrase, and my memory always makes small forgettings)
07:12:21 <itidus21> reason for saying this? i suppose that fide provides a stable base
07:14:19 <CakeProphet> yes it's easier to say "this piece moves like a bishop" or "this piece moves like a knight, except.."
07:15:05 <CakeProphet> I don't this is entirely true for portal chess. "This piece moves like a king, except it can shoot bulletz lol"
07:15:15 <CakeProphet> +think
07:15:20 <itidus21> he's a badass king
07:15:25 <itidus21> carrys a rifle
07:15:51 <CakeProphet> also I've found some other abstract strategy games that have a directional componnt
07:15:54 <itidus21> calls himself k1ng
07:15:54 <CakeProphet> jwiriwejr
07:16:19 <CakeProphet> in one game you had to change direction a single turn, except there was one kind of piece that could move and turn in the same turn.
07:16:42 <itidus21> `log pawn
07:16:54 <CakeProphet> but I think it makes things more interesting if you can move and turn in one move.
07:17:03 <HackEgo> 2007-09-26.txt:22:51:33: <bsmntbombdood> something like Like a flock of hellspawns \ And stewards of the son of despite \ We parry their guile with the magnificence of disgust
07:17:18 <CakeProphet> hmmm, though once again I have more loop dilemmas...
07:17:37 <itidus21> CakeProphet: can i predict laserchess never had loops?
07:18:18 <itidus21> loops in chess is sort of cool. loops in chess in _the_ esolang channel, is quite special.
07:18:21 <CakeProphet> let's say I have a loop, and the opponent puts his portal inside of the loop and then turns his piece so that the portal is facing the path of the projectile
07:18:42 <CakeProphet> does the portal get captured or does it break the loop?
07:18:55 <CakeProphet> I would think it breaks the loop
07:19:17 <itidus21> are your portals anything like narbacular drop portals?
07:19:35 <CakeProphet> you can kind of think of them as walls with Portal portals on them.
07:19:44 <CakeProphet> you can reorient the walls.
07:19:50 <itidus21> `log narbacular
07:19:51 <CakeProphet> ...I've explained it like 4 times at least.
07:19:55 <HackEgo> 2008-07-18.txt:15:43:01: <Deewiant> shooting a portal through a portal? that worked in narbacular drop
07:20:02 <itidus21> ^_^
07:20:25 <itidus21> sorry cake.. i hate being so wrong that i have to regularly apologize
07:21:01 <CakeProphet> so anyways I guess the portal should break the loop...
07:21:14 <CakeProphet> any loop-breakage should be calculated at the end of a turn, in other words.
07:21:20 <CakeProphet> not halfway through it. that would be kind of arbitrary.
07:21:39 * CakeProphet will have a fairly large section on loop-breaking at the end of the rules
07:21:46 <CakeProphet> it's the most potentially confusing part of the game.
07:21:56 <itidus21> im a right groan and grunt
07:22:06 <itidus21> thank you big book of rhyming slang
07:22:51 <itidus21> ok i see
07:22:57 <itidus21> so a portal can divert a laser
07:23:02 <itidus21> faark thats cool
07:23:12 <CakeProphet> bah, okay I don't have a solution for this one.
07:23:19 <CakeProphet> let's say you have the simple 2-arrow loop
07:23:39 <itidus21> ok ill stop calling em lasers
07:23:46 <CakeProphet> (Cannon) >>------(loop)------<<
07:23:56 <CakeProphet> >> and << are arrows.
07:24:07 <itidus21> yeah im following most of it believe it or not
07:24:24 <CakeProphet> okay so in the L-shaped loops, there was an obvious direction to the loop. so that a portal could suddenly jump into te loop and something predictable would happen.
07:24:39 <itidus21> ahhhhh
07:24:39 <CakeProphet> but... what happens here when a portal jumps into a loop. do you flip a fucking coin?
07:25:21 <itidus21> hmm
07:25:31 <CakeProphet> I have to decide one way or another.
07:25:43 <CakeProphet> either the portal dies or it breaks the loop safely.
07:25:49 <itidus21> you could default to facing the portal at the cannon
07:25:56 <itidus21> along the loop
07:25:58 <CakeProphet> meh.
07:26:07 <itidus21> but yeah i know that answer sucks
07:26:10 <CakeProphet> that breaks my intuitive loop thinking. :P
07:26:21 <CakeProphet> flipping a coin makes the most sense but that's gross.
07:26:41 <CakeProphet> okay, the projectile is moving way too fast there's no way to time it correctly, the portal is always captured. :P
07:27:00 <itidus21> hummmm
07:27:02 <CakeProphet> however, portals can hop... thus allowing them to pass through. they just can't stand in it and break the loop.
07:27:59 <CakeProphet> so yeah I'll basically have to document the two cases (arrow-based loops vs portal-based loops) and how they differ.
07:28:15 <CakeProphet> portal-based loops have a directional quality. arrow-based loops do not.
07:28:21 <itidus21> so what happens if 2 loops cross each other.. is that the explosion case?
07:28:38 <CakeProphet> that can't happen because if a projectile crosses a loop they're both negated.
07:28:45 <itidus21> ahh
07:28:56 <itidus21> hmm
07:29:01 <CakeProphet> the explosion case involves a portal trying to pass through its linked portal
07:29:07 * itidus21 troll grins.
07:29:10 <CakeProphet> also when portals are captured their linked portal explodes.
07:29:35 <CakeProphet> you want to keep your portals alive...
07:31:08 <CakeProphet> actually portal-based and arrow-based is bad terminology as there's a 4-arrow case with directional qualities
07:31:17 <CakeProphet> so basically I should call them bidirection and unidirectional loops.
07:31:34 <CakeProphet> (the 4-arrow case would be extremely unlikely as it involves all four arrows on the board)
07:32:26 <itidus21> at times like this i bet you wish you could code up a simulator for it in 10 minutes
07:32:58 <CakeProphet> ........nooooo
07:32:59 <CakeProphet> I just found
07:33:04 <CakeProphet> something I'm pretty sure cannot be solved.
07:33:12 <CakeProphet> without a major rule change.
07:33:48 <CakeProphet> oh wait nevermind.
07:33:52 <CakeProphet> that can't happen.
07:33:53 <CakeProphet> phew
07:34:24 <CakeProphet> okay so anytime you break a loop, there is ONE predictable path the projectile can take.
07:34:33 <CakeProphet> itidus21: do you understand what happens when a loop breaks?
07:34:47 <itidus21> nope
07:34:56 <CakeProphet> okay simplest case:
07:35:06 <CakeProphet> (Cannon) >>------(loop)------<<
07:35:16 <CakeProphet> the arrow on the far right moves diagonally up-right
07:35:32 <CakeProphet> the loop is broken, which causes
07:35:42 <CakeProphet> (Cannon) >>--------(projectile)-----------
07:35:47 <itidus21> right
07:36:05 <CakeProphet> right, so everytime a loop is broken a potential capture is possible.
07:36:30 <CakeProphet> making loops a situation where the person controlling the loop has a huge advantage.
07:36:58 <itidus21> (Cannon) >>------(loop)------<< (bob)
07:37:03 <CakeProphet> because there's I think 12 options even in that simple case.
07:37:06 <CakeProphet> of where the projectile can go.
07:37:09 <itidus21> (Cannon) >>--------(projectile)---------(bob captured)---
07:37:12 <CakeProphet> yes.
07:37:32 <CakeProphet> no there's 10
07:37:34 <CakeProphet> 10 options
07:37:50 <CakeProphet> the two options that are removed the ones that form the loop
07:37:56 <CakeProphet> +are
07:38:13 <CakeProphet> that's a lot of different ways for things to potentially be captured, and the opponent can only react to one.
07:38:29 <CakeProphet> unless
07:38:43 <CakeProphet> they can, in their turn, break the loop via portal. which is not possible in the bidirectional case.
07:39:08 <CakeProphet> hmmmm, maybe it should be. otherwise that very very easy to setup loop could not be easily handled.
07:39:43 <itidus21> maybe you can declare a loop direction on creation of a loop
07:39:43 <CakeProphet> WHAT SAYETH?
07:39:50 <CakeProphet> no... that's not how it works.
07:39:55 <itidus21> ok :P
07:40:00 <CakeProphet> the projectile moves back and forth. it's bidirectional
07:40:23 <CakeProphet> a unidirectional loop moves in a circle thanks to portals or very unlikely arrow situations
07:40:35 <CakeProphet> >>-----V
07:40:35 <itidus21> ahhhhhh i see
07:40:38 <CakeProphet> ^-----^
07:40:40 <CakeProphet> or whatever
07:40:46 <CakeProphet> very unlikely with arrows
07:41:06 <CakeProphet> but more likely with portals. two portals + 1 arrow = L-shaped loop with a single direction of travel.
07:41:31 <CakeProphet> well there's also a line-based version.
07:41:45 <CakeProphet> ()-------<<------()
07:41:48 <CakeProphet> the ()'s are portals
07:42:03 <CakeProphet> the cannon is perpendicular to the arrow and fires.
07:42:51 <CakeProphet> the L-shaped loops is similar but with the portals not on the same rank/file
07:43:07 <itidus21> ╔═►═╗
07:43:11 <itidus21> ▲ ▼
07:43:12 <itidus21> ╚═◄═╝
07:43:15 <CakeProphet> yep.
07:43:22 <itidus21> i know thats not how it works but it looks cool
07:43:30 <CakeProphet> that's the 4-arrow loop
07:43:45 <CakeProphet> the only loop that consists entirely of arrows and is also unidirectional.
07:43:58 <itidus21> i realize in practice those arrows would be on the corners but artistic license
07:44:03 <CakeProphet> it is owned by both players. Hilarity ensues.
07:44:32 -!- zzo38 has quit (Remote host closed the connection).
07:44:44 <CakeProphet> basically you would not want to be the person to form this loop as it gives your opponent license to redirect the loop as he pleases.
07:45:14 <CakeProphet> UNLESS you can somehow make it so that any possible breaking of the loop causes the opponent to lose a piece
07:45:21 <CakeProphet> but that's even more unlikely than forming the loop itself.
07:45:34 <itidus21> hmm
07:45:42 <itidus21> ok heres a random idea
07:45:52 -!- kmc has quit (Ping timeout: 260 seconds).
07:46:08 <CakeProphet> okay so for the sake of balance I think bidirectional loops can always be broken by an intervening portal.
07:46:11 <itidus21> you could say that you can only control the loop if your opponent has no pieces adjacent to it.. or that might be going a bit far
07:46:24 <CakeProphet> uh, that's not how it works.
07:46:25 <itidus21> or it could be if you have more pieces adjacent
07:46:31 <CakeProphet> the loop is the result of an arrangement of pieces
07:46:38 <CakeProphet> re-arranging those pieces should logically alter it.
07:47:15 <CakeProphet> there's no balance issues with the loop rules as far as I can tell.
07:47:22 <itidus21> yeah.. you can imagine how fucked up a chess variant would be if i produced it
07:47:41 <CakeProphet> they're expensive in time to set up and allow for a wide-number of neat possibilities. all positive things in my opinion.
07:47:57 <CakeProphet> to prevent them from being unbalanced and not fun.
07:48:27 <CakeProphet> I /could/ make the bidirectional portal break thing-a-ma-jig a coin flip...
07:48:43 <CakeProphet> the ONLY element of chance in the entire game.
07:49:03 -!- kmc has joined.
07:49:17 <CakeProphet> but no I think a ortal should be able to break a bidirectional loop always because they're the most trivial to set up and are still very nasty for the opponent who isn't in control of it.
07:49:58 <itidus21> nothing drives me more crazy about game design than knowing that victory is usually the result of opponent error
07:50:28 <itidus21> and that where victory is not the result of opponent error it is the result of inherent advantage to one player
07:50:47 <itidus21> and where those aren't the case it could be pure luck
07:51:13 <CakeProphet> yes those are generally the three cases.
07:51:15 <itidus21> but still.. that is an extreme and unrealistic way of looking at it i have
07:51:23 <CakeProphet> here's an interesting case
07:51:32 <CakeProphet> >>----()()----<<
07:51:52 <CakeProphet> also bidirectional
07:52:27 <CakeProphet> >>----() ()----<<
07:52:32 <CakeProphet> or any equivalent arrangement
07:52:41 <itidus21> but what i described is not really the case. and that is where i draw hope from
07:52:48 <itidus21> its an oversimplifcation i made
07:52:58 <CakeProphet> well no if you look at game theory that's pretty much true I believe.
07:53:18 <itidus21> `log nash
07:53:21 <HackEgo> 2009-11-08.txt:15:52:22: <Gregor> Observation: gnash actually ... like ... works 'n stuff.
07:53:29 <itidus21> `log \bnash\b
07:53:33 <HackEgo> 2011-09-18.txt:07:53:18: <itidus21> `log nash
07:53:36 <itidus21> `log \bnash\b
07:53:40 <HackEgo> 2011-08-16.txt:03:18:46: <HackEgo> 362) <monqy> I've only watched bad movies about video game. I enjoyed every second of it. \ 536) <itidus20> Game theory is not a perfect tool for analyzing video games. <itidus20> Nash failed to create a "video game theory"
07:53:47 <CakeProphet> there are so called perfect games in which one player can always win.
07:53:55 <itidus21> my quote is not necessarily true..
07:54:08 <itidus21> but theres proof that it is something that plagues me :D
07:54:09 <CakeProphet> the only case you didn't mention is an impartial game where stalemate is possible if no one makes an error.
07:54:17 -!- Patashu has quit (Ping timeout: 252 seconds).
07:55:42 <CakeProphet> the majority of competitive video games have some degree of chance.
07:56:07 <CakeProphet> I think even a game like starcraft 2 has elements of chance.
07:56:28 <itidus21> in the end i guess it's that it's not who wins
07:57:13 <CakeProphet> ah wait no the element of chance I thought existed in starcraft actually does not.
07:57:33 <CakeProphet> I thought the damage calculations were semi-random but they have definite values.
07:57:55 <itidus21> i rant about my ideas a lot
07:58:00 <CakeProphet> I see.
07:58:00 <itidus21> `log test of reflexes
07:58:03 <HackEgo> 2011-09-18.txt:07:58:00: <itidus21> `log test of reflexes
07:58:08 <itidus21> `log test of reflexes
07:58:11 <HackEgo> 2011-09-18.txt:07:58:03: <HackEgo> 2011-09-18.txt:07:58:00: <itidus21> `log test of reflexes
07:58:16 <itidus21> hmm
07:58:23 <itidus21> `log test of
07:58:26 <HackEgo> 2010-04-24.txt:02:02:09: <oklopod> i think i uploaded the most recentest of changes
07:58:29 -!- ais523 has quit (Remote host closed the connection).
07:58:31 <itidus21> `log test of
07:58:34 <HackEgo> 2009-01-08.txt:17:08:12: <fungot> fizzie: they are not the brightest of bots
07:58:40 <itidus21> ha ha ha haha ha
07:58:43 -!- pikhq_ has joined.
07:58:52 <itidus21> sorry
07:58:55 -!- pikhq has quit (Ping timeout: 260 seconds).
07:59:04 <itidus21> i gotta chill out more effectively
08:00:22 <itidus21> don't be afraid to tell me off.. i have some bad chat habits.
08:00:42 <itidus21> im basically not much of a contributer
08:01:05 <itidus21> now ill see if i can get your topic back after i broke it
08:01:47 <itidus21> ok so
08:01:58 <itidus21> a normal piece can be captured by the missile right?
08:02:28 <CakeProphet> any piece that doesn't interact with projectiles, yes.
08:02:36 <itidus21> a cannon can be captured. a missile can be captured.
08:02:43 <CakeProphet> missiles are not pieces anymore
08:02:47 <itidus21> ahh
08:02:56 <CakeProphet> cannons fire missiles, which are kind of just abstract rule-things.
08:04:05 <itidus21> so... there is an interesting case
08:04:33 <itidus21> (cannon) >>------(loop)------(portal-a) (portal-b)------(loop)-------<<
08:04:59 <itidus21> thats exactly what you said isnt it
08:05:22 <itidus21> thats another of my bad chat habits .. repeating peoples text back at them
08:05:40 <CakeProphet> yeah that's a case I already covered.
08:05:55 <CakeProphet> it's just a more interesting case of the basic bidirectional one
08:06:05 <CakeProphet> because it can exist on two seperate locations.
08:06:11 <CakeProphet> also I haven't considered cases involving four portals.
08:06:14 <itidus21> "<CakeProphet> here's an interesting case <CakeProphet> >>----()()----<<"
08:06:38 <itidus21> i practically copied your post word for word..
08:06:40 <CakeProphet> because as far as the projectile rules are considered opponent arrows and portals are fair game.
08:06:55 <CakeProphet> so there are 4 portals and 4 arrows total on the board, if none have been captured.
08:07:20 <itidus21> it's interesting because it represents the situation of whether a portal is in a loops path before the loop is created
08:07:36 <CakeProphet> well not exactly
08:07:51 <CakeProphet> it's not possible to place both portals into a loop unless you have a secondary loop to pass it off to.
08:07:51 <itidus21> hmm
08:08:18 <CakeProphet> placing one portal into >-----< just breaks the loop, sends the projectile somewhere else.
08:08:34 <CakeProphet> which could be a new loop, sure.
08:08:41 <itidus21> oops i mean
08:08:43 <CakeProphet> maybe I don't understand what you're getting at.
08:09:08 <itidus21> in order to have >>----() ()----<< .. it means that a portal is in the loops path before the loop is created
08:09:23 <CakeProphet> yes
08:10:03 <itidus21> there is another way it could be done
08:10:10 <CakeProphet> (A)------(b) (B)--<<--(a) here's a fun and unlikely case
08:10:16 <CakeProphet> also you could have.....
08:10:31 <itidus21> if you pushed an arrow into the loop the loop would be cut short
08:10:37 <CakeProphet> (A)------(b) (B)-----<<
08:10:41 <itidus21> then you could insert a portal
08:10:41 <CakeProphet> followed by
08:10:47 <itidus21> and remove the arrow
08:10:53 <CakeProphet> (A)------(b) (B)----(a)----<<
08:11:06 <CakeProphet> er wait...
08:11:11 <itidus21> hnn.. what does upper case mean?
08:11:13 <CakeProphet> that case is not possible I messed that up.
08:11:21 <CakeProphet> upper case is one players portals, lower case is the others.
08:11:31 <CakeProphet> yeah there is no 4-portal case unless arrows are involved
08:12:22 <itidus21> 1) >>-----------<< 2) >>------<< << 3) >>------<<() << 4) >>-------() <<
08:12:43 <itidus21> oh thats the same problem..
08:12:44 <itidus21> i see
08:12:46 <CakeProphet> in those cases a loop breaks and a new one is formed.
08:12:56 <itidus21> (2) is wrong
08:12:57 <CakeProphet> ...in the event that you break the loop
08:13:04 <CakeProphet> well two is an entirely possible setup.
08:13:33 <itidus21> oh uhhh no no 2 is correct because the loop would ultimately be shrunk that way
08:13:52 <CakeProphet> an interesting case where a loop breaks and no projectile-flies-off-the-board capturing occurs.
08:13:53 <itidus21> oops
08:14:07 <CakeProphet> because it gets caught in a second loop.
08:14:08 <itidus21> 1) >>-----------<< 2) >>------<< << 3) >>------<<() << 4) >>-------() << ()------<<
08:14:15 <CakeProphet> ultimately these loop scenarios are highly contrived and unlikely.
08:14:18 <CakeProphet> but still possible.
08:14:34 <CakeProphet> so the rules need to be clear on them.
08:14:57 <CakeProphet> yes nothing new is happening in these examples.
08:15:05 <itidus21> so i am just pointing out that if loops capture portals theres still ways to use them
08:15:18 <CakeProphet> I'm looking for cases I haven't considered with possibly ambiguous rules.
08:15:30 <CakeProphet> ...oh, well sure.
08:15:39 <CakeProphet> the main use for capturing a loop with a portal would be to capture something on the other end.
08:15:47 <CakeProphet> a loop is just a capture waiting to happen.
08:16:09 <itidus21> does a loop end with a capture?
08:16:42 <CakeProphet> do you mean does a capture break the loop? yes.
08:16:53 <CakeProphet> do you mean do all loops conclude with a capture inevitably? no.
08:17:24 <CakeProphet> in the basic rules if a projectile captures something the path of the projectile is stopped.
08:17:41 <CakeProphet> same rule applies for loops as they're essentially projectiles that have been sustained across multiple turns.
08:18:04 <monqy> I haven't been paying attention how do you represent active loops
08:18:51 <monqy> also what happens if the opponent fires a projectile into an active loop
08:19:02 <monqy> mutual annihilation?
08:19:08 -!- SgeoN1 has quit (Quit: Bye).
08:19:55 <CakeProphet> monqy: yes
08:20:21 <CakeProphet> also, you declare that a loop exists and if requests by your opponent disambiguate the nature of the loop
08:20:29 <CakeProphet> in most situations there's probably only one loop that's possible though.
08:20:44 <CakeProphet> and... you just keep a mental note of it. there is no on-board representation.
08:20:47 <monqy> oh
08:21:01 <monqy> hidden state is messy
08:21:10 <monqy> especially in things like this
08:21:13 -!- augur has quit (Remote host closed the connection).
08:21:22 <CakeProphet> it's just a consequence of the projectile, which is a hidden state itself.
08:21:28 <itidus21> it might be possible to represent a loop with an object on the loops path
08:21:40 <CakeProphet> sure but it's not really necessary.
08:21:43 <itidus21> nah forget that
08:21:44 <CakeProphet> optional rule.
08:21:49 <itidus21> im silly.
08:22:03 <monqy> CakeProphet: but projectiles normally don't persist, so they aren't problematic
08:22:07 <CakeProphet> I find it quite easy to picture evil death walls.
08:22:19 <CakeProphet> monqy: right, even when they do persist they remain in a stable circuit until broken.
08:22:42 <monqy> but how do you know when the circuit is active or inactive (your own memory and the memory of your opponent that's what)
08:22:46 <CakeProphet> also directionality can be inferred from arrows along the loop so that's not a problem either.
08:23:17 <CakeProphet> monqy: when someone declares a loop it's active, meaning that he spent his turn to fire a cannon into a loop, thus activating it
08:23:25 <CakeProphet> it remains so until broken.
08:23:34 <itidus21> if you really wanted you could have a second board which shows the loops :D
08:23:41 <monqy> CakeProphet: that isn't my problem
08:23:50 <CakeProphet> which occurs as the result of a re-arrangement of the loop components or obstruction by something else.
08:23:51 <monqy> CakeProphet: my problem is with loops persisting without indication
08:24:08 <CakeProphet> the loop declaration is the indication.
08:24:17 <itidus21> if you really wanted you could have a second board which shows the loops :D = the monqy board
08:24:19 <monqy> and then you just remember it
08:24:24 <CakeProphet> yes.
08:24:27 <CakeProphet> it's not difficult.
08:24:28 <monqy> hidden state
08:24:33 <monqy> the Worst Thing
08:24:37 <monqy> go back to perl
08:24:39 <monqy> ;_;
08:24:41 <itidus21> lol
08:24:47 <CakeProphet> also when you move a pawn two squares forward in regular chess
08:24:59 <CakeProphet> you have to remember that it can be captured on the space it would have been had it moved one space.
08:25:08 <CakeProphet> *been at
08:25:09 <monqy> what
08:25:19 <monqy> that's not remembering
08:25:23 <CakeProphet> http://en.wikipedia.org/wiki/En_passant
08:25:28 <CakeProphet> sure it is.
08:25:34 <itidus21> you could use bits of string on the board even ^^;
08:25:48 <CakeProphet> what if the pawn had moved one square, and then one square a second turn?
08:25:55 <CakeProphet> the rule doesn't apply even though the board is in the same state physically.
08:25:57 <monqy> oh multiple turns i forgot about that.
08:26:03 <monqy> yuck chess is disgusting ;_;
08:26:39 <itidus21> the state doesn't have to be hidden.. its just that representing it requies a kludge or 2
08:26:42 <CakeProphet> oh, btw, "hidden state woooooo" is not a design philosophy of perl.
08:26:49 <monqy> i know
08:26:56 <monqy> they're related by being gross
08:27:17 <itidus21> the irony of perl is that it's not meant to be an esolang
08:27:29 <CakeProphet> in any case it's not an issue as loops are in practice very short lived entities.
08:27:30 <itidus21> i don't know perl so empty words from me
08:27:41 -!- zake has joined.
08:27:46 <monqy> CakeProphet: hahaha good luck making them short-lived
08:27:51 -!- zake has quit (Client Quit).
08:27:53 <CakeProphet> monqy: ???
08:28:01 <monqy> CakeProphet: nobody will want to enter them
08:28:16 <monqy> they'll persist for turns at least
08:28:20 <itidus21> CakeProphet: bits of string could do it.. as could a second board.. it's not really insurmountable
08:28:22 <CakeProphet> protal chsse 101
08:28:26 <CakeProphet> how to break a loop
08:28:35 <CakeProphet> 1) >>-------<<
08:28:41 <CakeProphet> 2) >>-----^
08:28:41 <monqy> what is this notation
08:28:55 <CakeProphet> >> and ^ are arrows the direction of the symbol indicates the direction of the arrow
08:29:03 <CakeProphet> ------ is a projectile path (aka the loop)
08:29:15 <itidus21> (>>)/(<<)/(^)(v) = (arrow piece)
08:29:17 <CakeProphet> on one row/file/diagonal. it's a 1d view of the board
08:29:32 <CakeProphet> I am constrained by IRC
08:29:40 <monqy> use a paste bin
08:29:58 <CakeProphet> okay basically all you have to do is change the direction of an arrow and the loop will break.
08:30:05 <CakeProphet> change the state of any of the loops components and it breaks.
08:30:13 <monqy> and how do you change the direction of someone else's arrow
08:30:17 <CakeProphet> put a portal which can redirect the loop into the loop and it breaks.
08:30:23 <CakeProphet> .....you don't. it's yours.
08:30:26 <CakeProphet> you have two arrows.
08:30:58 <itidus21> ►═══▼
08:31:00 <CakeProphet> there are several ways to break loops. in many cases it will be advantageous to break an arrow as it captures something.
08:31:01 <monqy> why would you break your own loop if not for the enemy falling into range of one of its constituent arrows
08:31:01 <itidus21> ║ ║
08:31:03 <itidus21> ▲═══◄
08:31:04 <CakeProphet> ...
08:31:08 <CakeProphet> you don't understand at all.
08:31:30 <CakeProphet> breaking a loop essentially allows you to capture something by /turning an arrow in a direction/
08:31:36 <monqy> yes I know
08:31:56 <monqy> because someone will put definitely something in that direction
08:32:13 <CakeProphet> there are 10 of them in the most basic loop you can make.
08:32:15 <CakeProphet> 10 paths
08:32:18 <CakeProphet> the loop can break.
08:32:24 <itidus21> ►═════▼
08:32:29 <itidus21> ║ ║
08:32:30 <itidus21> ▲═) (═◄
08:33:05 <CakeProphet> and even, as you say, "no one will want to break their own loop", the opponent can still place a portal into the loop to redirect it.
08:33:23 <CakeProphet> (which is, consequently, even more reason for the loop-maker to want to break their own loop, otherwise they give their opponent a free projectile)
08:33:25 <monqy> people will want to break their own loops
08:33:29 <CakeProphet> yes.
08:33:30 <monqy> did you reade the "unless" clause
08:33:38 <monqy> I mean "if not"
08:33:53 <monqy> and the "why would you" not "nobody will ever"
08:33:57 <monqy> but whatever
08:34:01 <CakeProphet> hmmm?
08:34:36 <CakeProphet> ah my mistake.
08:34:44 <CakeProphet> "nobody will want to enter them"
08:34:48 <CakeProphet> the dangers of paraphrasing.
08:34:51 <CakeProphet> still all of my points are valid.
08:34:57 <monqy> what points
08:35:09 <monqy> you're assuming people will walk into deathtraps
08:35:15 <monqy> i.e. into range of the arrows
08:35:28 <CakeProphet> that loops are systematically short-lived entities as a result of their purposes and the ability to be "stolen" from you
08:35:55 <monqy> what purposes
08:36:00 <monqy> by stolen do you mean via portals
08:36:12 <CakeProphet> to allow 10 or more possible paths of capture at the same time
08:36:13 <CakeProphet> and yes.
08:36:21 -!- Vorpal has joined.
08:36:33 <CakeProphet> sure they could be defensive as well, but again there's the case where a portal can redirect it
08:36:38 <CakeProphet> so you wouldn't want it to stay around long
08:36:45 <CakeProphet> a few turns is not a long time to remember the existence of a portal.
08:36:49 <CakeProphet> it's not an issue.
08:36:58 <CakeProphet> s/portal/loop/
08:37:42 <monqy> 1) yes it is (2) elegance suffers greatly and i will hate it forever (3) how would you use them offensively, positioning and firing and all
08:37:51 <monqy> they seem like a pretty defensive thing to me
08:38:17 <monqy> and offensive when broken because you forced the enemy to move into range
08:38:32 <monqy> or the enemy is being stupid or using a pawn to break it intentionally
08:38:38 <CakeProphet> they're both. but being able to fire a projectile at will from any of the components is a major perk of breaking them.
08:38:47 <CakeProphet> yes, no one will walk into a death trap.
08:38:49 <monqy> but i guess using a pawn isn't fulfulling much of its purpose my train of thought kind of derailed there
08:39:41 <CakeProphet> also there are only 4 arrows at any given time
08:39:49 <CakeProphet> it's not like the board is going to be littered with loops to keep track of.
08:40:10 <monqy> it seems a lot more like a tool for restricting movement than killing
08:40:17 <itidus21> also.. how many players do you think is optimal for this game?
08:40:25 <itidus21> is this a 4 player jubilee?
08:40:28 <CakeProphet> ....2
08:40:32 <itidus21> hehe
08:40:35 <CakeProphet> it's on a chess board.
08:40:39 <monqy> also also
08:41:02 <monqy> in loop case 1... >>-----<<...positioning a portal in there...what happens
08:41:03 <itidus21> d&d Also?
08:41:07 <CakeProphet> it is very much a tool for killing.
08:41:13 <monqy> does it both do the redirection and get destroyed?
08:41:13 <itidus21> ignore that comment
08:41:26 <CakeProphet> monqy: portal redirects it. I considered that case and decided for balance reasons that was the best choice.
08:41:34 <CakeProphet> but there are two variant rules you could play.
08:41:36 <monqy> also what happens when you put your own pieces in a loop. destruction?
08:41:42 <CakeProphet> yes.
08:41:47 <CakeProphet> projectiles are friendly-fire always.
08:42:02 <CakeProphet> with the exception of arrows, prisms, and portals facing the right direction.
08:42:19 <CakeProphet> (also need to clarify prism-based loops as they're kind of tricky)
08:43:19 <CakeProphet> ...actually a prism based loop with arrows is impossible
08:43:33 <monqy> oh?
08:43:51 <CakeProphet> the prism, by the way, is the queen piece. it's an arrow without a direction, basically. the player is free to choose a path. also once a projectile passes through a prism is destroys arrows in its path.
08:44:09 <monqy> what
08:44:12 <CakeProphet> ?
08:44:18 <monqy> destroys arrows in its path
08:44:18 <monqy> why
08:44:24 <CakeProphet> to allow that to be possible.
08:44:32 <CakeProphet> as otherwise arrows are kind of difficult to capture and can just roam around easily.
08:44:47 -!- FireFly has joined.
08:44:58 <itidus21> CakeProphet: when i was reading about 2L there was a thing which redirects dependant on incoming direction
08:45:00 <CakeProphet> arrows are highly useful as well, which compounds the issue of them being difficult to capture.
08:45:25 <CakeProphet> so far it's the best idea for a queen piece I have. it might change but I like it.
08:45:53 <CakeProphet> if I allowed prisms to destroy portals as well then I could avoid clarifying prism-based loops entirely. :P
08:45:57 <CakeProphet> but I'm not sure I want to do that.
08:46:39 <CakeProphet> monqy: oh also prisms can capture, but have restricted movement (currently 2 squares no hoping)
08:47:12 <CakeProphet> but I might increase their movement capabilities since they're one of the few pieces that are effective at non-projectile captures.
08:47:20 -!- augur has joined.
08:48:20 <CakeProphet> hmmm, actually no
08:48:29 <CakeProphet> I'll make prism movement/capturing a combination of knight and king.
08:48:33 <CakeProphet> I like that better.
08:48:39 <monqy> what do you mean by that
08:48:53 <CakeProphet> ....it can move and capture like knights and kings can in chess...
08:48:58 <CakeProphet> either way.
08:49:04 <CakeProphet> very simple.
08:49:05 <CakeProphet> to grasp...
08:49:41 <monqy> oh so you choose between them?
08:49:44 <CakeProphet> yes.
08:49:48 <monqy> ok
08:49:55 <CakeProphet> ah I see the confusion.
08:50:08 <CakeProphet> anyways what do you think about these prisms?
08:50:31 <CakeProphet> I basically used as a convenient to close some issues concerning arrow capture.
08:50:39 <CakeProphet> s/used/used them/
08:50:44 <CakeProphet> s/convenient/convenient way/
08:51:27 <CakeProphet> prisms only have that effect on friendly fire, btw.
08:51:30 <CakeProphet> they are not like arrows.
08:51:34 <CakeProphet> this makes them more vulnerable.
08:51:57 <CakeProphet> ew gross special case, etc.
08:52:33 <monqy> i wis this game was ~elegant~
08:52:36 <monqy> wish
08:52:53 <CakeProphet> "all pieces are parenthetical lists"
08:53:09 <CakeProphet> question: what makes something elegant?
08:53:30 <monqy> me saying it's elegant (thumbs up)
08:54:12 <CakeProphet> but anyways if you can think of something better for the queen let me know.
08:54:28 <CakeProphet> but it gives it queen-like attributes while allowing arrow capture so I think it's pretty solid.
08:54:55 <monqy> queeen like attributes like what
08:55:14 <CakeProphet> being powerful offensively but weak defensively.
08:55:19 <CakeProphet> er, no
08:55:26 <CakeProphet> that's not what it does.
08:55:28 <monqy> it's pretty defensively powerful
08:55:30 <monqy> it has knight moves
08:55:48 <monqy> though the queen can escape from a bunch of things as well
08:55:57 <CakeProphet> it is still vulnerable compared to arrows
08:56:10 <monqy> arrows are weird
08:56:12 <CakeProphet> so it's not something you'd use
08:56:16 <CakeProphet> like
08:56:19 <CakeProphet> at the beginning of the game
08:56:25 <itidus21> My scouter indicates the prism has a power level over 9000.
08:56:34 <CakeProphet> because then every arrow decides to point at it, and it must flee.
08:56:53 <CakeProphet> monqy: arrows are awesome.
08:57:07 <CakeProphet> arrows are definitely all-around amazing defensive/offense.
08:57:58 <CakeProphet> provided they have cannons...
08:59:06 <CakeProphet> arrows are probably better defense than offense though, I think.
08:59:28 <CakeProphet> as they can "block" cannon fire.
09:00:02 <CakeProphet> from multiple sources.
09:00:15 <CakeProphet> portals can only block from one direction at a time.
09:00:23 <Vorpal> which game are you discussing?
09:00:33 <CakeProphet> a chess variant I created.
09:00:36 <Vorpal> ah
09:00:46 <CakeProphet> it's like... laser chess with portals.
09:00:51 <Vorpal> whoa
09:00:59 <Vorpal> CakeProphet, are there pirates and ninjas too?
09:01:08 <CakeProphet> unfortunately no.
09:01:10 <Vorpal> aww
09:01:14 <monqy> what if instead of special cases you had pirates and ninjas
09:01:18 <monqy> i would be less angry
09:01:19 <CakeProphet> ...no
09:01:22 <CakeProphet> there are no special cases.
09:01:23 <CakeProphet> just rules.
09:01:30 <monqy> how about the hidden state then
09:01:36 <CakeProphet> that's not a special case of anything.
09:01:39 <CakeProphet> that's just a rule.
09:01:46 <Vorpal> CakeProphet, so you removed en passant (nfc about spelling)
09:01:46 <monqy> i didn't say it was a special case
09:01:51 <CakeProphet> the distinction is completely pointless in a board game.
09:01:55 <Vorpal> that is a special case in normal chess IMO
09:02:12 <CakeProphet> Vorpal: actually haven't decided. pawns work like chess pawns but I dunno if they should have en passant.
09:02:22 <monqy> use checkerspieces or coins to mark active loops
09:02:38 <CakeProphet> monqy: put a coin under each active component?
09:02:57 <itidus21> is it legal to sell money?
09:02:59 <Vorpal> CakeProphet, how are the lasers used? As weapons?
09:03:06 <CakeProphet> yes they're the primary means of capture.
09:03:14 <monqy> CakeProphet: as long as it makes the state explicit and works in all cases, sure
09:03:24 <Vorpal> if so you need hitpoints
09:03:25 <itidus21> eg... if you sell a toy with actual legal tender in the packaging. is that legal?
09:03:30 <CakeProphet> the rooks are cannons. the upside-down rook can fire a projectile in any diagonal direction. right-side up rook is the same but cardinal.
09:03:36 <itidus21> lol
09:03:50 <Vorpal> CakeProphet, heh
09:03:55 <itidus21> probably would attract many thiefs
09:04:11 <CakeProphet> a projectile will capture anything in its path up to the first thing it captures.
09:04:14 <CakeProphet> ...
09:04:19 <CakeProphet> a weird way to word it I know.
09:04:27 <Vorpal> CakeProphet, projectile? Doesn't sound like a laser
09:04:38 <CakeProphet> it's... well it doesn't really matter how you view it.
09:04:52 <CakeProphet> it's an abstract path like thing
09:04:57 <Vorpal> CakeProphet, anyway grenades.
09:05:00 <Vorpal> laser grenades!
09:05:00 <CakeProphet> with a direction.
09:05:04 <Vorpal> (no clue how that would work)
09:05:21 <CakeProphet> Vorpal: I'm afraid I already have most of the rules solidified minus some minor future revision perhaps.
09:05:24 <CakeProphet> need to playtest.
09:05:26 <Vorpal> ah
09:05:52 <monqy> remove en passant and i'll be hapey
09:05:56 <Vorpal> CakeProphet, random idea: zombie chess
09:06:07 <monqy> I've never liked castling being a thing either
09:06:12 <CakeProphet> so yeah an interesting thing is that you portals. the knights. the direction of their nose indicates the opening of the portal
09:06:21 <CakeProphet> monqy: castling is no longer thing. I'll remove en passant sure.
09:06:27 <monqy> hurrey
09:06:30 <CakeProphet> maybe even the 2-square pawn thing.
09:06:36 <monqy> sure
09:06:46 <monqy> I don't care as much about that though
09:06:48 <itidus21> what about piece promotion? :D can more cool items be made? silly question i know
09:07:02 <CakeProphet> itidus21: no, no, and yes.
09:07:14 <CakeProphet> Vorpal: I think there are chess variants with zombie pieces.
09:07:17 <Vorpal> XD
09:07:24 <Vorpal> well, bbl, need to leave for a while
09:07:27 <CakeProphet> Vorpal: http://www.chessvariants.com/other.dir/nemoroth.html
09:07:28 <CakeProphet> ah okay.
09:07:34 -!- Taneb has joined.
09:07:41 <CakeProphet> when pawns (humans) go to the end of the board they're promoted to zombies.
09:07:42 <itidus21> vorpal would probably like my lowbrow style of chess variation
09:07:46 <Taneb> Hello!
09:07:53 <CakeProphet> Taneb: heyo
09:08:06 <CakeProphet> monqy: you're just jealous because my special cases make the game awesome in all ways.
09:08:12 <monqy> ;_;
09:08:12 <CakeProphet> nyah!!! :P
09:08:23 <monqy> also hidden state ;________;
09:08:45 <CakeProphet> more like "state that is verbally declared and just needs to be remembered"
09:08:50 <CakeProphet> might be a problematic rule for goldfishes.
09:08:57 <Taneb> FUNCTIONAL PYTHON <- awful idea? amazing idea? YOU DECIDE
09:09:02 <itidus21> thats a false myth
09:09:20 <itidus21> mythbusters proved goldfish have good memory
09:09:32 <Taneb> CakeProphet: itidus21: there's one of those "hidden" states in regular chess
09:09:33 <itidus21> but maybe theres multiple kinds of memory
09:09:33 <CakeProphet> fine. snakes. insects. anything.
09:09:41 <Taneb> "Has this king moved yet?"
09:09:44 <itidus21> he taught a goldfish to run an obstacle course
09:09:53 <CakeProphet> Taneb: we also determined en passant was similar.
09:09:56 <itidus21> so maybe its not so much memory as conditioning
09:09:59 <itidus21> but whatever
09:10:32 <Taneb> Similar to Functional Python, or similar to deciding whether the king has moved yet?
09:10:36 <CakeProphet> but honestly if you can't remember where a loop is you probably should accidentally walk into it.
09:10:39 <Taneb> Because it's neither really
09:11:04 <itidus21> CakeProphet: that is a possible design decision :)
09:11:05 <CakeProphet> and probably shouldn't be playing a game that's played with chess pieces and involves redirecting projectiles across the board.
09:11:09 <monqy> if you can't remember if you've allocated/freed the memory........
09:11:23 <CakeProphet> *imaginary projectiles
09:11:31 <monqy> or what your values are
09:11:46 <monqy> because your varaibales are mutable and there's manaul memroy memanagement with poeinters
09:11:51 <CakeProphet> speaking of which I have a feeling portal chess AI is very difficult.
09:11:58 <Taneb> I am implementing one of DMM's sorting algorithms in Python!
09:12:01 <monqy> because you're using c or something
09:12:17 -!- Vorpal has quit (Ping timeout: 248 seconds).
09:12:17 <CakeProphet> Taneb: I occasionally use functional style in Python, but the syntax is very limiting.
09:12:23 <CakeProphet> also no tail call optimization.
09:12:32 <monqy> i guess perl has the mutable variables but most of its inelegance is in other areas???
09:12:48 <CakeProphet> monqy: perl is beautiful if not elegant.
09:12:48 <Taneb> I meant an entirely functional version of python
09:12:55 <CakeProphet> oh well that's just weird.
09:12:55 <monqy> oh?
09:12:56 <CakeProphet> weirdo.
09:13:00 <Jafet> Python is dysfunctional by design
09:13:04 <monqy> TCO is Unpythonic -- master guido
09:13:08 <CakeProphet> monqy: er, not saying perl is elegant.
09:13:13 <Jafet> Anyone who tries to fix this will face the wrath of guido
09:13:17 <itidus21> `log unpythonic
09:13:21 <HackEgo> 2007-07-03.txt:20:27:55: <lament> bsmntbombdood: so? this is still unpythonic. Besides, it's clearly not the only stdout, otherwise you wouldn't need that __stdout__ thing.
09:13:28 <itidus21> ok
09:13:34 <CakeProphet> monqy: I meant "perl is beautiful, but definitely not elegant"
09:13:40 <monqy> ah
09:13:48 <itidus21> so the word is common
09:13:59 <CakeProphet> yes pythonic is a term invented by pythonistas
09:14:02 <monqy> a beautiful trainwreck
09:14:03 <CakeProphet> which is another term invented by pythonistas.
09:14:21 <CakeProphet> pythonistas are lame.
09:14:26 <Taneb> I call them pyfaces
09:14:40 <CakeProphet> itidus21: if you want to get banned from a channel right now
09:14:48 <CakeProphet> join #python, type "lol", press enter.
09:14:53 <monqy> I haven't called them anything consistently, but I've probably parroted "pythonistas" once or twice
09:15:05 <itidus21> i've been banned from 2 recently
09:15:05 <CakeProphet> monqy is a good parrot.
09:15:08 -!- Nisstyre has quit (Ping timeout: 260 seconds).
09:15:38 <itidus21> ##c-basic because of bad connection, and efnet #xna for being off topic and ranting
09:16:33 <CakeProphet> if you need any evidence that Python users are style fascists, the "no lol" rule is it.
09:16:44 <itidus21> ok here goes
09:16:55 * itidus21 rubs hands together
09:17:11 <Jafet> They can't possibly ban everyone that says lol, I think
09:17:22 <Jafet> The channel ban list would overflow
09:17:30 <CakeProphet> they do.
09:17:39 <Jafet> Probably temporary bans
09:17:46 <CakeProphet> most likely.
09:17:54 <Jafet> Go in there every day and lol until you get permanently banned
09:18:02 <CakeProphet> otherwise they'd ban some long-time visitors that accidentally say it.
09:18:10 <Jafet> Automate it.
09:18:13 <CakeProphet> Jafet: no I occasionally ask #python questions
09:18:16 <CakeProphet> and occasionally get good answers!
09:18:42 <itidus21> i left after taunting the quiet room
09:18:55 <monqy> what did you say
09:18:59 <itidus21> don't really want to be banned bad enough to wait
09:19:13 <itidus21> i said <itidus21> lol <itidus21> more euler problems needed
09:19:22 <monqy> banned from life
09:19:23 <CakeProphet> don't really want to wait bad enough to be banned.
09:19:40 <CakeProphet> itidus21: they can still ban you even if you're not there you know.
09:19:50 <itidus21> well i kinda assumed i would be banned when i did that
09:20:07 <CakeProphet> they should have a nololbot
09:20:33 <monqy> that reminds me of the #jesus bot
09:20:40 <monqy> with the broken bad words filter
09:21:52 -!- Taneb has quit (Read error: Connection reset by peer).
09:22:12 <CakeProphet> monqy: did it need moar \b?
09:22:44 <monqy> it banned when you said "ands" or "an s"
09:22:51 <CakeProphet> wat
09:22:57 <monqy> "ants" was special-cased not to ban
09:23:10 <CakeProphet> why those phrases.
09:23:17 <monqy> it was meant to ban on "anus", the baddest word, but I guess "anvs" is bad too
09:23:26 <monqy> anqs
09:23:28 <CakeProphet> wow like....
09:23:35 <CakeProphet> how do you break something that badly.
09:23:39 <CakeProphet> how can you get that wrong.
09:24:17 <monqy> variants of "fuck" were also repeated everywhere, despite "fuck" itself being in the list of things to ban on even if it's within other words etc
09:24:30 <Jafet> One time, yahoo's discussion board censored "breast"
09:24:31 <CakeProphet> man christians sure are weird.
09:24:43 <Jafet> It was not appreciated by women who wanted to talk about their chicken breasts
09:25:04 <CakeProphet> chicken breasts? gross.
09:25:19 <monqy> I bet they didn't censor other variants of the word
09:25:24 <CakeProphet> where they genetically modified?
09:25:30 <CakeProphet> ....
09:25:31 <CakeProphet> *were
09:26:57 <CakeProphet> monqy: I challenge you to make a chess variant that is more elegant than mine.
09:27:11 <monqy> oh snap!!!!!
09:27:25 <CakeProphet> AND YET RICH WITH COMPLEXITY AND FUN.
09:27:33 <CakeProphet> MAYBE
09:27:34 <monqy> maybe i could take you up on that s-expression chess
09:27:37 -!- Nisstyre has joined.
09:29:03 <itidus21> K vs K. Can only capture diagonally.
09:29:08 <itidus21> I dunno how it would go.
09:29:21 <monqy> K?
09:29:24 <itidus21> king?
09:29:40 <itidus21> not sure of notations
09:30:28 <monqy> I dunno about king vs king stuff but I'd be willing to call it a stalemate
09:30:58 <itidus21> im not sure how my rules would override the usual king vs king rules
09:31:05 <CakeProphet> Ultima is a neat chess variant.
09:31:07 <monqy> your rules?
09:31:26 <CakeProphet> mostly consisting of odd capturing rules.
09:31:28 <itidus21> "King vs King. Can only capture diagonally."
09:31:41 <CakeProphet> for example there's one type of rook that captures by moving /away/ from something adjacent to it.
09:32:06 <CakeProphet> and chameleons (bishop) can only capture pieces by using their capture rules.
09:32:23 <itidus21> heh
09:32:34 <CakeProphet> I imagine it's actually cumbersome to play.
09:32:39 <CakeProphet> UNLIKE PORTAL CHESS WHICH IS VERY GOOD.
09:32:44 <monqy> ok
09:32:47 <CakeProphet> -ahem-
09:32:54 <CakeProphet> excuse me.
09:33:05 <monqy> also I remember you saying something about knigt-moves having direction? what's that about
09:33:16 <monqy> relevant if any of your pieces have knight moves and try stepping into portals
09:33:31 <monqy> also what happens when portals step into their counterparts
09:33:39 <monqy> is that invalid?
09:33:43 <CakeProphet> well I suppose they have two different possible directions actually.
09:33:46 <monqy> do they explode?
09:33:47 <CakeProphet> monqy: they explode.
09:33:47 <CakeProphet> yes.
09:34:10 <CakeProphet> possibly useful as a suicide strategy but probably a really bad idea.
09:34:13 <itidus21> `log explode
09:34:16 <HackEgo> 2010-09-28.txt:21:09:22: <Phantom_Hoover> The LWSSes hit it and everything explodes.
09:37:06 <CakeProphet> monqy: the portal direction could be made irrelevant for entrance perhaps.
09:37:25 <CakeProphet> or knights-likes could simply enter from two directions
09:37:29 <monqy> CakeProphet: but then you've got really weird stuff
09:37:45 <CakeProphet> how so?
09:38:19 <monqy> nevermind
09:38:29 <monqy> actually yes do mind it's really weird
09:38:47 <itidus21> (cannon)>>-------()-------<<(cannon) ()------<<
09:38:49 <itidus21> :P
09:39:08 <CakeProphet> itidus21: that doesn't breakanything.
09:39:13 <monqy> also how will you deal with bishop-movers and portals? is them switching to the other coloure just a natural thing?
09:39:17 <itidus21> fair enough
09:39:22 <itidus21> its kind of cool
09:40:02 <monqy> I was going to say something els ebut I forgot it
09:40:55 <CakeProphet> monqy: portals can hop anywhere in a 3-square radius
09:41:05 <CakeProphet> thus I don't see how bishop movement is a problem.
09:41:17 <monqy> ok?
09:41:39 <CakeProphet> ooooh
09:41:40 <CakeProphet> I see.
09:41:46 <CakeProphet> yeah it doesn't matter.
09:42:01 <CakeProphet> in fact that would be a useful way to switch colors for arrows.
09:42:11 <CakeProphet> which are the pieces that move like bishops
09:42:19 <CakeProphet> (possibly like queens in the future... I haven't decided)
09:42:26 <itidus21> radius? :p
09:42:42 <itidus21> ah ok. radius]
09:42:57 <itidus21> understood
09:42:57 <monqy> presumably by chebyshev distance
09:44:14 -!- DH____ has joined.
09:44:36 <monqy> CakeProphet: is it chebyshev or is it manhattan or are you So Wrong
09:44:52 <CakeProphet> I have no idea what that means.
09:45:18 <CakeProphet> ah yes
09:45:18 <monqy> is your "3-square radius" measured by chebyshev distance or manhattan distance or are you Wrong
09:45:19 <CakeProphet> chevyshev
09:45:19 <itidus21> i realized that it probably means 3 spaces in 8 directions when i said (ah ok. radius])
09:45:23 <CakeProphet> *cheby
09:46:16 <CakeProphet> though perhaps 3 is a bit extreme? especially with hoppage.
09:46:35 <itidus21> oh ok i see what chebyshev is
09:46:40 <monqy> portals can't capture can they
09:46:47 <monqy> directly, I mean
09:47:29 <monqy> if portals trigger when hopping onto someone you could kill them by portalling dudes into active loops
09:47:50 <monqy> er
09:48:07 <monqy> if portals trigger when hopping onto pieces you could kill them by portalling them into active loops
09:48:12 <monqy> there
09:48:14 <monqy> less confusion
09:48:15 <monqy> that
09:48:15 <monqy> time
09:48:17 <CakeProphet> well, sort of.
09:48:27 <CakeProphet> you can't portal something to a loop though.
09:48:37 <CakeProphet> because moving the portal breaks the loop
09:48:38 <monqy> oh?
09:48:48 <CakeProphet> however
09:48:50 <monqy> no I mean
09:48:51 <CakeProphet> there is a neat trick you can do.
09:48:54 <monqy> portal isn't part of the loop
09:48:59 <monqy> the portal is pointing into the loop
09:49:09 <CakeProphet> ah okay
09:49:11 <CakeProphet> yes that's possible
09:49:29 <monqy> that;s one way to use loops offensively
09:49:50 <CakeProphet> also breaking a loop with the out-portal is very nice.
09:49:53 <monqy> with a little preparation you have an extremely mobile capturing machine
09:50:21 <monqy> and i guess you could also move portal into loop to get the thing worky
09:50:32 <CakeProphet> because you can hop three spaces, and change direction to release the project whose loop you just broke.
09:50:38 <CakeProphet> which is actually kind of ridiculous.
09:50:43 <CakeProphet> if you consider the possibilities.
09:50:46 <monqy> mhm
09:50:50 <monqy> oh right I remembered a thing
09:50:50 <monqy> about
09:50:53 <monqy> what I was going to say
09:50:54 <monqy> about
09:51:04 <monqy> portals where the in-portal triggers from any direction
09:51:05 <monqy> which is
09:51:12 <monqy> how do you capture them?
09:51:19 <CakeProphet> ah, yes.
09:51:21 <CakeProphet> that's a problem
09:51:27 <CakeProphet> I think I just need to define the movement rules well
09:51:34 <monqy> answer: a portal explosion (by portal suicide)
09:51:34 <CakeProphet> so basically even if you move like a knight you still have directionality.
09:51:53 <monqy> alternatively a prismed projectile
09:52:03 <monqy> if that works the same was on portals as arrows
09:52:08 <CakeProphet> yeah but currently prismed projectiles do not kill portals.
09:52:11 <monqy> oh
09:52:20 <CakeProphet> ...might change that?
09:52:20 <monqy> I think they should for consistency
09:52:24 <CakeProphet> hmmm
09:52:35 <monqy> anyway I think it'd be best to fix directionality anyway
09:52:39 <CakeProphet> well, portals can still be killed when facing the wrong direction
09:52:46 <CakeProphet> while arrows work from any direction
09:52:54 <CakeProphet> fix it how?
09:53:09 <monqy> to give every movement a direction
09:53:34 <CakeProphet> oh, yes, that's what I meant.
09:53:35 <monqy> fior knights it could be the side in which they move more
09:53:38 -!- DH____ has quit (Ping timeout: 260 seconds).
09:53:56 <CakeProphet> well, no. knights could just have multiple entrance directions.
09:53:57 <monqy> since they move 2 in one direction and 1 in the other isn't it
09:54:05 <monqy> that works too
09:54:14 <monqy> and they enter from the applicable one?
09:54:16 <CakeProphet> yep
09:54:20 <CakeProphet> same with portals
09:54:28 <CakeProphet> who move like knights but with a chevyshev distance of 3
09:55:02 <CakeProphet> no need to get incredibly detailed...
09:55:09 <CakeProphet> I feel it's a fairly intuitive notion.
09:55:16 <monqy> do portals hopping onto things have a direction or do they always work or do they not work anymore
09:55:29 <CakeProphet> the only thing that's not reall very intuitive so far is the bidirectional loop portal breakage rule thing.
09:55:53 <monqy> since portals turn whenever they hop I can see portal hops always working being fine
09:56:01 <CakeProphet> monqy: I was thinking if portals captured that would be how they capture. only able to capture in the direction they're facing.
09:56:18 <CakeProphet> but that's kind of weird
09:56:25 <CakeProphet> intuitively they should just teleport whatever they land on.
09:58:24 <CakeProphet> it's probably a bad idea to teleport things unless they die immediately on the other side.
09:58:40 <CakeProphet> or
09:58:42 <monqy> i.e. there's a loop waiting for them?
09:58:44 <CakeProphet> they have nothing to capture.
09:58:44 <CakeProphet> yes
09:58:59 <CakeProphet> there's also the situation where killing the portal on the other side causes an explosion and kills a bunch of the opponents pieces.
09:59:07 <CakeProphet> so they wouldn't want to capture said portal.
09:59:32 <monqy> I'm imagining moving an enemy piece into any piece via portal will capture that piece
09:59:36 <CakeProphet> in this way the portal explosion rule can be used for bargaining power.
09:59:48 <monqy> so I guess you could use enemy pieces to capture other enemy pieces? or your own pieces if you're dumb
10:00:01 <CakeProphet> hmmm... it would capture enemy pieces but would be an illegal move otherwise I think.
10:00:14 <monqy> illegal?
10:00:22 <CakeProphet> ..yes because you can't capture your own pieces.
10:00:27 <monqy> you can;t???
10:00:28 <CakeProphet> well, I would think not.
10:00:32 <CakeProphet> ...not without projectiles.
10:00:34 <monqy> why not!!
10:00:34 <CakeProphet> I DON'T KNOW
10:00:40 <CakeProphet> MAKES SENSE?
10:00:53 <CakeProphet> fine okay you can elect to capture your own pieces.
10:00:56 <CakeProphet> like a boss.
10:00:57 <monqy> hurray
10:01:19 <CakeProphet> so in this weird corner case where someone is directly in front of your portal and you teleport something to that portal it gets captured .
10:01:31 <CakeProphet> this game is full of weird corner cases.
10:01:33 <monqy> most likely usually a bad move but getting rid of pawns which are in the way may prove useful
10:01:46 <monqy> naturally emerging corner cases, right?
10:01:50 <CakeProphet> yes.
10:01:54 <monqy> not special exceptions in the rules good good
10:02:53 <CakeProphet> but I'll have to list that as how the portals work.
10:02:55 <CakeProphet> to clarify.
10:02:58 <CakeProphet> it's not immediately obvious.
10:03:33 <CakeProphet> also if a piece moves through a portal it can continue moving on the other side, as you would expect I hope.
10:03:34 <monqy> as long as you note it in such a way to make it clear that it's natural and not just some other rule you made up!!
10:03:42 <CakeProphet> as long as it legaly has more squares that it can move in its turn.
10:03:46 <CakeProphet> *legally
10:04:01 <monqy> oh right I was going to ask about that too
10:04:06 <monqy> with regard to direction changing and all
10:04:11 <CakeProphet> yes
10:04:22 <CakeProphet> portals are direction/location changers.
10:04:39 <CakeProphet> hmmm... I wonder if I should include that.
10:04:41 <monqy> it won't work with knightsmoves either right
10:04:42 <CakeProphet> if an arrow goes through a portal
10:04:50 <CakeProphet> it reorients to keep the same angle.....
10:04:54 <CakeProphet> if that makes sense.
10:05:00 <monqy> ???
10:05:06 <monqy> what do you mean reorients and same angle
10:05:14 <CakeProphet> okay so imagine you're the arrow
10:05:20 <CakeProphet> you're facing up-right
10:05:24 <CakeProphet> and you walk through a portal
10:05:35 <CakeProphet> you are still going the same direction when you come out, but now facing a different way.
10:05:40 <CakeProphet> thus.... your direction would change
10:05:46 <CakeProphet> your absolutely direction
10:05:49 <CakeProphet> -ly
10:05:57 <monqy> yes that's what I was hoping
10:06:01 <CakeProphet> to reflect that your direction actually didn't change as you walked through the portal and reoriented.
10:06:03 <monqy> unless I interpreted you backwards
10:06:17 <CakeProphet> but that's a pretty complex thing to worry about.
10:06:38 <CakeProphet> also knight movers still have legal moves if they go through a portal.
10:06:45 <CakeProphet> I just need to define knight moves properly
10:06:45 <monqy> like if you're going left and facing left into a rightfacing portal and the outportal is up now you're going up and you're facing up
10:06:48 <CakeProphet> as a series of single-square moves
10:06:51 <CakeProphet> for it to make sense.
10:06:53 <monqy> absolute-wise
10:07:06 <CakeProphet> yes.
10:07:18 <monqy> a series of single-square moves? how will the leaping work then?
10:07:33 <CakeProphet> ....uh, it just will. :P
10:07:38 <monqy> :|
10:08:04 <CakeProphet> "the prism can leap across pieces in the course of making its move"
10:08:08 <CakeProphet> I mean
10:08:27 <CakeProphet> you don't have to interpret it as a LITERAL series of single-square movements where you MUST have an EMPTY square.
10:08:36 <monqy> also the destination according to the knightsmoves rules and not being "here go three spaces leaping over stuff"
10:08:41 <CakeProphet> it's just to make the directions and portal stuff well-defined.
10:09:03 <CakeProphet> hmmm?
10:09:04 <monqy> I liked it better when it was a single move with two directions :(
10:09:16 <CakeProphet> it's the same thing... just different ways to say it.
10:09:26 <monqy> not really
10:09:49 <CakeProphet> it will be way easier to comprehend when talking about portals.
10:09:53 <monqy> it's easier to specify the knightsmove conditions for single moves than make a state machine to get three moves to obey the knightsmove rules
10:09:53 <CakeProphet> who can move 3 squares.
10:10:28 <monqy> am I sense ing????
10:10:30 <CakeProphet> ....no it's the opposite of that.
10:10:35 <monqy> what????????????????
10:10:38 <CakeProphet> you have only ONE direction entering the portal.
10:10:46 <CakeProphet> because it's all defined in terms of single square moves.
10:11:00 <CakeProphet> with your system you have two/three directions
10:11:07 <CakeProphet> which makes less sense.
10:11:27 <monqy> three directions? when's that?
10:11:49 <monqy> with your system you have to specify the second and third moves in terms of their predecessors
10:11:54 <monqy> which is ugly- gross
10:12:15 <monqy> and hard to follow
10:12:16 <CakeProphet> .......?
10:12:34 <CakeProphet> oh and the three direction case is when you enter a portal on your second jump as a portal---oh wait that causes explosions
10:12:37 <CakeProphet> but still a valid move I suppose
10:12:49 <monqy> in my system knights leap over portals
10:13:02 <CakeProphet> so they have to hop on them to teleport?
10:13:03 <monqy> as they leap over all other pieces
10:13:04 <monqy> yes
10:13:11 <CakeProphet> hmmm
10:13:19 <CakeProphet> so then the direction doesn't matter with knights?
10:13:21 <CakeProphet> that works.
10:13:24 <CakeProphet> I thought you might complain about that.
10:13:41 <monqy> either it doesn't matter or it's one of the directions in which they traveled or it's the longer of the directions in which they traveled
10:13:41 <CakeProphet> also portals are not restricted to where they can land.
10:13:44 <monqy> either one
10:13:48 <CakeProphet> meaning they don't /have/ to move three squares.
10:13:54 <CakeProphet> they can move one, or two.
10:13:56 <monqy> right
10:13:58 <CakeProphet> is that ridiculous?
10:14:05 <monqy> I figured that when you said "within" rather than "at"
10:14:10 <monqy> in "within a 3-square radius"
10:14:12 <monqy> or whatever it was
10:14:24 <CakeProphet> that's like... being a queen and a knight 3 squares around you.
10:14:32 <CakeProphet> granted you can't capture anything
10:14:35 <CakeProphet> so I guess that's fine.
10:14:51 <monqy> you can pull off wickednasty stunts though!!!
10:14:56 <CakeProphet> yes.
10:15:08 <CakeProphet> the portal is mobile but by itself not effective.
10:15:10 <CakeProphet> so that's fine.
10:15:36 <CakeProphet> it would be silly if portals were not very good at jumping around and portalling things.
10:15:56 <monqy> indeed!!
10:16:07 <CakeProphet> they're currently the second most mobile in terms of sheer distance. arrows are the only pieces that can move an unlimited number of squares in a single direction.
10:16:36 <CakeProphet> I think this makes sense in this game.
10:16:44 <monqy> I need to see it in action now
10:16:51 <CakeProphet> ...how will you do that?
10:17:04 <CakeProphet> monqy: you could write a program for it. :)
10:17:08 <CakeProphet> an IRC bot.
10:17:10 <monqy> never
10:17:14 <monqy> wait irc bot what
10:17:19 <monqy> how would that even work
10:17:20 <CakeProphet> ASCII board
10:17:22 <CakeProphet> commands
10:17:22 <itidus21> it could be static animated
10:17:30 <CakeProphet> ...yes/
10:17:31 <CakeProphet> ?
10:17:38 <CakeProphet> it would be very spammy.
10:17:44 <monqy> the spamest
10:17:44 <CakeProphet> but each turn it would print out the board.
10:17:54 <itidus21> i mean as in.. it could have an animation mocked up
10:17:57 <CakeProphet> which would not be bad, say, in a separate channel.
10:18:02 <CakeProphet> itidus21: explain.
10:18:07 <CakeProphet> how does that even make sense in IRC.
10:18:09 <CakeProphet> and why do you need to animate it.
10:18:33 <itidus21> like a game drawn frame by frame and saved as a gif or something for purpose of <monqy> I need to see it in action now
10:18:51 <CakeProphet> well. monqy can just play it with some friends IRL?
10:18:57 <monqy> whats friends
10:19:00 <CakeProphet> oh..
10:19:04 <CakeProphet> well, that's how I'm going to playtest it.
10:19:08 <CakeProphet> I have some friends that like chess
10:19:12 <CakeProphet> so I'm pretty sure they'd like this game.
10:19:21 <CakeProphet> they also like Portal... so...
10:19:27 <monqy> do they like lasers
10:19:28 <itidus21> i used to have friends.. thats almost the same thing as having friends :-s
10:19:29 <CakeProphet> and hookah.
10:19:30 <CakeProphet> probably.
10:19:34 <monqy> that was a joke everyone loves lasers
10:19:52 <CakeProphet> I wonder if they like prisms.
10:19:57 -!- sllide has joined.
10:20:04 <CakeProphet> I wonder if the prism is a good piece...
10:20:07 <monqy> prisms _are_ nifty
10:20:13 <monqy> I mean real prisms
10:20:22 <CakeProphet> I am somewhat suspicious that they could be improved upon.
10:20:26 <monqy> me too
10:20:45 <CakeProphet> but something needs to capture arrows...
10:20:57 <monqy> can normal pieces not?
10:21:10 <CakeProphet> currently that includes: pawn, king, and queen
10:21:15 <monqy> aahh
10:21:20 <CakeProphet> s/queen/prism/
10:21:33 <monqy> what are bishopes agian i forgot
10:21:36 <CakeProphet> arrows.
10:21:42 <monqy> ah
10:21:54 <monqy> moved it from sharpied pawns, then? good
10:21:56 <CakeProphet> I changed the piece roles a bit near the end of brainstorming.
10:21:57 <CakeProphet> yes.
10:22:28 <CakeProphet> queenside rook is the d-cannon, kingside rook is the c-cannon
10:22:33 <CakeProphet> that's diagonal and cardinal.
10:22:47 <CakeProphet> d-cannon is upside down.
10:24:30 <CakeProphet> these designations may change entirely. needs more playtesting.
10:24:48 <CakeProphet> but a cannon that fires in all directions seems bad to me.
10:24:55 <CakeProphet> but then prisms basically do that are more mobile...
10:25:21 <CakeProphet> still they're not offensively mobile in that they need to be in a projectile path to be effective.
10:25:48 <CakeProphet> ...except when they're just hopping around capturing normally.
10:25:53 <CakeProphet> which is one of their advantages as well.
10:26:28 <CakeProphet> it's a very effective anti-arrow piece. but not something that's invincible itself.
10:27:24 <monqy> I was imagining it'd be a pretty good piece for staying in some degree of saftey and sniping at the enemy
10:27:42 -!- Patashu has joined.
10:27:50 <CakeProphet> well, that's kind of why I want portals to not be affected by prisms
10:27:51 <monqy> as with some assistance it can do what queen-captures without moving itself
10:28:07 <CakeProphet> portals could be used to defend against prisms then.
10:28:47 <monqy> only if they're facing the right direction!!
10:28:49 <CakeProphet> which can otherwise just destroy anything in three different paths without having to move out of safety.
10:28:52 <CakeProphet> monqy: right
10:29:25 <CakeProphet> so yeah leaving portals unaffected by prisms would be a nice balance I think.
10:30:30 <CakeProphet> arrows defend against cannon fire, prisms can kill arrows, but regular cannon fire can kill prisms
10:30:57 <CakeProphet> portals can defend against anything in which it's facing.
10:31:11 <CakeProphet> (...results may vary on the other end of the portal. :P )
10:31:37 <monqy> hm
10:31:41 <monqy> a thing
10:32:02 <CakeProphet> yes a thing.
10:32:03 <Patashu> so is this chess or a wargame
10:32:06 <monqy> what happens when you have two corresponding portals pointing into each other and someone somehow gets into one of them, say by knightsmoves
10:32:12 <CakeProphet> Patashu: what is a wargame
10:32:25 <Patashu> like panzer general and stratego and so on
10:32:26 <CakeProphet> monqy: oh my.
10:32:32 <monqy> CakeProphet: explosions?
10:32:37 <CakeProphet> monqy: uh......
10:32:39 <CakeProphet> uh.......
10:32:42 <CakeProphet> yeah explosions.
10:32:44 <monqy> woohoo
10:32:52 <CakeProphet> explosions are cures for all forms of paradox.
10:33:12 <itidus21> monqy: stargate rules?
10:33:15 <CakeProphet> Patashu: uh I'd say it's chess-like
10:33:17 <Patashu> That would be a funny premise for a time travel game
10:33:20 <itidus21> is there any applicable rule?
10:33:22 <Patashu> Mess up? EXPLOOOSION
10:33:27 <monqy> itidus21: never seen it
10:33:40 <itidus21> i dont think anything like that ever happened
10:33:47 <itidus21> but stargate is much like a portal
10:33:53 <CakeProphet> monqy: it could just be like illegal or something...
10:34:07 <monqy> illegal is boring
10:34:18 <CakeProphet> also how should diagonal movement work through a portal that isn't facing diagonal
10:34:23 <monqy> so long as you're making an exception for it, might as well make it explodey
10:34:26 <CakeProphet> or similarly with cardinal movement.
10:34:51 <monqy> CakeProphet: oh right that was a thing I was going to ask you about. when I was thinking about bishopmovement/portals
10:35:04 <CakeProphet> well, for example
10:35:08 <CakeProphet> if a king goes through a portal
10:35:14 <CakeProphet> and the out-portal is diagonally facing
10:35:19 <CakeProphet> then he should come out right in front of it.
10:35:24 <CakeProphet> no problem.
10:35:41 <CakeProphet> so
10:35:49 <monqy> bishopmove attempt to reorient? explosion
10:35:53 <CakeProphet> maybe things should just always come out on the square adjacent to the portals opening
10:35:56 <CakeProphet> and then they continue movement from there.
10:36:12 <monqy> or rookmove attempt to reorient. either way.
10:36:25 <CakeProphet> OR
10:36:38 <CakeProphet> maybe they continue along the path the portal points them? as a strategic element.
10:36:49 <CakeProphet> so a diagonally moving arrow goes through a portal and comes out a portal that's facing in a cardinal direction
10:36:52 <CakeProphet> at which point it continues cardinally.
10:36:55 <monqy> and then they're back to normal after stopping movemntn?
10:36:59 <CakeProphet> yes.
10:37:00 <monqy> that works
10:37:08 <monqy> best solution
10:37:14 <CakeProphet> yes allows for shenanigans.
10:37:44 <CakeProphet> ....wow these rules are ridiculously complicated.
10:37:59 <itidus21> the implications on this rule is huge
10:38:05 <CakeProphet> it'll be fun trying to explain it all to my friends.
10:38:27 <CakeProphet> well it really only affects arrows.
10:38:38 <itidus21> of which there arenot many
10:38:39 <itidus21> :P
10:39:07 <CakeProphet> if I decide to make something else that isn't a knight-mover or a king-mover
10:39:17 <CakeProphet> or which doesn't explode upon going through a portal.
10:39:25 <CakeProphet> then it would follow that rule as well.
10:39:35 <CakeProphet> i.e., a rook-like could go diagonally.
10:39:51 * itidus21 blinks
10:40:00 <itidus21> now that is hardcore
10:40:14 <CakeProphet> but there are no rooklikes.
10:40:28 <itidus21> changing the frame of reference of a chesspiece surely doesn't happen a lot
10:40:56 <CakeProphet> everything is king-like, knight-hop-hop, pawns, or bishop-like
10:41:02 <Patashu> wow. rotating a piece via portal
10:41:39 <CakeProphet> monqy: also I realized that the whole angle-reorienting stuff is kind of pointless since you can just change directions at the end of the turn anyways.
10:42:08 <monqy> oh right
10:42:23 <monqy> that makes it a bit less complicated
10:42:27 <CakeProphet> should I make re-angling take a whole turn? seems kind of... lame.
10:42:42 <monqy> it's fine as-is
10:42:49 <itidus21> well this frame of reference thing would be more meaningful in a game with regular pieces
10:43:08 <CakeProphet> yes but then no projectile shenanigans and loops.
10:43:29 <itidus21> im just imagining pawns rotated to walk to the walls
10:43:36 <CakeProphet> wat
10:43:39 <monqy> they change back to normal at turn-end
10:43:40 <CakeProphet> "walls"?
10:43:42 <Patashu> walls
10:43:42 <Patashu> lol
10:43:48 <itidus21> sorry.. side panels
10:43:51 <Patashu> the chess board is surrounded by infinitely high walls of infinitely thick concrete
10:43:54 <CakeProphet> "side panels"?
10:43:55 <itidus21> spectator stands of rome
10:43:57 <Patashu> or
10:43:58 <Patashu> wait
10:43:59 <Patashu> what if
10:44:00 <Patashu> you could move
10:44:02 <itidus21> caesar looks on
10:44:02 <Patashu> -between the squares-
10:44:05 <Patashu> along the edges and corners
10:44:11 <CakeProphet> Patashu: woah dude
10:44:13 <itidus21> actually considering that rome probably never saw chess
10:44:19 <monqy> changing back to normal at turn end is how you avoid a choice between hidden state and sharpieing your pawns!!!
10:44:35 <CakeProphet> it wouldn't even make sense for them to continue moving that way afterwards.
10:44:49 <CakeProphet> GOES AGAINST THE LAWS OF PORTAL CHESS PHYSICS.
10:45:03 <itidus21> glados has infected the system
10:45:19 -!- monqy has quit (Quit: hello).
10:45:37 <Patashu> hmm, I'm picturing a simple 'chess with portals' variant now.
10:46:00 <CakeProphet> also if you a have a portal adjacent to a king
10:46:11 <CakeProphet> any time the linked portal can be captured you're in check.
10:46:30 <Patashu> FIDE rules except both teams start with a them-coloured portal on a tile in their third rank. a portal moves to any unoccupied tile. you can move a piece onto a portal and it continues out the other side like the two tiles were in fact right together
10:46:55 <Patashu> or possibly make both portals neutral instead of owned by a side and add 'no repeating an earlier state' as a rule
10:47:04 <CakeProphet> help where's directionality of portals.
10:47:04 <Patashu> hi I have not tested my game at all
10:47:41 <CakeProphet> I do find adding a concept of direction to chess to be interesting.
10:47:44 <CakeProphet> could explore that with other variants.
10:47:51 <CakeProphet> #esoteric-chess? :P
10:48:10 <Patashu> I assume they'd never be rotated
10:48:13 <Patashu> but you could add that easily
10:48:36 <Patashu> portals have an orientation, you can move it to any tile or change its orientation as your turn. when you go into one portal you look at what its orientation is re: the other one and that's how much it angles by
10:49:02 <CakeProphet> lolwat
10:49:27 -!- Vorpal has joined.
10:49:28 <CakeProphet> Patashu is not allowed to write rules for portal chess.
10:49:29 -!- Vorpal has quit (Changing host).
10:49:29 -!- Vorpal has joined.
10:49:30 <Patashu> example, if both portals face north then there's zero difference so you go through unchanged. if one is bent 90 degrees then going through one bends you 90 degrees
10:49:31 <Patashu> oh
10:49:33 <Patashu> well then!
10:49:36 <CakeProphet> !!!!!
10:49:38 * Patashu storms off in a huff. through a portal
10:49:41 * Patashu closes it behind him
10:49:59 <CakeProphet> you could have chess with a portal gun
10:50:02 <CakeProphet> the portal gun is directional
10:50:07 <Vorpal> hi
10:50:09 <CakeProphet> and then fires portals on the infinite concrete walls
10:50:12 <itidus21> i considered portal gun earlier but stayed silent :D
10:50:13 <Vorpal> <itidus21> vorpal would probably like my lowbrow style of chess variation <-- oh?
10:50:23 <Vorpal> (was the last line I saw before putting computer to sleep)
10:50:53 <itidus21> i haven't completed any though
10:51:08 <Vorpal> itidus21, what is your lowbrow style of chess?
10:51:34 <CakeProphet> he drools on the pieces.
10:51:44 <Vorpal> XD
10:51:45 <itidus21> <Vorpal> CakeProphet, are there pirates and ninjas too?
10:51:46 <Patashu> lowbrow style of chess makes me think of the version of chess played in...sweden? germany? someplace like that. where you throw a piece of wood underarm across a field and try to hit your enemy's king with it
10:52:02 <itidus21> <monqy> what if instead of special cases you had pirates and ninjas <monqy> i would be less angry
10:52:04 <Vorpal> Patashu, that isn't chess, that is kubb I think
10:52:08 <Patashu> yes
10:52:08 <Patashu> kubb
10:52:09 <Vorpal> Patashu, very different from chess
10:52:21 <Patashu> I might be confusing it with a hhgttg joke
10:52:24 <itidus21> lol patashu
10:52:29 <CakeProphet> soon I will publish my chess variant and no one will play chess anymore
10:52:35 <CakeProphet> they will only play PORTAL CHESS!!!!!!111111111
10:52:53 <Vorpal> Patashu, I mean, it has nothing to do with chess. Apart from being a game. It is normally played between two teams.
10:53:12 * CakeProphet fantasizes about his future fame as a renowned chess variant writer.
10:53:12 <Vorpal> anyway it is from Sweden, I played it once. I suck at it.
10:53:43 <Patashu> spend 10 years becoming a kubb grandmaster
10:53:48 <Patashu> and complain about how no one appreciates this game anymore
10:53:53 <Vorpal> heh
10:54:31 <Vorpal> Patashu, wikipedia indicates it is common in Germany too at least.
10:55:04 <CakeProphet> note that Wikipedia says nothing about portal chess.
10:55:29 <itidus21> CakeProphet: if you're checking wikipedia thats because you're afraid of the nasty truths you'll find in google
10:55:33 <Vorpal> CakeProphet, and?
10:55:36 <itidus21> (which i havent checked)
10:55:38 <CakeProphet> http://en.wikipedia.org/wiki/Portal:Chess
10:55:40 <CakeProphet> not the same.
10:55:44 <Vorpal> XD
10:56:10 <CakeProphet> Vorpal: I'm just revelling in my ego right now having just created something entirely new to the world.
10:56:17 <CakeProphet> pay no mind.
10:56:30 <Vorpal> CakeProphet, sounds like a combination of chess and Portal.
10:56:37 <CakeProphet> well yes...
10:56:47 <itidus21> CakeProphet: this isn't a competitor... but... worth looking at http://www.youtube.com/watch?v=dav9OyEORk4
10:56:47 <CakeProphet> new things are usually resynthesized from previous ideas.
10:56:52 <CakeProphet> but this doesn't make them any less original.
10:57:23 <Vorpal> speaking of games, I recently played Bastion. Very impressive game. Innovative.
10:57:41 <Vorpal> and it is right up there with Braid in terms of games being art.
11:00:40 <itidus21> CakeProphet: ok heres the first bitter taste of your competition. but don't lose hope too easily. http://blog.chess.com/balifid/portal-chess
11:01:12 -!- Taneb has joined.
11:01:16 <itidus21> it doesn't even have guns though
11:01:23 <itidus21> its not exactly a big threat
11:03:17 <itidus21> http://www.quora.com/How-might-one-add-portals-to-chess -- curious
11:06:42 <CakeProphet> yeah that doesn't look like a good game.
11:06:53 <itidus21> now this is a badass idea http://www.youtube.com/watch?v=WtcGiZelPfk
11:08:18 <CakeProphet> bahaha
11:09:17 <itidus21> good game * good game = good game
11:09:41 <CakeProphet> I think I would be a good game designer actually.
11:09:54 <CakeProphet> I've done some brainstorming on an Android game I've thought about.
11:09:58 <itidus21> ive been following super mario very closely
11:10:00 <CakeProphet> kind of a metroid-like game.
11:10:07 <CakeProphet> but a puzzle game.
11:10:13 <itidus21> so im excited to see a video of super mario with portals
11:10:24 <CakeProphet> action-puzzle game.
11:10:36 <CakeProphet> with things like time dilation missiles.
11:10:56 <CakeProphet> and... other things I haven't thought of. time dilation missiles are basically the main idea I've got.
11:11:28 <CakeProphet> lemme check my notes...
11:11:43 <itidus21> so combining themes from laserchess with original loops idea with portals and i think it is likely you're onto something original
11:12:31 <CakeProphet> ....I think this is an original chess variant already.
11:12:46 <itidus21> thats what i meant to say
11:12:46 <CakeProphet> I will need to playtest it but the game seems pretty complete to me.
11:12:56 <itidus21> i cant find any obvious copies
11:13:21 <CakeProphet> I didn't even know about laserchess actually.
11:13:37 <CakeProphet> laser chess is more strictly about bouncing lasers everywhere.
11:13:43 <CakeProphet> each piece reflects differently.
11:14:19 <CakeProphet> man I need to sleep.
11:14:24 <CakeProphet> too much thinking about portal chess
11:14:27 <CakeProphet> not enough homeworkdone.
11:16:22 <itidus21> "Little known fact: knights in chess travel over other pieces by rocket jumping."
11:17:26 <CakeProphet> itidus21: also what is L2
11:17:39 -!- oerjan has joined.
11:17:49 <itidus21> 2L http://codu.org/eso/2l/README
11:19:43 <CakeProphet> oerjan: there is now such a thing as portal chess. Obviously you are as excited as I am right now.
11:20:40 <oerjan> well i _do_ have to consider the possibility that the CakeProphet is a lie.
11:21:08 <CakeProphet> oerjan: no no it's real all the paradoxes cause explosions.
11:21:15 <CakeProphet> everything is fine.
11:21:16 <oerjan> yay
11:21:20 <Taneb> Does SK do the same as KI in a different way?
11:21:27 <oerjan> Taneb: yes
11:21:35 <Taneb> INTERESTING
11:21:38 <Taneb> ALSO WEIRD
11:21:42 <oerjan> with lazy evaluation, anyhow
11:21:44 <CakeProphet> :t const id
11:21:45 <lambdabot> forall a b. b -> a -> a
11:21:50 <CakeProphet> :t ap const
11:21:50 <lambdabot> forall b a. (b -> a) -> b -> b
11:22:14 <oerjan> in (strict) unlambda they're slightly different in what can be evaluated.
11:22:57 <CakeProphet> :t ap const (const id)
11:22:58 <Taneb> I'm really thinking in terms of MIBBLLII
11:22:58 <lambdabot> forall b. b -> b
11:23:19 <oerjan> :t ap const undefined
11:23:20 <lambdabot> forall b. b -> b
11:24:46 <CakeProphet> see I'm tempted to not listen to monqy and gives knights directionality to their movements
11:25:12 <CakeProphet> so that the adjacent portals with infinitely teleporting knight situation can't happen.
11:25:47 <CakeProphet> well, infinitely teleporting prism, which can move like a knight.
11:26:20 <Taneb> Next: Portal Monopoly
11:26:43 <CakeProphet> yeah... monqy's rule causes more problems than the way I wanted to do it.
11:27:57 <oerjan> so, monqy's rule it is, then?
11:29:04 <Taneb> Which ap is lambdabot's ap?
11:29:18 <CakeProphet> there's more than one?
11:29:19 <oerjan> the usual one...
11:29:21 <CakeProphet> @hoogle ap
11:29:21 <lambdabot> Control.Monad ap :: Monad m => m (a -> b) -> m a -> m b
11:29:22 <lambdabot> Data.Graph.Inductive.Query.ArtPoint ap :: Graph gr => gr a b -> [Node]
11:29:22 <lambdabot> Control.Arrow app :: ArrowApply a => a (a b c, b) c
11:30:53 -!- Taneb_ has joined.
11:30:53 <oerjan> "I'd like to be able to apply Arrows to each other." "There's an app for that."
11:31:19 -!- Taneb has quit (Read error: Connection reset by peer).
11:31:22 <Taneb_> Control.Monad, I presume?
11:31:25 -!- Taneb_ has changed nick to Taneb.
11:31:33 <oerjan> well yes
11:32:35 <CakeProphet> arrows are weird.
11:33:43 <CakeProphet> as far as I understand they're like monads but tuplier
11:35:13 <oerjan> arrows = category + applicative + some extra laws
11:35:25 <oerjan> no bind, unless you have arrowapply
11:35:51 <oerjan> in which case they're equivalent to monads
11:42:02 -!- Taneb has quit (Ping timeout: 252 seconds).
11:42:40 <CakeProphet> I guess I should play Braid
11:42:46 <Vorpal> CakeProphet, yeah it is awesome
11:43:49 -!- pikhq has joined.
11:44:02 -!- pikhq_ has quit (Ping timeout: 260 seconds).
11:44:46 <CakeProphet> Vorpal: what was the other game someone was talking about?
11:44:54 <Vorpal> CakeProphet, Bastion?
11:45:07 <CakeProphet> no
11:45:10 <CakeProphet> deadly death something.
11:45:13 <Vorpal> minecraft? magicka? Deus Ex?
11:45:18 <Vorpal> CakeProphet, oh, dead island?
11:45:23 <CakeProphet> no
11:45:38 <Vorpal> harry potter and the deadly hallows (I heard it was shit)
11:45:53 <CakeProphet> Vorpal: wow imagine that.
11:46:11 <CakeProphet> Deadly Rooms of Death
11:46:17 <Vorpal> never heard of that
11:46:20 <Vorpal> what sort of game is it?
11:46:39 <Vorpal> well *googles*
11:46:45 <Vorpal> hm, released in 1997
11:56:20 -!- sllide has quit (Ping timeout: 260 seconds).
12:11:53 <CakeProphet> Vorpal: you've played magicka?
12:12:00 <CakeProphet> it's a favorite of mine.
12:13:38 -!- hagb4rd has quit (Ping timeout: 260 seconds).
12:25:26 <Patashu> harry potter and the deadly rooms of death
12:25:32 <Patashu> he even gets a Really Big Sword
12:25:46 <Patashu> and has to sm.. sl... well it kind of works!
12:29:06 -!- Taneb has joined.
12:31:16 <Taneb> Does anyone know any combinatory logic system things other than BCKW and SKI?
12:31:23 <Taneb> And Iota's
12:31:59 <Patashu> they're all equivalent anyway :downs:
12:33:06 <olsner> Taneb: there are a bunch of single-combinator bases, e.g. Fokker's X combinator
12:33:10 <olsner> ... his paper also has a few alternative single-combinator bases he compares against
12:33:57 <olsner> and yes, any complete combinatory logic system is equivalent to all the other complete ones
12:34:14 <olsner> but that doesn't really make it any less interesting
12:42:30 -!- sebbu has quit (Read error: Connection reset by peer).
12:43:35 -!- sebbu has joined.
12:43:35 -!- sebbu has quit (Changing host).
12:43:35 -!- sebbu has joined.
12:45:09 <oerjan> Taneb: there's one without K that is not equivalent but nonetheless TC
12:45:46 <oerjan> Taneb: also, if you look at it the right way, Underload is one
12:47:23 <oerjan> (curry (i think) proved it TC by showing you could approximate K well enough for numbers, or something like that)
12:49:23 <Vorpal> oerjan, hm. What do you mean with equivalent if not equivalent computational class?
12:49:41 <oerjan> it cannot express the same lambda terms
12:49:45 <Vorpal> ah
12:50:19 <oerjan> http://en.wikipedia.org/wiki/Combinatory_logic#CLK_versus_CLI_calculus
12:52:05 <Vorpal> hm, interesting
12:56:20 <Deewiant> ?hoogle (a -> a) -> [a] -> [a]
12:56:20 <lambdabot> Prelude iterate :: (a -> a) -> a -> [a]
12:56:21 <lambdabot> Data.List iterate :: (a -> a) -> a -> [a]
12:56:21 <lambdabot> Prelude map :: (a -> b) -> [a] -> [b]
12:57:11 <oerjan> Deewiant: do you want something different from map?
12:57:25 <Deewiant> I want to modify the head only
12:57:32 <oerjan> ah.
12:58:05 <oerjan> there is a distinct lack of functions that act separately on head and tail
12:58:20 <Deewiant> Data.List.NonEmpty doesn't seem to have it either
12:59:03 <oerjan> :t uncurry (:) . first ?f . splitAt 1
12:59:04 <lambdabot> forall a. (?f::[a] -> a) => [a] -> [a]
12:59:10 <oerjan> oops
12:59:37 <oerjan> oh well, it's easy to write
13:00:21 <Deewiant> Should it be a noöp or an error on []
13:01:34 <oerjan> that would depend on your use case, wouldn't it
13:01:53 <Deewiant> Just thinking what makes more sense for the general case
13:02:52 <oerjan> noop can easily be converted to the other form
13:03:19 <oerjan> :t uncurry (:) . first (map ?f) . splitAt ?n
13:03:20 <lambdabot> forall b. (?f::[b] -> b, ?n::Int) => [[b]] -> [[b]]
13:03:34 <oerjan> er
13:03:38 <oerjan> :t uncurry (++) . first (map ?f) . splitAt ?n
13:03:39 <lambdabot> forall b. (?f::b -> b, ?n::Int) => [b] -> [b]
13:04:30 <oerjan> :t uncurry (++) . (map ?f *** map ?g) . splitAt ?n
13:04:30 <lambdabot> forall b a. (?f::a -> b, ?g::a -> b, ?n::Int) => [a] -> [b]
13:04:49 <oerjan> moar generaller
13:09:06 -!- sebbu2 has joined.
13:09:09 <Deewiant> ?hoogle [a] -> Int -> Ordering
13:09:09 <lambdabot> Prelude (!!) :: [a] -> Int -> a
13:09:09 <lambdabot> Data.List (!!) :: [a] -> Int -> a
13:09:09 <lambdabot> Data.List genericIndex :: Integral a => [b] -> a -> b
13:10:34 <oerjan> :t null . drop n
13:10:35 <lambdabot> Couldn't match expected type `Int' against inferred type `Expr'
13:10:35 <lambdabot> In the first argument of `drop', namely `n'
13:10:35 <lambdabot> In the second argument of `(.)', namely `drop n'
13:10:38 <oerjan> :t null . drop ?n
13:10:38 <lambdabot> forall a. (?n::Int) => [a] -> Bool
13:11:51 <Deewiant> > map (null . drop 5) ["LESS","EQUAL","GREATER"]
13:11:53 <lambdabot> [True,True,False]
13:12:33 -!- sebbu has quit (Ping timeout: 260 seconds).
13:21:36 -!- Taneb has quit (Ping timeout: 252 seconds).
13:57:44 -!- oerjan has quit (Quit: leaving).
14:11:30 <Patashu> I am fucking terrible at combinatory logic
14:11:40 <Patashu> http://www.angelfire.com/tx4/cus/combinator/birds.html
14:11:52 <Patashu> How do I go through the process of evaluating Bluebird ((S(KS))K) to f x y
14:12:14 <Patashu> It should turn it into (f (g x)) since that's what B does
14:12:24 <Patashu> But I have no idea what receives what first and how much of it it wants and blah blah blah
14:12:31 <Patashu> Even thouhg I can look at the page and be like oh, S does this and K does this
14:12:37 <Patashu> My head is fucked by actually trying to do it
14:18:16 -!- Phantom_Hoover has joined.
14:29:53 -!- Patashu has quit (Quit: MSN: Patashu@hotmail.com , Gmail: Patashu0@gmail.com , AIM: Patashu0 , YIM: patashu2 .).
15:06:04 -!- sebbu2 has changed nick to sebbu.
15:36:51 -!- MSleep has changed nick to MDude.
15:48:26 -!- azaq23 has joined.
16:01:30 -!- monqy has joined.
16:08:34 -!- Taneb has joined.
16:08:43 <Taneb> Hello!
16:09:13 <Taneb> You know, I almost had the middle name Elliott?
16:10:45 <monqy> Taneb Elliott Somethingorother
16:12:20 <Taneb> My initials would have been N.G.E.vD.
16:12:52 <monqy> so mcuh name
16:18:12 <Gregor> Taneb: 's name is now Ngevd.
16:18:15 <Taneb> I have here a record of the songs from Disney's the Jungle Book
16:18:19 -!- Taneb has changed nick to Ngevd.
16:20:08 <Gregor> How do you pronounce your name, Ngevd?
16:23:15 <Ngevd> First is a velar nasal
16:23:53 <Ngevd> Then an open-mid front unrounded vowel
16:24:13 <Ngevd> Then a voiced labiodental fricative
16:24:53 <Ngevd> Then a voiced alveolar plosive
16:24:58 <Ngevd> Ngevd
16:25:18 <Gregor> Oh good. I was afraid the 'g' might be pronounced independently of the 'ng'
16:25:44 -!- sebbu has quit (Read error: Connection reset by peer).
16:26:38 <Ngevd> A bit like ng-ev'd
16:27:32 <Ngevd> Does anyone know how to convert an LP into an iPod compatible format?
16:28:07 -!- sebbu has joined.
16:28:29 <monqy> LP?
16:28:40 <Gregor> You're probably stuck with finding a player with line-out and recording.
16:28:50 <Gregor> If there exist players with line out :P
16:29:10 <Ngevd> Shouldn't be too difficult to make
16:29:21 <Ngevd> However, I am not one of life's makers
16:29:32 <Ngevd> And it probably quite difficult to buy
16:29:53 <Ngevd> But how else will I listen to Eagles Greatest Hits Volume 2 while on the move?
16:30:01 <Gregor> http://www.thinkgeek.com/electronics/digital-conversion/c7fd/
16:30:17 <Gregor> You can probably get these for less than this retarded price too :P
16:30:45 <Ngevd> I think there's actually someone near HEXHAM, THE CAPITAL OF ESOTERIC PROGRAMMING who does it for a living
16:31:53 <Gregor> Last summer I converted a bunch of beta tapes to DVD
16:34:22 <fizzie> I've once built the correct analog filter to make a regular line out into something that can be plugged into the "usual" LP player input of an amplifier (because the amplifier in question was from the 1970s or so and didn't really have any sensible "aux" inputs for a computer); the inverse shouldn't be too tricky.
16:35:44 <fizzie> "First, any self-respecting audiophile would be embarrassed to admit using a USB turntable, as there are no high-end models."
16:38:55 <Gregor> And what if you're not an audiophile :P
16:39:33 <fizzie> Then you are unimportant and not worth an answer, I believe. (I'm speaking from the viewpoint of this document, you understand.)
16:39:47 <fizzie> Anyway, you only need about $1000 to do it almost right, that's not too bad.
16:41:14 <fizzie> (Or $100 if you already have a good analog turntable.)
16:41:32 <Phantom_Hoover> <Ngevd> I think there's actually someone near HEXHAM, THE CAPITAL OF ESOTERIC PROGRAMMING who does it for a living
16:41:43 <Phantom_Hoover> Dude, Helsinki is the capital.
16:41:48 <Phantom_Hoover> Look at all the Finns here.
16:41:53 <Gregor> How about this: What if the LP format sucks ass, your records have been sitting around for years and are probably scuffed anyway, and audiophiles are retardedly trying to preserve what amounts to white noise?
16:43:49 -!- impomatic has joined.
16:43:53 <impomatic> Hi :-)
16:46:53 <Gregor> impomatic: Let us discuss the correct procedure for converting LP -> FLAC
16:48:11 <fizzie> The correct procedure is: you put the LP into a flatbed scanner, scan it as a Windows .bmp file, and then rename that file to .flac.
16:49:46 <Gregor> *clap clap*
16:50:08 <Gregor> `addquote <Gregor> Let us discuss the correct procedure for converting LP -> FLAC <fizzie> The correct procedure is: you put the LP into a flatbed scanner, scan it as a Windows .bmp file, and then rename that file to .flac.
16:50:10 <HackEgo> 669) <Gregor> Let us discuss the correct procedure for converting LP -> FLAC <fizzie> The correct procedure is: you put the LP into a flatbed scanner, scan it as a Windows .bmp file, and then rename that file to .flac.
16:50:54 <fizzie> What? It's lossless!
16:52:34 <Vorpal> no it isn't. The scanner will introduce some noise
16:52:44 <Vorpal> at the very least some thermal noise
16:53:21 <Vorpal> and even if you get rid of that you have various quantum noise thingies
16:56:37 <fizzie> No, no, it's called "free LOSSLESS audio codec".
16:56:54 <impomatic> What's LP, apart from "Limited Process"? :-)
16:57:22 <Deewiant> Long Playing
16:59:13 <Vorpal> impomatic, which in this case refer to a type of gramophone record
17:02:06 -!- ive has joined.
17:11:54 -!- impomatic has quit (Quit: impomatic).
17:12:09 <Gregor> We really need better terms for degrees of lossiness.
17:12:23 <Gregor> Since it's not the /format/ that causes loss, it's the /conversion/.
17:12:45 <Gregor> FLAC is lossless, but converting from an LP can't be, GIF is lossless but only supports a 256-color palette ...
17:22:06 <fizzie> Assuming we're inside a simulation anyway, converting from an LP sure can be lossless.
17:32:15 * Phantom_Hoover ponders again the perennial question of what ais' middle name is.
17:42:03 <Vorpal> Phantom_Hoover, does it matter?
17:42:34 <Gregor> Phantom_Hoover: Irene. His parents ... they weren't so good with names.
17:43:21 <Vorpal> fizzie, why? What if the simulation runs on a analogue computer?
17:43:39 <Phantom_Hoover> Gregor, not implausible, given that he did say that his parents gave both him and his brother gender-neutral names, although not his sister.
17:44:33 <fizzie> My guess is "I-don't-have-a-middle-name" is his middle name.
17:45:01 <Gregor> "Irene" is not a gender-neutral name :P
17:47:40 -!- SgeoN1 has joined.
17:47:56 <SgeoN1> You should become a magical girl.
17:48:16 <Vorpal> ... who?
17:48:31 <Gregor> EEEEEEEEEEEEEEEEEEEVERYONE
17:49:35 -!- Ngevd has quit (Ping timeout: 276 seconds).
17:49:38 <Phantom_Hoover> Lymee, aha, your sock is revealed!
17:50:20 <Vorpal> I don't understand windows IO handling. When windows is under heavy disk load, other programs that seemingly should not need to access the disk respond slowly too, that doesn't happen under linux.
17:50:24 <Vorpal> same disk too
17:50:33 <Vorpal> so wtf
17:50:56 <Lymee> My what?
17:56:03 -!- Phantom_Hoover has quit (Ping timeout: 260 seconds).
18:02:34 -!- Taneb has joined.
18:06:10 <Taneb> Oh yeah, I changed my name
18:06:14 -!- Taneb has changed nick to Ngevd.
18:06:22 <Gregor> Welcome back, Ngevd!
18:19:26 -!- copumpkin has quit (Quit: Computer has gone to sleep.).
18:24:11 -!- elliott has joined.
18:24:18 <elliott> Deewiant: http://hackage.haskell.org/packages/archive/bifunctors/0.1.2/doc/html/Data-Bifunctor-Apply.html
18:24:27 <elliott> There's your (three ampersands)
18:24:49 <elliott> f [three ampersands] g == ((f,g) <<.>>)
18:25:13 <Deewiant> Yeah I noticed that earlier today
18:25:25 <elliott> Deewiant: Hideous name though
18:25:30 <Deewiant> I also filed a bug about the fact that his definitions aren't as lazy as Control.Arrow's
18:26:17 <elliott> And here I am thinking I'm a genius for realising that what you wanted were essentially Biapplicatives, going to check bifunctors for a detail I needed to write them down, and then noticing they were already there :P
18:26:31 <elliott> Still need Trifunctors though right???
18:26:42 <elliott> Also it's missing `both`. :p
18:27:11 <Deewiant> join (uncurry (<<.>>))
18:27:47 <elliott> Deewiant: Yes, which is not nice to use
18:28:03 <elliott> Thus giving it a name :-P
18:28:17 <Deewiant> Yep :-P
18:28:41 <elliott> It'd be nice if Data.Bifunctor.Apply exported bilift = (<<.>>)
18:28:46 -!- ais523 has joined.
18:28:51 <elliott> Or at least I wouldn't want to write ((f,g) <<.>>)
18:29:27 <elliott> http://hackage.haskell.org/packages/archive/bifunctors/0.1.2/doc/html/Data-Bitraversable.html Prize to the first person to find a use for these :P
18:29:52 <SgeoN1> Why do electronics disintegrate in my hands?
18:30:43 <elliott> Deewiant: But I was thinking (before I realised all this) that I could snap up the "combinators" name on Hackage, since it's not taken; then I could include nice things like (.:) too.
18:30:58 <elliott> And names for flip (.) and flip ($).
18:31:04 <Deewiant> How cunning
18:31:14 <elliott> I detect sarcasm
18:31:53 <Deewiant> Well, more sinful than cunning
18:32:06 <elliott> What part is sinful
18:32:10 <elliott> Claiming the combinators name?
18:32:11 <Deewiant> "combinators"
18:32:18 <Deewiant> Nothing should be called that :-P
18:32:32 <SgeoN1> Got a good old email account phishing mail
18:32:39 <SgeoN1> Completely generic
18:32:50 <elliott> Deewiant: What would you call something that defined all the birds in To Mock a Mockingbird, except with reasonable names so they're not birds
18:32:59 <Deewiant> birdlike-combinators
18:33:07 <SgeoN1> When people reply, is there database automatically or manually filled?
18:33:11 <elliott> Deewiant: I UNBIRDED THEM
18:33:30 <SgeoN1> What would happen if I said my password is FUCKPHISHERS
18:33:52 <ais523> elliott: http://esoteric.voxelperfect.net/wiki/User:Ncrazyj isn't as good as some of the spam we've been getting, but I'm about to delete it, so if you care about saving a copy you'd better look now
18:34:34 <elliott> thank you kindly
18:35:50 <ais523> can I delete it now, then?
18:36:03 <elliott> Absolutely not. (Yes, I doubt I can stop you anyway.)
18:36:11 <elliott> (diff) (hist) . . N Talk:Brainlove‎; 23:47 . . (+102) . . Maharba (Talk | contribs) (New page: Don't let User:Phantom Hoover see this. —~~~~)
18:36:12 <elliott> Sage words
18:36:24 <elliott> I was hoping the word love would keep him away... --Aptennap 07:14, 18 September 2011 (UTC)
18:36:26 <elliott> NOTHING CAN SAVE YOU
18:36:47 <ais523> I raged at it in-channel
18:37:13 <ais523> although not very hard, as raging ais523 looks much the same as normal ais523
18:37:15 <elliott> We need to seriously deincentivise the creation of BF derivatives somehow.
18:37:17 -!- mycrofti1 has changed nick to mycroftiv.
18:37:29 <elliott> Like, if you make a brainfuck derivative, you have to provide a translation of your page in Swahili.
18:37:33 <ais523> well, it's not like all these BF derivatives hurt anyone
18:37:36 -!- derdon has joined.
18:37:41 <ais523> and it helps get their authors into esolangs
18:37:45 <elliott> ais523: They hurt me.
18:39:18 <Ngevd> Do MIBBLLII and I hate your bf-derivative I really do count as branfuck derivatives?
18:39:46 <elliott> I liked I hate your bf-derivative I really do before it turned out that the author actually likes BF derivatives
18:39:52 <elliott> :(
18:41:24 <elliott> 21:52:17: <ais523> bleh, a search for "which punctuation marks are uppercase?" gave me no results
18:41:27 <elliott> ais523: try ask jeeves
18:41:35 <elliott> 21:57:59: <zzo38> Is there any standard function for "foldr (.) id"?
18:41:38 <ais523> haha, I forgot that existed
18:41:42 <elliott> > ala Endo foldMap [succ, succ] 99
18:41:43 <lambdabot> Not in scope: `foldMap'
18:41:46 <elliott> > ala Endo mconcat [succ, succ] 99
18:41:46 <lambdabot> Couldn't match expected type `(a -> a) -> Data.Monoid.Endo a'
18:41:47 <lambdabot> again...
18:41:48 <elliott> > mconcat [succ, succ] 99
18:41:49 <lambdabot> Ambiguous type variable `a' in the constraints:
18:41:49 <lambdabot> `Data.Monoid.Monoid a'
18:41:49 <lambdabot> ...
18:41:53 <elliott> >_<
18:41:55 <elliott> wrong intsance
18:41:56 <elliott> ok wait I forget...
18:42:04 <elliott> hmm
18:42:10 <elliott> :t mconcatMap
18:42:11 <lambdabot> Not in scope: `mconcatMap'
18:42:13 <ais523> IIRC it's just an alias for some other search engine, but I'm trying it anyway
18:42:18 <elliott> > ala Endo (mconcat . map) [succ, succ] 99
18:42:19 <lambdabot> Couldn't match expected type `[b -> n']'
18:42:19 <lambdabot> against inferred type `[a ...
18:42:29 <elliott> > ala Endo (const mconcat) [succ, succ] 99
18:42:30 <lambdabot> No instance for (Control.Newtype.Newtype (a -> a) (t -> a1))
18:42:30 <lambdabot> arising fro...
18:42:32 <elliott> ?hoogle concatMap
18:42:32 <monqy> :t ala
18:42:32 <lambdabot> Prelude concatMap :: (a -> [b]) -> [a] -> [b]
18:42:32 <lambdabot> Data.ByteString concatMap :: (Word8 -> ByteString) -> ByteString -> ByteString
18:42:32 <lambdabot> Data.Foldable concatMap :: Foldable t => (a -> [b]) -> t a -> [b]
18:42:33 <lambdabot> forall o n b n' o'. (Newtype n o, Newtype n' o') => (o -> n) -> ((o -> n) -> b -> n') -> b -> o'
18:42:39 <elliott> ?hoogle foldMap
18:42:39 <lambdabot> Data.Foldable foldMap :: (Foldable t, Monoid m) => (a -> m) -> t a -> m
18:42:39 <lambdabot> Data.Traversable foldMapDefault :: (Traversable t, Monoid m) => (a -> m) -> t a -> m
18:42:44 <elliott> > ala Endo Data.Foldable.foldMap [succ, succ] 99
18:42:44 <lambdabot> 101
18:42:47 <elliott> there we go
18:42:49 <elliott> monqy: http://hackage.haskell.org/packages/archive/newtype/0.2/doc/html/Control-Newtype.html
18:43:00 <ais523> oh wow, one of the results was even relevant
18:43:16 <elliott> ais523: nice
18:43:20 <ais523> not very /good/, but relevant: http://typophile.com/node/60376
18:43:56 <elliott> oh, oerjan started working this out later on
18:44:32 <elliott> 22:59:14: <CakeProphet> data Many a = One a | Many (Many a)
18:44:40 <elliott> CakeProphet: this is the partial computation monad
18:45:04 <elliott> CakeProphet: also known as resumption
18:45:08 <elliott> 23:01:08: <CakeProphet> count (One a) = 1; count (Many a) = 1 + count a
18:45:14 <elliott> that counts the number of steps needed to complete the computation
18:45:21 <elliott> 23:01:54: <oerjan> also it's isomorphic to that delayed monad thing
18:45:21 <elliott> yeah
18:47:07 <elliott> 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
18:47:15 <elliott> ais523: that's basically a one-time hack version of SafeHaskell :P
18:47:20 <elliott> which is in latest ghc
18:47:34 <ais523> hmm, glad to know the idea isn't completely stupid
18:47:48 <ais523> I may put a prctl() on there just to make sure
18:47:54 <elliott> ais523: just use UMLBox, dude
18:47:59 <elliott> it's a simple "make" to build
18:48:00 <ais523> I wonder if it's possible to run OCaml in one of those?
18:48:07 <elliott> and you can disable all file access
18:48:12 <elliott> and just use nice and sleep to handle the rest
18:48:19 <elliott> five line shell script
18:48:28 <elliott> no OCaml module hacks required
18:50:15 -!- copumpkin has joined.
18:50:23 <elliott> ais523: no?
18:51:11 <elliott> 00:56:27: <oerjan> <ais523> haha, INTERCAL will have that feature all to itself now! <-- i thought you were referring to CTCP SOURCE here
18:51:11 <elliott> 00:56:40: <ais523> no, to putting expressions on the LHS of an assignment
18:51:15 <elliott> ais523: the only thing gone is n+k patterns
18:51:23 <elliott> you can still redefine (+) locally just fine
18:51:33 <ais523> INTERCAL reverse assignments work like n+k patterns
18:51:36 <ais523> just, on anything
18:52:07 <ais523> (as long as it doesn't use the same variable or constant twice, e.g. .1$.1 <- #1$#2 isn't going to work well)
18:52:18 <elliott> that's just finding a fixed point
18:52:29 <elliott> 01:05:53: <Gregor> Surely IRC doesn't predate URLs ...
18:52:29 <elliott> URLs: 1994; IRC: 1988
18:52:30 <elliott> Gregor: so yes it does
18:53:04 <ais523> hmm, now I'm wondering when the Web was invented
18:53:22 <ais523> 1989
18:53:36 <ais523> ah, now why it requires an FTP server location makes a lot of sense
18:53:37 <elliott> Sheesh, I was just about to tell you.
18:53:48 <elliott> The web only went public in 1990 anyway.
18:54:32 <Ngevd> It was invented by someone from Hexham
18:54:37 <Ngevd> Well, it wasn't
18:54:41 <Ngevd> Same country
18:54:54 -!- elliott has quit (Read error: Connection reset by peer).
18:55:00 -!- elliott has joined.
18:56:03 <elliott> 01:32:20: * SgeoN1 badmoods
18:56:03 <elliott> not a verb
18:56:58 <elliott> 01:50:55: <monqy> intesting is _not a word_
18:56:58 <elliott> it's what intestines do
18:57:06 <elliott> what's up intestines? oh nothing, just intesting
18:58:18 <elliott> `addquote <itidus21> :D :D oh man.. i wonder if they ever made chess variants based off of animes
18:58:19 <HackEgo> 670) <itidus21> :D :D oh man.. i wonder if they ever made chess variants based off of animes
18:58:36 <monqy> it is a good quote
18:59:36 <elliott> 02:55:59: <monqy> is suicide chess anything like strip chess
18:59:36 <elliott> suicide strip chess
19:00:06 <tiffany> intercal x_x
19:00:10 <monqy> hi
19:00:33 <ais523> what's wrong with INTERCAL?
19:00:46 <elliott> ais523: tiffany just says random words at random times followed by x_x, as far as I can tell
19:00:53 <tiffany> "A Sieve of Eratosthenes benchmark, computing all prime numbers less than 65536, was tested on a Sun SPARCStation-1. In C, it took less than half a second; the same program in INTERCAL took over seventeen hours.[6]"
19:01:01 <tiffany> how does that even
19:01:05 <elliott> ah yes, now we finally know what's wrong with intercal
19:01:07 <elliott> it's slower than C
19:01:16 <Gregor> Noooo!
19:01:17 <elliott> ais523: make C-INTERCAL produce faster programs and it'll be a great language
19:01:33 <tiffany> intercal uses <- for assignment
19:01:35 <tiffany> squirrel does too
19:01:36 <tiffany> ;-;
19:01:36 <ais523> elliott: C-INTERCAL is substantially faster, I remember running the same program a year ago
19:01:48 <monqy> tiffany: congratulations you've figured it out
19:01:59 <monqy> why intercal is a Bad Language
19:02:00 <elliott> that's the other bad thing about intercal, using <- to assign
19:02:01 <monqy> x_x
19:02:03 <ais523> well, there are only that many plausible syntaxes for assignment
19:02:11 <ais523> really, INTERCAL's expression syntax needs redoing
19:02:11 <elliott> RUINED FOREVER
19:02:18 <ais523> I'm really happy with the control flow
19:02:26 <tiffany> it's not a bad thing
19:02:30 <ais523> but the expressions, while interesting, are just obstructive for no good reason (other than being INTERCAL)
19:02:37 <monqy> I honestly prefer <- over = for assignment of mutable variables
19:02:49 <tiffany> it's that a programming language that i used to like a lot uses <- for assignment, which a parody language also uses
19:03:00 <monqy> oh no
19:03:08 <tiffany> squirrel uses variable <- value; and local variable=value;
19:03:11 <elliott> isn't squirrel that boring game extension languages
19:03:18 <elliott> yes languages PLURAL
19:03:23 <tiffany> squirrel's a 6k interpreted language
19:03:29 <tiffany> used in the source engine
19:03:31 <tiffany> and other thingies
19:03:37 <monqy> I remember squirrel being a boring game extension language last I checked
19:03:45 <ais523> I'm a fan of having separate "define initial (and thus eventual) value of immutable variable" and "assign to memory pointed to by variable name" operators
19:04:15 <monqy> mm
19:04:31 <ais523> most commonly, languages which make the distinction call them = and :=
19:04:40 <monqy> tiffany: but does that make it interesting
19:04:48 <elliott> tiffany: so yes then
19:04:53 <monqy> the interpreter being 6k and used in places
19:05:07 <tiffany> I think I've grown closer to javascript
19:05:08 <elliott> i briefly considered using squirrel for mcmap i think but i didn't because it was bad
19:05:15 <elliott> oh well not as bad as javascript certainlt
19:05:16 <elliott> y
19:05:22 <monqy> heheheh
19:05:23 <tiffany> I was bored and wrote a 3D renderer with it using canvas and kind of like it
19:05:31 <ais523> 6k's quite big for an interp
19:05:37 <tiffany> 6k lines of code?
19:05:42 <tiffany> isn't lua like 50k?
19:05:49 <ais523> if you're aiming for small interp size
19:06:02 <tiffany> I wrote a super basic programming language in 40 lines of lua once
19:06:09 <ais523> rather than speed or clarity of input
19:06:39 <elliott> 03:02:44: <zzo38> Type of classInstances is classInstances :: Name -> [Type] -> Q [Name] different from the documentation, and the code producing error is $(classInstances ''Num [ConT ''Integer] >>= reify . head >>= runIO . print >> [| 0 |])
19:06:41 <elliott> not a bug
19:06:44 <elliott> you're using an older GHC/TH
19:06:50 <elliott> http://hackage.haskell.org/packages/archive/template-haskell/2.5.0.0/doc/html/Language-Haskell-TH.html has the correct type for that version
19:07:08 <monqy> does zzo logread
19:07:16 <elliott> ?tell zzo38 the docs for classInstances aren't broken; you're just using an older GHC. see http://hackage.haskell.org/packages/archive/template-haskell/2.5.0.0/doc/html/Language-Haskell-TH.html for the documentation of your version
19:07:16 <lambdabot> Consider it noted.
19:07:34 <ais523> my record for small interp is 14 bytes (http://esoteric.voxelperfect.net/wiki/MiniMAX), but it doesn't do I/O and the source is in binary
19:07:35 -!- Ngevd has quit (Ping timeout: 276 seconds).
19:07:48 <tiffany> ._.
19:08:15 <ais523> there's a 36-byte one by someone else which avoids both issues
19:08:35 -!- rottytooth has joined.
19:08:38 <elliott> 03:07:17: <zzo38> OK, I managed to report bug now
19:08:38 <elliott> do I have to comment /there/ too?
19:08:40 <ais523> http://esoteric.voxelperfect.net/wiki/MinISCule
19:08:45 <elliott> hmm, rottytooth rings a bell
19:08:53 <elliott> but I'll `? welcome all the same
19:08:54 <elliott> `? welcome
19:08:55 <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
19:09:04 <monqy> thanks `? welcome
19:09:04 <rottytooth> Hi there
19:09:41 <elliott> oh, he had an actual bug
19:09:43 <elliott> compiler panic
19:09:48 <ais523> hmm, seems calamari's website is down
19:09:59 <monqy> what ghc version though maybe it was fixed?? who knows.....
19:10:06 <elliott> 7.0.3
19:10:34 <ais523> elliott: valgrind panics and reports a bug when running in the Secret Project
19:10:37 <elliott> hmm, I should probably use enumerators for this
19:10:58 <ais523> but that's probably just an effect of the Debugger Repulsion Field
19:11:00 <elliott> ais523: did you report it?
19:11:03 <ais523> no
19:11:07 <elliott> lame :P
19:11:39 <ais523> I'm not convinced the Secret Project counts as a supported platform
19:12:50 <elliott> 04:09:19: <copumpkin> no, most programming (and proof assistants) model an intuitionist (constructive) logic
19:12:57 <elliott> copumpkin: you can always just add LEM as an axiom
19:13:16 <copumpkin> and stop being able to compute things
19:13:18 <ais523> which one's LEM?
19:13:24 <copumpkin> A or NOT A
19:13:28 <ais523> aha
19:13:35 <ais523> you're right
19:13:51 <ais523> now I'm wondering what the double negation shift looks like in Curry-Howard
19:13:54 <copumpkin> elliott: it's fine as long as you're only thinking about truth of statements
19:14:07 <copumpkin> but if you ever want to deal with anything algorithmically it's pretty useless
19:14:25 <ais523> (a basic rule of computer science seminars is, if you ever see someone write f(¬¬A) = ¬¬f(A) on the whiteboard, you run)
19:15:16 <ais523> hmm, OISCs are always going to win, in general, on compiler/interp size, right?
19:15:25 <ais523> as in, a simple OISC will beat a simple more-instruction-set-computer
19:15:28 <elliott> not necessarily
19:15:34 <elliott> ByteByteJump splits into two instructions fairly easily, IIRC
19:15:36 <ais523> and a complex one will typically beat a non-OISC of similar complexity
19:15:41 <elliott> that might be simpler than implementing the combined one
19:15:54 <elliott> because lots of OISCs are basically two instructions in disguise
19:16:01 <elliott> http://esolangs.org/wiki/ByteByteJump#The_two-instruction_ByteByte.2FJump
19:16:10 <elliott> depends on what you're implementing it in ofc
19:17:05 <elliott> 04:14:52: <zzo38> Wikipedia does mention "Correspondence between classical logic and control operators", it has to do with continuations, apparently.
19:17:05 <elliott> v
19:17:06 <elliott> http://okmij.org/ftp/Computation/lem.html
19:19:55 <elliott> ais523: quick, what's a Perl script to print if I have two newlines at the end of a file?
19:20:00 <elliott> as opposed to just one terminating newline
19:20:12 <ais523> to check for double-newline at the end of a file?
19:20:13 -!- Taneb has joined.
19:20:45 <elliott> yes
19:20:54 <ais523> umm... "undef $/; $_=<>; print "ends with double newline\n" if /\n/\n$/s
19:20:56 <ais523> "
19:20:58 <elliott> "Haskell frameworks -vs- Arc for web apps" oh no, someone let the kids into /r/haskell :/
19:21:05 <ais523> err, I screwed up the quoting the program onto IRC
19:21:11 <ais523> undef $/; $_=<>; print "ends with double newline\n" if /\n/\n$/s;
19:21:12 <ais523> there we go
19:21:13 <elliott> thx
19:21:16 <ais523> I think, at least, it's untested
19:21:17 <monqy> people still care about arc?
19:21:33 <monqy> people cared about arc?
19:21:33 <elliott> Backslash found where operator expected at -e line 1, near "/\n/\"
19:21:33 <elliott> (Missing operator before \?)
19:21:33 <elliott> syntax error at -e line 1, near "/\n/\"
19:21:33 <elliott> Substitution pattern not terminated at -e line 1.
19:21:34 <elliott> :-P
19:21:40 <elliott> just need to remove the extra /
19:21:42 <ais523> undef $/; $_=<>; print "ends with double newline\n" if /\n\n$/s;
19:21:46 <ais523> it's actually an extra /
19:21:52 <ais523> oh right, that's what yous aid
19:21:55 <ais523> *you said
19:22:13 <ais523> just assume I'm drunk, it's simpler
19:22:17 <ais523> (I'm not, but I get this way anyway sometimes)
19:22:41 <Taneb> I need to change my nick permanently
19:22:48 -!- Taneb has changed nick to NGEvD.
19:22:53 <monqy> ngevd
19:22:59 <elliott> taneb: why
19:23:01 -!- NGEvD has changed nick to Ngevd.
19:23:19 <monqy> whos taneb
19:23:22 <elliott> taneb is nicer than ngevd imho
19:23:24 <elliott> as
19:23:25 <elliott> a name
19:23:37 <Ngevd> :t "Ping"
19:23:37 <lambdabot> [Char]
19:24:07 <elliott> "I see you didn't list javascript. For prototyping, it's hard to imagine how another existing language would make it much faster as it can be done with jQuery currently."
19:24:15 <elliott> jQuery: a good language to develop web apps in
19:26:04 -!- Ngevd has quit (Remote host closed the connection).
19:26:19 <monqy> bye ngevd
19:26:24 <elliott> rip ngevd
19:26:25 <elliott> died as he lived
19:26:29 <monqy> ngevd
19:27:18 <elliott> hmm, there are too many iteratee libraries :'(
19:27:36 <monqy> :(
19:28:14 -!- Ngevd has joined.
19:28:32 <elliott> i cannot decide between iteratee, enumerator, and iterIO :'(
19:28:58 <Ngevd> Right, Ngevd is what I am called on IRC now
19:29:05 <Ngevd> Unless I change it
19:29:11 <elliott> im dont like ngevd
19:29:13 <elliott> whym not taneb :(
19:29:16 <Ngevd> Taneb|Kindle doesn't like it
19:29:23 <monqy> ngevd|kindle
19:29:23 <elliott> why doesnt, he like it
19:29:52 <elliott> whym doesnt
19:29:54 <elliott> he like it
19:29:55 <elliott> :'(
19:29:56 <Ngevd> Awkward to type on a Kindle
19:30:23 <elliott> and
19:30:24 <elliott> ngevd isn't
19:30:53 <Ngevd> No, Ngevd is
19:30:55 <Ngevd> Taneb isn't
19:31:02 <elliott> oh
19:31:03 -!- dell has joined.
19:31:04 <elliott> this sounds
19:31:07 <elliott> like superiority for taneb
19:31:08 <elliott> hi dell
19:31:09 <elliott> `? welcome
19:31:10 <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
19:31:50 <dell> i have simply dropped the idea of llvm-bf converter....i think asm-bf will be awesome!
19:31:52 <dell> ?
19:32:07 <elliott> oh
19:32:09 <elliott> were you dell last time
19:32:13 <elliott> i think you had a different nick then
19:32:13 <Ngevd> asm?
19:32:15 <ais523> hmm, that seems like a decent idea
19:32:18 <ais523> although could be difficult
19:32:26 <elliott> ais523: oh, i told dell to talk to you about gcc-bf, they were asking about it
19:32:41 <elliott> they wanted to do llvm-bf and I said to talk to you because you had considered it
19:32:41 <elliott> etc.
19:32:47 <dell> ais523:real mind fucker project
19:32:48 <elliott> but I guess that doesn't matter now if... what is asm-bf
19:32:56 <elliott> are you trying to convert xeightsix asm into bf
19:32:57 <dell> assembler to brainfuck
19:33:01 <elliott> which assembler
19:33:02 <dell> x86
19:33:05 <elliott> ah
19:33:07 <elliott> good
19:33:08 <ais523> really, BF isn't that bad, despite its name
19:33:10 <elliott> luck with that
19:33:21 <ais523> although x86 is possibly going to make life hard for yourself
19:33:28 -!- Nisstyre has quit (Ping timeout: 260 seconds).
19:33:35 <elliott> that makes it easier to drop, which is a good quality in projects
19:33:35 <ais523> I wonder what the simplest asm would be? Redcode?
19:33:40 <elliott> ais523: OISC, duh
19:33:42 <dell> i find llvm a little too complex to parse
19:33:47 <elliott> dell: LLVM has an API...
19:33:49 <ais523> I don't consider OSICs to be asms
19:33:59 <elliott> you could just write a backend the proper way
19:34:01 <elliott> like ais523 was doing with gc-cbf
19:34:03 <elliott> gcc-bf
19:34:08 <ais523> elliott: I looked into llvm-bf
19:34:18 <ais523> LLVM makes so many assumptions that aren't true about BF, I was heartbroken
19:34:25 <ais523> whereas gcc tries not to
19:34:32 <elliott> ais523: however hard it is, doing it by manually parsing LLVM IR is never going to be easier than writing a backend
19:34:34 <ais523> admittedly, the code doesn't actually /work/
19:34:42 <ais523> elliott: right, that much is obvious
19:34:45 <ais523> so I didn't need to comment on it
19:35:01 <ais523> and just argued with the most recent statement that wasn't
19:35:18 -!- Ngevd has quit (Read error: Connection reset by peer).
19:35:18 -!- Ngevd_ has joined.
19:35:35 <elliott> what was that statement?
19:35:49 <elliott> I already told dell that you considered llvm-bf more of a pain to do than gcc-bf
19:35:53 <elliott> last time they were here
19:35:57 -!- zzo38 has joined.
19:36:02 <ais523> that llvm was worth using at all
19:36:40 <zzo38> LLVM is better designed than C, in my opinion.
19:36:40 <lambdabot> zzo38: You have 1 new message. '/msg lambdabot @messages' to read it.
19:36:52 <zzo38> @messages
19:36:52 <lambdabot> elliott said 29m 36s ago: the docs for classInstances aren't broken; you're just using an older GHC. see http://hackage.haskell.org/packages/archive/template-haskell/2.5.0.0/doc/html/Language-
19:36:52 <ais523> zzo38: I'm not sure that's a good comparison
19:36:52 <lambdabot> Haskell-TH.html for the documentation of your version
19:37:24 <ais523> it's like comparing gcc's internal intermediate representation with ADA
19:37:30 <ais523> *Ada
19:38:06 <elliott> I think Ada is better than cheese.
19:38:30 <dell> these days i get involved in college crap so much that not getting enough time
19:38:53 <zzo38> ais523: What I mean is, with a good macro system and literate programming environment, I think LLVM would be a good programming language to program in, instead of being limited to C.
19:38:59 <dell> i am still wondering whether to do this in python or C
19:39:08 <elliott> do it in asm MORE HARDCORE YEAAAAAAAAAAAAAAAAAAAAAH
19:39:10 <zzo38> dell: Doing what in Python or C?
19:39:17 <ais523> zzo38: I don't, it'd be rather inflexible and nonportable
19:39:23 <dell> x86 asm to bf
19:39:47 <ais523> I suppose you could write it in 32-bit LLVM
19:40:01 <ais523> dell: C is a really inappropriate lang for that, and Python is almost as bad
19:40:16 <ais523> I don't think I'd consider doing that in anything other than a functional language
19:40:19 <ais523> although, I wouldn't really consider it at all
19:40:27 <elliott> <me> haskell <ais> ocaml
19:40:30 <Gregor> dell: If you're gonna do an ASM->BF, may I recommend MIPS.
19:40:35 <elliott> <zzo> FORTH
19:40:43 <ais523> elliott: oh, Haskell and OCaml are both pretty similar for that sort of thing
19:40:46 <Ngevd_> I AM CURIOUS 'BOUT SOMETHING
19:40:56 <ais523> even though they're different languages in general
19:40:58 <Gregor> Ngevd_: How you got that stylish underscore?
19:40:58 <elliott> Gregor: He's set on x86, since that is surely easier than the LLVM-BF he's given up on.
19:41:04 <Gregor> elliott: lol
19:41:08 <Ngevd_> What do pythonbashers generally think of Boo?
19:41:15 <ais523> they generally haven't heard of it
19:41:22 <ais523> at least, if you count me as the main Pythonbasher here
19:41:25 <Gregor> Ngevd_: Mostly, "wtf is Boo"
19:41:46 <elliott> i looked at boo once it is so boring
19:41:55 <elliott> it's PYTHON... but SLIGHTLY DIFFERENT...
19:41:57 <elliott> and ONLY FOR .NET
19:42:02 <elliott> THIS IS WHAT THE WORLD NEEDS
19:42:05 <Ngevd_> It's strongly typed python, essentially
19:42:12 <Gregor> Yeah, "for CLI" pretty much means "I love sucking Microsoft's cock"
19:42:14 <elliott> oh is it strongly typed
19:42:17 <Gregor> Sooooooo, a big no on that one.
19:42:20 <elliott> it's PYTHON... but SLIGHTLY BETTER
19:42:21 <ais523> my objections to Python have pretty much nothing to do with its typing discipline
19:42:31 <ais523> there's a place for both statically and dynamically typed languages
19:42:40 <elliott> a, b = 0L, 1L #The 'L's make the numbers double word length (typically 64 bits)
19:42:40 <elliott> as opposed to "bignum", like Python
19:42:42 <elliott> this is kind of like Erlang
19:42:47 <elliott> let's use all of Prolog's syntax but none of its semantics
19:42:50 <ais523> (I sort of subscribe to the viewpoint that "strongly typed" has been used to mean so many different things that it's meaningless)
19:43:15 <elliott> ais523: IMO, the place for dynamically-typed languages is as a subset of statically-typed ones
19:43:26 <elliott> static and dynamic typing are basically two completely different things, anyway
19:43:29 <elliott> comparing them is near-meaningless
19:43:40 <elliott> if statements are a kind of dynamic typing, really
19:44:18 <copumpkin> I like to call dynamic types "monoidal programming"
19:44:22 <ais523> for compiled languages, the distinction is easy: a statically-typed language is one where, after compilation, you can take any variable in the program and know what type it is without having to actually run the program
19:44:39 <copumpkin> languages are not compiled
19:44:44 <copumpkin> implementations are
19:45:33 <ais523> well, yes
19:45:48 <ais523> languages that can reasonably directly be compiled then, I guess
19:45:57 <zzo38> But one thing I think missing in LLVM is explicit unions. You can still do unions by what it has, but I would prefer an explicit type for unions (this can also allow certain optimizations and analysis to be done)
19:47:00 -!- dell has quit (Quit: Leaving).
19:48:16 <zzo38> You could check many things at runtime, even in a system that doesn't actually have pointers, by representing a pointer by an object ID and offset. Object IDs are garbage collected. If you try to dereference a pointer with an invalid offset or invalid object ID, you get an error message. Same thing when using unions incorrectly. You can use it for both static and dynamic analysis.
19:52:14 -!- Nisstyre has joined.
19:55:38 -!- Ngevd_ has quit (Read error: Connection reset by peer).
19:59:15 <elliott> Hey Vorpal, you get to be the substitute fizzie
20:02:07 -!- sllide has joined.
20:02:25 <elliott> Pah
20:03:40 -!- Ngevd has joined.
20:03:43 <elliott> ais523: Go wake fizzie up
20:04:04 <ais523> how? it's not like he's in the room
20:04:21 <elliott> Well then find the room he's in and be in it so that you can wake him up
20:04:29 <ais523> he'd probably wake up naturally first
20:04:43 <elliott> That's for the universe to know and you to find out
20:07:46 <elliott> Hmm, seems nobody really uses iterIO
20:07:52 <elliott> But maybe everyone is just a bad person???
20:08:08 -!- Ngevd has quit (Ping timeout: 252 seconds).
20:10:55 <elliott> monqy: Hey, pick the library for me. It is your duty.
20:12:48 <monqy> :(
20:12:55 <monqy> i know nothjing about their diffierences
20:13:05 <monqy> never even heard of the ones that aren';t iteratee
20:13:12 <elliott> Well, it's pretty much between enumerator and iterIO :-P
20:13:20 <elliott> enumerator is like iteratee but more things use it and it's simpler.
20:13:23 <elliott> iterIO is different.
20:13:35 <elliott> And has a lot of seeming advantages, e.g. http://www.scs.stanford.edu/~dm/iterIO/, http://hackage.haskell.org/packages/archive/iterIO/0.1/doc/html/Data-IterIO.html
20:13:43 <elliott> But I do not know :'(
20:14:04 <elliott> "Because of CPS, iteratee should be capable of delivering the best performance of the three iteratee packages. A disadvantage of iterIO's approach is that every invocation of lift must be propagated all the way up the call chain, where a small amount of overhead is added for each enclosing catchI or similar call. While iterIO can handle most successful IterR outcomes and caught exceptions locally without popping back up the call stack, there is a
20:14:04 <elliott> lso potentially overhead from actually checking that the outcome was successful at each bind site. (GHC's inliner may be able to avoid the check in some cases.)
20:14:04 <elliott> However, iteratee lacks several features of iterIO; offering these features would likely reduce the benefits of CPS and complicate code. For instance, there is no way to execute a pure iteratee without monadic actions (the benefit touted above and described below for LL(*) parsing). Moreover, iteratee's exception mechanism discards the current location in the input stream, making it unsuitable for failed parse alternatives. IterIO provides a gene
20:14:10 <elliott> ral control mechanism to make arbitrary requests from enumerators (such as seek, tell, getpeername, get SSL information, etc.); iteratee instead overloads the exception mechanism for control purposes, which prevents control operations from returning values. Thus, while iteratee can implement seek, it cannot, for instance, implement tell.
20:14:14 <elliott> The enumerator package's approach is closer to iterIO's, but makes every iteratee into a monadic action in the underlying monad m:
20:14:17 <elliott> -- From the enumerator package:
20:14:18 <elliott> newtype Iteratee a m b = Iteratee { runIteratee :: m (Step a m b) }
20:14:21 <elliott> Here Step is similar to iterIO's IterR type, but the m wrapper disallows iterIO's LL(*) parsing tricks. It also causes gratuitous invocation of m's bind function, which can be expensive when using stacks of monad transformers. Furthermore, enumerator discards the input state on all errors, making it impossible to resume from failures that leave the input in a known state (such as a parsing lookahead failure)
20:15:37 <elliott> "
20:16:01 <elliott> iterIO looks like a Fancy Better thing but I don't know if I should use it since it only has one release and nobody else has used it...
20:16:39 <monqy> that is not a good reason not to use it????? maybe????????
20:16:49 <elliott> monqy: but it might have lots of bugs :(
20:16:55 <elliott> Whereas enumerator is used in a lot of high-profile packages like Yesod
20:17:07 <elliott> maybe iterIO will be really slow or something...
20:17:23 <Vorpal> <elliott> Hey Vorpal, you get to be the substitute fizzie <-- ?
20:17:51 <elliott> Vorpal: Turns out I could answer my own question
20:17:54 <elliott> Well, maybe
20:18:05 <elliott> I was wondering how many packets a Minecraft client would send before it waits for the server to respond before sending any more
20:18:09 <elliott> And I think the answer is just the login packets
20:18:43 <fizzie> I'm not going to be non-away today, sorry.
20:18:56 <fizzie> (Today I've been mostly Portal.)
20:19:26 <elliott> So irresponsible.
20:19:29 <fizzie> My guess is also that it just sends the login, if you have a completely quiet server.
20:19:35 <elliott> Your people NEED you.
20:20:06 <fizzie> Don't know about the case where you have a server that goes non-responsive in the middle of the game; in that case I think it might keep on sending movement stuff until some sort of a timeout.
20:23:58 <elliott> fizzie: The usecase is pretty much "testing my client parser stuff before writing the server packet code". :p
20:24:07 <elliott> Whereby code, I mean "protocol.txt-alike".
20:24:13 -!- sllide has quit (Ping timeout: 260 seconds).
20:24:21 <elliott> So I think I'll just write the server stuff.
20:24:54 -!- oerjan has joined.
20:25:15 <elliott> heloerjan
20:25:29 <elliott> `log hell?oerjan
20:25:33 <HackEgo> 2011-09-18.txt:20:25:15: <elliott> heloerjan
20:25:50 <oerjan> *gasp*
20:25:53 <elliott> :(
20:25:54 <elliott> `log hell?oerjan
20:25:56 <ais523> `pastelogs hell?oerjan
20:25:57 <elliott> i swear ive done it before
20:25:57 <HackEgo> 2011-09-18.txt:20:25:33: <HackEgo> 2011-09-18.txt:20:25:15: <elliott> heloerjan
20:25:59 <HackEgo> http://codu.org/projects/hackbot/fshg/index.cgi/raw-file/tip/paste/paste.22953
20:26:01 <elliott> ais523: so cheating
20:26:07 <elliott> 2011-08-31.txt:20:45:31: <elliott> heloerjan
20:26:09 <elliott> :')
20:26:11 <Lymee> `log `log
20:26:12 <HackEgo> Mmmmm ... no.
20:26:16 <Lymee> >:c
20:26:22 <Lymee> I'll get you next time.
20:26:25 <ais523> 2011-08-31.txt:20:45:31: <elliott> heloerjan
20:26:26 <ais523> 2011-09-18.txt:20:25:15: <elliott> heloerjan
20:26:29 <ais523> once before
20:26:30 <elliott> Lymee: HackEgo doesn't like talking to you any more.
20:26:37 <elliott> ais523: yes, that's what I just quoted :P
20:26:45 <monqy> does `log `log not work anymore?
20:26:55 <ais523> I was wondering about it
20:27:02 -!- Ngevd has joined.
20:27:04 <ais523> but I think there's just some anti-Lymia feature
20:27:07 <oerjan> too bad there is no way to find out
20:27:12 <ais523> just like the bots don't talk to each other
20:27:15 <Ngevd> Hello!
20:27:20 <ais523> hi
20:27:21 <ais523> `log fungot
20:27:22 <oerjan> hello
20:27:22 <fungot> ais523: mr president, mrs soltwedel-schfer, perhaps i might continue with the member states, including austria. only by doing so the commission is not allowed to be marketed. this parliament has judged the customs union the economic benefits of the use of the best food industries in the same way as heterosexuals. nor can you say who is to carry out an analysis of the market.
20:27:25 <HackEgo> 2010-05-02.txt:17:50:20: <fungot> http://git.zem.fi/fungot/blob/HEAD:/fungot.b98
20:27:26 <elliott> ais523: it's an ignore list
20:27:30 <elliott> `log `log
20:27:32 <elliott> still works
20:27:34 <HackEgo> 2011-09-17.txt:13:54:08: <itidus21> `log recogni
20:27:35 <ais523> see what I mean? fungot didn't respond to hackego's mention of its name
20:27:36 <fungot> ais523: as to the " no" campaign was not pushing for a " no" to drugs and arms, which originates with this criminal structure in fnord that is alleged to have been in the vanguard for change as mr martens said, but it was, but she has managed to flout the treaty and widened in the concept of reducing the emission of greenhouse gases ( of which parliament forms a part of these amendments were adopted by the iter. i shall only gi
20:27:54 <ais523> ^ul (`log ^ul)S
20:27:54 <fungot> `log ^ul
20:27:58 <HackEgo> No output.
20:27:58 <elliott> "the " no" campaign was not pushing for a " no" to drugs and arms"
20:28:02 <fizzie> elliott: You could of course dump-to-a-file a mcmap session (it's just one line: "fwrite(net_dpacket.p->bytes, 1, net_dpacket.p->size, clientdumpfile);" in the PACKET_FROM_CLIENT case of proxy.c) and then test your thing with nc localhost 26655 < blah.dump. But since you need to do both directions at some point anyway...
20:28:02 <elliott> just say no to legs
20:28:08 <ais523> hmm, although hackego does respond to fungot, it seems
20:28:11 <fungot> ais523: the report on the current uclaf to be strengthened at european level. against that we have had in getting information with regard to monetary policy, a factor of six. i am asking, under rule 115, that we should offer help to alleviate the effects of global warming caused by concentrations of dangerous substances. i can reassure mrs keppelhoff-wiechert: the object of discussion at the intergovernmental conference, mr pre
20:28:14 <ais523> ^ul (`log \^ul)S
20:28:14 <fungot> `log \^ul
20:28:17 <HackEgo> 2011-02-10.txt:16:55:32: <Deewiant> elliott: On fungot's ^ul interpreter, we're talking 10s vs 15s or something
20:28:19 <elliott> fizzie: Ooh, clever.
20:28:26 <elliott> fizzie: It's easier than that though isn't it
20:28:30 <elliott> fizzie: I can just use nc or whatever
20:28:36 <elliott> nc mcserver port | nc -l port
20:28:39 <elliott> Erm
20:28:43 <elliott> Except with tee in there
20:28:46 <elliott> nc mcserver port | tee log | nc -l port
20:28:49 <elliott> Then connect to that with MC
20:29:20 <fizzie> No, because that won't feed the output of the final 'nc' back to the stdin of the first 'nc'.
20:29:27 <fizzie> And you need bidirectional forwarding there.
20:29:46 <oerjan> ^ul (!echo hi)
20:29:46 <ais523> fizzie: just use a fifo, and connect it in a loop
20:29:46 <elliott> fizzie: That just needs my "tie" tool.
20:29:50 <elliott> ais523: No FIFO required
20:29:51 <ais523> I do that all the time when making IRC bots
20:29:59 <oerjan> ^ul (!echo hi)S
20:29:59 <fungot> !echo hi
20:30:01 <EgoBot> hi
20:30:03 <elliott> tie is just pipe(), dup[two], and an exec
20:30:03 <ais523> elliott: indeed, but it's the easiest way to do it with standard UNIX commands
20:30:12 <elliott> and it just takes a shell line
20:30:18 <elliott> ais523: yeah, 'strue
20:30:19 <ais523> I wrote something tie-like in my first degree
20:30:33 <elliott> It was originally more complex because I thought it needed to take a list of shell statements to pipe
20:30:33 <ais523> and then discovered mkfifo, which saves having to get a separately-compiled program involved
20:30:37 <elliott> but I realised you could just join them with |
20:30:44 <elliott> ais523: tie is more elegant though :P
20:30:51 <elliott> I want a whole suite of pipe-wrangling tools
20:30:57 <ais523> heh, I wrote one
20:31:21 <ais523> the most general one there was "backpipe" which gave a bunch of FDs connected to each other, so that you could connect programs in arbitrary ways
20:31:30 <ais523> but it turns out to do the same thing as mkfifo, just more confusingly
20:32:10 <elliott> ais523: well, catbus connects each command in a list to every other command
20:32:17 <elliott> I never implemented it, mostly because I could never find a use for it
20:32:26 <elliott> nc -e can be recreated with tie, you don't need catbus
20:32:29 <elliott> tie 'nc server port | prog'
20:32:29 <elliott> or
20:32:31 <elliott> tie 'prog | nc server port'
20:32:42 <elliott> (you can rotate the pipeline passed to tie arbitrarily with no semantic effect)
20:33:20 <ais523> prog < fifo | nc server port > fifo
20:33:29 <elliott> yeah but that's grosser
20:33:31 <ais523> although it's probably a little neater with a UUOC
20:33:50 <Gregor> I pretty much just use socat.
20:33:59 <Gregor> It's major overkill for most things, but soooo delicious.
20:34:10 <elliott> socat is awful.
20:34:19 <Gregor> elliott: YOU'RE AWFUL
20:34:29 <elliott> But at least it's not GNU netcat, which is just plain defamation of the netcat name.
20:34:36 <elliott> $ mkfifo fifo; nc p.nerd.nu 25565 <fifo | nc -l 9999 | tee fifo >log
20:34:36 <elliott> This looks right, right?
20:34:52 <elliott> ("log" is meant to end up containing everything the Minecraft client sent; it will connect to port 9999)
20:35:56 <elliott> hmm... I can connect fine, at least
20:35:59 <elliott> s/ dollar sign//
20:36:00 <fizzie> I would've done "tee log >fifo", but there's no particular reason.
20:36:21 <ais523> fizzie: there is for interactive applications, I think; tee ends up buffering
20:37:02 <elliott> ais523: oh, it does?
20:37:03 <fizzie> I would hope bash can do it with an anonymous pipe too; if with nothing else, then with coproc, but coproc's horrible. I would hope you could get by with just "nc server port <&3 | nc -l listenport | tee logfile > &4" + some magic to make the pipe.
20:37:07 <elliott> ais523: will it flush once the nc -l quits?
20:37:19 <ais523> I don't know, but I hope so
20:37:49 <elliott> -rw-r--r-- 1 elliott elliott 41K 2011-09-18 21:38 log
20:37:49 <elliott> seems to have worked
20:37:51 <elliott> smaller than I was expecting, too
20:38:05 <elliott> although mostly ^As
20:38:15 <fizzie> Client-to-server direction is a lot less costly too.
20:38:19 <elliott> (Minecraft sends hundreds of pings per second for no obvious reason)
20:38:50 <elliott> I should probably take this to -minecraft to avoid annoying ais523, but at least it's fairly esoteric
20:39:16 <ais523> elliott: oh no, you've made me rage at SDL's event loop again
20:39:23 <elliott> wat
20:39:27 <ais523> I suppose I just hate tick-based event loops
20:39:29 <elliott> oh, right
20:39:39 <elliott> have I mentioned that @'s event loop is THE BEST? :-P
20:39:44 <elliott> (it doesn't have one)
20:39:44 <ais523> and much prefer the schedule-future-action-then-wait-until-next-scheduled-action version
20:40:07 <ais523> elliott: well, how does @ idle the processor if all process-equivalents are sleeping simultaneously, for whatever reason?
20:40:23 <oerjan> <Taneb> My initials would have been N.G.E.vD.
20:40:27 <ais523> I suppose, it doesn't have an explicit event loop, but it still needs a scheduler
20:40:33 <ais523> which has the same sort of issues that an event loop does
20:40:39 <oerjan> Nathan Galactus Elliott von Death
20:41:20 <Gregor> fizzie: I wonder ... if you did have a very high-quality scanner, COULD you make a converter from a scanned LP to a super-low-quality audio file? I wonder if you could guess the pits based on something.
20:41:57 <elliott> "Additional to the result of get it returns the number of consumed bytes and the rest of the input." No it doesn't, you're lying :-(
20:42:02 <elliott> Gregor: I think someone did that
20:42:14 <elliott> same person as the person who did "use a CRT as a radio transmitter" maybe?
20:42:17 <elliott> it sounded quite bad
20:42:27 <Ngevd> Evidence that elliott is my evil twin:
20:42:28 <elliott> <ais523> elliott: well, how does @ idle the processor if all process-equivalents are sleeping simultaneously, for whatever reason?
20:42:28 <fizzie> http://www.phys.huji.ac.il/~springer/DigitalNeedle/
20:42:33 <fizzie> That seems to be the first likely hit.
20:42:37 <elliott> ais523: it's more like, to do event things you just register handlers at the low elvel
20:42:39 <elliott> level
20:42:42 <Ngevd> We both live in the same town, despite never having met
20:42:49 <elliott> ais523: or if you block, then your continuation just gets inserted as an event handler, and your (lightweight) thread killed
20:42:56 <Ngevd> We both have some connection to the name "Elliott"
20:43:06 <ais523> elliott: but you're going to need to implement the thing that dispatches events to the handler
20:43:12 <elliott> ais523: so if you block on waiting for the next event, your thread's continuation is installed as an event handler, and the thread is killed
20:43:19 <elliott> ais523: not really
20:43:22 <ais523> yep, I understand that much
20:43:28 <ais523> but something has to call the event handler
20:43:29 <elliott> ais523: /causing/ the event causes each handler to be spawned as a thread
20:43:35 <ais523> say a process does sleep(1000)
20:43:44 <ais523> what's responsible for calling the continuation it gives once the sleep ends?
20:43:47 <elliott> so, e.g., what does writing to a pipe do? spawn off all the read-handlers for that pipe with the data, nothing else
20:43:53 <elliott> ais523: the timer driver
20:44:00 <ais523> ah, OK
20:44:09 <ais523> so how does the timer driver idle when it doesn't have any timings to give right now?
20:44:11 <elliott> presumably you'd abstract over it to offer sleep to processes
20:44:12 <ais523> it can't do the equivalent of a sleep
20:44:29 <ais523> as it can't ask itself
20:44:37 <elliott> ais523: well, how do you talk to hardware timers nowadays?
20:44:40 <Ngevd> When questioned about this situation, elliott suggested a fight to the death, I suggested something more civilized
20:44:47 <elliott> presumably, there's an interface that doesn't involve polling constantly
20:44:52 <Ngevd> I have facial hair
20:44:55 <fizzie> Elsewhere, someone wanted a "line-in to CD" adapter in the same vein as those "line-in to tape" things you can buy to plug your MP3 player to an old tape-only car stereo; now *there's* quite a technical challenge.
20:44:56 <elliott> it might use interrupts
20:44:57 <Gregor> elliott, fizzie: Yessssssssssss
20:44:58 <ais523> elliott: ah, OK, it's triggered by interrupts?
20:45:01 <elliott> which are basically hardware event handlers
20:45:09 <oerjan> Ngevd: goatie?
20:45:11 <elliott> fizzie: that seems to be it
20:45:14 <oerjan> *goatee
20:45:16 <elliott> ais523: probably
20:45:28 <ais523> fizzie: ouch, that sounds basically impossible
20:45:35 <ais523> I think it'd have to be wireless
20:45:40 <Ngevd> oerjan: No, that requires more hair
20:45:42 <Gregor> lol, it's so gloriously bad.
20:45:48 <oerjan> ah.
20:45:48 <ais523> but even then it'd be basically impossible
20:45:49 <Gregor> But it is recognizably music!
20:45:51 <elliott> Gregor: You just need to anti-phaser it
20:45:56 <elliott> I presume that's possible
20:45:58 <elliott> Uh
20:45:59 <elliott> Phaser
20:46:04 <elliott> I mean the effect that you can hear on the first recording
20:46:13 <Ngevd> Some time in 2008-2009, elliott or someone with the same name as elliott kicked someone in the face
20:46:29 <elliott> that probably wasn't me
20:46:31 <Ngevd> Someone who later became good friends with me
20:46:36 <elliott> well, if it /was/ me, I don't remember it
20:46:54 <Gregor> The "someone" in that sentence is Taneb/Ngevd.
20:46:56 <ais523> there are quite a lot of people called elliott in the world
20:46:57 <elliott> ais523: anyway, @ handles push-based things better than things you need to poll, I think
20:47:03 <ais523> we've had two of them here
20:47:05 <elliott> ais523: but you can model a pull as a push
20:47:18 <Gregor> My cat just LEAPED off the windowsill, halfway across the room.
20:47:22 <Gregor> She had no reason at all to do that.
20:47:26 <Ngevd> Someone called Elliott Hird?
20:47:28 <elliott> ais523: just tell the driver you'd like to know X, and give a handler
20:47:37 <ais523> the other one had a different surname
20:47:38 <elliott> or whatever
20:47:44 <Gregor> Ngevd: The later "someone" I meant :P
20:47:55 <elliott> Gregor: She had the most important reason: she's a cat.
20:48:00 <Gregor> elliott: Tre.
20:48:01 <Gregor> *True
20:48:07 <Ngevd> That was neither me nor elliott
20:48:34 <ais523> Ngevd: are you claiming that you're the real Elliott Hird, and elliott is just some sort of imposter who happens to have the same name as you?
20:48:36 <fizzie> ais523: Well, I suppose it might depend on the structure of the reader. You don't really need a rotating fake-disc, "just" some sort of a fixed thing that reads the rotation of the central spine, and a thing clamped firmly on top of the radially moving read-head, that can both read the radial distance as well as change its reflectivity. Still.
20:48:45 <Ngevd> ais523: My name is Nathan
20:49:06 <Ngevd> ais523: I am claiming that elliott is my evil twin
20:49:08 <ais523> fizzie: I'm thinking more about the issue of connecting wires through all possible interfaces for inserting a CD into a reader
20:49:15 <ais523> also, you'd have to know where the read-head was
20:49:33 <fizzie> ais523: Well, yes, it'd work in pretty much one CD player model only.
20:49:37 <ais523> and it could be at any place rotationally around the disk
20:49:40 <ais523> oh, I see
20:49:44 <ais523> I thought you meant a general one
20:49:45 <olsner> hmm, do evil people think that good people are evil?
20:49:51 <elliott> ?hoogle (a,b) -> (b->c) -> (a,c)
20:49:51 <lambdabot> Data.Graph.Inductive.Query.Monad mapSnd :: (a -> b) -> (c, a) -> (c, b)
20:49:51 <lambdabot> Control.Arrow (>>^) :: Arrow a => a b c -> (c -> d) -> a b d
20:49:51 <lambdabot> Data.Graph.Inductive.Query.Monad (><) :: (a -> b) -> (c -> d) -> (a, c) -> (b, d)
20:49:54 <fizzie> Well, a general one would of course be more desirable.
20:49:57 <elliott> gah
20:50:00 <elliott> Deewiant:
20:50:16 <Deewiant> flip second
20:50:27 <elliott> Deewiant: I want it flipped :P
20:50:29 <elliott> I'm trying to write
20:50:31 <elliott> | otherwise = do
20:50:32 <elliott> (a, dump') <- runGetState (get :: Get ClientPacket) dump 0
20:50:32 <elliott> (a:) <$> parseDump dump'
20:50:34 <elliott> nicerly
20:50:34 <olsner> (e.g. when there's an evil twin, does the evil twin think he has a good twin or that his good twin is his evil twin?)
20:50:57 <elliott> second parseDump $ runGetState (get :: Get ClientPacket) dump 0
20:51:05 <elliott> then I need (a,[a]) -> [a]
20:51:11 <elliott> oh hmm
20:51:16 <elliott> second parseDump <$> runGetState (get :: Get ClientPacket) dump 0
20:51:19 <elliott> uncurry (:) . second parseDump <$> runGetState (get :: Get ClientPacket) dump 0
20:51:19 <elliott> I think
20:51:20 <fizzie> ais523: "Perhaps if you had some sort of a separate CD-shaped medium upon which you could (in advance) "print" the required impressions, maybe with some sort of a laser... uh, wait."
20:51:21 <Deewiant> ?ty uncurry (:)
20:51:22 <lambdabot> forall a. (a, [a]) -> [a]
20:51:45 <Lymee> :t (:)
20:51:46 <lambdabot> forall a. a -> [a] -> [a]
20:51:55 <Lymee> Oh that
20:52:09 <Lymee> :t fix(:)
20:52:09 <lambdabot> Occurs check: cannot construct the infinite type: a = [a] -> [a]
20:52:10 <lambdabot> Probable cause: `:' is applied to too few arguments
20:52:10 <lambdabot> In the first argument of `fix', namely `(:)'
20:52:10 <elliott> Main.hs:13:38:
20:52:10 <elliott> Couldn't match expected type `[ClientPacket]'
20:52:10 <elliott> with actual type `Either String [ClientPacket]'
20:52:10 <elliott> Expected type: ByteString -> [ClientPacket]
20:52:10 <elliott> Actual type: ByteString -> Either String [ClientPacket]
20:52:14 <elliott> Deewiant: Not quite :(
20:52:15 <Lymee> :t fix(flip :)
20:52:16 <lambdabot> forall (f :: * -> *) a b. (Functor f) => [f (a -> b) -> a -> f b]
20:52:18 <elliott> I think I do need something monadic
20:52:39 <oerjan> <olsner> hmm, do evil people think that good people are evil? <-- at least they pretend to think that.
20:52:49 <Lymee> @hoogle fix
20:52:50 <lambdabot> Data.Function fix :: (a -> a) -> a
20:52:50 <lambdabot> Control.Monad.Fix fix :: (a -> a) -> a
20:52:50 <lambdabot> module Control.Monad.Fix
20:52:57 <oerjan> <SgeoN1> Why do electronics disintegrate in my hands?
20:52:58 <Ngevd> Not enough people are signing my epetition
20:53:01 <oerjan> pauli effect?
20:55:09 -!- ais523 has quit (Remote host closed the connection).
20:56:29 <oerjan> a non-spam esoforum message appears!
20:57:36 <monqy> of course it's a brainfuck derivative.
20:58:22 <oerjan> :t fix.(:)
20:58:22 <lambdabot> forall a. a -> [a]
20:58:39 <monqy> repeat?
20:58:42 <oerjan> yep
20:59:09 <oerjan> :t fix.(++) -- cycle
20:59:10 <lambdabot> forall a. (Monoid a) => a -> a
20:59:16 <oerjan> ...or that.
20:59:24 <monqy> mcycle
21:00:16 <elliott> micyle
21:00:40 <zzo38> olsner: I would think you cannot tell the answer to "when there's an evil twin, does the evil twin think he has a good twin or that his good twin is his evil twin?" in general; you need to determine by each specific case
21:00:41 <Lymee> > head 20 $ fix.(:) 1
21:00:42 <lambdabot> Couldn't match expected type `a -> a' against inferred type `[t]'
21:01:02 <oerjan> Lymee: precedence error
21:01:07 <Lymee> > take 20 $ fix.(:) 1
21:01:08 <lambdabot> Couldn't match expected type `[a -> a]'
21:01:08 <lambdabot> against inferred type `[t] ...
21:01:13 <Lymee> > take 20 $ (fix.(:)) 1
21:01:15 <lambdabot> [1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1]
21:02:10 <oerjan> :t fix.(>>) -- forever
21:02:11 <lambdabot> forall (m :: * -> *) a b. (Monad m) => m a -> m b
21:09:08 <elliott> gah
21:09:49 <elliott> cereal's error messages are _not_ helpful.
21:12:07 <elliott> fizzie: wait, Minecraft prefixes the length of strings in /codepoints/?
21:12:08 <elliott> not /bytes/?
21:12:22 <elliott> THANK GOD, IT ALMOST AVOIDED USING LENGTH PREFIXES!
21:12:33 <elliott> IT WAS ALMOST SIMPLE TO PARSE THIS ONE FIELD TYPE!!!! ALMOST!!
21:12:55 <monqy> minecraft
21:13:07 <elliott> OK, this has ceased to be esoteric, now it's just annoying, I'm going to -minecraft to avoid incurring ais' wra- oh, he's gone
21:13:13 <elliott> STAYING HERE THEN HAHAHAHAHAHAHA
21:13:47 <elliott> hmm, apparently all the strings are 240 bytes or less, which might come in handy...
21:14:51 <elliott> oerjan: "Note: this structure is not thread safe. It is not safe to use value of this type simultaneously from multiple threads."
21:14:57 <elliott> oerjan: suffer with me pls
21:15:03 <elliott> (yes, it has _pure_ functions operating on it)
21:15:07 <elliott> "pure"
21:15:31 <elliott> OK, well at least it's UCS-2, so there's no surrogate.
21:15:32 <elliott> surrogates.
21:15:37 <elliott> So it does /kind of/ prefix the length in bytes.
21:18:08 <elliott> oh my, 1407808682066025 is a very long string
21:18:23 <elliott> oh
21:18:24 <elliott> hey monqy
21:18:30 <monqy> hii
21:18:39 <elliott> how many bits are there in a short? hint: the answer is not 64
21:18:54 <monqy> trick question it's system dependant
21:19:06 <monqy> or is it not
21:19:11 <monqy> i'm bad at bit sizes
21:19:35 <fizzie> elliott: Well, it's actually in UTF-16 elements, so you just multiply by two to get bytes.
21:19:45 <elliott> fizzie: DING DING DING WRONG
21:19:54 <olsner> at least 16 bits per short, iirc
21:20:03 <elliott> fizzie: It's in UCS-2 elements, so that works.
21:20:10 <elliott> fizzie: Were it UTF-16, that would not work.
21:20:12 <elliott> Surrogate.s
21:20:15 <elliott> s/\.s/.s/
21:20:17 <elliott> s/\.s/s./
21:20:48 <olsner> if your bytes are 16-bit, two bytes is enough for any UTF-16 surrogate pair
21:20:53 <fizzie> elliott: No, it's a Java string; they are UTF-16, just that everything counts surrogate pairs as two elements.
21:20:58 <elliott> $ dist/build/mchost/mchost < log
21:20:58 <elliott> CHandshake "ehird"
21:20:58 <elliott> CLogin 17 "ehird" 0 0 0 0 0 0
21:20:58 <elliott> too few bytes
21:20:58 <elliott> From:demandInput
21:20:58 <elliott> Well... it's a start.
21:21:01 <elliott> fizzie: Oh. Weird.
21:21:23 * elliott makes his TH code generate Debug.Trace.trace calls.
21:21:24 <elliott> So gross.
21:22:53 <fizzie> java.lan.String has a separate API which returns codepoints (as 'int's) decoding the surrogate pairs, but I don't think people generally bother to use it, because it's so clumsy (offsets are still counted as 'char's and all). Still, officially it's UTF-16.
21:23:01 <fizzie> s/lan/lang/
21:23:05 <Ngevd> There should be more Esoteric Markup Languages
21:23:40 <elliott> getClauseExp = [| Debug.Trace.trace (showHex $(litE (integerL (fromIntegral ptype))) "") $(foldl apE (appE (varE 'pure) (conE pname)) . map fieldGet $ fields) |]
21:23:41 <elliott> Yesssssssssssssssss
21:23:44 <monqy> markup is kind of boringggggggggg
21:23:59 <elliott> getClauseExp = [| Debug.Trace.trace (showHex ($(litE (integerL (fromIntegral ptype))) :: Int) "") $(foldl apE (appE (varE 'pure) (conE pname)) . map fieldGet $ fields) |]
21:23:59 <elliott> EVEN BETTER
21:24:01 <monqy> nice TH
21:24:13 <zzo38> I implemented Maybe as an instance of Quasi (in Template Haskell)
21:24:16 <elliott> Yay, I misparse 0D.
21:24:37 <Ngevd> Goodnight
21:24:39 <elliott> Oh, float/double confusion.
21:24:39 <monqy> zzo38: oh?
21:24:39 -!- Ngevd has quit (Quit: what a big quitter he is, eh?).
21:24:41 <elliott> Ngevd: goodnight
21:24:52 <zzo38> elliott: Yes. runIO is the only unimplemented method.
21:25:00 <elliott> I am not monqy.
21:25:11 <zzo38> monqy: Yes.
21:25:40 <monqy> how do the rest work, then?
21:26:24 <elliott> :t encodeFloat
21:26:24 <zzo38> It is this: instance Quasi Maybe where { qNewName = const Nothing; qReport _ _ = Just (); qRecover = flip mplus; qReify = const Nothing; qClassInstances _ _ = Nothing; qLocation = Nothing; qRunIO _ = error "Cannot run I/O in Maybe"; };
21:26:25 <lambdabot> forall a. (RealFloat a) => Integer -> Int -> a
21:26:32 <elliott> What.
21:26:37 <elliott> Oh, hmm.
21:26:38 <elliott> instance Serialize Double where
21:26:38 <elliott> put d = put (decodeFloat d)
21:26:39 <elliott> get = liftM2 encodeFloat get get
21:26:41 <elliott> instance Serialize Float where
21:26:43 <elliott> put f = put (decodeFloat f)
21:26:45 <elliott> get = liftM2 encodeFloat get get
21:26:47 <elliott> This is not right.
21:26:49 <elliott> I think?
21:26:52 <elliott> Is this right?
21:26:54 <elliott> :t decodefloat
21:26:54 <lambdabot> Not in scope: `decodefloat'
21:26:56 <elliott> :t decodeFloat
21:26:57 <lambdabot> forall a. (RealFloat a) => a -> (Integer, Int)
21:26:58 <zzo38> In the state monad I could probably make better implementations of these things.
21:27:07 <elliott> Yeah, that's not right.
21:27:24 <monqy> your instance looks kind of useless :(
21:27:34 <monqy> are there any Quasi laws
21:27:47 <zzo38> monqy: I don't know. But if there is, I hope to fix it.
21:28:01 <elliott> -- Conversions use 'STUArray' and the 'ST' monad to reinterpret bytes
21:28:02 <elliott> -- and get /what we assume to be/ the IEEE 754 binary representation
21:28:02 <elliott> -- of single and double precision floating point numbers.
21:28:03 <zzo38> One reason I have it is simply to get an Exp from a [| ... |]
21:28:04 <elliott> bad doggy :(
21:28:15 <elliott> fizzie: Hey, you should port your float/double code to Haskell :-P
21:29:17 -!- ive has quit (Ping timeout: 276 seconds).
21:33:24 <zzo38> How do I make an instance of a state monad?
21:33:45 <oerjan> @src MonadState
21:33:45 <lambdabot> Source not found. You untyped fool!
21:33:49 <oerjan> bah
21:33:54 -!- pikhq has quit (Ping timeout: 252 seconds).
21:34:05 <oerjan> :t put
21:34:06 <lambdabot> forall s (m :: * -> *). (MonadState s m) => s -> m ()
21:34:12 <oerjan> it's that class, anyway
21:34:55 <zzo38> I want to make "instance Quasi (State QuasiState)" but it won't accept that.
21:35:49 <oerjan> zzo38: do you have FlexibleInstances option?
21:36:44 <zzo38> OK, it seems to work now.
21:37:03 <oerjan> otherwise there are some stupid ancient restrictions on instances and their types
21:37:14 <zzo38> Why?
21:38:02 <oerjan> standards compliance i assume
21:40:34 <oerjan> originally it was presumably to make type classes easy to implement
21:42:46 <oerjan> and Haskell 2010, the first revision in 12 years, only did a couple tiny changes to the fundamentals
21:43:07 <oerjan> (of the language, i don't think they touched type classes)
21:45:30 <oerjan> mainly they just incorporated the ffi and hierarchical module addendas, i think. and removed n+k patterns.
21:45:55 <oerjan> or was n+k later...
21:46:58 <elliott> there was a syntax change, I think
21:47:05 <elliott> to that stupid layout rule that nobody uses
21:47:07 <elliott> ("reparse if fail")
21:47:13 <elliott> or was it just making dangling else work
21:47:16 <elliott> as it does in all implementations
21:47:16 <elliott> dunno
21:47:24 <elliott> but yeah, Haskell has never been easy to implement :P
21:47:27 <oerjan> not the reparse if fail
21:47:32 <elliott> FlexibleInstances really needs to be default.
21:47:36 <oerjan> it was the operator precedence iirc
21:47:48 <oerjan> it was detached from the main parsing, to make things sane
21:47:52 <elliott> fizzie: Um, is there an 0x84 packet type?
21:47:55 <elliott> It's certainly not on the wiki.
21:48:15 <elliott> mcmap doesn't know it either. Hmph.
21:48:46 <elliott> Pretty sure I'm not desync'd either:
21:48:49 <elliott> CPlayerPosition 281.69999998807907 27.0 28.62000000476837 46.51032322405371 True
21:48:49 <elliott> CRespawn
21:48:49 <elliott> CKeepAlive 16777344
21:48:49 <elliott> CKeepAlive 0
21:48:49 <elliott> Failed reading: Unknown packet type 0x84
21:48:49 <elliott> Empty call stack
21:49:13 <elliott> Oh hmm what
21:49:27 <elliott> , packet 0x09 "CRespawn" [] -- dunno
21:49:29 <elliott> Not helpful, past me
21:49:38 <oerjan> also pattern guards. http://www.haskell.org/onlinereport/haskell2010/haskellli2.html#x3-5000
21:50:37 <monqy> not much in there, but at least the changes were good....
21:50:59 <elliott> Pattern guards are standard now? Great
21:51:23 <elliott> Okay, entity_animate is sent by the client, apparently. :/
21:54:15 <oerjan> the dangling else wasn't mentioned, but it see from http://www.haskell.org/onlinereport/haskell2010/haskellch3.html#x8-320003.6 that it was changed
21:54:35 <elliott> cool
21:55:05 <elliott> http://hackage.haskell.org/trac/haskell-prime/wiki/DoAndIfThenElse
21:55:05 <elliott> http://hackage.haskell.org/trac/haskell-prime/wiki/NondecreasingIndentation
21:55:13 <elliott> I think the first was accepted too
21:55:22 <elliott> at least, I use that style in one place in Shiro :-P
21:57:05 -!- derdon has quit (Remote host closed the connection).
22:00:19 <oerjan> elliott: i don't think NondecreasingIndentation is there
22:00:34 <elliott> ok
22:01:27 <zzo38> Now I managed to make instance Quasi (State QuasiState)
22:01:47 <oerjan> *i see from
22:02:16 <zzo38> It doesn't implement recover, reify, classInstances, or runIO. It might be possible to implement later, though.
22:02:25 <zzo38> If I know what its implementation should be.
22:03:20 <oerjan> elliott: also "that stupid layout rule which no one uses" is probably used quite a bit. one-liners in particular.
22:03:33 <elliott> oerjan: It's not used at all because nobody implements it.
22:03:44 <elliott> They implement similar behaviour in a different manner.
22:03:48 <oerjan> wat
22:04:03 <elliott> Go ask the GHC devs whether they implement layout by reparsing on failure
22:04:06 <elliott> Deewiant: I'm afraid I'm likely to make my TH generate less applicative output :-)
22:04:23 <elliott> Deewiant: (I'm micro-optimising ahead of my time for the hell of it and the Applicative stuff is not inlined out)
22:04:39 <oerjan> elliott: i thought you were talking about the insertion of } at syntax error...
22:05:47 -!- Zuu has joined.
22:06:08 <elliott> oerjan: I think I am; I'm not sure of the specifics
22:06:39 <oerjan> http://www.haskell.org/onlinereport/haskell2010/haskellch10.html#x17-17800010.3
22:07:02 <oerjan> hm i guess i should look at h98 version
22:08:23 <zzo38> With the Maybe instance I can do that: extractQ :: Q a -> a; extractQ = maybe (error "No value in Quasi") id . runQ;
22:08:45 -!- pikhq has joined.
22:09:14 <oerjan> elliott: what they _did_ remove is the dependency on operator fixities, which indeed no one implemented, because it's insane
22:10:24 <zzo38> What is the dependency on operator fixities?
22:11:09 <oerjan> http://haskell.org/onlinereport/syntax-iso.html end of section 9.3
22:13:02 <oerjan> basically when operator fixities were allowed to affect whether there is the kind of syntax error which needs inserting a }, things get horribly complicated (especially since fixities can be defined anywhere, even later in the file or in a local scope), so no one ever implemented it that way
22:14:19 <oerjan> i've heard rumors of someone managing to make a paradoxical case where the } insertion affected the size of the local scope of a definition such at the } should be inserted iff it wasn't :P
22:14:27 <oerjan> *such that
22:15:42 <oerjan> or something like that, i may be confusing somewhat with my own thoughts on the matter
22:16:06 <elliott> oerjan: that's beautiful :P
22:16:11 <elliott> maybe that was what was being talked about, then
22:25:18 <oerjan> if the fixities are not considered, then the underlying layout-free haskell syntax presumably becomes context-free and handleable by a yacc-style parser. since i vaguely think that's how ghc does it.
22:27:26 <zzo38> OK, I can understand why to remove the stuff mentioned at the end of section 9.3 because it can be difficult to implement, I read about how some things are implemented in GHC, and fixities are not known at parsing time, so that would make it difficult to implement.
22:27:49 <oerjan> yeah
22:31:40 -!- sebbu2 has joined.
22:31:40 -!- sebbu2 has quit (Changing host).
22:31:40 -!- sebbu2 has joined.
22:32:46 -!- sebbu has quit (Ping timeout: 260 seconds).
22:33:35 <elliott> [GblId, Arity=2, Caf=NoCafRefs, Str=DmdType LU(SAAAAAAAA)]
22:33:41 <elliott> SAAAAAAAA!
22:34:20 <oerjan> sounds like the core is preparing to attack
22:34:23 <elliott> at this point oerjan notices I'm reading core and fears for the safety of neighbouring towns
22:34:25 <elliott> snap
22:35:39 <oerjan> The Core - the story of how haskell destroyed northern england
22:36:01 <elliott> oerjan: here's a sad thing: GHC turns my "case" on a bunch of Word8 constants (with a single default case) into a bunch of nested if/then/elses, at least at the Core level, rather than some sort of jump table
22:36:12 <oerjan> it was all a plot by the glaswegians
22:36:28 <elliott> I might have to write my own, say by creating a Data.Vector of monadic actions
22:36:48 <elliott> or one of GHC's low-level array things
22:37:31 <oerjan> huh
22:37:35 -!- zzo38 has quit (Remote host closed the connection).
22:38:01 -!- Patashu has joined.
22:38:24 <oerjan> even after optimization? (not that i know this stuff)
22:38:30 <oerjan> food ->
22:39:27 <elliott> oerjan: yes, -O2
22:41:33 -!- Jafet has quit (Quit: Leaving.).
22:42:18 <oerjan> elliott: no i mean, are you printing the core after the optimization stage, i think there are different options...
22:43:29 <elliott> -ddump-simpl
22:43:43 <elliott> -ddump-simpl
22:43:43 <elliott> Dump final simplifier output
22:43:43 <elliott> [dynamic]
22:43:44 <elliott> so yes
22:43:52 <elliott> apparently GHC never does it, alas
22:43:58 <elliott> but backends might, I guess
22:49:10 -!- FireFly has quit (Quit: FireFly).
22:52:56 -!- ive has joined.
22:54:51 -!- NihilistDandy has joined.
22:56:02 -!- NihilistDandy has quit (Client Quit).
22:56:26 -!- NihilistDandy has joined.
23:13:54 -!- augur has quit (Remote host closed the connection).
23:28:21 <elliott> ?t \f x y -> flip f x `fmap` y
23:28:21 <lambdabot> Maybe you meant: tell thank you thanks thx ticker time todo todo-add todo-delete topic-cons topic-init topic-null topic-snoc topic-tail topic-tell type . ? @ ft v
23:28:24 <elliott> ?ty \f x y -> flip f x `fmap` y
23:28:26 <lambdabot> forall a a1 b (f :: * -> *). (Functor f) => (a -> a1 -> b) -> a1 -> f a -> f b
23:28:30 <elliott> ?hoogle (a -> a1 -> b) -> a1 -> f a -> f b
23:28:30 <lambdabot> Control.Monad liftM2 :: Monad m => (a1 -> a2 -> r) -> m a1 -> m a2 -> m r
23:28:30 <lambdabot> Control.Applicative liftA2 :: Applicative f => (a -> b -> c) -> f a -> f b -> f c
23:28:30 <lambdabot> Prelude scanr :: (a -> b -> b) -> b -> [a] -> [b]
23:28:35 <elliott> Hmph.
23:30:40 -!- sllide has joined.
23:33:04 <oerjan> :t \f x y -> Prelude.flip f x `fmap` y
23:33:04 <lambdabot> forall a b c (f :: * -> *). (Functor f) => (a -> b -> c) -> b -> f a -> f c
23:33:06 -!- Jafet has joined.
23:33:12 <oerjan> oh
23:34:22 <oerjan> @pl \f x -> fmap . flip f x
23:34:22 <lambdabot> ((fmap .) .) . flip
23:34:47 -!- sebbu2 has changed nick to sebbu.
23:35:14 -!- augur has joined.
23:35:34 <oerjan> @pl \fmap flip -> ((fmap .) .) . flip
23:35:34 <lambdabot> (.) . (.) . (.)
23:38:02 <elliott> nice
23:39:33 <oerjan> :t flip
23:39:33 <lambdabot> forall (f :: * -> *) a b. (Functor f) => f (a -> b) -> a -> f b
23:40:19 <monqy> @pl \ f x y -> flip f x `fmap` y
23:40:19 <lambdabot> (fmap .) . flip
23:40:28 <oerjan> :t \f x y -> flip x (f `fmap` y)
23:40:28 <lambdabot> forall (f :: * -> *) b a b1 (f1 :: * -> *). (Functor f1, Functor f) => (a -> b1) -> f (f1 b1 -> b) -> f1 a -> f b
23:40:30 <monqy> @pl \ fmap flip -> (fmap .) . flip
23:40:30 <lambdabot> (.) . (.)
23:40:35 <oerjan> argh
23:40:45 <oerjan> oh wait
23:40:59 <oerjan> :t \f x y -> f `fmap` y `flip` x
23:41:00 <lambdabot> forall a a1 b (f :: * -> *). (Functor f) => (a -> a1 -> b) -> a1 -> f a -> f b
23:41:06 <oerjan> *MWAHAHAHAHA*
23:41:15 -!- sllide has quit (Read error: Connection reset by peer).
23:41:37 <oerjan> @pl \f x y -> f `fmap` y `flip` x
23:41:38 <lambdabot> flip . (flip .) . fmap
23:42:13 * oerjan sits down to watch heads explode
23:42:15 <monqy> :t fmap fmap fmap
23:42:16 <lambdabot> forall (f :: * -> *) a b (f1 :: * -> *). (Functor f, Functor f1) => (a -> b) -> f (f1 a) -> f (f1 b)
23:42:55 <monqy> :t fmap fmap (fmap fmap fmap)
23:42:56 <lambdabot> forall (f :: * -> *) (f1 :: * -> *) a b (f2 :: * -> *). (Functor f, Functor f1, Functor f2) => (a -> b) -> f (f1 (f2 a)) -> f (f1 (f2 b))
23:43:26 <monqy> this is good
23:44:09 <oerjan> caleskell flip should definitely be an operator somewhere
23:44:22 <monqy> is it useful
23:44:39 <elliott> :t flip
23:44:39 <lambdabot> forall (f :: * -> *) a b. (Functor f) => f (a -> b) -> a -> f b
23:44:47 <elliott> yeah
23:44:52 <elliott> ?hoogle f (a -> b) -> a -> f b
23:44:52 <lambdabot> Control.Applicative (<*>) :: Applicative f => f (a -> b) -> f a -> f b
23:44:53 <lambdabot> Control.Monad ap :: Monad m => m (a -> b) -> m a -> m b
23:44:53 <lambdabot> Control.Applicative (<**>) :: Applicative f => f a -> f (a -> b) -> f b
23:44:58 <elliott> wait, how does that work?
23:44:59 <elliott> there's no pure
23:45:06 <monqy> oh yeah that thing
23:45:15 <monqy> looks useful but flip is a bad name for it
23:45:19 <elliott> ?djinn Functor f => f (a -> b) -> a -> f b
23:45:19 <lambdabot> Error: Class not found: Functor
23:45:23 <elliott> oerjan: help
23:45:52 <oerjan> :t \ff x -> fmap ($x) ff
23:45:53 <lambdabot> forall a b (f :: * -> *). (Functor f) => f (a -> b) -> a -> f b
23:45:59 <monqy> i was just about to say that
23:46:06 <monqy> except with a isntead of x and f instead of ff
23:46:14 <monqy> and a space between \ and f
23:46:21 <monqy> and $ and a
23:46:42 <elliott> oerjan: I was about to ask a question about zip and map but then I realised that I was using mapM so it was irrelevant :(
23:46:54 <monqy> ?pl \ f a -> fmap ($ a) f
23:46:54 <lambdabot> flip (fmap . flip id)
23:47:17 <monqy> irrelevant?
23:47:26 <oerjan> elliott: i think fmap and caleskell flip together implement the intuition that when you combine applicatives where all except one term is a pure, only Functor is really needed.
23:47:35 <elliott> monqy: oh right
23:47:39 <elliott> oh oerjan did it
23:47:40 <elliott> before
23:47:41 <elliott> ok
23:47:42 <elliott> yes
23:47:49 <elliott> oerjan: yeah
23:48:00 <elliott> oerjan: I kind of find Functors ugly :(
23:48:08 <elliott> because of the weird restriction to one-argument functions
23:48:16 <elliott> it would be nice if there was a way to get N-argument functions without pure
23:48:26 <elliott> maybe just f a -> f b -> f (a,b)
23:52:01 <oerjan> you can get that with just <*> and <$>, i think
23:52:25 <elliott> oerjan: how
23:52:27 <elliott> hmm
23:52:28 <elliott> oh right you can
23:52:49 <elliott> so the question is, what can you implement (<$>) for but not (<*>)? and is it interesting at all? :P
23:53:19 <oerjan> well Functors are mathematically fundamental
23:53:23 -!- Vorpal has quit (Quit: ZNC - http://znc.sourceforge.net).
23:53:59 <elliott> oerjan: yeah, I'm just wondering if they're Haskelly fundamental :P
23:54:54 <oerjan> hm i think (,) a is an example
23:55:06 <shachaf> oerjan: No, (,) is an Applicative.
23:55:10 <shachaf> It's Writer.
23:55:19 <elliott> shachaf: that requires a constraint though
23:55:23 <oerjan> shachaf: not without Monoid restriction on a
23:55:30 <oerjan> you need some way to combine two a's
23:55:37 <shachaf> Well, OK.
23:55:42 <shachaf> Map k has an instance of Functor.
23:56:12 <oerjan> that's pretty obviously an Applicative too, i think
23:56:39 <oerjan> in an analogous way as ZipList, just throw away non-common keys
23:57:42 <oerjan> might even be a Monad
23:58:34 <oerjan> oh wait, no return/pure is the problem
23:59:11 <oerjan> scratch that
←2011-09-17 2011-09-18 2011-09-19→ ↑2011 ↑all