00:27:13 -!- augur has quit (Remote host closed the connection). 00:36:00 -!- FireFly has quit (Remote host closed the connection). 00:51:38 -!- oerjan has quit (Quit: Good night). 00:53:30 -!- Vorpal has quit (Ping timeout: 260 seconds). 01:52:00 -!- zzo38 has quit (Remote host closed the connection). 02:00:43 You know, I wonder whether there are any compilers that are computable bijections. 02:01:22 Is there a program that compiles Unlambda to Brainfuck, such that every possible Brainfuck program is given by exactly one Unlambda program? 02:01:52 Sure, just insert a nonce or hash at the end 02:01:58 02:02:32 Computable bijective compilers obviously exist in some cases (like compiling a language to itself), so perhaps they exist in call cases. At least, languages that can be compiled to and fro at all. 02:03:13 how do you figure it will be a unique mapping? 02:03:15 Patashu: yes, but will that make it so that every possible Brainfuck program is given by at least one Unlambda program? 02:03:33 hrm... 02:03:41 newsham: what do you mean? The question is whether it's possible to make it a unique mapping or not. 02:03:43 for(;;) { }, while(1) { }; ... /*comment*/ /* comment */ 02:03:46 every possible brainfuck program as in every combination of valid syntactical symbols or every possible turing machine it could be? 02:03:57 bijection implies 1:1 mapping. 02:03:59 Patashu: the former. 02:04:23 even C <-> C isnt 1:1 02:04:40 newsham: well, you can simply compile each C program to itself. Voila, one-to-one mapping. 02:05:09 hey I think they have a program called cat for that. 02:05:32 has anyone ever made a C interpreter? 02:05:42 do you want to discount changes in syntax? ie. doI have to translate each comment properly? whiespace and indentation? 02:06:00 patashu: many people have. or do you means specifically in this room? 02:06:09 newsham: the bijection only needs to preserve program behavior. It can add or remove comments ad libitum. 02:06:44 ah, so there is one 02:06:51 tswett: can I use comments in the bijection? ie. can I translate for(;;) in C to while(true) { /*for*/ in java? 02:07:04 so that I know who to map it back to C later? 02:07:13 If uncomputable mappings were allowed, this would be pretty easy. We're given an Unlambda program. Enumerate all Unlambda programs that behave the same way, and suppose this is the nth. Enumerate all Brainfuck programs that also behave that way; output the nth. 02:07:17 newsham: yes, that's allowed. 02:07:44 Futurama 02:08:01 so basically I just have to compile from one language to another language, and capture the original program in comments. 02:08:34 newsham: well, it must be a bijection. That means that (supposing you're translating from Unlambda to Brainfuck) every Brainfuck program must be possible to produce somehow. 02:08:43 so basically: translate = compile to exe, and write a virtual machine that interprets exes 02:10:01 i'm skeptical. 02:10:37 Well, yes, there's a reason it's a question rather than a statement. :) 02:10:48 ok, for example, I dont think you'll find a bijection between C and python, because of how comments and whitespace are handled differently in the two languages 02:11:15 Well, it's easy to, say, strip out all the comments and whitespace, and then encode them back in once you're done. 02:11:31 no, because I can encode comments in different ways 02:11:43 I can encode // comment and /* comment */ in C 02:11:47 but not in python 02:12:21 -!- augur has joined. 02:13:02 When you strip out all the comments and whitespace, just turn all the information that you just got into an integer. 02:13:23 tswett: ok, say you do that for every possible C program comment. 02:13:33 now, whats the bijection from every possible python program? 02:14:05 remember: I might have a python comment that has an integer in it 02:14:12 Given a program with no comments or excess whitespace, there are countably many ways to add comments and whitespace to it. This is the same for C and for Python. Therefore, it must be possible to encode all the comments and whitespace as an integer, and to decode that integer to produce comments and whitespace. 02:14:33 So, take your C comments and whitespace, turn them into an integer, and turn that integer into Python comments and whitespace. 02:14:53 where are you outputting this integer? 02:14:58 into a comment? 02:15:01 It's just an ennumeration 02:15:13 this is a bijection, the data has to be encoded in the output 02:15:37 if you take all the comments from my C program and encode it into the number "42" as a comment in the python program 02:15:43 now what happens when you reverse map that program? 02:15:43 newsham: the integer becomes represented by all of the whitespace and comments in the resulting Python code. Every possible combination of whitespace and comments in Python corresponds to exactly one integer. 02:16:30 -!- augur has quit (Remote host closed the connection). 02:17:36 now when I translate a python program with the comment "42" in it, it goes back to a C program with lots of textual comments? 02:17:55 but when I translate a python program with the comment "42!" in it it goes back to a C program with just a single integer in its comments? 02:19:24 A C program whose comments are represented by the number 42 doesn't become a Python program with the comment "42" in it. It becomes a Python program whose comments are represented by the number 42. 02:19:50 where are you encoding that number in the python program? 02:20:06 you have f :: C -> Py, and g :: Py -> C 02:20:16 so the 42 has to be somewhere in the Py. 02:20:41 You have f :: C -> Integer and g :: Py -> Integer. Then, to get C -> Py and Py -> C, you take g^-1 . f and f^-1 . g. 02:22:35 wait.. you're assuming you have functions that enumerate both C and Py programs that have the same functionality :) 02:23:01 I call shenanigans 02:23:16 how else are you going to do it? 02:24:19 patashu: you just shifted the problem.. let me restate my original question in your new shifted problem. give me f and g for C and python comments. 02:24:27 you cant do it. 02:25:06 actually.. wait.. you prob can do it for comments alone. 02:25:43 but thats because you avoid the constraint that they have to run the same way. 02:25:48 so any enumeration of comments works. 02:27:57 ok, how about this. whats the bijection between SKI calc with C++ comments and SKI calc with python comments. 02:28:15 hmm that might be too easy too 02:28:36 ok, i'm getting more convinced that your approach can work when ther is a bijection 02:29:23 i think an interesting test case would be SKI with c++ comments to lambda calc with python comments. 02:29:39 (ignore whitespace, but deal with variable renaming) 02:30:07 the comments in one program has to encode for the comments+variablenames in the other program 02:30:52 and also has to encode for the choice of which type of comments are used 02:31:19 * Sgeo watches Futurama fail at math 02:32:59 That's probably intentional. 02:33:51 some kinda rendering error? 02:37:25 why not just ignore comments and insignificant whitespace, since they have no semantic effect? 02:37:37 newsham: yeah, doing comments is the easy part. 02:37:46 CakeProphet: you might as well, I guess. 02:40:23 -!- copumpkin has quit (Quit: Computer has gone to sleep.). 03:01:10 -!- BeholdMyGlory has quit (Remote host closed the connection). 03:04:13 -!- augur has joined. 03:16:18 -!- copumpkin has joined. 03:17:21 -!- Sgeo has quit (Ping timeout: 250 seconds). 03:18:59 -!- pumpkin has joined. 03:18:59 -!- pumpkin has quit (Changing host). 03:18:59 -!- pumpkin has joined. 03:20:49 -!- copumpkin has quit (Ping timeout: 250 seconds). 03:23:14 -!- Sgeo has joined. 03:23:44 TF2 is free forever now 03:25:29 oh nice. 03:25:49 I might go download it then. 03:30:06 -!- pumpkin has quit (Ping timeout: 252 seconds). 03:30:40 -!- copumpkin has joined. 03:30:40 -!- copumpkin has quit (Changing host). 03:30:40 -!- copumpkin has joined. 03:43:04 -!- azaq23 has quit (Ping timeout: 260 seconds). 03:44:28 TIL about Perl "bless". 03:45:05 CakeProphet: How do you continue to be coherent? Surely your brain has a giant tumor by now? 03:45:21 pikhq, what? 03:46:47 Excuse me, I have to be incoherent for a bit, that is just too terrible. 03:48:30 What is? Perl's bless? 03:48:33 * Sgeo googles 03:51:22 TIL? 03:51:27 oh 03:52:02 pikhq: wait I thought you had experience with Perl already? You should have already learned about bless. :P 03:52:15 DIE DIE DIE DIE DIE 03:52:26 but yeah, Perl's OO is pretty stupid, not going to lie. 03:52:37 MURDER THE MAN WHO BROUGHT THIS INTO THE WORLD 03:54:05 That's why I've never made a class in Perl. 03:54:08 no point.. 03:54:51 the only reason I would make a class in Perl is if I were designing a CPAN package that was intended to be subclassed. 03:57:23 -!- myndzi has quit (Ping timeout: 264 seconds). 03:58:45 -!- myndzi has joined. 03:59:32 -!- azaq23 has joined. 04:01:27 pikhq: I usually just program imperitively/procedurally in Perl. 04:02:18 since the OO stuff was just kind of thrown in Perl 5 simply for the sake of having it, and doesn't really integrate into the language very well. 04:04:07 like, look at how shitty inheritance is: 04:04:26 package Bot::RoleBot; our @ISA = qw(Bot::BasicBot); 04:04:43 :'( 04:04:46 inheritance = set this magic method resolution list 04:05:16 oh, for those who don't know: qw(a b c) = ('a', 'b', 'c') 04:05:22 gross 04:06:11 I love qw because it allows me to be incredibly lazy. :D 04:06:24 * pikhq cuts off CakeProphet's arms 04:06:49 doesn't ruby have those things too? gross. 04:07:06 not sure, actually. I know Ruby has q and qq. 04:07:16 they're all the same to me 04:07:57 i.e. meaningless language-defiling syntactic sugar that should not exist 04:08:06 q and qq are good ideas, believe it or not. Because it allows you to avoid escaping quotes within strings. 04:09:14 q{I can't believe how easy it's to type English's sentences and stuff.} 04:09:30 only comes up occasionally though. 04:09:48 like when you're trying to nest 20 strings within one another and evaling them all off... you know, it happens. 04:10:02 no 04:10:03 it doesn't 04:10:04 ever 04:10:04 happen 04:10:09 check the #esoteric logs. :P 04:10:18 someone is a bad person 04:10:39 if you search for something like q{q[q( you'll probably find it 04:11:06 or q!q@q#q$q% 04:11:08 :) 04:11:49 monqy: don't tell me you're against sugar in principle. That would be silly. 04:12:08 I'm guessing it's just this particular form of it? 04:12:28 I prefer providing a more general extensible interface like macros 04:12:42 but in some cases e.g. string literals it can be a necessary evil 04:13:26 but you don't think it's a good idea to allow overriding the delimiter so that you can avoid ugly \'s? 04:14:22 I'm sure you'd be able to do it well enough with a macro if your macro system is cool???? 04:14:31 yeah I guess so. 04:14:32 also: why would you want to do it, provided your code is sane 04:14:50 monqy: Well, in Tcl it makes a *little* bit of sense I guess. 04:15:07 eval q|some code goes here| 04:15:07 etc. 04:15:20 monqy: Seeing as you typically do metaprogramming based on constructing strings. 04:15:38 it usually comes up when you're dealing with strings that contain code. Or for example, when you're executing a shell command you can use qx instead of ` 04:16:07 I try to keep my code out of strings 04:16:27 put them in lists/symbols if necessary but 04:16:46 where by lists I mean nested lists representing a syntax tree 04:16:55 strings is quite icky to me 04:17:14 In Tcl, a list is just a particular form of string, so... 04:17:14 well then you're weird. :P 04:17:54 strings are so unstructured 04:18:03 how so? 04:18:17 (specifically, a string that possesses structure, like you would expect of a list) 04:18:25 for one they're serial 04:18:54 ah I see what you're saying. Well yes, when you need structure you can use lists/trees. strings are quite fine for what they're intended for. 04:19:42 strings just represent an unparsed form of a structure. for example, a parser can't just magically form a parse tree from a file, it needs to read it as a string first. 04:20:56 well parse it before treating it as code please 04:21:39 quines are another example of where q comes in handy. 04:23:16 here you're not concerned with the code itself, simply the string of the source code. That's a somewhat common case of where string literals are used. Not just in handling source code to be executed, but also in handling code to be manipulated/generated/output 04:25:03 a script that outputs HTML source, for example, will probably contain some string literals containing double quotes. 04:26:02 no way guys I'd rather do this ////////'foo////////' 04:26:24 s'/'\' 04:26:28 oops 04:26:34 wait 04:26:35 (see what I did there? :P ) 04:26:38 what kind of s notation is that 04:26:43 Perl's... 04:27:04 you can use any delimeter you want. I used ', which also signifies that there's no interpolation. Thus I didn't have to worry about escaping things. 04:27:16 in much the same way that a ' string literal works. 04:27:21 wow, neat 04:29:26 that's typically when s''' is used, when you have literal backslashes. I see s{}{} used when there are forward slashes. 04:29:49 but you can even do s#stuff#here#, and Perl won't parse the # as beginning a comment. 04:30:21 but that's a stupid delimiter. don't ever do that. :P 04:41:03 Perl's actually not illegible if write neat code. Obviously the best way for me to support this point is to show you some abusive code I wrote a few days ago. 04:41:07 *you write 04:41:18 $msg .= "$_ commands: ".join (', ', map {$seen{$_}=1;$_} @{$cats{$_}}).' ' for sort {$b cmp $a} keys %cats; 04:41:21 see? beautiful. 04:41:53 perl 6? 04:41:57 no, 5 04:41:57 wait no 04:42:03 perl 5 has methods on strings? 04:42:10 no that's string concatenation. 04:42:16 oh 04:42:19 too much Python, coppro? :P 04:42:21 usually I see it with spaces 04:42:22 yep 04:42:29 used to "a" . "b" 04:42:31 not "a"."b" 04:42:40 of course, in Perl 6, those probably have different semantics 04:43:00 I have no clue actually. I have no read Perl 6 specs, but I do know that . is a method accessor thing. 04:43:06 dunno what string concatenation looks like. 04:43:29 I guess a space there wouldn't hurt. 04:43:41 ~ 04:44:12 ~? 04:44:29 concatenation in perl 6 04:45:21 ah. I wouldn't expect that to mean concatenation, but you shouldn't really expect symbols to mean something without knowing what they mean. 04:45:42 I do like Perl 6's approach to unary functions on $_ 04:45:49 unary . 04:46:13 so a unary . signifies that $_ is being used? 04:46:20 yeah 04:46:21 .print 04:46:24 err 04:46:25 .print; 04:46:29 that's not bad, I suppose. 04:46:42 explicit, but quick 04:46:54 to me, Perl 6 seems very esoteric. 04:47:11 more so than Perl 5, anyways. 04:47:57 indeed 04:48:09 my favorite feature is * 04:48:31 what is that. 04:48:40 whatever 04:48:51 Perl 6: because Perl needs monads. 04:48:59 :P 04:49:20 what 04:49:50 honestly, I kind of prefer that Perl devs focused on improving Perl 5 without adding radically new semantics/syntax everywhere. 04:50:04 +would 04:50:04 I seem to recall that a monadic API got snuck in there somewhere, because of Pugs. 04:50:30 (Pugs being a Perl 6 interpreter written in Haskell.) 04:53:45 I know there is something slightly wrong with me when I am okay with @ and % changing to $ when subscripted. 04:54:20 I believe that remove that in Perl 6 though. 04:55:15 Whatever is awesome 04:55:22 it can be used to create closures 04:55:28 what does it do? 04:55:47 or passed as an argument to Whatever-aware functions that will have special behavior 04:55:58 *+2 creates a unary closure that adds two 04:56:12 ah okay. 04:56:17 that is indeed quite awesome. 04:56:30 but it does other things 04:56:39 well, oh course, this is Perl after all. :P 04:56:43 sort *, [] is default sort 04:56:53 for example 04:57:00 can't just write sort []? 04:57:16 no, because sort takes two arguments 04:57:29 ..oh right. 04:57:39 there is no @_ anymore. 04:59:18 you also use whatever for unbounded ranges, etc. 04:59:32 basically it means "I don't care" 05:01:10 Someone needs to write a flogscript manual 05:01:48 ooh, another one 05:02:01 it's also used for a black hole in tuple assignment 05:04:19 if($c=='F)') { //flow-control-fumble 05:04:20 best operator 05:04:22 ah, that's what undef is for in Perl 5. Except it's lists and not tuples. 05:04:27 throw, catch, fumble :) 05:05:07 so is there no eq in Perl 6? or is using == incorrectly intentional there? 05:07:16 haha, extchars 05:08:50 CakeProphet: it's lists in Perl 6 05:24:40 are IRC nicks case insensitive? 05:25:07 nevermind. I answered my own question with /whois :P 05:26:52 my ($self, $body) = (shift, shift->{body}); 05:26:59 this line kind of reads like a poem about dancing. 05:27:52 a very bad one. 05:32:25 -!- pikhq_ has joined. 05:35:11 -!- pikhq has quit (Ping timeout: 264 seconds). 05:57:01 -!- copumpkin has quit (Ping timeout: 240 seconds). 05:57:26 -!- copumpkin has joined. 06:01:09 So. Split-brain patient, one half is theist, one half atheist. What happens if, say, the theistic claims are true, and have the standard "through belief you shall be saved" bit going on? 06:01:33 Can that happen? 06:01:41 Split-brain working like that? 06:01:47 Yes, that is how split brain works. 06:02:28 By cutting the corpus callosum, you get two seperate minds. 06:03:22 This specific case has actually happened, BTW. 06:03:59 Wait, how do you tell what the right side of the brain is? I thought only the left could speak? 06:04:26 Hmm, also, just a guess: Right theist, left atheist? 06:04:31 The right side still has motor control and is capable of understanding language to an extent. 06:07:45 the functions of the brain are not strictly localized to certain hemispheres. 06:07:57 though each hemisphere is specialized towards functions. 06:09:05 By cutting the corpus callosum, though, you end up getting pretty much two seperate brains in the same body. 06:09:41 yes. I believe only one is in use at a given time? 06:09:50 That is a really interesting thought experiment 06:09:58 I need to use that one sometime 06:10:03 CakeProphet: No, both function simultaneously. 06:10:11 CakeProphet, if there's no connection, how would they know to take turns? 06:10:28 I had never heard of each hemisphere developing different beliefs 06:10:33 Sgeo: shush. 06:11:02 message passing queues over quantum entanglement, duh. 06:11:19 You can't pass messages with quantum entanglement. 06:11:24 ... -_- 06:11:29 At least, as far as I know 06:11:29 Sgeo: It's actually only seperating the cerebral cortex into two. 06:11:36 pikhq_, ah. 06:11:59 So, you get rather a *lot* of seperation between them, but not actually complete seperation. 07:04:39 I do wish Perl's dereference operators used () instead of {} 07:04:54 @{$cats{$_}} is just kind of gross looking. 07:04:55 Unknown command, try @list 07:48:55 http://i.imgur.com/MmQAb.png What. The. Fuck. 07:49:04 This is not right not right not right. 07:50:00 -!- monqy has quit (Quit: hello). 07:50:55 lithium (assuming that's from back when 7-up had lithium) is probably good for kids 07:52:00 That's totally 50s graphic design, so *just* after they got rid of the lithium. 07:52:10 (they removed the lithium citrate in 1950.) 07:55:01 Well, there's a chance that was 40s. 07:55:08 So it would have lithium. 07:55:27 Ah, found the publication date of the pamphlet it's from. 07:55:29 1953. 07:57:02 I think the point is just that it gets kids to drink it 07:58:50 * Sgeo goes to make a rules table for his own reversible GoL 07:58:55 Because I think Paul's is crap 07:59:36 Much easier way to do that. 07:59:44 "It drinks the milk or else it gets the hose again!" 07:59:47 07:59:54 -!- choochter has joined. 07:59:59 Or, alternatively, I set up ReversibleLife wrong 08:00:11 Yep, got it working now 08:01:27 E seems to have done it the same way I have too 08:01:55 Assigning same numbers and all 08:03:11 Dangit it looks boring and unlikely to kickstart life 08:07:03 -!- azaq23 has quit (Quit: Leaving.). 08:11:44 Is there a way in Golly to make the world a torus? 08:12:06 In theory, that would let me actually observe the world shrinking back down 08:12:33 It _has_ to be possible for the mass of a reversible CA to shrink, I think 08:12:46 Well, hmm, not has to be... well, actually, not sure 08:12:55 But reversibility should be no hinderance 08:14:25 -!- Vorpal has joined. 08:14:36 try using MCell 08:14:39 The GoL glider sort of becomes a dangit I forgot what it's called 08:16:22 Or I could just find the Golly documentation 08:16:30 Just added :T20,20 to the rule name 08:17:04 Sgeo: I believe so 08:17:39 Ok, time is not behaving cyclically like I expected 08:17:49 Does being on a torus just break reversibility period? 08:18:14 uh, why would it? 08:18:51 also one can trivially show that any reversible automaton in finite space is cyclic 08:19:27 No idea, but time should be cyclic, returning to the starting configuration. Otherwise, you'd get two states, one traced back to the initial state, and one not 08:19:36 more to the point 08:19:40 you have a finite state space 08:19:45 a generation is a bijective operation 08:20:10 coppro, should it or should it not eventually return to the starting state? 08:20:14 If it's on a torus 08:20:18 it should 08:20:25 if it is reversible, that is 08:20:27 a torus just means you're making the bijection differently 08:20:30 right? 08:20:47 Patashu: A torus means finite space, that's the key 08:20:57 The generation function in an infinite space is not necessarily bijective 08:20:58 Maybe I'm just not being patient enough 08:21:13 Sgeo: there are 2^cells possibilities 08:21:18 it may take a while 08:21:38 * Sgeo makes it a 10x10 torus 08:21:49 still 2^100 possibilities 08:22:02 that would be a pretty effective CA to enumerate through every possible state 08:22:45 true 08:23:04 Sgeo: you need more math 08:23:18 I think I'm seeing it 08:23:22 But just keep missing it 08:24:20 * Sgeo makes a 5x5, and a line across the universe, and it's much more visible now 08:24:45 Sgeo: why won't you accept a proof 08:24:51 which you came up wiht 08:24:52 *with 08:25:18 I just wanted to see a demonstration in action, is all 08:28:46 k here's an example 08:29:11 my CA has state space {1, 0}. Generation function is 1 => 0, 0 => 1 08:29:15 run for two generations 08:29:41 -!- cheater__ has quit (Ping timeout: 255 seconds). 08:40:32 http://necsi.edu/postdocs/sayama/sdsr/movies/evol-emr.html 08:43:42 * Sgeo tries random fill with evoloop 08:44:03 Probably won't be effective unless I make a very large random fill though, and that would take a whiel 08:45:35 -!- cheater__ has joined. 08:49:14 Ok, this is too slow for my tastes 08:55:04 > let genericFib a b = a : b : zipWith (+) (genericFib a b) (tail $ genericFib a b) in genericFib 2 2 08:55:08 mueval-core: Time limit exceeded 08:55:25 > let genericFib a b = a : b : zipWith (+) (genericFib a b) (tail $ genericFib a b) in genericFib 2 2 08:55:30 mueval-core: Time limit exceeded 08:55:33 ...? 08:55:52 > let genericFib a b = let fibs = a : b : zipWith (+) fibs (tail fibs) in fibs in take 10 $ genericFib 2 2 08:55:53 [2,2,4,6,10,16,26,42,68,110] 08:56:09 > let genericFib a b = let fibs = a : b : zipWith (+) fibs (tail fibs) in fibs in genericFib 2 2 08:56:10 [2,2,4,6,10,16,26,42,68,110,178,288,466,754,1220,1974,3194,5168,8362,13530,... 08:56:14 -!- cheater__ has quit (Ping timeout: 255 seconds). 08:56:37 not sure I understand what happened. 08:57:01 > let genericFib a b = a : b : zipWith (+) (genericFib a b) (tail $ genericFib a b) in genericFib 2 2 08:57:05 mueval-core: Time limit exceeded 08:57:06 > let genericFib a b = a : b : zipWith (+) (genericFib a b) (tail $ genericFib a b) in take 10 $ genericFib 2 2 08:57:07 [2,2,4,6,10,16,26,42,68,110] 08:57:35 It's just too slow without the sharing 08:57:44 I guess that's it. 08:58:04 seems like there could be a way to optimize situations like that to be equivalent. 08:58:11 Doing it in GHCi, your version is really slow 08:58:19 ah 08:58:34 take 30 takes 1.51 seconds 08:58:44 Versus 0.01 08:58:58 would they be equivalent when compiled? 08:59:03 No 08:59:12 GHC doesn't do that kind of transformation 08:59:14 It can introduce space leaks 09:00:48 http://www.haskell.org/haskellwiki/Performance/GHC#Common_subexpressions 09:09:44 -!- cheater__ has joined. 09:32:11 * Sgeo discovers Golly's Pattern Info feature 09:56:14 !msg 09:57:50 !sh echo "Your bot needs better documentation, Gregor" > /dev/null 09:58:04 lol 09:58:22 This is proper complaint procedure according to !info 10:02:50 -!- cheater__ has quit (Ping timeout: 255 seconds). 10:42:23 -!- jcp has quit (Ping timeout: 264 seconds). 10:44:35 -!- Phantom_Hoover has joined. 10:48:04 -!- jcp has joined. 10:55:27 corewars is a fairly interesting thing. 11:05:58 -!- azaq23 has joined. 11:12:56 What property of an algorithm causes it to diverge on infinite data? 11:13:11 Pretty sure that's undecidable. 11:13:44 I suppose that would involving the halting problem. 11:13:50 *involve 11:14:35 reminds me of http://www.xamuel.com/guessability/ 11:14:46 though that's not what you want 11:16:53 Seen on the SimplyNoise testimonial box: "My girlfriend and I use SimplyNoise every night." 11:26:32 ^_^ 11:28:16 Vorpal, I don't even want to think about why you did that, given your established predilections. 11:31:59 > foldl1 (flip seq) [1..100] 11:32:01 1 11:32:51 > foldl1 (flip seq) [1..] 11:32:58 mueval: ExitFailure 1 11:32:59 mueval-core: Time limit exceeded 11:33:07 efficient computing of the number 1. 11:33:18 it's a thesis I'm working on. 11:33:44 @src seq 11:33:45 Source not found. My pet ferret can type better than you! 11:33:48 :( 11:33:49 what's seq 11:33:54 Phantom_Hoover, what? Oh wrong tab -_- 11:34:03 not intended for this channel at all 11:37:42 Patashu: the first argument is forced to be strict, and then the second argument is returned. 11:37:56 it's the strictness primitive of Haskell (GHC? I don't know if it's portable) 11:38:00 aaah 11:38:23 it's commonly used in infix form. 11:38:28 so you apply flip seq to 1 and 2, you make 2 strict and return 1 11:38:32 then you apply it to 1 and 3 etc 11:38:34 ok 11:38:42 yes, it's a complete waste of time. :P 11:38:49 hehe 11:40:17 there's also "bang patterns", which lets you prepend a ! in front of a pattern to signify that it is strict. This can be more readable than using seq to force strictness. 11:40:22 it's a GHC extension. 11:45:03 when used correctly, it can dramatically speed up code. When used incorrectly, it can do absolutely nothing and make your code less pretty. In the worst case, it can hurt performance due to boxing/unboxing. 11:45:38 will GHC make something strict if it thinks it will help? 11:45:45 obviously not in every case but sometimes 11:46:01 yes 11:46:20 well, not if it thinks it will help, if it can and there's no reason not to. 11:47:29 if an expression is always evaluated by a function, then there's no reason to create the extra overhead of lazy evaluation. 11:48:42 though I think you need the -O flag for strictness analysis. 11:55:02 -!- FireFly has joined. 12:10:38 -!- Phantom_Hoover has quit (Ping timeout: 255 seconds). 12:33:17 -!- Phantom_Hoover has joined. 13:16:50 -!- azaq23 has quit (Quit: Leaving.). 13:17:16 Whoa, you can roast eggs. 13:24:00 Phantom_Hoover, oh, how? 13:24:17 just in an oven? 13:27:57 -!- cheater__ has joined. 13:39:33 -!- BeholdMyGlory has joined. 14:21:01 -!- augur has quit (Remote host closed the connection). 14:32:49 -!- copumpkin has quit (Quit: Computer has gone to sleep.). 14:56:31 -!- copumpkin has joined. 14:57:01 -!- augur has joined. 15:00:22 -!- Patashu has quit (Quit: MSN: Patashu@hotmail.com , Gmail: Patashu0@gmail.com , AIM: Patashu0 , YIM: patashu2 .). 15:32:51 -!- pikhq has joined. 15:33:17 -!- pikhq_ has quit (Ping timeout: 276 seconds). 15:44:23 -!- cheater__ has quit (Ping timeout: 255 seconds). 15:50:57 -!- derrik has joined. 15:51:27 -!- derrik has left. 16:01:10 -!- yiyus has quit (Remote host closed the connection). 16:37:28 -!- yiyus has joined. 16:53:59 hm, in C, how does __LINE__ behave in an #if? And what if you had #if __LINE__ == 10 .... #elif __LINE__ == 10 .... 16:54:52 hm works correctly 17:17:55 -!- pikhq has quit (Ping timeout: 252 seconds). 17:18:03 -!- pikhq has joined. 17:50:04 -!- zzo38 has joined. 17:51:32 If the rule against auras being creatures was not there, you could make a card like: Enchant permanent. This card is unblockable if attacking the player controlling enchanted permanent while that permanent is tapped. 17:57:16 You usually try to not make super-confusing cards. 17:59:50 Make up the card: All creatures are also planeswalkers until end of turn. 18:00:12 (I called it "Wrath of Gosh") 18:04:12 -!- choochter has quit (Quit: lang may yer lum reek..). 19:12:18 -!- oerjan has joined. 19:16:54 Ctrl-Q must die. 19:17:03 -!- augur has quit (Remote host closed the connection). 19:19:30 -!- CakeProphet has quit (Ping timeout: 276 seconds). 19:20:54 -!- CakeProphet has joined. 19:20:54 -!- CakeProphet has quit (Changing host). 19:20:54 -!- CakeProphet has joined. 19:36:23 pikhq: Elaborate? Context? etc? 19:44:49 zzo38: Q is right next to W. Q quits Firefox. W closes the current tab. 19:47:36 Because somehow, a hotkey *distinct* from Alt-F4 to close the program is helpful. 19:48:31 pikhq, wild guess: legacy reasons. On classical Mac OS (which Netscape Navigator existed for) Cmd-q was the normal way to exit applications. 19:49:15 Then WHY STICK THE CLOSE TAB SHORTCUT ADJACENT TO IT 19:53:33 -!- elliott_ has joined. 19:53:37 q 19:55:56 elliott_: i am sorry, but pikhq has just banned q 19:58:34 pikhq will die 19:58:51 19:48:31: pikhq, wild guess: legacy reasons. On classical Mac OS (which Netscape Navigator existed for) Cmd-q was the normal way to exit applications. 19:58:54 also OS X 20:00:52 elliott_, right 20:01:06 oerjan: hey, I need a very angry soundbite about using non-alphabetical symbols for variables in mathematics 20:01:08 oerjan: please provivde 20:01:21 Then WHY STICK THE CLOSE TAB SHORTCUT ADJACENT TO IT <-- also legacy reasons, Cmd-w was also close window (and probably is on OS X) 20:01:54 elliott_, you mean like 5 = 4.12? 20:01:55 pikhq: Possibly because of different window managers or something 20:01:55 ;) 20:02:17 (yes I know of that esolang) 20:02:33 how fortuitous 20:03:15 elliott_: what non-alphabetical symbols 20:03:31 elliott_: Do you not have microphone or angry computer speech? 20:03:37 oerjan: it's irrelevant 20:04:16 elliott_: um i mean i don't think that is very common 20:04:31 Still I would like to know what non-alphabetical symbols you mean and which ones specifically 20:04:34 oerjan: of course it isn't 20:04:43 Even if it is not relevant for such a sound. 20:05:55 (TeX allows you to use any symbol for variables in mathematics by using \mathord prefix) 20:10:24 04:02:18: since the OO stuff was just kind of thrown in Perl 5 simply for the sake of having it, and doesn't really integrate into the language very well. 20:10:24 have you ever used Moose? 20:10:25 CakeProphet: 20:11:53 nah, my sister tried but got bitten by it 20:12:47 (note: joke might work better if i actually had a sister) 20:12:56 04:19:42: strings just represent an unparsed form of a structure. for example, a parser can't just magically form a parse tree from a file, it needs to read it as a string first. 20:12:56 this is only necessary because filesystems store everything as strings 20:13:38 -!- zzo38 has left. 20:14:40 synchronistically, http://rjlipton.wordpress.com/2010/04/19/a-post-on-post/#comment-12208 20:15:20 elliott_: Gotta love that good ol' UNIX style. 20:15:25 04:49:50: honestly, I kind of prefer that Perl devs focused on improving Perl 5 without adding radically new semantics/syntax everywhere. 20:15:25 you realise perl six came about because that became way too difficult? 20:15:56 Quantum Systems Engineering 20:15:56 In Service of Regenerative Medicine 20:15:59 this john sidles person looks fun 20:16:25 04:50:30: (Pugs being a Perl 6 interpreter written in Haskell.) 20:16:29 pikhq: pugs is incredibly out of date and no longer maintained 20:17:14 elliott_: Yes, I realise. 20:17:16 -!- augur has joined. 20:17:23 elliott_: yes he does :P 20:18:39 oerjan: ? 20:18:43 oh 20:18:44 john sidles 20:18:47 yeah 20:19:35 always with a different perspective on the discussions 20:22:50 11:40:22: it's a GHC extension. 20:22:56 um isn't it in haskell twenty ten 20:23:16 * elliott_ maintains heavy scepticism over CakeProphet's explanations of the intimate workings of the GHC optimiser 20:26:31 elliott_: i don't find it (but pattern guards are) 20:26:57 hmm, http://hackage.haskell.org/trac/haskell-prime/wiki/BangPatterns 20:27:38 To recover Haskell 98 semantics for a pattern binding, use a tilde: 20:27:38 let ~(x,y) = e in b 20:27:50 heh, BangPatterns violates ninetyeight? 20:27:54 -!- CakeProphet has quit (Ping timeout: 255 seconds). 20:28:23 -!- CakeProphet has joined. 20:28:23 -!- CakeProphet has quit (Changing host). 20:28:23 -!- CakeProphet has joined. 20:29:03 21:46:01: I like it when people use "borealis" in random names. 20:29:05 sexy borealis 20:30:12 elliott_: well ! would be a new keyboard, presumably (although it's already used in data declarations) 20:30:20 >_< 20:30:25 *keyword 20:30:33 for me it _would_ be a new keyboard :D 20:30:35 `addquote as always in sweden everything goes to a fixed pattern: thursday is queueing at systembolaget to get beer and schnaps, friday is pickled herring, schnaps and dancing the frog dance around the phallos, saturday is dedicated to being hung over 20:30:36 BAD FINGERS 20:30:39 467) as always in sweden everything goes to a fixed pattern: thursday is queueing at systembolaget to get beer and schnaps, friday is pickled herring, schnaps and dancing the frog dance around the phallos, saturday is dedicated to being hung over 20:30:42 elliott_: well ! would be a new keyboard, presumably (although it's already used in data declarations) 20:30:44 oerjan: no, as in 20:30:46 To recover Haskell 98 semantics for a pattern binding, use a tilde: 20:30:46 let ~(x,y) = e in b 20:31:12 22:22:49: Did comex just call Java a fine language? 20:31:12 22:23:02: By pointing to a comment that called it a fine language, I mean 20:31:12 "Do I have to stop idolising him?!?!?!" 20:31:27 elliott_: oh that would be with the strict default suggestion i guess, that's not part of ! patterns alone is it 20:32:21 -!- zzo38 has joined. 20:32:59 elliott_: anyway haskell 2010 only got the parts of prime they managed to agree upon, obviously 20:33:13 oerjan: right 20:33:18 oerjan: they should just standardise GHC :P 20:33:33 but it's a moving target... 20:34:12 oerjan: it's the _only_ target :P 20:34:23 are there even any other compilers that work any more, apart from jhc? 20:34:29 or interpreters, even, every other project is dead 20:34:43 oh there might be that UHC thing 20:34:45 oh, and LHC 20:34:47 but that's it 20:34:52 oh ! cannot be a keyword because it's already an array operator 20:35:25 elliott_: by moving, i mean they cannot standardize on ghc's features until _ghc_ has had them settle down 20:35:30 comex: people who reply to your tweets are really retarded, my condolences 20:35:38 oerjan: here's the spec: Implementations must act identically to GHC. 20:35:52 ok joking, got it 20:36:38 oerjan: you didn't realise? :D 20:37:02 elliott_: until your spec i was assuming there was _some_ kernel of seriousness in there 20:37:25 well, I am serious that there are basically no other viable implementations any more, unfortunately 20:38:29 That won't work very well but maybe do something similar to what I was proposing with C, but do it differently in a way which is suitable for Haskell, instead. 20:39:20 elliott_: there is just too much in ghc for anyone else to reimplement most of it, by now... 20:39:50 oerjan: I'm not sure _that_ is true 20:40:00 oerjan: it's still simpler than C++ 20:40:18 and C++ ninety-eight takes about ten years to write a compiler for; C++0x I have no clue 20:40:46 well i am guessing C++ wouldn't have had more than one implementation either if the community size was the same as haskell's 20:41:03 And what I was proposing with C, is I mentioned list of things, which is a superset of C89 but a subset of GNU89. So maybe something similar idea with Haskell. 20:46:16 http://esolangs.org/wiki/Meta_Turing-complete 20:46:17 FUCK OFF TEHZ 20:46:18 JESUS CHRIST 20:46:23 THE WIKI IS NOT YOUR PERSONAL CRAP GROUND 20:46:41 (Also a subset of the features that Clang supports in GNU89 mode) 20:48:25 * elliott_ creates [[Talk:Meta Turing-complete]] 20:50:33 http://esolangs.org/wiki/Brainmaker 20:50:38 oerjan: how much do you love bf extensions 20:50:38 Uh... 20:50:40 Wait. 20:50:46 Isn't that term identical in meaning to "Turing complete" 20:51:16 heh, yes, tehz has the definition wrong 20:51:36 elliott_: Then explain that on the Talk page. 20:51:51 zzo38: i just did 20:51:54 i just realised 20:52:26 -!- CakeProphet has quit (Ping timeout: 240 seconds). 20:54:25 -!- monqy has joined. 20:55:37 hi monqy, tehz made another article 20:56:38 oh great 20:57:13 Brainmaker, eh? 20:57:20 * oerjan sidles away carefully 20:57:21 let me guess it's a brainfuck ripoff 20:58:39 ...tehz...:9 20:58:40 :( 21:01:34 -!- FireFly has quit (Quit: swatted to death). 21:01:44 monqy: nope 21:01:46 well yes 21:01:49 but the one newer than that 21:01:54 Meta Turing-complete 21:01:57 oh jeez another 21:02:00 Meta Turing-complete 21:02:03 which he deliberately un-hyphenised from the alpaca article when he created it for some reason 21:02:08 see the talk page :P 21:03:27 i never meta turing. he died before i was born. 21:04:33 -!- calamari has joined. 21:04:43 the article is confusing 21:05:25 Some super-Turing-complete languages are able to do anything (see Compute/IO), so they are super fully meta Turing-complete. 21:05:28 `addquote i never meta turing. he died before i was born. 21:05:29 468) i never meta turing. he died before i was born. 21:06:37 Infix notation is one of the 4 possible ways to describe a program. It is not as powerful as the others, so people usually add parenthesis, which makes it a combined notation (Infix-Surround). 21:07:21 fun fun super meta turing-complete 21:07:40 super duper meta cool turing-complete 21:12:00 -!- calamari has quit (Quit: Leaving). 21:13:46 oerjan: hmm, if you added a term "value ::? Type" (where Type is constant in the source ofc) to Haskell, of type Bool, would that cause any inconsistency or impurity? 21:13:47 e.g. 21:13:53 isInt :: a -> Bool 21:13:58 isInt x = x ::? Int 21:14:19 (x ::? (Num a) => a would only be true if x was of type "forall a. (Num a) => a", I think) 21:14:38 i.e. I'm not sure isNum :: a -> Bool; isNum x = x ::? (Num a) => a would do what you expected... 21:16:01 elliott_: it would break parametricity 21:16:36 "Currently, no one has even bothered looking into how to make an interpreter, so this are none. If you are less lazy than the other people reading this article, please make an interpreter, because I am too lazy." 21:16:40 oerjan: oh, duh 21:16:41 are there any typeclass extensions that would allow doing something like that 21:16:46 oerjan: hmm, but anything else? 21:16:50 monqy: no afaik 21:17:03 i think the ghc devs would notice breaking parametricity :P 21:18:15 elliott_: it would require an implementation that didn't delete types, naturally 21:18:48 oerjan: well duh, I mean as far as the language itself 21:19:37 elliott_: i doubt it would be _impossible_... 21:20:26 iiuc there is a fusion rule which depends on parametricity 21:21:47 elliott_: i doubt it would be _impossible_... 21:21:48 ? 21:21:56 oerjan: dude, I am just asking if it would break the _language_ 21:22:01 i don't care about implementation 21:22:18 elliott_: there's probably some extension which would break :P 21:22:53 i mean newtype deriving is already broken because of other parts that aren't parametric 21:23:24 what other parts? 21:24:05 gadts and type families 21:24:26 you can make unsafeCoerce by mixing them 21:24:40 oerjan: really?? 21:24:45 do you have an example? 21:24:47 that sounds cool 21:24:51 is it just like 21:24:54 lemme look it up 21:25:00 data Foo a where lol :: b -> Foo a 21:31:28 hm it's http://hackage.haskell.org/trac/ghc/ticket/1496 but i'm not sure there's an explicit unsafeCoerce construction 21:32:17 well i guess the example converts between Int and Double 21:33:14 I bet http://hackage.haskell.org/package/eq would let you do horrible things with that 21:33:16 last i heard they were going to introduce new kinds to fix this 21:33:46 ooh, wait 21:33:55 I think you can actually do unsafeCoerce with just eq 21:36:58 http://sprunge.us/DYOQ -- but it's actually not unsafe... 21:36:58 it's == undefiend 21:36:59 undefined 21:36:59 so oh well 21:37:00 oerjan: dammit, the GHC devs thought of this 21:37:01 data a := b where 21:37:02 Refl :: a := a 21:37:02 coerce :: a := b -> a -> b 21:37:03 coerce Refl a = a 21:37:03 typechecks 21:37:04 coerce :: a := b -> a -> b 21:37:04 coerce ~Refl a = a 21:37:05 doesn't 21:37:29 wat 21:37:48 oerjan: because "coerce undefined a" == _|_ in the first version 21:37:48 how can a lazy pattern match change typing 21:37:56 oerjan: because GADTs do 21:38:05 remember, bringing a GADT constructor into scope can change types 21:38:09 oh 21:38:10 that's the whole point of pattern-matching on a GADT 21:38:16 if you make it irrefutable, you can pass in _|_ 21:38:20 and introduce a type-system inconsistency 21:38:31 very clever for GHC catching that 21:38:32 heh 21:38:35 [asterisk]of GHC for 21:44:12 -!- CakeProphet has joined. 21:44:12 -!- CakeProphet has quit (Changing host). 21:44:12 -!- CakeProphet has joined. 21:47:14 -!- elliott_ has quit (Remote host closed the connection). 21:47:50 -!- elliott has joined. 21:50:54 oerjan: "You cannot use atomically inside an unsafePerformIO or unsafeInterleaveIO. Any attempt to do so will result in a runtime error. (Reason: allowing this would effectively allow a transaction inside a transaction, depending on exactly when the thunk is evaluated.)" 21:50:54 elliott: You have 3 new messages. '/msg lambdabot @messages' to read them. 21:51:00 oerjan: hard to articulate how much that scares me 21:51:12 (that it's common enough that they had to check for it, and that unsafePerformIO /can/ be detected) 21:53:45 elliott: Judging from Google, before they tested for it doing that would segfault. 21:54:08 but how do they test for it :D 21:54:22 Also, they're not testing for unsafePerformIO or unsafeInterleaveIO, they're testing to see if there's a transaction within a transaction. 21:54:30 ah 21:55:14 -!- CakeProphet has quit (Ping timeout: 240 seconds). 21:55:18 And the message is there because they got annoyed by people asking on the mailing list about it. 21:55:19 um that would not seem to be implied by "Any attempt to do so will result in a runtime error." 21:57:02 i guess they could make unsafePerformIO and unsafeInterleaveIO set up a fake transaction automatically if it _wasn't_ inside one 21:57:18 -!- CakeProphet has joined. 21:57:20 but that sounds inefficient :P 21:57:27 huh, GLUT is unmaintained? 21:57:43 anyway btw i think pikhq is wrong 21:57:50 elliott: what, it's in the platform? 21:57:53 newTVarIO :: a -> IO (TVar a) 21:57:54 IO version of newTVar. This is useful for creating top-level TVars using System.IO.Unsafe.unsafePerformIO, because using atomically inside System.IO.Unsafe.unsafePerformIO isn't possible. 21:57:56 oerjan: no, in general 21:58:02 oerjan: not the haskell lib 21:58:06 GLUT itself 21:58:17 also it's not open source... 21:58:24 oh wait 21:58:28 there are maintained forks :) 21:58:30 well, not forks 21:58:33 reimplementations i guess 21:59:32 -!- CakeProp1et has joined. 22:01:35 hey pikhq how do you link to glut :q 22:02:06 -!- CakeProp2et has joined. 22:03:01 -!- CakeProphet has quit (Ping timeout: 258 seconds). 22:05:15 -!- CakeProp1et has quit (Ping timeout: 276 seconds). 22:07:58 -!- CakeProp2et has quit (Ping timeout: 246 seconds). 22:09:50 -!- CakeProphet has joined. 22:09:55 -!- CakeProphet has quit (Changing host). 22:09:55 -!- CakeProphet has joined. 22:10:54 -!- clog has quit (Ping timeout: 276 seconds). 22:10:59 -!- clog has joined. 22:11:18 Ok, that's awesome 22:11:25 * Sgeo wonders how golly-ticker.rle was made 22:15:19 -!- CakeProphet has quit (Ping timeout: 246 seconds). 22:17:21 -!- CakeProphet has joined. 22:23:06 -!- CakeProphet has quit (Ping timeout: 250 seconds). 22:24:52 -!- CakeProphet has joined. 22:24:56 -!- CakeProphet has quit (Changing host). 22:24:57 -!- CakeProphet has joined. 22:25:27 -!- iconmaster has joined. 22:30:36 * Sgeo wonders how golly-ticker.rle was made 22:30:37 -!- CakeProphet has quit (Ping timeout: 258 seconds). 22:30:59 Glider → glider, LWSS converter, some reflectors. 22:31:09 Not terribly complex. 22:31:57 How much would I have to learn before I could make my own tickers? 22:32:08 Fact that I have to ask is probably a bad sign 22:32:11 ...next to none? 22:32:20 You just change the pattern of gliders in the loops. 22:37:24 -!- CakeProphet has joined. 22:37:24 -!- CakeProphet has quit (Changing host). 22:37:24 -!- CakeProphet has joined. 22:40:57 -!- copumpkin has quit (Quit: Computer has gone to sleep.). 22:45:03 http://esolangs.org/wiki/Rand.Next%28%29 22:45:07 neither turing-complete nor a language; discuss 22:45:57 -!- CakeProphet has quit (Ping timeout: 258 seconds). 22:46:38 rand.Next() is esoteric and created by user Checkmate. 22:47:02 I think I'm missing the point 22:47:04 is it art? 22:48:39 it's shit 22:48:51 an excrement language 22:50:26 today is a good day for bad things 22:50:58 so basically, today is the day when the concept of turing-completeness dies a horrible, messy death? 22:51:50 well it _is_ the end times. after the rapture and all. 22:52:48 -!- CakeProphet has joined. 22:52:48 -!- CakeProphet has quit (Changing host). 22:52:48 -!- CakeProphet has joined. 22:52:50 oerjan: can you delete that and the meta turing completeness page 22:52:51 thanks 22:53:16 leave infix notation page for hilarity 22:54:23 elliott: IN UNIVERSO ALTERNATIVO, OERJAN PAGINAS DELET 22:54:37 Maybe Hutton32 might be easier for my brain to understand? 22:54:37 `addquote oerjan: can you delete that and the meta turing completeness page thanks elliott: IN UNIVERSO ALTERNATIVO, OERJAN PAGINAS DELET 22:54:39 469) oerjan: can you delete that and the meta turing completeness page thanks elliott: IN UNIVERSO ALTERNATIVO, OERJAN PAGINAS DELET 22:54:55 `quote asdf 22:54:56 No output. 22:56:24 -!- cheater__ has joined. 22:56:32 * oerjan was worried he'd got the conjugation wrong there 22:56:48 horrific 22:58:37 elliott, was I ever as bad as Checkmate or the Meta-turing-complete person? 22:59:06 DON'T ANSWER THAT 22:59:49 i was avoiding it 22:59:54 :D 23:00:00 good, good 23:00:16 :( 23:03:58 -!- CakeProphet has quit (Ping timeout: 258 seconds). 23:04:23 -!- CakeProphet has joined. 23:04:23 -!- CakeProphet has quit (Changing host). 23:04:24 -!- CakeProphet has joined. 23:05:14 Sgeo: i hope you _do_ realize no one could make a non-snarky response to that kind of question... 23:05:41 not even turing? 23:06:54 NOT EVEN TURING 23:07:16 happy 99th 23:18:58 I wish GHC had idiom brackets 23:19:08 Hmm, you could actually do [i| ... |] with Template Haskell 23:19:16 applicative-quoters library: Quasiquoters for idiom brackets and an applicative do-notation 23:19:18 Success? 23:19:29 Hehe, it uses i too 23:19:31 http://hackage.haskell.org/packages/archive/applicative-quoters/0.1.0.1/doc/html/src/Control-Applicative-QQ-Idiom.html#i 23:23:57 -!- CakeProphet has quit (Ping timeout: 240 seconds). 23:26:08 -!- CakeProphet has joined. 23:26:08 -!- CakeProphet has quit (Changing host). 23:26:08 -!- CakeProphet has joined. 23:34:42 !perl print grep // (1,2,3) 23:34:43 Not enough arguments for grep at /tmp/input.22143 line 1, near "// (" 23:34:46 !perl print grep //, (1,2,3) 23:34:46 123 23:34:54 !perl print grep /\Q\E/, (1,2,3) 23:34:55 123 23:36:15 > foldr shows "" [1,2,3] 23:36:16 "123" 23:38:37 i have this doubt that oerjan knows about TH 23:39:14 i know _about_ TH, i just don't _know_ TH 23:39:19 :D 23:40:00 Maybe Hutton32 might be easier for my brain to understand? 23:40:04 > iterate((shows.length<*>(:).head).group)"1" 23:40:05 As opposed to...? 23:40:05 Couldn't match expected type `GHC.Base.String' 23:40:05 against inferred typ... 23:40:08 ff 23:40:15 !perl print (my ($a, $b) = (1,$a)) 23:40:15 1 23:40:23 yeah, didn't think that would work. 23:40:29 I don't understand how the 32-cell VN CAs work. 23:40:32 They're deep magic. 23:40:41 oh, maybe you need haskell-src-meta 23:41:43 > iterate(($"").(shows.length<*>(:).head).group)"1" 23:41:45 Couldn't match expected type `[GHC.Types.Char] -> b' 23:41:45 against inferr... 23:41:47 ff 23:42:05 CakeProphet: unification or just lucky evaluation order? 23:42:20 > (shows.length<*>(:).head).group)"1" 23:42:21 : parse error on input `)' 23:42:26 lucky scoping too or something? 23:42:26 I was hoping for lucky evaluation order. :) 23:42:30 > ((shows.length<*>(:).head).group)"1" 23:42:31 Couldn't match expected type `GHC.Base.String' 23:42:32 against inferred typ... 23:43:11 oh hm 23:44:27 I think this is the most obscene thing I've written in Perl so far: http://pastebin.com/XPcjXL4p 23:44:43 > ((shows.length<*>(:).head)<= Couldn't match expected type `GHC.Base.String' 23:44:44 against inferred typ... 23:44:53 it's actually not too bad. Just slightly abusive with map and grep 23:45:01 and $_'s 23:45:02 !perl my ($a, $b) = (1, $a); print $b 23:45:04 !perl my ($a, $b) = (1, $a); print $a 23:45:05 1 23:45:14 nice silent failure, perl 23:45:31 monqy: oh it works fine as an expression, it's just the expression doesn't work like that. 23:45:41 it will return (1,undef) from the assignment 23:45:53 instead of (1,1), which is what I was going to see if it did. 23:46:08 with use strict you would get an actual error of some kind I believe. 23:48:03 -!- azaq23 has joined. 23:48:11 > let (a,b) = (1,a) in (a,b) 23:48:12 (1,1) 23:49:04 oerjan: reminds me of tying the knot 23:49:11 yeah 23:49:27 let (a, b) = (1, a : b) in (a, b) 23:49:29 oops 23:49:31 > let (a, b) = (1, a : b) in (a, b) 23:49:32 (1,[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1... 23:49:47 mm 23:50:25 I imagine there's some hideous way to do that in perl too 23:50:33 no not really. 23:50:42 well, yes. it's just too hideous to be obvious. 23:51:53 you would have to force laziness, with a number of possible methods. 23:53:06 oh hey I just realized something I could do to make adding commands to my bot a cleaner process. 23:53:17 Phantom_Hoover, as opposed to that golly ticker thig 23:53:19 thing 23:53:27 i like how everyone in #haskell thinks augur was just really creepy to a random person for no reason 23:53:42 Sgeo, the Golly ticker isn't very complex at all, like I keep telling you. 23:54:00 elliott, I wasn't in there, what happened? 23:54:06 Sgeo: rocks fell and everyone died 23:54:09 elliott: creepy? whos acting like im creepy 23:54:12 noone thats who! 23:54:57 one nice thing about Perl that it has in common with Haskell is that it's fairly trivial to define your own control structures. 23:58:29 sub with($&) {open my $f, shift; shift->($f); close $f} 23:58:52 with '>file.txt' {...} 23:59:00 that involves using prototypes though. 23:59:06 ...yes it does. 23:59:17 mmm delicious perl 23:59:38 actually for alphanumeric strings you can use =>, so then... 23:59:46 add_cmd help => {...} 23:59:56 that produces a warning.