00:06:11 -!- DoA-TheGreat has joined. 00:06:11 -!- DoA-TheGreat has left. 00:08:26 and his faithful dog DoB-Do 00:08:48 you think you're so cool 00:08:52 but let me tell you something 00:12:02 -!- Phantom_Hoover has quit (Remote host closed the connection). 00:13:22 btw i proved that every sequence in roman numeral look and say grows exponentially 00:13:32 you sneaky bastard! 00:13:41 :D 00:14:00 i'm not yet sure whether it always grows at a constant limit speed though 00:14:21 you can tell me later, i'm trying to get to work at a sensible time today 00:14:28 namely now 00:14:34 basically, the substring VIIIVIIIIVIIIVI always arises, and is self-replicating 00:15:17 cool 00:16:53 wait 00:16:59 where are the breaks in that sequence 00:17:13 breaks? 00:19:18 it could be 52434241 or 8986 or something else in between, depending on which standard you choose 00:19:32 oh 00:19:49 in that case there are no breaks 00:21:12 or actually there's a break before every letter 00:22:15 oerjan: can you tell me the details? 00:23:07 -!- Tritonio has quit (Ping timeout: 260 seconds). 00:26:34 quintopia: I II III IV V VI (VII VIII ...) are the numerals i use (the larger ones disappear after two-three iterations) 00:26:58 I II III IIII IVI IIIVII IIIIIVIII VIIVIIII IVIIIIVIVI IIIVIVIIVIIIVII IIIIIVIIIVIIIIVIIIIIVIII VIIVIIIIIVIVIIVVIIVIIII IVIIIIVVIIVIIIVIIIIVIVIIIIVIVI IIIVIVIIVIVIIIIVIIIIIVIVIIVIIIVIVIIVIIIVII IIIII(VIIIVIIIIVIIIVI)VIIVVIIVIIIVIIIIVIIIIIVIIIVIIIIVIIIIIVIII 00:27:16 yeah that looks right to start with 00:27:26 -!- azaq23 has joined. 00:27:36 and for V, the same thing happens + extre 00:27:39 *extra 00:27:39 oerjan: could you please put the breaks in as hyphens so i can tell the difference between 3 and 12? 00:27:43 maybe you pasted my quote from yesterday 00:27:55 oerjan: no i did that just now 00:28:03 quintopia: um they are melted together after each step 00:28:22 wasn't all too careful but anyhow easy to believe, now i just have to make sure you didn't lie about self-replicating 00:28:36 say IIIVII -> III-I I-V II-I -> IIIIIVIII 00:29:24 oklofok: note i needed to consider a few different environments, also i checked with a haskell program 00:29:26 I I-I I-II I-III IV-I I-I-I-V-I-I III-I-I-V-II-I etc. 00:29:51 ah environments 00:29:56 quintopia: um no other way around for some of those 00:29:58 it's not actually context-free is it... 00:30:42 oklofok: um what does that mean here... 00:31:17 oerjan: that a I doesn't actually evolve like that if there's something around it 00:31:33 but maybe it essentially does, i haven't thought about this 00:31:57 VIIIVIIIIVIIIVI IVIIIIIVIVIIVIIIIIVII IIIVVIIVIIIVIIIIVVIIVIII IIIIIIVIIIIVIIIIIVIVIIIVIIIIVIIII VIIIVIVIIVVIIVIIIVIIIIIVIVIIVIVI IVIIIIIVIIIVIIIIIVIIIIVIIIIIVVII(VIIIVIIIIVIIIVI)I aaaaaand we're there 00:32:27 oklofok: indeed. in fact that string i quoted is really |IIIVIIIIVIIIV| where the | signifies that if there is a letter on the other side it cannot be the same one 00:32:37 -!- copumpkin has quit (Quit: Computer has gone to sleep.). 00:32:45 ah okay 00:33:28 oklofok: the clue here is that if you remove all initial V's after each step, it looks like you are _very_ likely to hit something beginning with that string eventually 00:34:41 idgi 00:35:04 and you can check that this is true for each of I, II, III, IV, IIV, ... IIIIIIV 00:36:33 not getting this at all man 00:36:35 not at all 00:36:43 oklofok: well to start with the beginning. the problem with this variation compared to ordinary look and say is that there are no atom boundaries (ignoring digits X, L etc. which don't matter after a few steps) 00:37:04 02:14:50 you can tell me later, i'm trying to get to work at a sensible time today 00:37:10 every sequence fluctuates between starting with I and starting with V 00:37:14 that is 03:14:50 for him 00:37:15 -_- 00:37:32 oerjan: yes 00:38:36 Vorpal: what about it 00:38:43 well actually i haven't done the case analysis but anyhow 00:38:48 Vorpal: morning work best of works 00:38:59 hah 00:39:13 i have all the math to myself 00:39:15 well i did, V -> I immediately and I -> V in at most 6 steps iirc 00:39:27 VVVVV => VV 00:39:55 btw you can have at most 2 V's and 6 I's in sequence after the 3rd or 4th generation or so 00:40:06 ah yes 00:40:23 okay then i'm good 00:41:01 it follows that every block of V's turns into either IV or IIV. thus every block of V's _always_ interacts with the previous block 00:42:24 because if there's a five, then more I's before the V, and if there's an I, then more I's on the next generation 00:42:27 i therefore mostly merge them together, and treat my basic units as IV, IVV, IIV, IIVV, IIIV, IIIVV, IIIIV, IIIIVV, IIIIIV, IIIIIVV, IIIIIIV and IIIIIIVV 00:42:40 okay 00:42:57 with beginning and end of the whole string sometimes exempted 00:43:21 -!- Vorpal has quit (Read error: Operation timed out). 00:43:37 when we do this, we see that blocks can send information to the previous block, in the form of an extra V occasionally 00:43:48 oerjan: please tell me it's tc 00:43:52 i'll explode with happy 00:44:02 also only the blocks IIIIV and IIIIVV split into two blocks 00:44:13 how can they send an extra V? 00:44:17 elliott_: i don't know yet, i've just shown it must grow exponentially 00:44:23 just tell me anyway 00:44:34 well consider our fundamental example 00:44:58 just tell me anyway 00:45:18 tell me it's tc 00:45:27 |IIIV|IIIIV|IIIV| -> |IIIIIV|IV|IIV|IIIIIV| -> (V)|IIV|IIIV|IIIIVV|IIV| 00:45:36 -!- elliott_ has changed nick to elliott. 00:45:38 -!- elliott has quit (Quit: Leaving). 00:45:47 -!- elliott has joined. 00:45:50 elliott_: given four strings u, v, w and z it is RE-complete to tell whether z appears in the orbit of inf^u v w^inf 00:46:03 you see that the blocks with 5 or more I's at each step turn into something beginning with V, which is then merged with the previous block 00:46:09 oklofok: no i just want oerjan to tell me that it's tc 00:46:11 kthx 00:46:20 oerjan: can you copy my line for elliott 00:46:37 wat 00:47:15 oerjan: he doesn't like me telling him things 00:47:36 heh 00:47:50 oh yeah five ones does indeed send a V 00:48:04 so I and V are the only characters right 00:48:16 well, maybe if it's tc you need to insert others, but that's kinda bleh 00:48:19 (into the initial string) 00:48:39 elliott: the others if you include them shrink quickly to single isolated digits 00:48:47 so they're irrelevant good 00:48:56 so you can make a nice pretty drawing program ;D 00:48:58 that can be treated as simply equivalent to V followed by an atom boundary 00:49:12 (also that's the sense in which 110 has been proven tc, in case someone missed the reference for some reason) 00:49:29 (these being the _only_ atom boundaries) 00:49:36 heh 00:50:54 oklofok: now notice that information can only flow leftward in this view 00:51:02 noted 00:51:52 which means that we don't need to worry about what's to the left in order to find out how the blocks themselves evolve. thus i experimented with throwing away the initial V's at each step 00:52:08 ppl can have poop children to their left and also send a new V to their leftmost block 00:52:12 *neighbor 00:52:44 alrighty 00:52:57 makes sense 00:53:03 now i wanna know how that 110 proof goes 00:53:54 so oerjan you know the polynomial hierarchy right 00:54:24 well slightly, it's P^NP, P^P^NP etc. isn't it, and maybe something above that too 00:54:26 a language is sparse if there are only at most p(n) elements of length at most n in it 00:54:45 actually it's P^NP^NP^NP^NP... 00:54:59 P^P^NP = P^NP 00:55:00 oh right 00:55:19 -!- copumpkin has joined. 00:56:12 so you define Sigma_0 = Pi_0 = P, and then Sigma_(i+1) = NP^Sigma_i, Pi_(i+1) = co-Sigma_i 00:56:25 the point of Pi's being clear once i explain the alternative view to this 00:56:26 i don't know the details of that 110 proof i just know it's based on finding gliders that interact the way you want, and making a tag system out of them that requires infinite chain of incoming gliders from both left and right 00:57:13 and there are diagrams of the gliders on the net 00:57:37 (probably on wikipedia, although there was a site that went into some detail of classification) 00:57:46 Sigma_i means you have i alternating quantifiers starting with existential, and Pi_i starts with universal, that is, we have an i-ary predicate, and in Sigma_i we guess the first word w_1, universally quantify over the next w_2, then guess the next and so on, and finally check the predicate for the original input and all the w_i 00:58:19 i-ary predicate that's a P language that is 00:58:51 yeah this fits into how QBF is PSPACE complete 00:59:10 in NP you guess a string of polynomial length, in Pi_1 you universally quantify over all strings of polynomial length, and in general there's alternation up to some length 00:59:50 it does, although i'm not sure in which exact sense 01:00:10 in any case, the polynomial hierarchy is just the union of the Sigma_i 01:00:24 i mean what you are doing is just bounding the number of quantifier switches in a QBF problem, i think 01:01:02 yes, but why does not bounding it give you PSPACE, is there a connection between PSPACE and PH? 01:01:08 haha, M-x rot13-other-window 01:01:12 more than just inclusion 01:01:15 (having the same quantifier several times in sequence doesn't increase the count) 01:01:46 well not bounding means having a polynomial rather than constant bound, i guess 01:02:02 we also define some intermediate classes, namely Delta_(i + 1) = P^Sigma_i, and Theta_(i + 1) = polynomial deterministic languages except you can do a logarithmic amount of queries to Sigma_i 01:02:31 don't they always 01:02:45 don't they always what? define intermediate classes? :P 01:02:58 in any case, now i can finally list some results 01:03:10 anyone here know offhand how SMBC is licensed? 01:03:12 generalize to the max 01:03:32 oerjan: sure, but i'm not just giving Theta for fun, i'm using it in a second 01:03:55 as we already know from my previous rants, if there is a sparse co-NP-hard or NP-hard language, then P = NP 01:04:06 that is, the polynomial hierarchy collapses to P 01:04:15 (by induction) 01:04:17 ok 01:04:20 however 01:04:38 this is for hardness w.r.t. many-one reductions or bounded truth table reductions only 01:04:43 familiar with those? 01:04:51 i have to go to bed very soon 01:05:06 well i'm not doing anything complicated, just giving neat results 01:05:14 :P 01:05:34 um as in you have five minutes 01:05:39 ah 01:05:45 i don't know the details of that 110 proof i just know it's based on finding gliders that interact the way you want, and making a tag system out of them that requires infinite chain of incoming gliders from both left and right 01:05:48 is it actually proven? 01:05:49 well are you familiar with those? 01:05:54 I thought thirty was but not one-one-zero 01:05:56 or am I mixing those up? 01:06:06 nothing is known about 30 01:06:09 elliott: probably mixing up, 110 was the famous proof... 01:06:12 and it's not the next on the list even 01:06:36 with patented wolfram inflation 01:06:37 55 or something is the next one to be proven re-complete for the problem i just gave 01:06:51 it's the one with the dancing mushrooms 01:07:26 hm is that the totalistic one 01:07:33 oerjan: many-one reduction from L to L' means you have a deterministic polynomial time turing machine A s.t. w in L iff A(w) in L' 01:08:15 bounded truth table reductions mean you have some constant k such that you have a polynomial turing machine that can do exactly k queries to L', this amounts to just having a truth table 01:08:40 mhm 01:08:58 as for turing reductions, that is, having a sparse set S as the oracle, things get slightly more hairy 01:09:17 if there is a sparse NP-hard set S w.r.t. turing reductions 01:09:25 then PH = Sigma_2 01:09:32 (that is, NP^NP) 01:09:47 if there is a sparse NP-complete set S w.r.t. turing reductions 01:09:58 then PH = Omega_2 01:10:12 (logarithmic amount of queries to NP) 01:10:27 that is all 01:10:42 um i think you called Omega Theta above 01:10:49 yes i did, sorry 01:11:00 in my head it's the actual symbol 01:11:02 i misread 01:11:03 :P 01:11:06 heh 01:11:15 well thanks and good night 01:11:20 yup nighties 01:11:27 -!- oerjan has quit (Quit: leaving). 01:11:42 will give the actual proofs once i grasp them a bit better 01:12:35 for a sparse NP-complete set, the proof is not very hard, but for a hard one, it is not very complete. erm i mean it's pretty complicated. 01:27:14 -!- ralc has quit (Quit: Leaving). 01:32:06 My linear algebra professor is pretty quick on grading. 01:32:16 I've already got the grade on my final. 01:32:24 It was earlier today. 01:32:29 "E" 01:32:46 monqy: ? 01:33:11 never mind 01:37:40 our cellular automata exam was graded in about 30 minutes 01:37:49 then again there were like 5 people taking it 01:38:15 True, it does help when you're taking a class with a handful of other people. 01:38:39 i wish i could take that class. it sounds awesome. 01:38:42 Now just waiting on one more class's grade. 01:39:23 the cellular automata class was pretty awesome 01:41:54 lecture notes can be found at http://users.utu.fi/jkari/ca/, highly recommended 01:42:03 there aren't really any books on ca 01:43:04 and if someone says a new kind of science i'm going to explode :D 01:43:20 ais523 should write one. 01:43:24 oklofok: try a new kind of science 01:43:26 pikhq: ais does ca? 01:43:33 erm what does ais know 01:43:37 elliott: Well, he's done at least one at the behest of Wolfram. 01:43:50 the guy who wrote those lecture notes should write a book 01:44:04 i doubt ais knows even the basics of ca theory 01:44:21 pikhq: eh? 01:44:23 although making specific ca's is of course a very useful skill 01:44:24 two,three wasn't a ca 01:44:32 and i'm sure ais is very good at that 01:44:39 Oh, it wasn't? Thought it was a CA. Anyways. 01:44:48 I'm not sure why I said that, anyways. 01:45:43 i'm gonna say it too now, so you don't get too self-conscious 01:45:50 ais523 should write a book on ca. 01:46:20 okay maybe finally worky time -> 01:47:00 so are emacs regexp the same as perl's? 01:48:04 CakeProphet: no 01:48:14 emacs is older than perl i think anyway 01:48:15 yes it is 01:48:23 they're more like posix regexps 01:54:55 wow. swedes are the most likely to be immune to HIV? damn you again, swedes! 01:56:38 -!- augur has quit (Remote host closed the connection). 02:00:23 -!- CakeProphet has quit (Ping timeout: 246 seconds). 02:03:02 -!- augur has joined. 02:19:58 -!- CakeProphet has joined. 02:19:58 -!- CakeProphet has quit (Changing host). 02:19:58 -!- CakeProphet has joined. 02:21:05 Oh hey, a perl regex extension. 02:21:43 because, honestly, I don't really feel like learning an outdated regex syntax.. 02:24:23 How many regex syntaxes are there? 02:24:27 its literally identical 02:24:30 apart from \ before ( and ) i think 02:24:42 Sgeo: As many as there are implementations of regular expressions. 02:25:03 tbf pikhq, they all have the basics the same 02:25:14 * is always kleene star 02:25:21 [] is always a character class 02:25:22 Yeah, they do have a reasonable common subset. 02:25:42 Helps that they're all pretty much reimplementations of ed regexps. 02:26:01 and you could at least do matching of arbitrary r.e.s with that common subset 02:26:42 | requires escaping as well 02:27:08 and the \ special characters are pretty different. 02:28:17 and it doesn't seem to have lookaround. 02:33:54 awww, the link is broken. No perl regex in emacs seems to exist. 02:37:57 -!- augur has quit (Remote host closed the connection). 03:07:14 Y'know, the Nazis had the most *amazing* hubris. 03:11:00 I'm going to write a language that compiles to LSL 03:11:24 what's so great about lsl 03:11:33 apart from it being used in second life 03:11:39 That's the only thing good about it. 03:12:27 the question now is what's so great about second life 03:14:03 virtual world zomg 03:14:45 and what could you possibly want to script in it 03:15:16 hey Sgeo what's the function to form a range sequence in racket 03:15:18 A helmet that takes you 340 trillion trillion trillion meters up 03:15:21 (for ([i ???]) ...) 03:15:28 in-range 03:15:36 oh right that 03:15:50 im making an HQ9+ interpreter dude 03:15:52 You started making fun of me again when I was pulling my hair out looking for it 03:15:54 why do you want to go 340 trillion trillion trillion meters up in second life 03:15:58 Sgeo: yep 03:16:02 except mine is better cuz its an actual racket language 03:16:08 oh snap 03:16:13 yeah 03:16:18 I gave up on mine when it stopped being fun 03:16:26 #lang reader "hq9+.rkt" 03:16:27 HQ9+ 03:16:30 totally a valid program now 03:16:32 if you install it globally 03:16:34 #lang hq9+ 03:16:35 HQ9+ 03:16:40 it even exports the final accumulator as a module 03:16:47 fuckin' integrated up the ass 03:17:00 I still haven't really read about or absorbed the module system 03:17:32 Y'know what's better than Second Life? 03:17:34 *Minecraft*. 03:17:46 pikhq, there's no scripting in Minecraft 03:17:58 Sgeo: There's Redstone. What else could you want? 03:18:25 The ability for redstone to affect any change I want in the area around it 03:18:33 HEATHEN 03:18:49 Sgeo: pistons 03:19:14 racket's documentation is awesome 03:22:05 -!- augur has joined. 03:24:13 hey Sgeo what's the function to concat n sequences 03:35:40 Probably something ending in -append or -append*? 03:36:11 is it stream-concat 03:36:28 I dunno what a sequence is but 03:36:30 it's stream-append 03:36:32 erm 03:36:33 sequence-append 03:36:39 oh 03:36:51 im just thinking now how to handle the ~elegance~ 03:36:53 that in-range thing said it made a stream I think?? 03:37:10 monqy, streams are sequences 03:37:36 and I searched for stream concat and found stream-concat I guess 03:37:44 maybe I should actually learn racket sometime 03:38:15 stream-concat is in one of Racket's SRFI thingies 03:38:23 srfi 41 03:38:38 scheme request for implementation right 03:39:18 begin (possibly implicit): bad syntax (illegal use of `.') in: (begin . #) 03:39:19 heh 03:39:23 monqy: yes 03:39:44 racket is intimidating 03:40:01 so much standard library & other extra stuff 03:41:22 things with # in them are especially spooky 03:42:35 -!- azaq23 has quit (Read error: Operation timed out). 03:43:56 hmm 03:43:59 does for actually result in anything 03:44:07 What is it called when an anonymous function can access and read variables bound at the higher level, like a closure, but can't modify them such that the higher level sees the modification? 03:44:52 oh, i need for/list 03:45:06 even sgeo knew to use for/list 03:45:09 Sgeo: can they still mutate the objects if they're mutable? 03:45:11 you should learn from the master 03:45:12 e.g. append to a list in a higher scope 03:46:05 Hmm. Not sure. Let's say yes (Although I want to know the answer for no too) 03:48:17 Sgeo: then python two scoping is what it is calle 03:48:17 d 03:48:20 aka terrible scoping 03:49:00 Well, keep in mind that I am n00bishly trying to imagine how I'd compile a language with lambdas into a language without them 03:49:34 I'd make a huge funcall() function, which would accept a string naming the function, a list of bindings for the "closure", and a list of arguments 03:49:34 ok, everything works but Q as a FULL RACKET LANGUAGE 03:50:19 or 03:50:21 you could just 03:50:25 transform scopes into mutable structures 03:50:32 with pointers to their parent scopes 03:50:41 and have a closure be code + scope 03:50:45 why would you even want mutability 03:52:02 oh right you probably can't optimize the lsl or whatever it is very well to make up for a pure functional language 03:52:17 I don't think LSL has tail recursion. Easy fix: Functions (after being transformed into something vaguely-CPS-like) just return the next function, instead of calling it 03:52:40 so trampolining? 03:52:44 Yes 03:52:50 iirc what trampolining is 03:53:23 you could also do TCO on it if you have the necessary control structures 03:53:30 (you probably don't) 03:54:38 Well, my current vague plan is to go code with continuations -> intermediate language with first class functions in CPS -> LSL 03:54:53 . hq9+.rkt:11:0: read: expected a `)' to close `('; indentation suggests a missing `)' before line 15; newline within string suggests a missing '"' on line 38 03:54:59 -> hats that take you into the air 03:55:01 Sgeo: Why do you need continuations 03:55:09 Oh, I see. 03:55:20 maybe it's useful for making hats or something 03:55:39 Sgeo: did you actually understand what i said about scopes 03:56:20 elliott, not.. really, no... but are you asking just to ask, or do you think it's relevant to why I want continuations (it isn't) 03:56:41 Sgeo: i was asking because otherwise you're going to implement it terribly? 03:56:49 but im actually surprised you've managed to not understand something that simple, gj 04:08:29 -!- elliott has quit (Ping timeout: 246 seconds). 04:09:09 -!- sebbu has quit (*.net *.split). 04:12:03 -!- sebbu has joined. 04:13:16 Fucking Linnaean taxonomy. 04:13:20 Why does anyone still use it? 04:15:39 inertia 04:15:45 Fuck inertia. 04:16:04 why is your country still serving me drinks in some unit called an 'ounce' 04:16:09 not to be confused with an 'ounce' 04:16:22 Because we hate everyone outside the country. 04:16:36 im in ur country 04:16:38 working ur jobz 04:16:40 Incidentally, the unit is a "fluid ounce". Not to be confused with the "dry ounce" or the "ounce". 04:17:00 (note: dry ounce archaic) 04:26:54 Oh, duh 04:26:58 I understand what you said 04:27:52 And e left 04:31:42 I can't use native assignment 04:31:50 Actually, I can't use much of native anything 04:32:09 Can't use native while 04:32:27 (At least, not at the continuation-using -> CPS level) 04:33:14 who needs assignment 04:37:20 -!- augur has quit (Ping timeout: 252 seconds). 04:37:43 LSL has a lot of issues. I'm not going to deviate that far from the host language 04:37:54 I'm just fixing the most pressing issue I see. 04:38:13 "no continuations" 04:38:21 Yes. 04:39:12 does it have first-class functions or proper closures or anonymous functions or anything? I imagine that would be a far more pressing issue 04:40:28 No first class functions or closures or anonymous functions 04:40:38 Those will be added, then continuations on top of that 04:40:55 http://pastebin.com/2i0AfxhS how to make a thing that repeats what others say 04:41:03 You can't just call a function that gets the last thing said 04:41:40 Or call a function that takes a closure as a callback 04:41:54 this is awful 04:42:10 * Sgeo agrees. 04:42:20 Unless you were mocking me 04:42:27 no this is legitimately awful 04:48:33 Hmm, considering that I'm not going to implement "last thing said" but instead "next thing said"... 05:42:56 -!- NihilistDandy has joined. 05:47:55 -!- augur has joined. 06:33:13 Um. 06:33:21 Does trampolining require CPS? 06:34:31 I think it requires tail calls so you'd need continuations if you want to do fancy stuff 06:34:47 why do you ask? 06:35:49 I was planning on making an intermediate language with TCO and first-class functions etc., but can't imagine how outside of a CPS style 06:36:22 hint: convert to CPS 06:36:40 Yeah, just do the continuation-passing transform. 06:39:19 Ok 06:39:25 * Sgeo has homework he needs to do rght now 06:39:31 Instead of thinking about this 06:39:31 :/ 06:41:31 Difficulty: I don't know where any of the papers are 06:43:56 -!- augur has quit (Remote host closed the connection). 06:47:50 CPS? Continuation Passing Style? 06:48:01 Yes 06:53:09 Do if, while, etc. get transformed into functions? I think they _might_ 06:53:32 I think so 06:54:08 I should start writing down my thoughts. Or start doing homework, that might be better. 06:56:16 what do you mean get transformed into functions 07:00:50 As in, I make a while(somecode, someothercode, args-for-cps...) thing 07:01:34 I can't leave a while(){} loop stay a native while(){} loop 07:02:27 -!- CakeProphet has quit (Ping timeout: 248 seconds). 07:02:28 I'm wondering now if I should make an intermediary language with functional stuff but no TCO, and put TCO+CPS on top of it 07:03:54 -!- augur has joined. 07:04:10 -!- CakeProphet has joined. 07:04:45 The important thing I think is that I can't do TCO without CPS or visa versa. Doesn't mean I can't do first-class functions without those. 07:06:04 Then again, I ultimately need a funcall kind of function for the functional layer, and I don't want to make another on top of that just... hmmm 07:07:22 pretty sure TCO just means you make tail calls use/replace the current call frame rather than making a new one (and keeping the old one around until you return, but since it's a tail call you won't be doing anything else, so keeping it around is useless) 07:08:08 I know what TCO means, but I can't really implement it without trampolining, and to do trampolining I need CPS 07:08:09 TCO goes nicely with CPS because iirc CPS means every call is necessarily a tail call 07:08:20 well you don't need CPS but 07:08:28 you'd only be able to do the trampolining on tail calls 07:08:33 I think 07:08:37 Hmm, hold on 07:08:54 Um, right >.> 07:09:21 For some reason, I was mentally applying trampolining to everything, including non-tail-calls 07:10:07 as for while loops, you don't need them at all 07:10:14 just use recursion 07:10:30 My syntax is going to be LSL-like 07:10:35 With obvious additions 07:10:43 1) why? (2) what does that mean 07:11:11 1) I want it to be easy for those used to LSL to use. 2) What do you mean, what does it mean? It means I'm not implementing a Scheme 07:12:08 I mean does it seriously have major semantic ramifications 07:12:45 I don't think so 07:12:54 I am scrapping the stupid events in place of something else 07:13:01 and I think the semantic differences between your language and LSL would be a lot more meaningful than syntax 07:13:25 But my syntax will still have while loops. 07:13:27 I personally wouldn't hold onto the old syntax for false familiarity 07:13:32 why do you want while loops 07:13:34 Even though I transform them into something else 07:14:01 Because people know how to use them? 07:14:26 Semantics of new language: LSL with first-class functions + TCO + Continuations 07:14:30 Roughly 07:14:37 I'm assuming people who want to use your language know something or two about those things 07:14:46 and I'm assuming people who know those things know about recursion 07:15:05 monqy, they might not. I'm hoping my sample code will amaze and astound 07:15:11 >.> 07:15:27 continuations are sort of not as easy to grasp as recursion 07:15:49 monqy, but a standard library using them will be 07:16:22 what about first-class functions, closures, &c., then 07:16:24 "Hey, you can just get the next line that will be said in chat with: list line = cpsListen(0, "", NULL_KEY, "")" 07:17:04 monqy, I'll mention those too. Anyone who wants to use them can use them. 07:17:08 anyway, is while going to be specially handled by your compiler or just a macro 07:17:18 Specially handled 07:17:23 :( 07:21:26 anyway you can implement it in terms of if and whatever recursion deal you use, so I wouldn't worry about it 07:22:50 for if, I think the simplest way to do it is if you implement it as a primitive operation that takes a boolean and two continuations, and evaluates to the corresponding continuation 07:33:32 `quote pregnant 07:33:35 ​194) Gregor: You should never have got her pregnant. what whaaaaaaaaaaaat \ 195) the pregnant ones are usually taken already. \ 235) (had real world issues) (to deal with) Vorpal's pregnant. yes 07:35:43 -!- monqy has quit (Quit: hello). 07:38:28 `quote birth 07:38:30 ​160) anmaster gonna give him a birthday bj? IF ONLY I COULD FIND MY PHONE \ 259) And to think: if only we wouldn't celebrate birthdays, there would be no birthday paradox, and we could get by with half as long hash functions. (What do you mean it doesn't work that way?) \ 350) 07:38:58 ZOMGODULES _what_? 07:39:09 `quote 350 07:39:10 ​350) elliott: parents who put just "Chris" on a birth certificate are... like parents who put just "Bob" on a birth certificate. 07:39:26 `pastequotes pregnant 07:39:28 ​http://codu.org/projects/hackbot/fshg/index.cgi/raw-file/tip/paste/paste.25433 07:39:54 `pastequotes birth 07:39:55 ​http://codu.org/projects/hackbot/fshg/index.cgi/raw-file/tip/paste/paste.9871 07:40:14 @tell Gregor Fix your `quote 07:40:14 Consider it noted. 07:53:51 How was it broken now? 07:56:44 (Also that @tell is one of the worst bug reports ever.) 07:58:31 -!- oerjan has joined. 07:58:48 fizzie, there's more to the birth stuff than shown n canenl 07:58:49 channel 07:59:11 @tell `quote birth doesn't show all birth quotes. 07:59:11 Consider it noted. 07:59:17 * Sgeo facepalms 07:59:25 @tell Gregor `quote birth doesn't show all birth quotes. 07:59:25 Consider it noted. 08:00:47 Sgeo: I hardly think IRC's message length limit is Gregor's fault. 08:01:02 But it could give some indication that it has been reached... 08:05:07 Even that is not really something the `quote command should worry about. (It doesn't do that wrapping to one line with \s either.) 08:05:44 Well, HackEgo should worry bout it then 08:05:45 about 08:07:03 `quote dead 08:07:04 ​225) it seems that CUIL is dead \ 367) haha, god made one helluva blunder there :DS "WHOOPS HE AIN'T DEAD YET!" "luckily no one will believe him because christians are such annoying retards" 08:07:09 `quote hug 08:07:11 ​314) back to legal tender, that expression really makes me daydream. Like, there'd be black-market tender. Out-of-town hug shops where people exchange tenderness you've NEVER SEEN BEFORE. 09:00:13 -!- oerjan has quit (Quit: Later). 09:06:33 I was reading that CA lecture from a while back and it got me thinking, anyone ever played around with hexagonal CAs? 09:06:54 you could use mirek's cellebration and the direction weighted rules to write one 09:07:26 although I suspect it wouldn't be too interesting without diagonals 09:08:42 hmm yeah, it'd be really claustrophobic 09:42:20 -!- Vorpal has joined. 10:22:06 -!- Phantom_Hoover has joined. 10:26:12 Anyone about 10:27:02 I'm messing around with some openGL for a university assignment, and I'm running into a really weird behaviour. Only half of my scene is receiving diffuse/specular light 10:27:47 Huh, my light is directional for some reason 10:27:52 I wonder what's doing it, because I never set it to be one 10:42:56 -!- aloril has quit (Ping timeout: 240 seconds). 10:58:01 oh 10:58:07 apparently all I had to do was specify normal vectors 10:58:42 -!- aloril has joined. 11:03:03 Do remember to enable GL_NORMALIZE or GL_RESCALE_NORMAL if you intend to use a modelview matrix that has scaling in it, to avoid non-unit-length-normal related lighting issues. 11:29:42 -!- FireFly has joined. 12:03:32 -!- BeholdMyGlory has joined. 12:12:13 alright, I'll do that 12:13:42 couldn't find GL_RESCALE_NORMAL so going with the first 12:31:33 -!- HolyBlood has joined. 12:33:01 The first is potentially slower. (But also works when the modelview matrix has nonuniform scaling.) 12:33:34 (Neither's needed if you don't scale at all and always provide unit-length normals.) 12:41:57 next part's going to be tough: I have to model the sydney opera house using NURBS 12:42:07 e.g. create something that, if you squint at it funny, looks like you were trying to make the sydney opera house 12:43:28 I know how to use nurbs as in what commands activate it in opengl, I don't know how to use nurbs as in 'if I want a shape like THIS then I set control points and knot vectors like THIS and dun' 12:45:51 " I was reading that CA lecture from a while back and it got me thinking, anyone ever played around with hexagonal CAs?" <<< in what sense? 12:46:02 2d ca on a hexagona grid? 12:46:28 a CA that instead of having a chessboard topology has a hexagonal topology, yeah 12:46:35 each of those is easily seen to be conjugate to a normal 2d ca 12:46:45 but I thought about it for a bit and it was really...constrained, with 6 neighbours vs 8 12:46:46 really? 12:46:48 careful about the use of "topology" there 12:47:14 given that "topology" usually refers to the actual topology of the space of configurations 12:47:20 which is rather different 12:47:47 Patashu: usually CA can have an arbitrarily large neighborhood 12:48:17 yeah 12:49:15 and even if you don't have that, if F is an arbitrary CA with arbitrary nbhd size, you can find a subshift S and a CA G with a "radius 1" neighborhood operating on S such that (S, G) is conjugate to your CA F. conjugate means "is essentially the same CA" and subshift means you don't take all possible starting configurations, but a natural subset 12:49:44 that's probably a bit hard to internalize but i just gave an hour long lecture so not feeling particularly ranty 12:51:07 so what i just said was that the CA that only look at their nextdoor neighbors when deciding on the new state are essentially the same thing as all CA 12:51:20 humm... 12:51:25 because they're all turing complete, I guess? 12:51:40 so you can always find another CA that can compute the same things? 12:51:42 well not quite 12:51:46 rather your latter statement 12:52:28 well for instance consider this 12:52:36 you have a 1d ca that has neighborhood radius 3 12:53:02 so its local function, when deciding the new state at position x, looks at x-3, x-2, x-1, x, x+1, x+2 and x+3 12:53:21 now call the finite set of states S 12:53:41 (the states you use in the configurations, in game of life those S = {0, 1}) 12:53:44 *-those 12:53:56 now we can construct another CA as follows 12:54:12 as the new states take S^6 12:55:00 now the idea is the new state of (x_1, ..., x_6) 12:55:26 can be computed by just looking at the left and right neighbor, and the old state of (x_1, ..., x_6) 12:56:21 when we think of the configuration ...(x_1, ..., x_6)(y_1, ..., y_6)(z_1, ..., z_6)... as being a "compressed" version of ... x_1 ... x_6 y_1 ... y_6 z_1 ... z_6 ... 12:56:25 does that make any sense? 12:57:03 i'll gladly explain notation if that's unclear 12:58:09 S^6 means you're having ^6 as many states, so you can represent all the possible combinations of x-3, x-2...etc in just one spot? 12:58:15 oh sorry 12:58:21 S^6 is just standard mathematical notation 12:58:23 -!- ais523_ has joined. 12:58:31 it means SxSxSxSxSxS where x is cartesian product 12:58:39 right 12:58:46 ah, set multiplication 12:58:52 so S^6 means we group 6 states into one. 12:58:54 right 12:58:55 yeah 12:59:01 interesting 12:59:14 when you've grouped 6 states into one, a rule with radius 3 only needs to look at the nextdoor neighbors 12:59:15 I didn't even realise there was a channel called # 12:59:23 you can have a channel called # 12:59:28 I might have made some sort of typo, as I ended up joining it automatically when I started this webclient 12:59:42 I'm not sure if anyone there was there deliberately, there were about 15 people 12:59:49 and yes, it's interesting, but things get WAY more interesting than that 12:59:59 it's probably set up as a hipster establishment 13:00:12 e.g. 'cool club for cool people who know that you can have channels called bizzare non-things' 13:02:51 *cool kats 13:02:56 couldn't leave that unharnassed 13:03:11 but in any case as i said the hexagonal grid is just the 2D CA, but in fact people have done research on CA running on weirdly shaped configurations, iirc the garden of eden theorem for instance has been generalized for all automatic groups by this famous blind guy 13:03:59 garden of eden theorem = CA is surjective iff it's locally injective 13:04:08 surjective meaning all configurations have a preimage 13:04:24 and locally injective meaning there cannot be two configurations that have the same image and only differ in a finite amount of cells 13:05:11 (and image of configuration c of course means G(c) where G is your automaton, and similarly for preimage) 13:05:57 automatic group = certain kind of group, not very restrictive afaiu 13:06:26 there are patterns in the game of life that collapse into the same thing, e.g. if you just add a random on cell out in the middle of nowhere 13:06:29 so it's not surjective 13:06:41 an infinite group is the natural place to run a CA, it means an infinite graph that looks the same no matter where you look 13:06:51 Patashu: yes! 13:06:56 exactly 13:07:10 and in fact it is very hard to show GoL is surjective without the garden of eden theorem 13:07:30 the smallest pattern without a preimage (proving nonsurjectivity) is of size more than 10x10 13:07:52 (and even after you find that it's certainly not easy to show it doesn't have a preimage) 13:08:12 it's kind of surprising it has to be that large 13:08:26 no one says it has to be large 13:08:31 sorry 13:08:33 I mean in the game of life 13:08:34 smallest KNOWN pattern 13:08:36 :P 13:08:51 yeah but I mean, you'd think there'd be a trivial example 13:09:14 what patterns in the game of life turns into an arbitrarily big square of on cells? 13:09:26 you would, but this is how it usually goes, hard to show nonsurjectivity, but easy to show local noninjectivity, which is proven to be equal to nonsurjectivity by the theory 13:09:34 what's the smallest pattern with no known preimage? 13:09:40 http://en.wikipedia.org/wiki/Garden_of_Eden_(cellular_automaton) 13:09:46 (that's different from the smallest known pattern with no preimage) 13:09:50 oh! 13:09:51 you're right 13:10:08 ais523_: it's easy to check whether something of size smaller than 10x10 has a preimage 13:10:19 via brute force? 13:10:21 so there probably isn't a known example of something we don't know a preimage for 13:10:23 ais523_: yes 13:10:29 ah, OK 13:10:34 *easy enough 13:10:56 Patashu: who's right? 13:11:02 the proof of the garden of eden theorem seems similar to the pigeonhole principle 13:11:21 it pretty much is, isn't it? 13:11:28 i've probably proven it here some time 13:11:33 but anyhow the 1D case is very easy 13:11:48 and the finite case is also very easy 13:11:59 the lecture notes i linked earlier have a very nice illustration of the proof for a 1D automaton 13:12:02 ais523_: what does that mean? 13:12:23 you mean CA running on a finite group? :D 13:12:30 oklofok: or on a finite playfield 13:12:33 e.g. Life on a torus 13:12:50 yeah then it's trivial that surjectivity = injectivity of course 13:12:55 ep 13:12:58 *yep 13:13:03 so the proof is even easier 13:13:07 and injectivity = local injectivity by definition 13:13:19 easier, yes, but that's just set theory 13:13:35 nothing CA specific about it 13:13:37 it might even be possible to prove in pure category theory 13:13:41 unlike the infinite cases 13:13:57 http://en.wikipedia.org/wiki/Day_%26_Night I've always found this to be a very cool CA 13:14:05 it's as vibrant as the game of life 13:14:09 and symmetric 13:14:36 yeah that's kind of pretty 13:14:43 ais523_: can C have monads? 13:14:50 if you download mirek's cellebration it has lots of examples for day and night 13:15:03 sparkers of lots of periods, spaceships, spaceship guns, novas... 13:15:06 cheater__: I think pretty much any language can, but in C they'd be so awkward to express in a functional way that it probably wouldn't be worth it 13:15:20 ais523_: the theorem that CA = continuous shift commuting functions on any playfield can be proven by just using category theory 13:15:39 yes, it sounds like the sort of thing that would eb 13:15:40 *be 13:16:07 every CA is obviously continuous and shift commuting, but the other direction was one of the first results in CA theory 13:16:15 nowadays considered trivial 13:16:26 ais523_: what would a monad do in an imperative language? 13:16:31 yep, I was thinking "isn't that obvious? oh right" 13:16:39 ais523_: let's make it easier and take an imperative, functional language like python 13:16:41 cheater__: control computation flow 13:16:50 yeah but like 13:16:51 here's a simple example that came up in my job recently 13:16:59 how would that look in python? 13:17:00 ok go on 13:17:01 why is it that in openGL you define normals on vertices, not surfaces... 13:17:06 suppose I have a set of constraints, and I want to transform them into a simpler set of constraints 13:17:13 ais523_: i doubt it's obvious to people who don't know the topology of the configuration space at least 13:17:15 some of the constraints are useless things like 0 <= 0 that I want to delete 13:17:16 do you know it? 13:17:23 oklofok: no 13:17:27 I realised it was only obvious in one direction 13:17:31 yeah 13:17:37 Patashu: because normals on higher-dimension cells are just interpolations. 13:17:45 cheater__: and some of the other constraints are things like xy = 0, which I want to transform into x = 0 and y = 0 13:17:50 whereas you can't interpolate when you go to a lower dimension. 13:18:08 the topology is such that continuity of G essentially means "if you change something in c, the image of G(c) only changes in a finite amount of places" 13:18:28 ais523_: you mean x = 0 or y = 0 13:18:31 ais523_: but ok, go on 13:18:36 cheater__: err, right 13:18:37 that's not quite what it means, but close enough 13:18:41 the actual example was more complicated 13:18:45 and it needs to be an and for this to work 13:18:46 yeah 13:19:08 let's say, xy <= z implies x <= z and y <= z, as I was working with positive integers at the time 13:19:12 I think that one's correct 13:19:24 so what I did, when I was writing in OCaml, was I wrote a function that took a constraint as an argument, and returned a list of constraints 13:19:25 it isn't 13:19:32 it is for positive integers, right? 13:19:36 nope 13:19:40 counterexample? 13:19:51 1 <= 1, 2 > 1, 0.5 < 1 13:19:56 lol 13:20:02 since when was 0.5 a positive integer? 13:20:06 I like how this discussion has turned to the arbitrary examples being wrong therefore you are wrong 13:20:08 oh, *integers* 13:20:10 alright 13:20:21 yes, then it's obviously true :D 13:20:26 ok go on please 13:20:31 Patashu: nah, it's just trying to get things straight otherwise the examples wouldn't work well 13:20:34 let's take that example, it is correct 13:20:39 -!- azaq23 has joined. 13:20:41 Patashu: well that's called a counterexample 13:20:57 there was a universal quantifier in ais523_'s statement 13:21:03 now, I have this function, let's call it transformConstraints, which transforms 0<=0 into [] and xy<=z into [x<=z; y<=z] 13:21:12 so you just need a specific example for which it doesn't hold to disprove it 13:21:23 and what I do, is I apply it to every element of my constraints, so I write List.concat (List.map transformConstraints constraints) 13:21:31 and then I realised I'd written a monad 13:21:48 see, there's no actual reason for the constraints to be in a list, as the order isn't relevant 13:21:56 although after you made the connection GoL locally noninjective => GoL nonsurjective, maybe i shouldn't assume you're an idiot 13:21:56 so I could just as easily have used a set, or a multiset, or whatever 13:22:10 http://www.reddit.com/r/Logos/comments/hdzll/reddit_logos_for_the_72_hour_countdown_for_the/ 13:22:30 The Bible Guarantees It! 13:22:36 ais523_: ok, go on 13:22:40 and I was basically writing a monad action there 13:22:49 I take a number of possible computation paths, and transform each into a set of others 13:23:11 Reddit better do this. 13:23:19 so, say, in the case of Maybe, if you get Nothing as input you produce Nothing as output, always, if you get Just x you produce either Just y or Nothing as output 13:23:32 in the case of List and Set, you can produce multiple outputs, each of which is then treated independently from then on 13:23:53 so in the List monad, you have concatMap as >>=, and \x -> [x] as return 13:24:36 that's just what I was doing in that OCaml code; if I couldn't transform a constraint I left it alone (i.e. calling return), if I could I returned 0 or 1 or more results, and I concatMaped them together 13:25:13 and so, if I was working in Haskell, I could just have transformed 0<=0 into mzero and xy<=z into x<=z `mplus` y<=z 13:25:19 and then it'd have worked in any MonadPlus at all 13:25:40 (the difference between MonadPlus and Monad is that in MonadPlus, there's also an operator `mplus` for combining multiple outputs) 13:25:48 * (return x<=z `mplus` return y<=z) 13:26:11 that way, I could have run transformConstraints in any MonadPlus at all, and it wouldn't be constrained to lists 13:26:29 so there, there's a situation where I used a monad in OCaml, and didn't even notice until after I'd written the program 13:26:49 so you could do it on trees too? 13:26:51 you could do exactly the same thing in Python, again quite easily by mistake 13:27:05 the problem with trees is that they don't quite have the same sort of structure 13:27:21 why? 13:27:23 all monads really do is add an "a before b" structure to expression evaluation; that's how the list knows which order it should end up in 13:27:27 actually no never mind 13:27:32 i don't want to know about trees 13:27:37 instead answer this: 13:27:43 I take a number of possible computation paths << you do? 13:27:48 if I'd instead written (return y<=z `mplus` return x<=z), it would output a diffeerent way round 13:27:57 what are these computation paths? 13:28:01 cheater__: well, I'm not just transforming one constraint, but many 13:28:09 yes, so? 13:28:16 where does that take us? 13:28:32 so the version of transformConstraint I wrote took only one constraint as an argument, and I had to pass it to concatMap in order to make it take more 13:28:40 but I really wanted to transform a list of constraints 13:29:05 and each of those can be thought of as a separate computation 13:29:22 because they're each treated independently 13:29:36 @hoogle set 13:29:36 module Data.Set 13:29:36 Data.Set data Set a 13:29:36 Network.Browser setAllowBasicAuth :: Bool -> BrowserAction t () 13:29:51 my homework is i have to prove predicates and implications form a lattice, in HOL 13:29:55 @hoogle x -> (Set x) 13:29:55 Data.Set singleton :: a -> Set a 13:29:55 Data.Set deleteMax :: Set a -> Set a 13:29:55 Data.Set deleteMin :: Set a -> Set a 13:30:05 sexy 13:30:30 bleh, now I have to remember which of lift and liftM is which 13:30:31 I'll cheat 13:30:37 :t lift 13:30:38 Ambiguous occurrence `lift' 13:30:38 It could refer to either `Control.Monad.Error.lift', imported from Control.Monad.Error 13:30:38 or `Control.Monad.Logic.lift', imported from Control.Monad.Logic 13:30:43 :t liftM 13:30:44 forall a1 r (m :: * -> *). (Monad m) => (a1 -> r) -> m a1 -> m r 13:31:09 what's the Haskell function that takes a -> M x to M a -> M x? 13:31:36 @hoogle Monad M => (a -> M b) -> (M a -> M b) 13:31:36 Did you mean: a -> M b -> M a -> M b /count=20 13:31:37 Prelude (=<<) :: Monad m => (a -> m b) -> m a -> m b 13:31:37 Control.Monad (=<<) :: Monad m => (a -> m b) -> m a -> m b 13:32:26 hmm, I'm confused now 13:32:52 > (=<<) singleton 4 13:32:52 Not in scope: `singleton' 13:32:58 i'm a tired 13:32:58 > (=<<) Data.Set.singleton 4 13:32:58 Not in scope: `Data.Set.singleton' 13:33:08 > (=<<) (\x -> [x]) 4 13:33:09 No instance for (GHC.Num.Num [a]) 13:33:09 arising from a use of `e_14' at :t Control.Monad.Logic.lift 13:33:38 forall (m :: * -> *) a (t :: (* -> *) -> * -> *). (Control.Monad.Logic.MonadTrans t, Monad m) => m a -> t m a 13:33:55 LiftM2? 13:34:00 liftM2? 13:34:02 @hoogle (m m a) -> (m a) 13:34:02 Control.Applicative unwrapMonad :: WrappedMonad m a -> m a 13:34:02 Text.Regex.Base.RegexLike getAllMatches :: AllMatches f b -> f b 13:34:02 Text.Regex.Base.RegexLike getAllSubmatches :: AllSubmatches f b -> f b 13:34:07 :t liftM2 13:34:08 forall a1 a2 r (m :: * -> *). (Monad m) => (a1 -> a2 -> r) -> m a1 -> m a2 -> m r 13:34:22 cheater__: that and liftM are just wrapping a normal function into a monad 13:34:42 oh, I'm being stupid 13:35:02 what I'm looking for is id, because I forgot how monads worked 13:35:13 oh yeah it was =<< 13:35:14 anyways 13:35:18 oh right ok 13:36:32 > let f = (\x -> if x = 2 then [2,3] else [x]) in do {a <- f 4; f a} 13:36:32 : parse error on input `=' 13:36:45 now I'm muddling Haskell and OCaml 13:37:08 :t if 13:37:08 parse error (possibly incorrect indentation) 13:37:20 > let f = (\x -> (if (x = 2) then [2,3] else [x])) in do {a <- f 4; f a} 13:37:20 : parse error on input `=' 13:37:27 > let f = (\x -> (if (x == 2) then [2,3] else [x])) in do {a <- f 4; f a} 13:37:27 [4] 13:37:33 > let f = (\x -> (if (x == 2) then [2,3] else [x])) in do {a <- f 2; f a} 13:37:34 [2,3,3] 13:37:36 there we go 13:37:52 > let f x = [2, 3] if x is 2 else [x] in do {a <- f 4; f a} 13:37:53 : parse error on input `if' 13:37:55 > let f = (\x -> (if (x == 2) then 2 `mplus` 3 else mzero)) in do {a <- f 2; f a} 13:37:56 No instances for (GHC.Num.Num (m a), GHC.Num.Num (m b)) 13:37:56 arising from a u... 13:38:05 > let f = (\x -> (if (x == 2) then 2 `mplus` 3 else mzero)) in do {a <- f 2; f a} :: [Int] 13:38:06 No instance for (GHC.Num.Num [GHC.Types.Int]) 13:38:06 arising from a use of `f' ... 13:38:07 > let f x = [2, 3] if x == 2 else [x] in do {a <- f 4; f a} 13:38:08 : parse error on input `if' 13:38:10 -!- azaq23 has quit (Read error: Connection reset by peer). 13:38:11 wtf. 13:38:16 > 2 13:38:17 2 13:38:21 > let f = (\x -> (if (x == 2) then 2 `mplus` 3 else mzero)) in (do {a <- f 2; f a}) :: [Int] 13:38:22 No instance for (GHC.Num.Num [GHC.Types.Int]) 13:38:22 arising from a use of `f' ... 13:38:26 > let f = (\x -> (if (x == 2) then 2 `mplus` 3 else mzero)) in (do {a <- f 2; f a}) :: [Integer] 13:38:26 No instance for (GHC.Num.Num [GHC.Integer.Type.Integer]) 13:38:26 arising from a ... 13:38:27 >2 if 2 == x else 3 13:38:32 >2 if 2 == 2 else 3 13:38:40 > 2 if 2 == 2 else 3 13:38:40 : parse error on input `if' 13:38:43 cheater__: it's if a == b then c else d 13:38:51 > if 2 == 2 then 3 else 4 13:38:51 3 13:38:58 -!- azaq23 has joined. 13:38:58 I got muddled because OCaml uses = not == 13:39:02 -!- azaq23 has quit (Changing host). 13:39:02 -!- azaq23 has joined. 13:39:25 > let f = (\x -> (if (x == 2) then 2 `mplus` 3 else mzero)) in map id (do {a <- f 2; f a}) 13:39:26 No instance for (GHC.Num.Num [a]) 13:39:26 arising from a use of `f' at > let f = (\x -> (if (x == 2) then (2 `mplus` 3) else mzero)) in map id (do {a <- f 2; f a}) 13:39:43 No instance for (GHC.Num.Num [a]) 13:39:43 arising from a use of `f' at wow, the rule 'Serviesttes' in mirek's cellebration produces beautiful patterns 13:40:24 oh, I forgot the return calls 13:40:33 go on ais523_ 13:40:35 > let f = (\x -> (if (x == 2) then (return 2 `mplus` return 3) else mzero)) in map id (do {a <- f 2; f a}) 13:40:36 [2,3] 13:40:37 same mistake I made and corrected earlier 13:40:55 and, hmm, I expected [2,3,3] there 13:41:06 > let f = (\x -> (if (x == 2) then [2,3] else [x])) in map id (do {a <- f 2; f a}) 13:41:07 [2,3,3] 13:41:14 (the map id stuff is just to force it to interpret the output as a list) 13:41:23 oh, duh 13:41:30 > let f = (\x -> (if (x == 2) then (return 2 `mplus` return 3) else return x)) in map id (do {a <- f 2; f a}) 13:41:31 [2,3,3] 13:41:35 > let f = (\x -> (if (x == 2) then [2,3] else [x])) in map id (do {a <- f 2; f a}) 13:41:35 [2,3,3] 13:41:46 Gnarl too 13:41:51 those two lines are identical, except that the second one (which is very similar to my OCaml) uses only lists 13:41:56 and the first can handle any MonadPlus 13:42:00 Patashu: is that available online somewhere? 13:42:12 or only as a windows app? 13:42:19 > let f = (\x -> (if (x == 2) then (return 2 `mplus` return 3) else return x)) in (do {a <- f 2; f a}) :: Maybe Int 13:42:20 Just 2 13:42:34 see, Maybe can handle it, but only tracks one of the possible answers, because that's what Mabe does 13:42:40 > let f = (\x -> (if (x == 2) then (return 2 `mplus` return 3) else return x)) in (do {a <- f 2; f a}) :: Data.Set Int 13:42:41 Not in scope: type constructor or class `Data.Set' 13:42:50 > import Data.Set; let f = (\x -> (if (x == 2) then (return 2 `mplus` return 3) else return x)) in (do {a <- f 2; f a}) :: Data.Set Int 13:42:50 : parse error on input `import' 13:43:01 > let f = (\x -> (if (x == 2) then ([2] `mplus` [3]) else return x)) in map id (do {a <- f 2; f a}) 13:43:01 [2,3,3] 13:43:03 umm, what's the syntax in Haskell to use a particular library? 13:43:16 :m +Stuff 13:43:28 that's ghci syntax 13:43:32 dunno then 13:43:36 i suck at haskells 13:43:37 I mean in the language itself 13:43:49 > using Data.Set; let f = (\x -> (if (x == 2) then (return 2 `mplus` return 3) else return x)) in (do {a <- f 2; f a}) :: Data.Set Int 13:43:49 : parse error on input `;' 13:44:30 oh, apparently it is "import" 13:44:56 > {import Data.Set; let f = (\x -> (if (x == 2) then (return 2 `mplus` return 3) else return x)) in (do {a <- f 2; f a}) :: Data.Set Int} 13:44:57 : parse error on input `{' 13:45:16 > import Data.Set, let f = (\x -> (if (x == 2) then (return 2 `mplus` return 3) else return x)) in (do {a <- f 2; f a}) :: Data.Set Int 13:45:17 : parse error on input `import' 13:45:25 cheater__, try http://psoup.math.wisc.edu/mcell/mjcell/mjcell.html 13:45:29 > let f = (\x -> (if (x == 2) then (return 2 `mplus` return 3) else return x)) in (do {a <- f 2; f a}) 13:45:30 No instance for (GHC.Show.Show (m b)) 13:45:30 arising from a use of `M6596097177... 13:45:47 yep, that's what I expected 13:45:54 so what happened there was, I gave it a function that would run in any MonadPlus and didn't tell it which to use 13:46:08 and being Haskell, it happily calculated the function anyway and then didn't know how to display it onscreen 13:47:06 it does that quite a lot 13:47:11 > id 13:47:12 Overlapping instances for GHC.Show.Show (a -> a) 13:47:12 arising from a use of `... 13:47:23 hmm, I wonder if haskell supports openGL :P 13:49:33 -!- cheater__ has quit (Ping timeout: 252 seconds). 13:52:28 I'm sure there are bindings 13:52:33 and there is the FFI after all 13:53:20 :t mplus 13:53:21 forall (m :: * -> *) a. (MonadPlus m) => m a -> m a -> m a 13:53:29 ais523_, what is MonadPlus? 13:54:37 -!- copumpkin has quit (Quit: Computer has gone to sleep.). 13:57:04 :t MonadPlus 13:57:04 Not in scope: data constructor `MonadPlus' 14:00:58 :t => 14:00:59 parse error on input `=>' 14:01:06 :t == 14:01:07 parse error on input `==' 14:01:10 :t (==) 14:01:11 forall a. (Eq a) => a -> a -> Bool 14:01:13 :t (=>) 14:01:14 parse error on input `=>' 14:01:37 :t (>=) 14:01:37 hmm, can I not PM the bot with this stuff? 14:01:37 forall a. (Ord a) => a -> a -> Bool 14:01:38 maybe 14:01:42 er 14:01:46 yeah 14:02:02 Patashu, you can run this in ghci 14:02:08 so what would the use of that be 14:02:32 :i MonadPlus 14:02:36 hnm 14:02:38 hm* 14:02:43 I guess it doesn't do :i 14:02:49 ?src MonadPlus 14:02:49 Source not found. 14:02:55 ?hoogle MonadPlus 14:02:55 Control.Monad class Monad m => MonadPlus m 14:02:59 ?hoogle mplus 14:02:59 Control.Monad mplus :: MonadPlus m => m a -> m a -> m a 14:03:04 ?src mplus 14:03:04 Source not found. :( 14:03:29 Prelude Control.Monad> :i MonadPlus 14:03:29 class (Monad m) => MonadPlus m where 14:03:29 mzero :: m a 14:03:29 mplus :: m a -> m a -> m a 14:03:29 -- Defined in Control.Monad 14:03:29 instance MonadPlus [] -- Defined in Control.Monad 14:03:31 instance MonadPlus Maybe -- Defined in Control.Monad 14:03:34 well okay 14:09:23 -!- ralc has joined. 14:10:13 Vorpal: MonadPlus is basically the class of monads where it's a meaningful operation for an action to produce more or less than 1 result 14:10:30 ah 14:10:30 -!- cheater__ has joined. 14:10:47 e.g. in List, there's no problem with producing multiple results from one calculation, they can just become multiple list elements 14:11:05 and in Maybe, it's fine for a computation to not produce a result as you can just put Nothing there and stop the calculation at that point 14:11:06 sorry i got disconnected 14:11:09 but in, say, IO, it would be meaningless 14:11:24 last thing i got was cheater__, try http://psoup.math.wisc.edu/mcell/mjcell/mjcell.html 14:11:30 hm 14:11:47 cheater__: don't worry, we got sidetracked and didn't talk about anything relevant in between 14:12:03 ok so 14:12:07 what were you getting at? 14:12:18 that return is the same as constructing the monadic computation? 14:12:26 and that some things have mplus defined? 14:12:34 pretty much 14:12:51 composing return with a function makes it into a monad action that returns one result 14:13:04 the reason why monad actions are useful is that they don't necessarily have to be defined in terms of return 14:13:28 and mplus gives you a way to return more than one result (likewise, mzero to return no results) 14:13:42 hm 14:13:53 bbl, going to make food 14:14:27 how were you composing return? 14:14:50 and what I do, is I apply it to every element of my constraints, so I write List.concat (List.map transformConstraints constraints) 14:15:24 oh trasformConstraints was using return? 14:18:26 -!- azaq23 has quit (Ping timeout: 260 seconds). 14:24:05 -!- azaq23 has joined. 14:31:31 -!- copumpkin has joined. 14:36:41 cheater__: yes 14:36:52 in disguise in the OCaml program (where I wrote [a] rather than return a) 14:39:18 back 14:59:53 -!- Patashu has quit (Quit: MSN: Patashu@hotmail.com , Gmail: Patashu0@gmail.com , AIM: Patashu0 , YIM: patashu2 .). 15:09:42 -!- variable has changed nick to Guest75185. 15:24:19 -!- Guest75185 has changed nick to variable. 15:35:07 ais523_: could we make a monadic generalizer? 15:35:24 ais523_: say we have a computation which isn't monadic. the generalizer takes that and makes it monadic. 15:35:49 cheater__: in the trivial sense, yes, you can just compose the function with return 15:36:11 in general, though, not if you want to do anything that actually uses the monadic structure 15:36:19 such as? 15:36:20 because monads inherently have a notion of before and after 15:36:24 whereas functions don't 15:36:45 yeah that's fine 15:36:46 but like 15:37:00 many functions will just end up being >>= or something 15:37:15 well, it depends on what you mean by making a computation monadic in the first place 15:38:39 :t >>= 15:38:39 parse error on input `>>=' 15:38:44 :t (>>=) 15:38:45 forall (m :: * -> *) a b. (Monad m) => m a -> (a -> m b) -> m b 15:39:12 !src (>>=)::([a] -> (a -> [b]) -> b) 15:39:21 umm, wrong prefix 15:39:24 @src (>>=)::([a] -> (a -> [b]) -> b) 15:39:24 Source not found. I am sorry. 15:39:30 @src (>>=):([a] -> (a -> [b]) -> b) 15:39:30 Source not found. My mind is going. I can feel it. 15:39:33 i think you want a on both 15:39:45 :t concatMap 15:39:45 forall a b. (a -> [b]) -> [a] -> [b] 15:39:48 hmm 15:39:57 oh right 15:41:29 in the case of my OCaml program, I just noticed that I'd written a concatMap, and that I was using lists a lot 15:41:40 and thought "hey, I think I wrote a monad action by mistake" 15:41:56 not that writing one of those is a bad thing, especially not in a program where that's the right thing to do 15:42:17 in Haskell, it would have been trivial to generalise to arbitrary monads at that point, which would help if I ever wanted to change to, say, sets 15:42:40 sets sound like a much better idea, tbh. 15:42:51 yep 15:42:59 the point is, though, that your program's polymorphic over all of them 15:43:08 which makes it more general 15:43:25 whether that's irrelevant, or massively useful, depends on precisely what you're doing 15:43:41 e.g. if you're writing a library, being polymorphic over monads is really good as it cuts down on the glue code your user will have to write 15:45:01 ya 15:45:09 but um 15:48:35 doing stuff that's too general can end up being a bad thing too, can't it 15:48:49 if it gets so general people can't think of the application you had in mind in the first place ... 15:49:03 -!- geology2 has joined. 15:49:12 -!- Phantom_Hoover has quit (Ping timeout: 246 seconds). 15:49:14 -!- geology2 has changed nick to geology. 15:49:31 -!- elliott has joined. 15:49:39 -!- Phantom_Hoover has joined. 16:05:07 -!- geology has quit (Quit: ChatZilla 0.9.86.1 [Firefox 4.0.1/20110413222027]). 16:10:20 -!- rodgort has quit (Quit: ERC Version 5.3 (IRC client for Emacs)). 16:10:32 -!- rodgort has joined. 16:27:47 -!- CakeProphet has quit (Ping timeout: 260 seconds). 17:24:02 -!- oerjan has joined. 17:25:07 hello oerjan 17:25:15 g'day 17:27:13 -!- oerjan has quit (Client Quit). 17:28:57 bye oerjan 17:32:37 i'd quit too if you gave me a cold welcome like that 17:55:55 Name a vaguely-interesting web program that does not require https. 17:55:55 Gregor: You have 9 new messages. '/msg lambdabot @messages' to read them. 17:55:59 ... wtf 17:56:58 Gregor: define "web program" 17:57:01 @tell oerjan egojoust hasn't been used in months, that code was known buggy. 17:57:01 Consider it noted. 17:57:08 do you mean a "webapp" in the SaaS sense? 17:57:10 cheater__: Thing you found on the web that has some JS behavior :P 17:57:15 ok 17:57:30 Even www.google.com is a webapp, it's just not the most interesting one (arguably) 17:57:32 newgrounds 17:57:50 Gregor: You have 9 new messages. '/msg lambdabot @messages' to read them. 17:57:51 wat... 17:58:19 Gregor: wolfgang lambda 17:58:23 Gregor: that's a good one 17:58:45 btw, unrelated but interesting: http://www.ludism.org/mentat/ 17:59:04 Mmm, I think it has to be something people actually use too. 17:59:24 Gregor: What are you asking for? :P 17:59:35 Name a vaguely-interesting web program that does not require https. 18:00:03 Gregor: I know that. 18:00:12 I just mean that the question is impossible to answer well without knowing why you're asking :P 18:00:26 I'm making benchmarks. 18:00:40 I think you can actually access gmail over non-https... 18:00:46 Not any more. 18:00:51 I was going to see if I can tackle google docs, but it absolutely cannot be used without https either. 18:00:53 Ah. 18:00:59 Why can't you do https out of curiosity? 18:01:11 Because Node HTTP proxy + HTTPS = lol 18:01:28 Hmmmmmmmmmmmmmm 18:01:30 mmmmmmmm 18:01:31 mmmmmmmmm 18:01:31 Browsers insist on the PROXY having a properly-signed blah blah blah bullshit key. 18:01:32 mm 18:01:33 mmmmmm 18:01:34 mm 18:01:34 mm 18:01:35 m 18:01:35 18:01:42 Which means I need a key signed by e.g. Thawte for ... localhost. 18:01:56 TIL Markdown is "parsed" by regex 18:01:56 Gregor: Isn't there that CA that everyone trusts that gives 'em out for free 18:01:59 no wonder it's so awful 18:02:09 Gregor: Or you could use one of the mdfive 'sploits, though I doubt anyone trusts the relevant CA any more :) 18:02:10 elliott: Yes, but it won't give you a cert for LOCALHOST :P 18:02:17 ais523_: Markdown-the-syntax isn't that awful 18:02:23 ais523_: and most people don't use Markdown.pl 18:02:26 it is in some ways 18:02:34 Yes, but it's not /that/ awful 18:02:45 It's better than, e.g. DocBook :P 18:02:59 Gregor: You could get a cert for lolthisispointedatmymachine.codu.org :P 18:03:03 I use a wiki that has markdown syntax sometimes 18:03:05 I spose ... 18:03:11 its internal links are something bizarre like [link]() 18:03:14 Gregor: Man, I'm having trouble thinking of anything >_> 18:03:16 I'm a total luddite 18:03:18 I might have that backwards in at least two different ways 18:03:20 But that's irrelevant, suffice to say it's a pain, I want non-https :P 18:03:23 ais523_: That's just a hack around the fact that markdown doesn't have wikilink syntax :P 18:03:26 It'll just be rewriting href=" 18:03:27 yep 18:03:28 It'll just be rewriting href="" 18:03:44 ais523_: Well that's not Markdown's fault. 18:03:52 no, it isn't 18:04:07 although Markdown does have a tendency to be used in stupid ways; it's not its fault but it's still aggravating 18:04:22 Gregor: Yeah, dunno. 18:04:29 single-* for italics is also an unfortunate design decision, it happens too often when the special meaning isn't desired 18:04:40 (even MediaWiki runs into trouble occasionally with '' in the middle of words) 18:07:16 meh, it's better than _ for italics 18:07:20 which Markdown also has 18:08:16 oh, right, ouch 18:09:59 woiuldntit be aesoekme if oknc e yuioiu stesasdrtred tygpoijn a word yuoiu coudkktmn tkrase yuiore fingerds off thre keytjnbeeors 18:10:11 yuou just hasdf to slide thejm arotiuhnd 18:15:06 elliott: You'll probably be glad to know that the FUSE branch of tup was merged. 18:15:22 pikhq: I saw. 18:17:23 * pikhq has yet to get gittup to build. 18:20:39 elliott: I can't tel whether "coudkktmn" was meant to be "could" or "couldn't" 18:20:44 *can't tell 18:22:34 couldn't 18:29:54 -!- elliott has quit (Ping timeout: 264 seconds). 18:30:01 -!- elliott has joined. 18:32:58 Error: Explicitly named file 'built-in.o' not found in subdir 24885. 18:33:11 (subdir 24885 refers to linux/drivers/watchdog) 18:33:25 (no, that does *not* have a Tupfile) 18:34:43 -!- cheater__ has quit (Quit: Leaving). 18:36:12 -!- cheater_ has joined. 19:09:18 http://www.gnu.org/software/automake/manual/html_node/Objects-created-both-with-libtool-and-without.html#Objects-created-both-with-libtool-and-without This has got to be the most revolting page I've read in a while. 19:10:40 pikhq: is that exploiting a bug in automake to work around a bug in libtool? 19:10:43 that's actually pretty hilarious 19:11:32 ais523_: Not really a *bug* as it is a very obscure feature. 19:12:07 ais523_: It's actually intentional that you get differing object filenames if you use per-target CFLAGS. 19:12:28 ais523_: It's just using per-target CFLAGS here that are not distinct from the normal CFLAGS. 19:14:35 Still, it is absolutely *astounding* how much crazy shit Autotools does just to work around deficiencies in the C build system. 19:16:35 that's its purpose 19:16:48 bundling up crazy shit into conveniently reusable m4 macros 19:17:04 Seems to me it would've been easier to just replace the C build environment. :P 19:17:21 -!- azaq23 has quit (Quit: Leaving.). 19:18:18 Admittedly, at the *time* there was no way they could get away with saying "Yeah, just use GNU everything", and now it'd be a bit impractical to rejigger GCC that extensively. 19:18:40 -!- oerjan has joined. 19:19:31 um 19:19:31 oerjan: You have 1 new message. '/msg lambdabot @messages' to read it. 19:19:36 @messages 19:19:36 Gregor said 1h 22m 35s ago: egojoust hasn't been used in months, that code was known buggy. 19:19:54 Gregor: i have no idea what quote of mine you would be referring to 19:20:07 Your long-winded message to me about egojoust having bugs. 19:20:21 Ohwait 19:20:23 lololol 19:20:27 Didn't read the timestamps. 19:20:30 heh 19:20:38 OK, so here's the question: Why did lambdabot tell me I had messages from three MONTHS ago. 19:20:42 Just today. 19:20:43 Imagine a world where the C compiler had some intelligence. Here is how you would build a program: "gcc main.c" 19:20:47 well lambdabot was down for a while 19:20:49 but not THAT long a while 19:21:35 maybe someone restarted lambdabot from backup 19:22:26 Gregor, dd you aee my maessgae/ 19:22:28 Blag 19:23:03 Gregor: dd you aee my maessgae 19:23:58 Sgeo: No? 19:24:35 but dd you aee MY maessgae 19:24:35 Gregor, HackEgo lines that are too long get cut off without any notfication that they're cut off 19:24:38 See: 19:24:42 `quote birth 19:24:43 Sgeo: Boo hoo. 19:24:44 ​160) anmaster gonna give him a birthday bj? IF ONLY I COULD FIND MY PHONE \ 259) And to think: if only we wouldn't celebrate birthdays, there would be no birthday paradox, and we could get by with half as long hash functions. (What do you mean it doesn't work that way?) \ 350) 19:24:47 `pastequotes birth 19:24:49 ​http://codu.org/projects/hackbot/fshg/index.cgi/raw-file/tip/paste/paste.6452 19:24:50 We know. 19:24:58 ais523_: i mentioned to oklofok earlier that i at least have proved that roman numeral look and say must grow approx. exponentially 19:25:41 oerjan: that's not surprising, but it's good to have proved it 19:27:34 " The best HTML5 is native to the operating system, so Web sites have the fewest translation layers to pass through." 19:27:35 wat 19:27:50 I think the IE team might actually originate from a different universe 19:28:31 html5 kernel mode ftw 19:28:43 oerjan: isn't that what Chrome OS is for? 19:28:51 heck if i know 19:29:15 ais523_: Chrome OS is actually just Chrome on X on Gentoo 19:29:15 `pastequotes algebraic 19:29:16 ​http://codu.org/projects/hackbot/fshg/index.cgi/raw-file/tip/paste/paste.31004 19:29:25 tweaked to be a bit more OS-like 19:29:28 elliott: did you see the latest Agora mishap, by the way? 19:29:32 ais523_: which? 19:29:46 an errant search-and-replace made it so that every vote has to select either PRESENT, or two other options 19:29:54 well, right 19:29:58 we're debating if it's really the case that every vote must be FOR+AGAINST 19:30:12 and if that would make the game unplayable 19:30:25 (Murphy thinks FOR+FOR is legal, G. thinks that plain FOR is legal because the rule now contradicts itself) 19:30:38 AIAN would prevent it being unplayable 19:34:00 yep, but the problem with AIAN is that it triggers only if there are no workable dictatorship scams 19:34:05 and proving the absence of those is stricky 19:34:08 *tricky 19:34:20 -!- wareya_ has joined. 19:35:00 ais523_: ugh, it should be tightened 19:36:40 -!- monqy has joined. 19:36:51 -!- wareya has quit (Ping timeout: 240 seconds). 19:38:24 ais523_, what subject line(s)? 19:38:30 I can't find it :/ 19:39:41 Sgeo: BUS: Re: [Assessor] something 19:40:55 -!- TOGoS has joined. 19:41:01 Found it, ty 19:41:47 -!- augur has quit (Remote host closed the connection). 19:42:39 ais523_, did you see what Murphy said? 19:43:06 Sgeo: yes 19:43:18 different people seem to disagree on exactly what happened 19:43:28 although most people think it isn't fatally broken, they disagree as to why 19:44:15 But at any rate, if it is broken, Assessor can just change the rules as long as no one disagrees 19:44:18 iiuc 19:44:38 heh 19:44:38 oh, right 19:44:45 you mean ratifying false proposal results? 19:45:08 I think that unambiguously works, so AIAN isn't triggered 19:45:10 that would be illegal, of course 19:45:14 but good idea 19:45:27 ais523_: it will be triggered if someone objects continuously, no? 19:45:28 Not my idea, it's Murphy's. I think. 19:45:33 because then a majority can't change the rules, still 19:46:09 elliott: it's not even technically illegal if you state, upfront, in the message that you're ratifying something that you think is incorrect 19:46:11 "It doesn't trigger AIAN as long as "the Assessor announces some results 19:46:11 and they're allowed to self-ratify" still works." -- Murphy 19:46:16 note that this is true even if you're allying 19:46:21 *you're lying 19:51:08 > {import Data.Set; [...] <-- import only works at module top level, which lambdabot doesn't support (you can try with EgoBot) 19:51:23 ais523_: eh? it's illegal to ratify a knowingly incorrect document 19:52:11 elliott: unless you say it's illegal 19:52:26 hmm really? okay 19:52:29 and being Haskell, it happily calculated the function anyway and then didn't know how to display it onscreen 19:52:31 there's an exception for if you explain that the document may be incorrect, and the general nature of the inaccuracy 19:52:50 technically it almost certainly discovered it couldn't display it before trying to calculate it 19:52:54 which was added for the case when you're ratifying a currently unknown gamestate, although it helps in using ratification as proposal too 19:52:59 oerjan: ah, did it calculate it anyway? 19:53:05 probably not because of laziness 19:53:23 ais523_: no, i'm saying it never started running because that error message is compile-time (type checking) 19:53:31 ah, OK 19:53:39 I forgot Haskell was compiled 19:53:44 especially as I normally use it from an interpreter 19:54:34 haskell is very compiled, it's just type inference which makes it not show all the time 19:54:57 Does Haskell even define REPL semantics of any kind? 19:55:07 i don't think so 19:55:10 It's only specified in terms of batch translation I think 19:55:14 oerjan: I did know Haskell was compiled, I just forgot 19:55:15 (Full-world) 19:55:48 ais523_: still, even interpreted haskell has to type-check first :) 19:56:14 yeah 19:57:29 * Phantom_Hoover gets bored, tries to convince people on Omegle that he is a representative of Omegle. 19:58:39 "Please tell me your Omegle password." 19:58:40 Phantom_Hoover: was it you who did that in #minecraft? 19:58:46 also, what is Omegle? 19:58:50 i think ghci only added full import syntax in a relatively recent version 19:58:55 ais523_, yes, it was. 20:01:33 hmm, I wonder if haskell supports openGL :P 20:01:54 that's like asking if INTERCAL supports ncurses 20:02:00 iirc that's precisely the graphics library included in the haskell platform 20:03:53 ais523_: well, does it? 20:04:32 elliott: well, Funge-98 does, and there's an FFI between them 20:07:31 in Haskell, it would have been trivial to generalise to arbitrary monads at that point, which would help if I ever wanted to change to, say, sets 20:07:37 sets are not monads in haskell 20:07:53 they could be 20:08:06 mathematically, they're monads, and you can write the definitions easily enough 20:08:21 there is that tricky bit about needing Ord or at least Eq to be able to check equality of elements 20:08:31 -!- HolyBlood has quit (Ping timeout: 240 seconds). 20:08:35 which breaks the standard monad definition 20:09:00 because a monad needs to work for _all_ element types 20:09:14 there's that blog post doing it 20:09:22 with an alternative (iirc Oleg's) monad class 20:09:26 multiple classes even I think 20:09:31 oerjan: oh, I see 20:09:42 mathematically, there's no issue with sets of functions 20:09:45 (and Eq is enough) 20:09:48 http://www.randomhacks.net/articles/2007/03/15/data-set-monad-haskell-macros 20:10:20 -!- HolyBlood has joined. 20:10:47 * oerjan looks askance at HolyBlood and wonders if e is in the right channel 20:11:29 ais523_: hmm, Timwi hasn't replied yet 20:11:44 he's probably waiting on a reply from Graue 20:11:44 -!- augur has joined. 20:11:50 and Graue has quite possibly deleted the email 20:12:03 wtf google's define: prefix isn't working any more 20:12:04 http://esolangs.org/wiki/FileCode ;; /sigh 20:12:08 ais523_: haha 20:12:20 oerjan: wfm 20:12:25 although it just shows it at the top 20:12:29 you have to click "more" for more definitions 20:12:43 ais523_: I wouldn't think Graue would delete it without sending a reply, but I might be wrong 20:12:52 http://esolangs.org/w/index.php?title=Main_Page&curid=1&diff=22956&oldid=22297 20:12:54 ais523_: please to be block 20:12:57 hmm, i don't know if I get FileCode at all 20:13:24 * elliott reverts 20:13:25 elliott: um i'm seeing a completely ordinary result page as if i had written just the word i search for alone 20:13:44 oerjan: localised google? 20:14:05 elliott: blocked, autoblocked, prevented accounts being created from the same IP 20:14:05 oerjan: What query, I'll see if I can replicate here 20:14:11 define:askance 20:14:43 also, I didn't know that the matrix of solidity thing was on the main page 20:14:49 how did that become a meme, anyway? 20:14:55 esoterica person coming here 20:14:56 `quote solidity 20:14:57 ​329) enjoy being locked in your matrix of solidity 20:15:15 ah, I missed that 20:15:25 it was pretty lol 20:15:28 it's a good one, anyway 20:16:02 Hmm, I'll need to reconsider my Omegle strategy. 20:16:37 I mean, saying I'm conducting a demographic survey for Omegle and asking for a/s/l is good and fine, but it doesn't really tell me if I've fooled anyone. 20:17:06 elliott: same on english version 20:17:39 oerjan: what query? 20:17:49 define:askance i said 20:30:06 * Phantom_Hoover watches the IT Crowd. 20:45:00 -!- myndzi has quit (Remote host closed the connection). 20:47:49 yay, now we can \o/ without the fear of having legs added! 20:48:05 X-D 20:48:18 | 20:48:21 / \ 20:48:23 CURSES 20:48:28 SO CLOSE 20:49:06 NOT CLOSE AT ALL 20:49:15 pikhq: you forgot the penis 20:49:34 * oerjan swats pikhq for obviously trying to use the wrong kind of nick alignment -----### 21:10:49 :t scanr tail 21:10:49 Couldn't match expected type `b -> b' against inferred type `[a]' 21:10:49 In the first argument of `scanr', namely `tail' 21:10:49 In the expression: scanr tail 21:10:52 :t scanr 21:10:53 forall a b. (a -> b -> b) -> b -> [a] -> [b] 21:10:58 hmm 21:11:16 oerjan: [a,b,c,d] -> [[b,c,d],[c,d],[d]] how do 21:11:30 > tails [a,b,c,d] 21:11:31 [[a,b,c,d],[b,c,d],[c,d],[d],[]] 21:11:50 > init . tails . tail $ [a,b,c,d] 21:11:51 [[b,c,d],[c,d],[d]] 21:12:08 Oh, thanks. 21:12:21 > map (\(x:xs) -> (x,xs)) tails [a,b,c,d] 21:12:21 Couldn't match expected type `[[t]]' 21:12:21 against inferred type `[a] -> ... 21:12:27 > map (\(x:xs) -> (x,xs)) . tails $ [a,b,c,d] 21:12:28 [(a,[b,c,d]),(b,[c,d]),(c,[d]),(d,[]),*Exception: :3:5-21: Non... 21:12:32 > map (\(x:xs) -> (x,xs)) . init . tails $ [a,b,c,d] 21:12:33 [(a,[b,c,d]),(b,[c,d]),(c,[d]),(d,[])] 21:12:46 ?pl init . init 21:12:46 init . init 21:12:48 > map (\(x:xs) -> (x,xs)) . init . init . tails $ [a,b,c,d] 21:12:50 [(a,[b,c,d]),(b,[c,d]),(c,[d])] 21:12:53 -!- HolyBlood has quit (Ping timeout: 246 seconds). 21:12:53 That works. 21:12:56 :t inits 21:12:57 forall a. [a] -> [[a]] 21:14:21 Map.elems has no predictable result order, right? 21:14:44 \(x:xs) -> (x,xs) == head &&& tail 21:15:00 Probably not 21:15:04 Deewiant: That was just a test function. 21:15:07 -!- HolyBlood has joined. 21:21:01 -!- NihilistDandy has quit (Quit: leaving). 21:21:22 -!- NihilistDandy has joined. 21:22:48 http://mspaintadventures.wikia.com/wiki/Weird_Time_Shit 21:22:54 OOPS WRONG THING 21:26:37 > [(x, xs) | x:xs@(_:_) <- tails [a,b,c,d]] 21:26:38 [(a,[b,c,d]),(b,[c,d]),(c,[d])] 21:28:20 elliott: for your @unpl needs ^ 21:29:18 > map (head &&& tail) . filter (not.null.drop 1) . tails $ [a,b,c,d] 21:29:19 [(a,[b,c,d]),(b,[c,d]),(c,[d])] 21:32:05 haha, new in Perl 5.14 is the ability to name a package Foo::::Bar 21:32:26 although you're going to have to load it by hand unless your filesystem supports directories with zero-length names 21:32:28 the patch: 21:32:41 - if (strcmp(name, "Foo::::Bar")) 21:33:17 was 'if (strcmp(name, "Foo::::Bar"))' srsly in the source? 21:33:23 TOGoS: no, elliott is joking 21:33:26 although it's a good joek 21:33:28 *joke 21:33:33 oh thank gourd 21:34:02 I think even Vorpal would have realised that was a joke... 21:34:08 who's TOGoS 21:34:10 I had a hunch but, knowing Perl... 21:34:15 and what's a gourd 21:34:19 ais523, I don't get it 21:34:19 oh, a plant 21:34:27 ais523_: uncanny 21:34:47 gourd is what you thank when you find out that some source code is not as ridiculous as it could be. 21:35:05 then you shake it for good luck 21:35:08 in case you hadn't guessed, I'm reading the Perl 5.14 changelog 21:35:12 some of it looks useful, like s///r 21:44:51 also, I'm amused at Perl having versioned pragmas 21:45:17 (the pragmas are implemented as modules, and modules have version numbers, but it's crazy seeing things like "The overload pragma has been upgraded from 1.10 to 1.13.") 21:45:29 haha 21:48:36 pluggable pragmata's a little bizarre as language features go 21:52:48 pragmatic plugs 21:52:50 -!- FireFly has quit (Quit: swatted to death). 22:01:34 * elliott reads the beautiful funge 9eight subset log 22:01:55 (n % 2) by outputting to a file and inputting it again, so that you can do xor, so that you can write an adder 22:02:52 elliott: people were trying to find a minimal Funge-98-complete subset, without abusing fingerprints? 22:03:53 ais523_: no, the topic came up of Funge-98 minus ninety-three 22:03:55 (if you do abuse fingerprints, you could just make a feral fingerprint named the null string, that did s/(/0/ on the program and then interpreted it as a program in the language Unary) 22:03:58 i.e. all ninetythree instructions are gone 22:03:58 elliott: ah 22:04:08 both are interesting 22:04:16 we couldn't figure out how to get the lowest bit of a number to write an adder with xor 22:04:24 but then deewiant realised that the lower bit of its flag determines binary or text mode 22:04:26 :D 22:05:24 how do you get the higher bits? 22:05:31 dunno 22:10:12 -!- augur has quit (Remote host closed the connection). 22:10:15 -!- NihilistDandy has quit (Quit: leaving). 22:12:55 -!- elliott has quit (Ping timeout: 276 seconds). 22:20:09 * pikhq wonders how much time glibc spends to do literally nothing 22:20:15 (in its build) 22:20:58 Approximately "Can't tell because it's t3h borken" 22:21:55 make[2]: *** No rule to make target `../manual/errno.texi', needed by `../sysdeps/gnu/errlist.c'. Stop. 22:22:40 more Perl amusement: they went and changed the type that an API function returns 22:23:10 defending it partly by saying it was marked as "may change", which is fine, but also that they did a Google code search and found that nobody else was actually using it 22:26:32 I also love reading the lists of bugfixes, just because the bugs were so bizarre 22:27:16 e.g. sub { $_[0] = *foo }->($hash{key}); in 5.12 assigns the /string/ "*main::foo" to $_[0] 22:29:09 http://www.reddit.com/r/todayilearned/comments/he4du/til_you_cant_drink_coke_in_space_it_makes_you/c1ur38k 22:29:16 I have no words... 22:35:22 Okay, 5:30 for a build of glibc 2.13 from a clean dir... 22:36:47 1:16 for a no-op build. 22:37:11 That is fucking ridiculous. 22:37:58 minutes? 22:40:16 Yes. 22:40:41 wow 22:41:07 pikhq, still tuppin'? 22:46:39 http://xkcdexplained.com/ 22:46:43 Aww, it stopped. 22:46:46 Ages ago, too. 22:47:13 "Today is the day the Author finally discovered a metaphor that perfectly combines his two greatest passions in life: technology and unidirectional relationships wherein a female is able to completely dominate him emotionally." 22:47:22 So true. Godspeed, good analysts. 22:47:57 "The more astute Reader will realize the true meaning of today’s comic: the Author is using his vast influence to encourage smart engineers around the world to create computer software that will talk nicely to him." 22:51:56 -!- BeholdMyGlory has quit (Remote host closed the connection). 22:54:20 I am sorry Randall, I cannot do that. 22:58:22 "The Author hates women." 23:02:41 "The Author saw the film Inception and it confused him. He decided to make a comic strip about himself and a squirrel as most visual learners tend to do when frustrated." 23:03:04 -!- Patashu has joined. 23:07:07 Phantom_Hoover: Definitely still tupping. 23:07:20 *tuppin' 23:13:52 -!- HolyBlood has quit (Ping timeout: 260 seconds). 23:15:03 "The newscaster is doing exactly that which he is being criticized for - letting people without college physics degrees voice their opinions." 23:17:55 -!- cheater79 has quit (Remote host closed the connection). 23:17:58 -!- HolyBlood has joined. 23:18:04 I particularly like the ubiquitous jabs at Munroe's sexual politics. 23:18:31 -!- cheater79 has joined. 23:25:43 -!- augur has joined. 23:28:06 -!- copumpkin has quit (Ping timeout: 264 seconds). 23:32:43 -!- alegend45 has joined. 23:33:09 I want to make a programming language WORSE than Malbolge! 23:35:12 Whaddya' think? 23:41:05 -!- Phantom_Hoover has quit (Remote host closed the connection). 23:41:15 Why not make a class of arbitrarily more difficult languages 23:41:27 Then you'll have your work cut out for you 23:43:01 What do you mean? 23:43:06 A class? 23:43:55 Like how there are increasingly more inaccessible ordinals and notations for increasingly larger numbers like conway arrow notation and so on 23:44:07 Is there a permutation you can do to a language to make it harder? 23:44:37 Hmm... 23:44:46 Malbolge 2.0... 23:45:03 But how do I make it more difficult? 23:45:07 I'm picturing a language mutator that randomly applies the side-effect of a different operation to every operation you can do 23:45:11 so you can't do anything without mucking up something else 23:45:18 and if you try to fix that it messes up something else and so on 23:45:23 kind of like reverse engineering cryptography 23:45:29 Maybe more encryption? 23:45:59 Break this SHA-256 hash to continue programming? 23:46:15 O_O 23:46:21 I've got it! 23:47:05 we already have a hash-breaking esolang 23:47:15 shafuck or something 23:47:50 @hoogle m (a -> b) -> a -> m b 23:47:50 Control.Applicative (<*>) :: Applicative f => f (a -> b) -> f a -> f b 23:47:50 Control.Monad ap :: Monad m => m (a -> b) -> m a -> m b 23:47:50 Control.Applicative (<**>) :: Applicative f => f a -> f (a -> b) -> f b 23:47:54 bitcoinfuck 23:48:10 dang there are some weird ass operators in haskel 23:48:23 just not the one i want 23:50:45 But how exactly does Malbolge work? The wiki isn't very good at explaining it. 23:51:03 it's a ternary language with lots of arbitrary ternary bit-wise operators that aren't awfully useful 23:51:05 iirc 23:51:29 and doesn't the program counter move around randomly? 23:52:13 acually there are just two operators iirc 23:54:39 -!- jassumjas has joined. 23:55:01 no it doesn't move around randomly 23:55:21 -!- HolyBlood has quit (Ping timeout: 260 seconds). 23:55:56 however the previously executed instruction is encrypted after each step 23:56:15 aaah 23:56:30 polymorphic code }:) 23:56:33 except for jumps, for which the encryption hits the instruction before the target instead 23:57:15 (this exception for jumps supposedly makes things much easier to program) 23:58:48 -!- copumpkin has joined.