00:00:08 * elliott gives up 00:01:27 elliott: the reason I'm describing this semantically is that the key is not well-founded 00:01:44 let's see… I suppose the way it works in practice is that the key is (x, y, unique identifier for level) 00:01:47 you're doing the opposite of describing it semantically; you're unable to tell me what the semantics are 00:01:56 awww yeah backup time. 00:02:02 where the unique identifier is currently the level's refaddr, but semantically could be anything that uniquely identifies the level 00:02:03 zooooooooom rsync spam. 00:02:16 my particular blend of zealotry tells me that you, therefore, have no idea what your program does or is meant to do, and you should just type random keys instead 00:02:30 ais523: you haven't been able to tell me what a level is, though 00:02:38 if it's not identified by a location, how do you know what makes any given level not another level? 00:02:43 how is it done? 00:02:48 elliott: badly 00:02:50 where do level objects come from? how are they created? 00:03:03 basically, TAEB always knows whether or not it's on the same level as it was last step 00:03:11 if it isn't, it checks all the existing level objects to see if it matches what it sees 00:03:19 and if it doesn't, creates a new level object and assigns all the tiles it can see to that one 00:03:53 ais523: OK, then the closest semantics I can think of a level for a hash key is the number it was created in 00:03:58 as in, first level created is 0, second is 1, ... 00:04:02 you'll notice that this is terrible 00:04:07 that's because your program is terrible :) 00:04:21 elliott: as I said, "unique identifier for level" 00:04:35 it takes a special kind of program to bake in how its imperative semantics run to the /behaviour/ 00:04:38 although I suppose most programs do that :( 00:05:07 elliott: it's not imperative semantics, really 00:05:19 or can't "arbitrary identifier for X" be used in functional programs ever? 00:06:14 ais523: it is, because it's based on the order things are executed 00:06:17 basically, TAEB always knows whether or not it's on the same level as it was last step 00:06:17 if it isn't, it checks all the existing level objects to see if it matches what it sees 00:06:17 and if it doesn't, creates a new level object and assigns all the tiles it can see to that one 00:06:30 the only thing involved here is time, basically 00:06:43 elliott: I mean NetHack game step 00:06:47 yes 00:06:53 imperative programs don't care if their time is real time... 00:06:54 it's about sequencing 00:06:56 however, I can think of a better way to model it that behaves the same /way/ 00:07:08 elliott: what TAEB can detect is whether the level has changed or not 00:07:16 you're basically keying on the /equivalence class/ of "close enough to X" 00:07:19 where X is a tile pattern 00:07:26 ("if it matches what it sees") 00:07:29 -!- Vorpal has quit (Ping timeout: 240 seconds). 00:07:54 so your keys are just taking the setoid of maps (= 2D ASCII pictures) with the relation being however it defines "close enough" 00:07:57 Q.E.Z. 00:08:01 elliott: well, if a command it sends to the game leaves the level unchanged, it knows; likewise, if it changes it, it knows 00:08:30 but it can't compare two views from different times to see if they're the same level (it has many ways to rule it out, but no way to prove it for certain) 00:08:32 ais523: what you're saying doesn't make any sense at all, so I'm assuming you just didn't notice me swerving at some point 00:09:05 mmmm organic compounds. 00:09:14 elliott: I don't see why it makes no sense 00:09:21 oh, they're probably true statements 00:09:22 if you like, we're trying to key on insufficient data 00:09:32 but you seem to be implying that they're relevant responses to things I've recently said 00:09:47 I'm saying that 00:09:51 elliott: I'm trying to say you're wrong about what my keys are 00:09:56 (a) the semantics you've described are terrible, 00:10:07 (b) but there's a reasonable way to express them without changing behaviour or relying on imperative sequencing 00:10:23 elliott: it's not relying on imperative sequencing 00:10:30 ais523: unfortunately what I said was completely true; i.e. you could replace the keys in your program with the keys I mentioned and TAEB would work identically 00:10:33 because the information it gets from the game has timestamps 00:10:40 ais523: you don't understand what imperative means 00:10:53 it is fundamentally based on order of operations, not declarative semantics, Q.E.Z. 00:11:08 elliott: are you under the impression that I'm saying that the way TAEB does levels is fundamentally impossible to express in a functional language? 00:11:14 because I'm not trying to argue that at all 00:11:14 (b) but there's a reasonable way to express them without changing behaviour or relying on imperative sequencing 00:11:20 obviously not, because I just told you the real semantics 00:11:34 elliott: what exactly are you taking issue with? 00:11:37 or are you agreeing with me? 00:11:38 i.e. the semantics you want and /really mean/, not how you reverse engineer them from the actual behaviour 00:12:02 ais523: I'm disagreeing that your description of the semantics is reasonable, and I'm disagreeing with any implicit statement that TAEB's way of doing this is at all reasonable and that it isn't completely structurally unsound 00:12:45 but mostly I consider my point proven, since you've had to resort to mentally simulating the software to figure out what it means :) 00:13:24 elliott: OK, the semantics I want is to key on x-coordinate, y-coordinate, and which level the tile is belongs to; but we don't know what level the tile belongs to 00:13:51 that's impossible, so it's not semantics 00:14:37 you're basically keying on the /equivalence class/ of "close enough to X" 00:14:37 where X is a tile pattern 00:14:37 ("if it matches what it sees") 00:14:37 so your keys are just taking the setoid of maps (= 2D ASCII pictures) with the relation being however it defines "close enough" 00:14:37 Q.E.Z. 00:14:47 that's the best description of the semantics you /have/ 00:14:53 elliott: I agree that the semantics I want are impossible 00:14:55 whether it's what you want depends on how much you like your level-matching algorithm 00:15:14 and it's the best we have; the level-matching algorithm could do with improvement, really 00:15:30 it works well mostly, but goes haywire if it gets half a level due to lag 00:15:31 well, to clarify: 00:15:35 whether it's what you want depends on how much you like the very idea of the level-matching algorithm 00:16:17 elliott: anyway, you're missing an important point; we can match the maps either on physical appearance, or on knowledge that two maps are the same because they were on consecutive steps without a level change 00:16:20 ais523: to unpack what I'm saying into something more like conventional programmerspeak, I'm saying that you want to want to form a new type that's identical to 2D level maps, except that all maps that match are considered equal 00:17:00 so what we're actually doing is taking equivalence classes on (map, timestamp) pairs by quotienting them on a "look similar or have consecutive timestamps without a change" equivalence relation 00:17:12 (in other words, I didn't need the unpacking…) 00:17:19 (that's not what the problem was) 00:17:24 ais523: I didn't expect you needed the unpacking 00:17:28 ais523: I was just relating it pack to hash tables 00:17:34 *back 00:17:42 ah, I see 00:17:54 actually, what I was really doing is just trying to restate it, but it happened that I ended up restating it in a more dumbed-down fashion, so I added that to the front :) 00:17:55 elliott: anyway, the main reason these are refaddrs is so that they can be calculated quickly 00:18:00 ais523: right 00:18:07 ais523: well, in case it isn't clear, I think TAEB's design is terrible :) 00:18:58 ais523: but if you designed it in @, it'd probably be perfect. 00:19:20 elliott: how would you solve the problem, incidentally? 00:19:27 you don't need to use the same semantics as TAEB 00:20:09 ais523: well, if you're asking "how would I, when presented with this problem in practice, solve it", the answer would probably be to complain on #esoteric about how terrible TAEB is, and then rethink everything about the entire problem of playing nethack from scratch 00:20:25 elliott: anyway, there's a situation where this approach leads to huge measurable problems in TAEB 00:20:32 but on a smaller scale, I'd probably try and figure out whether you can precisely determine level 00:20:37 rather than just relying on heuristics 00:20:39 by logging more about what happens 00:20:42 which is that it has trouble working out when two items are the same 00:20:45 and even more so, of monsters 00:20:51 elliott: imagine you have a finite amount of time to live. Now imagine that what you're doing right now prevents you from doing other things in the sum of all events in your life. 00:20:58 elliott: what would you rather be doing right now? 00:21:11 I'm sure elliott enjoys talking on IRC 00:21:12 kallisti: "Imagine" I have a finite amount of time to live? 00:21:19 That seems fairly likely to me. 00:21:24 It's not terribly difficult to imagine. 00:21:44 that's promising. 00:21:53 "Now imagine that what you're doing right now prevents you from doing other things in the sum of all events in your life." ;; is this not equivalent to "Now imagine that what you're doing now is not doing other things." 00:22:17 -!- pikhq has joined. 00:22:34 anyway, my answer is nothing, because I'm feeling fairly lazy, it's after midnight, and it's winter 00:22:41 elliott: sure, it still interferes with the sequencing and duration of events. 00:22:49 so there's not really a huge amount of things to do. 00:22:54 now why are you asking? 00:23:06 I don't really have a reason. 00:23:13 what would _you_ rather be doing? 00:23:24 ais523: I'm about to do something nobody has ever done before in the history of prorgamming 00:23:27 skydiving in a wingsuit. 00:23:38 elliott: has anyone attempted before? 00:23:43 kallisti: why aren't you doing it? 00:23:46 ais523: nobody's even considered it! 00:23:52 OK 00:24:07 elliott: no it's my point, you're not allowed to steal it! 00:24:16 kallisti: so what is your point, exactly? 00:24:26 if you think talking about IRC on programming is pointless, 00:24:28 * elliott holds up mirror 00:24:30 elliott: that this conversation is silly. :P 00:24:37 good, don't participate in it 00:24:40 hmm, I prefer elliott's subject 00:24:41 elliott: go on 00:24:57 ais523: I'm going to grep for every occurrence of TODO|FIXME in a codebase, and /actually fix them/. 00:25:01 SORRY IF YOU EXPECTED IT TO BE EXCITING 00:25:10 elliott: haha 00:25:21 that is actually pretty exciting, also insightful 00:25:27 I'm sure I've at least considered it, before now 00:25:54 -!- pikhq_ has quit (Ping timeout: 248 seconds). 00:26:52 $ egrep -r 'TODO|FIXME' *.c *.h | wc -l 00:26:52 26 00:27:02 oh, that's a pleasant surprise 00:27:06 considering I write about fifty per day 00:28:16 ais523: anyway, why can't you decide levels exactly in TAEB? 00:28:41 I can't think of any situation in NetHack where you would (a) end up on an unknown level and (b) not be able to determine it exactly, through e.g. the level name/identifier/whatever you call it or otherwise. 00:28:50 elliott: suppose you go down a set of stairs on Dungones:2; you could arrive on Mines:3 or Dungeons:3 00:29:00 and the view could look exactly the same for each 00:29:19 ais523: OK, but you still known the dlvl number, right? 00:29:21 (in particular, you could be in a dark area with no adjacent walls in either) 00:29:24 yep, you know the numbre 00:29:26 *Dungeons 00:29:29 just not the branch 00:29:34 ais523: why not just key on that? 00:29:36 checking number is one of the most obvious things the level comparer does 00:29:44 elliott: because then you'd get mines:3 and dungeons:3 muddled? 00:29:48 "what branch it's in" is just another piece of information you haven't yet found out 00:29:54 ais523: oh, right 00:30:08 ais523: well, hmm 00:30:26 ais523: I know what I'd do; I'd store tile information in a tree 00:30:36 ais523: mines:3 and dungeons:3 would be distinguished by the path in the tree to get there, which would be spatial 00:30:46 they'd just both be on level 3, that's all 00:30:59 that is, I'd store tile information inside level information 00:31:02 elliott: except that you can /also/ fall through a trapdoor on dungeons:1, and land on dungeons:3 00:31:11 (well, possibly not with those exact numbers, but translated downwards) 00:31:17 ais523: OK, and? 00:31:25 now, how do you know if you're on the level reached via set-of-stairs 1, or the level reached by set-of-stairs 2? 00:31:33 ais523: *dungeons:3/mines:3, then 00:31:45 (presumably) 00:31:49 what I mean is, "path to get there" isn't always known 00:31:57 ais523: well, sure it is 00:32:01 it's just a graph instead of a tree 00:32:03 there's two paths 00:32:18 elliott: OK, I'll buy that; but it's a graph where you don't know if two edges lead to the same vertex or not 00:32:21 so it's not a /known/ graph 00:32:34 ais523: OK, what do you think of this: "current level" should be stored separately to "known levels" 00:32:45 and it should only become "tied" to a known level if you can decide for /sure/ that it's a known level 00:32:51 most of the time, you can do that immediately 00:33:02 e.g., you went down some downstairs in a non-forking place 00:33:12 which would be one kind of proof 00:33:17 yep 00:33:24 one kind of proof that TAEB currently doesn't use, interestingly 00:33:26 that /is/ based on time, but it's not in the model 00:33:35 it's something you /give/ to the model 00:34:03 ais523: so, the worst-case is, you fall down a trapdoor to a previously seen level, and never prove it's one or the other branch 00:34:18 ais523: but as soon as you go up the upstairs, you'll be in an unambiguous location again 00:34:22 because there's only one dlvl 2, or whatever 00:34:42 ais523: or if you go down, and find minetown, you know all the levels on the way were in the mines 00:34:47 elliott: how would the API for this information look to the AI? 00:35:30 ais523: well, beats me, I'm thinking in terms of @, which basically involves pretending the world is as declarative as possible and you have infinite powers of abstraction available to you 00:35:32 let me think... 00:35:58 also, how does an AI do "route to "? 00:37:40 one sec 00:38:30 -- Path is a tree path (forget the graph) with the "canonical path" 00:38:30 -- to a level, i.e. "through stairs" most of the time 00:38:30 getKnownLevel :: Path -> M Level 00:38:30 getCurrentLevel :: M Level 00:38:30 unifyLevel :: Level -> Unification -> M () 00:38:31 -- Unification basically proves that a level is the level at 00:38:33 -- a certain path; its exact definition would depend on all 00:38:35 -- the ways you can prove a level is another, which is basically 00:38:37 -- an AI issue. There is almost certainly a more general definition 00:38:39 -- that lets you implement such ways decoupled from the definition 00:38:41 -- of the actual data-type, but I'm not being paid enough to try 00:38:43 -- and think of it. 00:38:51 ais523: and the usual way, assuming you the current level is known 00:39:05 ais523: but you can have paths from unknown levels to known ones 00:39:14 ais523: if you're on dlvl 3, and dlvl 2 is unambiguous (i.e. there is only one), and there's an upstairs... 00:39:35 heh at that comment 00:39:52 and presumably, if you're on dlvl 3 and don't know where the stairs to dlvl 2 are, you tell the AI "that's your problem" 00:39:59 yep :) 00:40:17 ais523: just like if you're on dlvl 1 and can't see anything and want to get to the amulet 00:40:31 indeed 00:40:46 nbt.c:char old[3] = { data[-3], data[-2], data[-1] }; /* TODO this is horrible, HORRIBLE */ 00:40:46 I have to go home, anyway 00:40:47 oh dear 00:40:50 bye everyone 00:40:54 ais523: bye 00:40:55 -!- ais523 has quit (Remote host closed the connection). 00:41:06 wait, at /twenty to one/? 00:41:47 kallisti: so what's the vastly-better conversation you would have rather had? 00:42:21 there isn't one. 00:42:43 great! 00:42:45 so silence then? 00:47:58 -!- kmc has quit (Quit: Leaving). 00:50:32 ^def test ul (::SSS) 00:50:32 Defined. 00:50:43 ^test (hm? )~^ 00:50:48 bah 00:51:26 ^test (hm? )S 00:53:08 oerjan: wat 00:53:58 trying to see if ^def ... ul ... does anything useful with added input 00:54:46 ^def test ul ^ 00:54:47 Defined. 00:54:55 oerjan: it doesn't 00:54:57 ^test ((hm...)S) 00:54:57 ...out of stack! 00:55:02 to my knowledge. 00:55:06 :( 00:55:10 ^def test ul S 00:55:10 Defined. 00:55:15 ^test (easy way to find out) 00:55:15 ...out of stack! 00:59:23 ^def test ul (You fail!)S 00:59:23 Defined. 00:59:37 * oerjan whistles innocently 01:00:09 * kallisti considers using Persistent::Hash for his IRC bot 01:00:17 I notice there's no Persistent::List though. 01:00:27 I'd want one of those too, preferably 01:00:50 is there a Persistent::Nuisance? 01:01:05 don't think so. 01:01:05 kallisti: um 01:01:10 kallisti: can't you just use Dumper 01:01:12 + tie 01:01:18 elliott: that's what I currently do minus the tie. 01:01:18 wait not dumper 01:01:20 what's the binary form 01:01:28 um... 01:01:29 Storable 01:01:38 hey look, it even does tying for you 01:01:42 http://perldoc.perl.org/Storable.html#NAME 01:01:43 use that. 01:02:17 good choice. 01:02:27 I keep forgetting about all of these modules 01:02:29 that like... 01:02:30 do things 01:02:33 that I want. 01:03:15 * kallisti thinks 'use' should just automatically install things from CPAN. :P 01:03:39 Yes, it should. 01:03:48 (This is a sincere statement.) 01:03:53 (yes no doubt) 01:04:22 (No, it actually is.) 01:04:37 I could see some issues with it, but otherwise it would be very convenient. 01:04:56 particularly does it also /update/ old packages? because that could break things very easily. 01:05:17 There's the security issue, but that's mitigated by proper sandboxing e.g. in a capability language, and mitigated further by a tests/rating/review system which CPAN already has. 01:05:43 also possible security issues if a maintainer decides he wants his package to suddenly become a virus or something. :P 01:05:44 kallisti: I don't see why it would. 01:05:52 also possible security issues if a maintainer decides he wants his package to suddenly become a virus or something. :P 01:05:53 There's the security issue, but that's mitigated by proper sandboxing e.g. in a capability language, and mitigated further by a tests/rating/review system which CPAN already has. 01:06:02 It's a serious concern; without solving that it shouldn't be implemented. 01:06:07 And Unix isn't a very tenable platform to solve it on,. 01:06:09 *. 01:06:49 I presume C@AN will have these features. 01:07:12 Crap @ Asshole Naptime. 01:07:21 The best name for a package source, I can assure you. 01:07:54 hey look Storable isn't even a dependency because it's standard. 01:08:08 The proper sandboxing would be inherent in @. 01:08:25 don't i vaguely recall someone mentioning there is a package in CPAN for making use install from CPAN 01:08:50 You can use FreezeThaw instead if you want to introduce a non-core dependency. 01:09:02 oerjan: that sounds familiar 01:09:20 fizzie: benefits? 01:10:11 I'm not entirely sure how you could hack use to do that though... 01:10:23 Source filter, @INC hacking. 01:10:24 ah wait I know. 01:10:26 yes 01:10:28 @INC hacking. 01:10:28 Unknown command, try @list 01:10:28 Which? 01:10:30 Right. 01:10:40 http://search.cpan.org/~jjore/Acme-Anything-0.04/lib/Acme/Anything.pm does similar things. 01:10:46 push @main::INC, \ &handler_of_last_resort; 01:10:46 sub handler_of_last_resort { 01:10:46 my $fake_source_code = '1'; 01:10:46 open my ($fh), '<', \ $fake_source_code; 01:10:46 return $fh; 01:10:47 }; 01:10:58 that rings a bell 01:12:00 That's not it, though. 01:12:09 * elliott is just going through every single Acme module. 01:12:11 To find it. 01:12:23 None that I know of. Well, it's pure-Perl as opposed to Storable's C. I guess it might not break regex objects like Storable, though not sure about that. 01:12:27 oerjan: http://search.cpan.org/~adamk/Acme-Everything-1.01/lib/Acme/Everything.pm 01:12:52 That's close. 01:12:57 kallisti: ^ 01:13:37 ah that must be it 01:13:48 doing BEGIN { eval { require(Module); Module->import(LIST)} warn $@ if $@; } is much more sensible than that handler_of_last_resort thing. 01:14:04 fizzie: "pure perl" such a benefit. 01:14:34 Well uh maybe your religion prohibits C code in Perl modules? 01:14:37 fizzie: ALSO WE WANT ^def ... ul ... TO CONCATENATE COMMAND ARGUMENTS TO THE COMMAND, OKTHXBYE 01:14:38 doing BEGIN { eval { require(Module); Module->import(LIST)} warn $@ if $@; } is much more sensible than that handler_of_last_resort thing. 01:14:42 um that doesn't load from cpan. 01:14:48 oerjan: i really don't think we do 01:14:50 elliott: correct 01:14:54 that's a rather bad implementation of underload io 01:14:55 neither does handler_of_last_resort does it? 01:14:59 kallisti: oh 01:15:03 I was talking about Acme::Everything 01:15:07 yes I know. 01:15:13 I AM NOT ALWAYS TALKING ABOUT THE SAME THING YOU ARE. 01:15:18 doing BEGIN { eval { require(Module); Module->import(LIST)} warn $@ if $@; } is much more sensible than that handler_of_last_resort thing. 01:15:23 kallisti: that's why it's an Acme module... 01:15:38 elliott: but it's the only thing which doesn't require an ad-hoc input encoding :( 01:15:44 * kallisti is tempted to use Acme::Everything 01:15:52 oerjan: well... 01:15:59 oerjan: I think ^ul input was talked about, but there were some Opinions on what sort of smunglings it should encode the input in. 01:16:05 oerjan: surely just pushing the argument as the first element on the stack would be better than /that/ 01:16:06 With one 'use' line, you effectively load all 20,000,000 odd lines of code in CPAN. 01:16:09 oh god. 01:16:24 kallisti: it's lazy though :P 01:16:28 oh okay. 01:16:30 whew. 01:16:32 but it shouldn't be!!! 01:16:35 I AGREE 01:16:42 elliott: um ok. i guess that's more general. 01:17:11 oerjan: well what would yours do exactly 01:17:35 elliott: it would be nice if it didn't have any restrictions. 01:17:47 elliott: I could just put use Acme::Everything; in my source, run it once, and then remove the line. 01:17:54 instead of manually installing packages. :P 01:18:05 kallisti: with Acme::Everything you don't need the use statement, though 01:18:17 yes but it has to be a method call. 01:18:36 well i mean you couldn't just remove the use staetment 01:19:14 oh it doesn't actually install anything. 01:19:24 ... 01:19:24 Well uh maybe your religion prohibits C code in Perl modules? <-- well i recall jewish rules forbid mixing different cloth fabrics, so why not... 01:19:33 kallisti: no, it's just that you don't need "use" statements to use modules with it 01:19:38 http://www.stationv3.com/d/20111214.html 01:19:38 and use is normally required to use perl modules, no? 01:19:59 elliott: yes. that's not what I'm talking about though. 01:20:05 hi 01:21:17 oerjan: That's a Christian rule. 01:21:20 elliott: well i considered actually running the input (preferrably first), but putting it on the stack is more flexible as long as you can still use ^ on it 01:21:25 "In other words, if you use Acme as the base, your class will be the summit." 01:21:27 * kallisti facepalms 01:21:37 Well, I mean, it's Judeochristian rule. 01:21:42 oerjan: *preferably 01:21:53 Since it's from the small part of Jewish orthodoxy that made it into the Old Testament. 01:22:02 oerjan: anyway I guess that works, but it seems weird compared to just pushing it 01:22:06 Gregor: you know perfectly well christians don't follow all the old testament rules 01:22:10 oerjan: otoh that lets you push multiple stack elements. but i think that's actually a _bad_ idea 01:22:18 as no program can process a variable number of stack elements like that 01:22:22 so it's useless to do that 01:22:24 oerjan: Sure they do, when they happen to correspond to their biases. 01:22:34 Gregor: well naturally. 01:22:55 Gregor: Yeah, but the Old Testament laws were specifically overturned. 01:23:09 elliott: are you familiar with File::chdir 01:23:16 kallisti: why 01:23:24 Sgeo: why did you link that 01:23:27 elliott: I was just recollecting on how awesome it is. 01:23:35 yes 01:23:37 recollecting. 01:23:42 kallisti: what does it do. 01:24:17 elliott, because 01:24:36 Sgeo: it isn't funny though 01:24:56 It isn't?! 01:25:06 it isn't funny 01:25:09 sorry sgeo 01:25:17 elliott: it gives you a $CWD as well as a @CWD that you can use to change the cwd. you can push and pop directories to @CWD and you can also use local $CWD to define a temporary cwd. 01:26:23 it's an interesting use for local I found. 01:26:40 Sgeo: are you serious 01:27:07 I think the author just needs to ... fix his joke structure, or something, then it would be good 01:27:12 As opposed to almost good 01:27:27 As it is, the jokes are a bit too predictable 01:27:29 no 01:27:32 it wouldn't 01:27:36 this guy is one of the least funny people possibl 01:27:36 e 01:27:37 as opposed to the opposite of good. 01:27:45 like 01:27:48 every human could be made funny 01:27:52 by "restructuring" how they make jokes 01:27:54 the structure 01:27:57 is the difference between a funny person 01:28:00 and an unfunny person 01:28:03 and this person is /worse/ 01:28:20 elliott: not me. my jokes are already perfect. Any restructuring would simply imperfect them. 01:28:47 or produce an equivalently perfect joke. 01:28:56 oerjan and I are in the this perfect joke tier together. 01:29:47 putting jokerey to a tier structure is bad 01:29:54 http://www.stationv3.com/d/20111215.html this isn't that bad 01:30:06 yes 01:30:07 it is 01:30:09 yes it is 01:30:21 http://www.stationv3.com/d/20111215.html#comment-387439621 though this person is worse 01:30:50 as far as I can tell stationv's "humor" is based on character traits. 01:30:59 the punchline is always based on implied character traits. 01:31:21 are any of the characters anything but shallow 01:31:25 kallisti: how much better can you do when one of your characters is literally "alternate [other character]" 01:31:26 "I did this thing but then IMPLIED CHARACTER TRAIT HAHAHAHAHAHAHAHAHA" 01:31:38 i mean like 01:31:46 i can't tell whether alternate floyd is the opposite of 01:31:49 or entirely unrelated to floyd 01:31:52 either way it's bad 01:32:02 even star trek goatee alternates are similar in some ways and opposite in others 01:32:08 and generally differently nuanced in general 01:32:13 because star trek is not as bad as station v3 01:32:27 elliott: brilliant observation. 01:32:58 quite. 01:33:17 elliott, from the alternate universe 01:33:23 yes 01:33:26 how is that relevant 01:33:45 how is alternate floyd distinguishable from an entirely unrelated character who just happens to be called floyd 01:33:57 http://www.stationv3.com/d/20030804.html 01:34:03 elliott: he's from the alternate universe! 01:34:09 duh! 01:34:16 elliott, he's the robot manager of the station in the alternate universe, presumably 01:34:19 Sgeo: you appear to be unable to understand my simple point 01:34:26 characters have to have attributes to make them interesting 01:34:30 attributes and backgrounds 01:34:36 Regular Floyd errors a lot 01:34:44 alternate floyd, near as i can tell, has none of these 01:34:49 there is no "floydianness" about his personality 01:34:53 he just has a correspondign role 01:34:56 and is otherwise unrelated 01:34:58 that is not good writing. 01:34:59 elliott: But he's AAAAAAAAAAAAAAAAAAAAAALTERNATE 01:35:18 basically this strip seems to be trying to be ~wacky~ by introducing random alternate universes and resetting the universe and shit 01:35:19 http://www.stationv3.com/d/20030806.html 01:35:25 now 01:35:30 one cannot maintain a decent strip 01:35:33 with just "wackiness" 01:35:36 and no writing ability 01:35:37 for 8 years 01:35:46 ^^linky 01:36:04 Sgeo: yes, I clicked it. 01:36:06 it was irrelevant. 01:37:44 elliott: YOU'RE irreverent 01:37:48 http://www.stationv3.com/d/20030817.html wtf 01:38:12 Sgeo: "wtf"? the attempt at a joke is as obvious there as its falling flat 01:38:41 HA HA IT'S A PLANT THING IT CAN'T MOVE OR PLAY TAG HA 01:38:42 sgeo was hide and seek deprived as a child 01:39:51 why do we keep talking about stationv3. is it even a popular webcomic? 01:40:32 elliott: Star Trek is probably sometimes worse than Station v3. 01:40:45 It's probably the single most inconsistent series out there. 01:40:59 pikhq: *Maybe* TOS. 01:41:01 And *maybe* Threshold. 01:41:07 But even season 1 TNG is more enjoyable than this. 01:41:15 kallisti: because Sgeo can't bring himself to accept that it's not terrible 01:41:17 elliott: Threshold wasn't *exceptionally* worse than other Voyager stinkers. 01:41:17 and so keeps linking it. 01:41:25 It was just a little bit worse. 01:41:54 elliott, did you just admit that it's not terrible and that I'm unable to accept that? 01:42:17 Sgeo: it was an obvious typo, since you seem to have no issue accepting that it's not terrible 01:43:03 elliott: Also, Enterprise. 01:43:18 pikhq: Have you /seen/ Station V3? 01:43:25 elliott: No, I try to avoid shit. 01:43:27 elliott: which P language is the best? PHP, Perl, Python, Pascal, Prolog, or... hmmm... Postscript? 01:43:42 Oh, wait, right, that one. 01:43:46 are there no other p languages 01:43:49 I have seen it. 01:44:05 And I didn't read much of it because it had antihumor. 01:44:24 It sucked badly enough that it stole a laugh from something else. 01:44:26 monqy: there are. 01:44:26 kallisti: Pail. 01:44:36 kallisti: Plof! 01:44:51 monqy: http://en.wikipedia.org/wiki/List_of_programming_languages#P 01:44:59 oh Piet as well 01:45:15 elliott: I've never heard of Pail. 01:45:22 Does no one besides me think that Station V3 can be good? 01:45:28 Sgeo: No. 01:45:41 kallisti: http://catseye.tc/projects/pail/ 01:45:41 station v3 has fans, doesn't it 01:45:48 Sgeo: yes 01:46:43 -!- augur has quit (Remote host closed the connection). 01:48:13 > let in 5 01:48:14 5 01:48:16 lol 01:48:30 * kallisti learns something new everyday. 01:49:00 Phortran 01:49:03 kallisti: why are you reading Pail.lhs 01:49:08 http://catseye.tc/projects/pail/tests/Pail.falderal is the specification 01:49:19 oh, hmm 01:49:27 that was before he started writing specs in Falderal, I guess 01:49:47 > let 2 + 2 = 5 in 2 + 2 01:49:47 5 01:49:52 lololololol 01:50:07 ;_; 01:50:18 it's like watching toddlers learn to walk 01:51:52 :D 01:52:20 > let in 2 + let in 3 01:52:20 5 01:52:31 > do let in 2 + let in 3 01:52:31 5 01:52:53 bad 01:54:00 > let in 1 - let in 2 - let in 3 01:54:01 2 01:54:11 * oerjan whistles innocently 01:54:12 Falderal? 01:54:23 falderal. 01:54:35 oerjan: hmmm... 01:55:06 1 - (2 - 3) = 1--1=2 01:55:08 Yay 01:55:16 -!- itidus21 has quit (Ping timeout: 245 seconds). 01:55:21 oh it's right associative. 01:55:38 > 1 - 2 - 3 01:55:39 -4 01:56:03 Sgeo: http://catseye.tc/projects/falderal/ 01:57:09 ha ha oh boy 01:57:27 i think i have a problem 01:57:43 heroin? 01:57:46 yes 01:59:08 Heroine? 01:59:39 yese 02:00:19 hairowin? 02:00:34 harlequin? 02:00:43 hair o' win 02:01:17 -!- zzo38 has joined. 02:03:02 heirouīnn? 02:03:51 yes 02:05:38 Smack? 02:07:05 yes 02:07:12 *yack 02:09:02 Uhh, in that case, heroack? 02:09:05 strangely enough mueval on my computer occasionally times out on very tivial inputs. 02:09:15 like the let 2 + 2 = 5 in 2 + 2 02:09:17 it timed out once 02:10:04 s/on my computer/when called by my IRC bot/ 02:10:06 Gregor: Yes. Heroack. 02:10:08 You got it. 02:10:12 kallisti: lambdabot does that too. 02:10:16 we're all winners! 02:10:56 Oh, I see how it works 02:11:34 how does what work 02:11:41 let 2 + 2 = 5 in 2 + 2 02:12:10 yes it uses this function thing 02:12:14 it's pretty crazy magic. 02:12:55 > let 2 + 2 = 5 in 2 + 1 02:12:56 *Exception: :3:4-12: Non-exhaustive patterns in function + 02:20:48 NO!! STOP UPVOTING THAT ANSWER!!!! 02:20:59 > let don't = "stop believing" in don't 02:21:00 "stop believing" 02:21:01 IT HAS ENOUGH VOTES! I'M GETTING TOO MUCH REPUTATION YOU BASTARDS :( 02:21:05 kallisti: No stop that is the worst song. 02:21:09 elliott: link 02:21:21 kallisti: You can't downvote it, you'd have to register and get enough reputation and shit. 02:21:24 elliott: for some reason I thought ' was only valid at the end of identifiers 02:21:33 because that's where it's commonly placed. 02:21:39 (I assume that's why you asked.) 02:22:01 elliott: no I want to see what you said/ 02:22:16 OK fine http://stackoverflow.com/questions/8524801/determining-function-behavior-from-the-type-of-the-function. 02:22:22 (It's the top answer.) 02:22:55 -!- kmc has joined. 02:26:05 elliott: oh sure, you'll write an awesome explanation for some random person on the internet. 02:26:12 but then when I ask you a question. 02:26:16 NOPE. QUIT BEING STUPID. 02:26:26 kallisti: See, the thing is, you're not giving me smack for the pain. 02:26:46 smack for the pain what does that even mean 02:26:52 DO YOU WANT DRUGS? 02:27:06 I don't think I will have much luck smuggling drugs internationally. 02:27:07 Yes, I want DRUGS in return for the pain caused by having to answer your inane questions. 02:27:15 DRUGS, MAN. 02:27:38 elliott is all about that smack 02:28:55 elliott: I found the note about polymorphism being important a good point. 02:29:06 I hadn't really specifically thought about that being essential. 02:29:10 but, of course, it makes sense. 02:29:27 That's where the name "parametricity" comes from: parametric polymorphism. 02:30:56 an (a,b) -> Int could return any constant integer or any int that can be formed from a, b, (a,b), and some function or chain of functions. 02:31:20 @free f :: (a,b) -> Int 02:31:21 f = f . $map_Pair g h 02:31:27 a "chain of functions" also being "a function" of course. 02:31:33 elliott: oh? what is this? 02:31:40 "any int that can be formed from a, b, (a,b), and some function or chain of functions." 02:31:42 This is mistaken. 02:31:55 There are no operations (a -> Int) or (b -> Int) that are not constant: 02:31:58 @free f :: a -> Int 02:31:58 f = f . g 02:31:59 well I mean 02:32:02 @free g :: a -> Int 02:32:02 g = g . f 02:32:11 assuming a and b are not universally quantified. 02:32:16 Say A and B then. 02:32:21 they're just variables for monomorphic types . 02:32:22 okay. 02:32:24 When talking about parametricity, quantification will tend to be assumed. :p 02:32:29 Maybe $A and $B if you want to be ULTRA PRECISE. 02:32:45 why the $? is parametricity discussed in terms of Perl? 02:33:06 Do you have a better character? 02:33:10 (notice my amazing perfect deadpan humor 02:33:11 a 02:33:13 A and B work well. 02:33:14 i mean q 02:33:16 i typoed 02:33:49 elliott: I was just wondering what is more ULRA PRECISE about $A over A 02:33:55 ulra 02:34:08 Because it shows that you're talking about every type A, not just some specific type A. 02:34:20 As in, given any specific type A, ($A -> ...) follows certain rules. 02:34:32 is this a specific notation that is commonly accepted or? 02:35:36 in other words, I'm asking, if I ever use $A in this context will people cringe at me or will they be like "oh yes -beard scratch-". :P 02:35:49 this is important. 02:36:17 I want the beard to be a prominent feature of the conversation. 02:36:22 I want to fucking rustle that shit. 02:36:57 Hmmm 02:36:57 So 02:37:05 -!- augur has joined. 02:37:09 I just finished my first semester of grad schoo. 02:37:14 I need something to do this break. 02:37:28 Grad schoo is the best kind of schoo. 02:37:37 So far, the list is read TAPL and a handful of PL papers, implement something to convert Schem to Scala. Anyone have any other suggestions? 02:37:40 cswords_: what you should do is 02:37:42 realize that itll only get harder 02:37:42 cswords_: drugs. elliott can probably land you some smack, if you know what I mean. 02:37:48 cswords_: @ 02:37:54 cswords_: get drunk 02:37:55 cswords_: Ignore augur, he's a linguist. 02:37:56 celebrate. 02:37:58 I did plent of drugs in my time. 02:37:59 Ignore kallisti, he's an idiot. 02:38:07 Step 1, merge your mind with elliott's. 02:38:07 They're old news. 02:38:08 hahaha 02:38:19 Getting drunk is for tonight. 02:38:20 cswords_: You've just finished grad schoo, are going to convert Scheme to Scala, and did plent of drugs in your time. 02:38:25 I diagnose you with a hungry spacebar. 02:38:27 I need something fun to do. 02:38:28 It keeps eating the previous letters. 02:38:34 cswords_: youre in grad school 02:38:37 getting drunk is for every night 02:38:45 elliott vejn' 02:38:50 kallisti: They will probably have no idea what you're talking about because normal people write things out with explicit quantifiers. 02:38:59 augur, I have way too much work to do for that. 02:39:25 cswords_: You're the mythical "responsible" grad student, aren't you? 02:39:35 pikhq: first semester. 02:39:43 elliott: well, if I were talking with Haskell programmers, A and B are pretty reasonably assumed to be an existential quantification (not the Haskell kind, the usual kind). 02:39:44 he'll come along once hes into his second semester 02:39:45 augur: Ah, right. 02:39:45 no worries 02:40:05 No, but rt5fv/'[;..pol, kmojiu 4m;, cm, tr7m,-0kopm/,. olpoi,l. 89u0bim, 8um, -0p/. ,mvbnmj,.vgfghjkl;'tyuiop[] 02:40:14 elliott: because there's no type normally called A or B, and the uppercase signifies that it's not polymorphic, and anything you can say about A and B, not knowing anything about their constructors, you could reasonably say about any other type. 02:40:26 Er, I mean, I like getting work done. 02:40:28 Feels good, man. 02:40:40 kallisti: I would assume you were talking about some arbitrary type A or B invented for the discussion. 02:40:47 cswords_: Personally I think thsdfiojaspae, efmsdg' sd'cvb h][ erte \we't5 02:40:47 elliott: yes. 02:40:53 kallisti: Which is not the case here. 02:42:26 Personally I think 亜↓不フぃへ久ぃ御語奴9ヴぃ御蛇ゑンこ;ン場差23位15ウ89がファ;おい;握ぇ食いだ 02:43:00 Uhh, dude./ 02:43:04 Clearly q|";..pol, kmojiu 4m;, cm, tr7m,-0kopm/,. olpoi,l. 89u0bim, 8um, -0p/. ,mvbnmj,.vgfghjkl;'tyuiop[] 02:43:04 elliott: because there's no type normally called A or B, and the uppercase signifies that it's not polymorphic, and anything you can say about A and B, not knowing anything about their constructors, you could reasonably say about any other type. 02:43:05 Er, I mean, I like getting work done. 02:43:07 Feels good, man. 02:43:08 I thought of something in Haskell, is make a class in case you want to make a type parameter have a value of a type. Such as, class ValuedType x y | y -> x where { makeTheValue :: y; accessTheValue :: y -> x; }; newtype V_errorMessage = V_errorMessage String; instance ValuedType String V_errorMessage where { makeTheValue = V_errorMessage "Error: (generic error message)."; accessTheValue (V_errorMessage x) = x; }; 02:43:09 kallisti: I would assume you were talking about some arbitrary type A or B invented for the discussion. 02:43:12 cswords_: Personally I think thsdfiojaspae, efmsdg' sd'cvb h][ erte \we't5 02:43:14 elliott: yes. 02:43:16 kallisti: Which is not the case here. 02:43:18 Personally I think 亜↓不フぃへ久ぃ御語奴9ヴぃ御蛇ゑンこ;ン場差23位15ウ89がファ;おい;握ぇ食いだ 02:44:01 elliott, kallisti update 02:44:11 @seen Phantom_Hoover 02:44:11 Unknown command, try @list 02:44:14 @list 02:44:14 http://code.haskell.org/lambdabot/COMMANDS 02:44:44 ...Thing claims that seen exists 02:44:46 @users 02:44:46 Unknown command, try @list 02:45:10 @seen hi 02:45:10 Unknown command, try @list 02:45:15 @hi 02:45:27 it used to 02:45:56 i suppose someone considered it stalking 02:46:15 most IRC networks have some kind of seen service anyway, so... 02:46:45 lambdabot's @seen told you which channels they were in, too 02:46:53 ah 02:46:54 well in common with lambdabot 02:47:04 well, most networks allow that also. or the ones I've been to, except freenode. 02:47:24 there's a flag for that, or used to be 02:47:27 Hmm, how do you reperform a match in Perl on the rest of the line 02:47:33 Or alternatively get all matches of a regexp on a line in list context 02:47:42 oerjan: preflex has it, though 02:47:48 but preflex isn't in here any more 02:48:05 wtf is preflex 02:48:47 I should shout update when there's no MSPA update but only a Station V3 update 02:48:48 >:D 02:49:27 oerjan: mauke's bot in #haskell 02:50:15 elliott: mauke. that's the guy who tries to solve my XY problem when I join #perl to ask questions. :P 02:50:21 I never let him, of course. 02:50:28 he's a #haskell op. 02:50:40 and I believe you've already complained about him when you turned out to be doing something really stupid 02:51:13 eh, no complaints. he's doing a fine job. 02:51:31 elliott: \G assertion 02:51:44 oerjan: hm how does that work, or should i just google it 02:51:58 google perlre ctrl+f \G 02:52:12 kallisti: "google" haha PERLDOC MAN ahem 02:52:23 well i'm just looking at man perlre 02:53:03 elliott: I always use the web docs because typically I have a fully maximized Chrome instance in the background at all times. 02:53:16 kallisti: but not a terminal? when /programming/? 02:53:28 I don't maximize terminals.. 02:53:32 but yes I use those too. 02:53:35 so it's not readily accessible? weird. 02:53:44 not at all. 02:53:48 oerjan: ah, thanks. is there really no way to get all matches in a list context? 02:53:49 also habit 02:54:00 elliott: wait what. 02:54:11 kallisti: i want to get all matches of a regexp on a string in a list 02:54:15 @matches = /.../g #like this? 02:54:15 Unknown command, try @list 02:54:16 (with one group) 02:54:18 oh that works? 02:54:19 neat. 02:54:21 what's inside the list 02:54:28 each... match 02:54:31 everything you'd get 02:54:34 from a while loop 02:54:36 with the /g option 02:54:39 kallisti: but I only want one group 02:54:44 oh. 02:54:46 well.. 02:54:55 map {$1} /.../g #maybe? 02:55:05 um 02:55:10 I don't think this feature can possibly work as you describe 02:55:20 unless match results are first class objects that somehow rebind $ when they are $_ 02:55:49 ah right. 02:56:18 I'd just... use a while loop? 02:56:31 while(/.../g) { print $1; } 02:56:45 that would work, yes. 02:56:52 well, I'll check before saying that 02:56:58 it does. 02:57:06 * kallisti has used such things before. 02:57:43 elliott: oh wait, "In scalar context, each execution of "m//g" finds the next match, ..." 02:57:50 oerjan: right 02:57:52 so \G may not be needed 02:57:55 !perl $_ = "a a a a a"; print map {$1} /(a)/g; 02:57:55 next unless /^ /; print "$1\n" while /(0x[0-9a-zA-Z]+)/g 02:57:56 there we go 02:57:57 aaaaa 02:58:01 ...lol 02:58:02 not helpful 02:58:02 (any shorter way to write that? :p) 02:58:13 !perl $_ = "a b c d e"; print map {$1} /(\S)/g; 02:58:13 eeeee 02:58:19 yeah.. 02:58:44 elliott: well if you use feature 'say' you can just type say $1 02:59:09 say is equivalent to print with a \n 02:59:10 that would so shorten the code 02:59:12 and i know what say is 02:59:22 elliott: assuming you need to use say a lot, yes it would. 02:59:32 next unless /^ /; print "$1\n" while /(0x[0-9a-zA-Z]+)/g 02:59:34 that is the complete code 02:59:49 then no, that's already pretty short. 03:00:03 I'm guessing you're using -n? 03:00:21 otherwise you're nexting into nothing. :P 03:00:49 yes 03:01:43 you could instead remove the parens around the regex, use -p, and replace the print ... while /.../g with /.../g 03:02:29 *use -p instead of -n 03:02:44 er, no. 03:02:52 -!- itidus21 has joined. 03:03:21 yes that would work I believe. 03:03:30 -!- copumpkin has joined. 03:03:40 elliott: since you just put parentheses around the whole regex there's no need to specifically grab the first capture group 03:04:02 oh, indeed 03:06:47 except $_ doesn't contain the resulting match afterwards, so -p would print the wrong thing? 03:07:15 does -p print $_ 03:07:19 I'm using -n 03:07:20 I thought it printed the last line. 03:07:30 oh 03:07:30 kallisti: it would be pretty pointless if it didn't print $_ 03:07:30 okay. 03:07:36 yeah I suppose so. 03:07:45 it's $& which contains the whole match 03:07:57 not needed with /.../g though 03:08:01 just print /.../g 03:08:31 because HAHAHAHA FUNCTION ARGUMENTS ARE LIST CONTEXT 03:08:54 !perl $_ = "test"; print /.*/; 03:08:54 1 03:09:01 I DON'T THINK SO 03:09:07 or wait 03:09:11 !perl $_ = "test"; print /.*/g; 03:09:12 test 03:09:40 it won't get \n between, though 03:10:00 !perl $_ = "test"; print /[^e]/g; 03:10:01 tst 03:11:23 oh, yes. 03:11:31 map {print "$_\n";} /.../h 03:11:36 s/h/g/ 03:11:42 or for 03:11:43 your preference 03:11:46 I like map for some reason. 03:12:00 so... basically the same amount of code. :P 03:12:19 print join('\n', /.../g) also 03:12:58 "\n" rather 03:13:09 oh, also $, = "\n"; print /.../g; 03:15:36 also how do I loop through every line of a string like while (my $foo = <>) 03:15:42 im bad at perle 03:15:49 split /\n/, $_ 03:15:59 then loop away. 03:16:24 there may be some kind of fancy iterative way to do it though. 03:16:51 foreach my $line (split /\n/, $foo) is good enough I guess 03:17:14 * kallisti pretty much never uses foreach. 03:17:29 since it's equivalent to for but requires more typing. 03:18:33 elliott: are you in a perl golfing mood? :P 03:19:05 i hope there will be an explanation for today's freefall... 03:20:56 oh wait i think i get it. 03:22:24 elliott: I think it would make a reasonable amount of sense that <> did the same it does for filehandles on strings. 03:23:25 oh look it does. 03:23:31 I don't think that's documented. 03:23:52 !perl print <"test\ntest"> 03:23:53 test 03:24:10 !perl @x = <"test\ntest">; print $x[1] 03:24:14 >_> 03:24:29 or maybe not. 03:25:15 !perl while (<"test\ntest">) { print $_ . "-"; } 03:25:16 test 03:25:33 ah no, it's only one match 03:25:38 yeah. 03:26:05 !perl @x = <"test\ntest">; print $x[0] 03:26:06 test 03:26:09 that's really weird. 03:26:50 @pl \x y -> f (g x) (h y) 03:26:50 (. h) . f . g 03:26:53 ugh, right 03:27:08 oerjan: well... 03:27:14 oerjan: is there a nice way to write that, again? 03:27:15 oerjan: you have to chomp as well. 03:27:32 elliott: maybe if you use .: ? 03:27:45 !perl while(<"test\ntest">) { chomp; print $_ . "-"} 03:27:46 test 03:27:49 hmmm, nope. 03:28:27 !perl for($_ = <"test\ntest">) { chomp; print "$_-"} 03:28:28 test 03:28:37 no clue why the - is still there despite chomping 03:28:52 *isn't 03:29:09 !perl for($_ = <"test\na">) { chomp; print "$_-"} 03:29:10 test 03:29:17 !perl while($_ = <"test\na">) { chomp; print "$_-"} 03:29:18 test 03:29:20 ????? 03:29:35 it should say test- 03:29:48 assuming sanity 03:29:58 maybe this is what happens when you use undocumented language features. 03:30:22 !perl while($_ = <"test\na">) { s/\n//; print "$_-"} 03:30:22 testa- 03:30:32 oh... 03:30:39 so <> does... nothing? 03:30:42 on strings? 03:30:43 good to know. 03:30:48 Do you know if there is any Haskell programs similar to the ValuedType class I described earlier? 03:33:39 zzo38: so basically it describes a function from a -> b, and provides you with an a if you don't have one? 03:34:54 a derived function would be f :: b; f = accessTheValue makeTheValue 03:35:01 kallisti: Yes, mostly in case you need to put a value of such a type inside of a type parameter. (Although there are some other ways too) 03:35:08 kallisti: Yes, except that is ambiguous. 03:35:18 er right 03:35:23 insert relevant typeclass :P 03:36:05 but then it's still ambiguous isn't it? 03:36:30 oh wait fundep. 03:36:32 :t curry $ uncurry ?f . (?g *** ?h) 03:36:33 forall a b a1 b1 c. (?f::a1 -> b1 -> c, ?g::a -> a1, ?h::b -> b1) => a -> b -> c 03:36:36 f :: (ValuedType a b) => b 03:36:49 that should work because of the fundep, yes? 03:37:50 zzo38: it slightly reminds me of the reflection package 03:38:05 zzo38: my bad. f :: (ValuedType a b) => a 03:38:08 based on your original definition 03:39:00 you could call f "accessTheValueThatWasMade" 03:39:07 and have possibly the worst named functions ever. 03:39:21 Might it need scoped typed variables to be used? 03:39:32 er more accurately "accessTheValueFromTheMadeValue" 03:40:12 -!- kmc has quit (Quit: Leaving). 03:40:25 zzo38: that is also intended to get a value into a typeclass instance 03:40:43 zzo38: if I understand functional depedencies correctly it should work as I wrote it? 03:40:51 but maybe a forall b. is needed, yes. 03:41:12 http://esoteric.voxelperfect.net/wiki/Antimated_Chat_Rooms 03:41:15 antimated, I tell you!!! 03:41:30 chat rooms go *BOOM* with gamma rays 03:42:07 oerjan: hmm, so if Gamma-Ray Burst is Sgeo's favourite band 03:42:10 elliott: antimated... so like, they try to kill each other to see who wins? 03:42:15 maybe "animated chat rooms" means his VR game things 03:42:21 *antimated 03:42:23 RUINED THE JOKE OOPS 03:42:24 elliott: or do they pair up to kill fetal chatrooms? 03:42:35 how does one antimate? 03:43:02 badly 03:43:07 Another way could be to pass undefined of a type to a class method (some classes used that), but I maybe the way I specified allow combinations made in other way? I don't know, really 03:43:25 first you do the antiboogie 03:43:49 no wait, first you need antipasta 03:45:14 oerjan shares his dating secrets indirectly. 03:45:23 first you eat pasta, then you dance, then you fuck. 03:45:38 proven results. 03:46:21 well you have to raise the anticipation 03:47:24 zzo38: reflection uses the Proxy type, i think. 03:47:54 which is nicer than passing undefined, but alas not in base 03:48:08 oerjan: how surprising, edwardk using his own package :P 03:48:24 huh, it's actually 03:48:25 class ReifiesNum s whereSource 03:48:25 Methods 03:48:25 reflectNum :: Num a => proxy s -> a 03:48:33 presumably the tagged package dependency is to call them with Proxy 03:48:40 elliott: i'm sure i saw a relevant quote recently 03:49:02 Yes, I read about the Proxy type and I like that one too 03:49:14 elliott: help how does proxy appear from nothing. 03:49:22 kallisti: are you fucking serious... 03:49:27 elliott: You know about huge pages, right? 03:49:32 elliott: I don't even it scoped anywhere. 03:49:36 shachaf: You mean the x86 concept? Yes. 03:49:39 kallisti: id :: a -> a 03:49:42 help how does a appear from nothing 03:50:04 elliott: that's not particularly helpful. ghci can tell me that. 03:50:19 oerjan: kallisti's either stupid or trolling, so kick him :P 03:50:32 was proxy defined somewhere and I'm missing it? 03:50:42 elliott: I mean why turning on *one* huge page is causing ridiculous amounts of swapping and slowing my computer down. 03:50:46 I just see a single-argument typeclass, with this "proxy" that magically appears with no scope. 03:50:50 And then turning on another one repeats the process. 03:50:57 shachaf: How huge is it? 03:50:59 elliott: um did you get the capitalization right? 03:51:02 oerjan: yes 03:51:05 that's why I quoted it. 03:51:07 presumably the tagged package dependency is to call them with Proxy 03:51:09 kallisti: 03:51:11 elliott: The default on amd64, which I assume is 2MB? 03:51:12 id :: proxy -> proxy 03:51:16 class Foo a where bar :: b -> a 03:51:19 class Foo a where bar :: boop -> a 03:51:20 Reifies is the class like that I look for 03:51:29 elliott: oh, hmmm 03:51:45 elliott: right. I'm not accustomed to seeing a polymorphic variable used that way. 03:51:50 I should read about that 03:51:51 usually it's the parameter. 03:52:00 elliott: Yes, the only size available in /sys is 2MB. 03:52:15 elliott: But turning one on seems to cause ~500MB of swapping. 03:52:47 shachaf: I quote from the master: 03:52:47 11:16:00: hey oklopol 03:52:48 11:16:04: do you know how to respond to disk-sectors being unable to be read? 03:52:48 11:16:32: yes! 03:52:48 11:16:39: i have a perfect response 03:52:48 11:16:45: buy a new computer 03:52:49 11:17:07: be sure they install all the programs at the shop because that shit can be complicated 03:52:56 elliott: but what useful things can you do with a proxy s, when you know absolutely nothing about proxy? You need some function a s -> s 03:53:05 elliott: i will murder you 03:53:12 kallisti: it's just to make the types work out. 03:53:24 kallisti: I think the only thing is depend on the type. 03:53:30 oh okay.l 03:53:31 kallisti: because otherwise the "s" wouldn't appear in the type 03:53:39 class Reifies s a | s -> a where 03:53:39 reflect :: proxy s -> a 03:53:45 and it must, because that's the rule for typeclasses 03:53:50 so there's no actual computation going on there other than resolving types at compile-time. 03:54:00 augur: hi 03:54:10 elliott: :-( 03:54:16 kallisti: of course there's computation, it's a constant "a" value 03:54:18 depending on the type s 03:54:22 elliott: well, yes. 03:54:24 elliott: It's being complicated. 03:54:27 elliott: that's what I meant. 03:54:28 elliott, can I just read the .pdf instead of this channel? 03:54:33 shachaf: I thought the kernel automatically managed huge pages these days, anyway. 03:54:38 Sgeo: What? 03:54:45 elliott: I don't typically think of a constant as being a computation, but okay, that's perfectly sensible to say. 03:54:50 elliott, there's a pdf about this reflect stuff, right? 03:55:00 kallisti: yes, for example my program that prints out pi is not a computation 03:55:01 beacuse it's constant 03:55:03 Sgeo: i'm sure there is 03:55:10 the reflect stuff is irrelevant to what kallisti's talking about though 03:55:21 elliott: That's if you want transparent huge pages. 03:55:25 I don't. 03:55:29 shachaf: Opaquity is for losers! 03:55:56 elliott: Look, I just want to allocate 4KB subpages inside it. 03:55:59 elliott: well, no, that's a computation and also constant. I was thinking of things like f a = 5. is 5 computed here? 03:56:03 shachaf: That's immoral 03:56:05 *! 03:56:23 shachaf: But seriously, start spamming lkml at greater and greater frequencies yelling about how much Linux sucks because it swaps with one measly huge page. 03:56:32 Eventually someone will get sick of you and give you the solution. 03:56:49 kallisti: OK, so because some constants aren't computations (because you consider them too trivial), constants aren't computations in general? 03:56:55 > let asTypeIn :: x -> f x -> x; asTypeIn = const in 1 `asTypeIn` [1.0] 03:56:56 1.0 03:56:56 For instance programs don't compute because some programs are trivial. 03:56:57 elliott: no that's not what I meant to say. 03:57:06 > let asTypeIn :: x -> f x -> x; asTypeIn = const in 1 `asTypeIn` Just 1.0 03:57:07 1.0 03:57:08 elliott: When you say "But seriously", I assume you mean "But the opposite of seriously". 03:57:14 elliott: it was an actual question not a point-prover. 03:57:18 shachaf: Yes. Correct. 03:57:29 kallisti: ^ f is like proxy there 03:57:54 hm, okay. 03:58:34 oerjan: if ScopedTypeVariables didn't exist to make this trivial, I'd think we need a family of composable functions whose implementations are const or flip const or (const .) or whatever :P 03:58:48 to build up arbitrarily complex unifications 03:58:50 heh 03:59:00 elliott: I would think it's unlikely in this case that the constant is computed though, right? Depending on the types I guess. 03:59:14 elliott: I'm not really sure what reify is doing. 03:59:20 kallisti: maybe you should read the paper 03:59:29 er reflect 03:59:35 elliott: not a bad idea. 04:00:08 Why would you need to read the report to understand these things? To me it is obvious. 04:00:25 unfortunately not everyone is gifted with omniscience 04:00:40 zzo38: I only have the information that has appeared on this channel 04:00:42 Neither am I. 04:00:48 I've looked at nothing else. out of laziness. 04:01:17 elliott: Do you know about huge pages, the POWER concept? 04:01:35 shachaf: No. Maybe? 04:01:38 Help. 04:01:42 It's a lot like the x86 concept. 04:01:50 Except the architecture is POWER. 04:02:04 kallisti: But it is basically like what I wrote but with a proxy instead. data Proxy t = Proxy; Now you can make a proxy for any type. If you need proxy for other kinds I supppose you can do that too by indicating explicit kinds. 04:02:13 Apparently they support 16GB pages. 04:02:15 Now *that's* a page. 04:03:03 zzo38: how is t determined? 04:03:18 But, there should be one kind such as & to specify class/instance/constraint so you can make: data ClassProxy (t :: * -> &) = ClassProxy; 04:03:32 kallisti: By the type signature. 04:04:48 ah more fundeps 04:05:18 :t reflect 04:05:19 forall a (m :: * -> *). (MonadLogic m) => Maybe (a, m a) -> m a 04:05:21 awwwww 04:05:42 Wrong module! 04:07:19 zzo38: That already exists, and it's not called &. 04:07:26 It's in GHC HEAD already to be releasd with 7.4, IIRC. 04:07:47 I think if I were to buy a console I'd get a ps3 04:07:54 kallisti: reflect and friends really compute the type _from_ the value, at runtime. 04:08:07 oerjan: hmmm, okay. 04:08:33 oerjan: that talk's a bit too socially mobile for Haskell folk :P 04:08:36 shachaf: x86 isn't quite that hardcore. 04:08:44 * kallisti would get a ps3 for the simple reason that Demons' Souls and Dark Souls are only for ps3. 04:08:48 elliott: wat 04:08:51 "Only" up to 1 GiB pages. 04:09:07 but, instead, I'm going to with a gaming desktop, because... it makes way more sense. 04:09:12 oerjan: I was referencing a McBride quip that I know forget. :/ 04:09:24 Ah, it's from http://strictlypositive.org/winging-jpgs/. 04:10:01 oerjan: it seems kind of determined by type. For example, reflect Proxy, using zzo38's Proxy a type. 04:11:05 kallisti: the idea is to take a value, encode it into a type, and then use that type to get a typeclass instance which contains the original value. 04:11:12 elliott: O, well, even if it exist in GHC HEAD but it is not in current version I have 04:11:47 this is tricky because haskell doesn't actually allow creating instances at runtime... 04:12:28 zzo38: Yeah, but it'll be coming in a few months as Constraint. 04:13:38 I don't really like that name for it, for a few reasons, but, OK 04:14:20 oerjan: so then w is the instance you want at runtime? 04:14:29 in the Reifies typeclass. 04:14:33 er 04:14:37 in the reify function I mean. 04:14:47 ...does that statement even make sense. 04:14:51 kallisti: rtfpaper 04:15:08 elliott: MAYBE I CAN GLEAN IT FROM TYPES. 04:15:10 INSTEAD. 04:15:21 that would require a brGAK 04:15:44 what does that even mean. 04:17:37 * kallisti thinks, "maybe if I look at the source of reify I can figure it out!!" 04:17:40 * kallisti opens the source 04:17:44 unsafePerformIO. :( 04:18:07 kallisti: yo in a foreach how to I skip the next line 04:18:13 but actually, discard this line and give me the next one 04:18:16 within nested control structures 04:18:20 kallisti: no, w is the value you are trying to compute, a is the type of the value you are trying to get into a type class, and s is the type encoding that value 04:18:22 elliott: uh what. 04:18:29 as i expected; oerjan? 04:18:30 elliott: you want to skip to the next line in the outer loop right? 04:18:42 kallisti: no 04:18:52 example: 04:19:21 foreach my $foo (split /\n/, $bar) { if ($foo =~ /treat_next_line_specially/) { my $quux = next_line_somehow; } else ... } 04:19:32 elliott: lol wat. 04:19:35 hold on 04:19:36 ensuring that the line put in $quux WON'T be considered next iteration, instead it'll go on to the one after 04:19:39 this is my replacing a while (<>) look 04:19:39 loop 04:19:42 with an iteration over a string 04:19:43 so I can't do 04:19:44 <> 04:19:46 in the body of the loop 04:20:18 oh... 04:20:21 hmmmmmmmm 04:20:22 uh 04:20:36 there MIGHT be a way to do that? but otherwise you may want to use a C-style for loop instead. 04:21:36 elliott: oh hmm, there's the continue block, which is always executed before the loop condition is evaluated again. 04:21:47 so if you next in the loop body it'll go to the continue block. 04:21:55 before going back to the main loop 04:21:58 is that helpful? 04:22:18 (note that the continue is /always/ executed on each iteration, but the main body can be skipped via next) 04:22:39 no 04:23:06 oh well, I'll just restructure 04:23:11 ls 04:23:12 oops 04:23:13 wrong window 04:24:51 yeah I think you just want something besides a foreach loop 04:24:52 elliott, kallisti update 04:24:57 either that or use gross state variables. 04:25:04 but I dunno what you're trying to do. 04:25:10 so there might be an entirely easier way to do it. 04:25:11 I love it when kallisti is updated. 04:25:14 He gets very slightly less stupid. 04:25:27 lolwat 04:25:30 I do? 04:26:06 Well. 04:26:07 No. 04:26:10 I was trying to make you feel better. 04:26:36 instead you just confused me. 04:26:41 Hahaha, this guy has been around for 3 years and he only has 504 reputation, I've been around 2 days and I have 528 BOW BEFORE YOUR NEW GOD, PEON!!!!!!!! 04:26:56 I do not need to be made feeling better. 04:27:15 kallisti: I guess past a certain point of stupid you just live in this kind of blizzful daze. 04:27:23 Daze? Haze. 04:27:26 -!- Jafet has quit (Quit: Leaving.). 04:28:29 JOHN: last time i saw her, she looked really grim. 04:28:30 JOHN: and also, dark. 04:29:53 elliott: not quite, but lately I've just been in a completely content but meaningless state of mind. 04:29:59 if that makes sense. 04:30:10 Commonly referred to as the "kallisti state". 04:30:22 oh no! sometimes I'm sad! even happy! 04:30:31 there are so many different emotions to feel. 04:30:32 Yes, but always meaningless. 04:30:34 sad. neutral. happy. 04:30:52 elliott: life is meaningless, bro. -_;; 04:32:39 -!- oerjan has quit (Quit: Good night). 04:33:21 elliott: but yes you could use a state variable to signify that the next line is special. 04:33:30 if nothing else is nicer. 04:34:58 That's what I love in programming: being forced to manually convert my problem to a state machine. 04:35:03 yep. 04:35:10 elliott: well a different looping construct would be nicer. 04:35:40 I'd bet Perl is weird enough to let you implement this for foreach loops without patching the interpreter. 04:35:43 It'd probably be slow, though. 04:35:52 other alternatives: implement continuation monad in perl 04:36:51 elliott: hmmm... maybe? I don't think so. 04:37:04 nothing simple would work. 04:37:20 you could override <> with an object but that sounds really boring and tedious. 04:37:39 but then you'd be switching to a while loop 04:38:13 WHY IS NOBODY UPVOTING MY ANSWER THIS MUST BE A BAD TIME TO MAKE ANSWERS I MUST ADJUST MY SLEEP SCHEDULE FOR MEANINGLESS INTERNET POINTS 04:38:36 lolwat 04:38:41 stackoverflow: the game 04:41:21 > (f <*> g <*> h) x 04:41:21 Ambiguous type variable `a' in the constraints: 04:41:22 `SimpleReflect.FromExpr ... 04:41:22 > (f <*> g <*> h) x :: Expr 04:41:23 Ambiguous type variable `a' in the constraints: 04:41:23 `SimpleReflect.FromExpr ... 04:41:25 what 04:41:27 while (my ($line, $str) = split(/\n/, $str, 2)) { ... } 04:41:37 elliott: $line is the current line, $str is the rest of the string. 04:41:41 kallisti: help ^ 04:41:50 oh... yeah.. 04:41:56 you have to give one of them a specific type 04:41:57 I think 04:41:59 or something 04:42:02 > ((f :: Expr -> Expr -> Expr) <*> g <*> h) x :: Expr 04:42:03 Couldn't match expected type `a -> SimpleReflect.Expr' 04:42:03 against infe... 04:42:04 > ((f :: Expr -> Expr -> Expr) <*> g <*> h) x 04:42:05 Couldn't match expected type `a -> b' 04:42:05 against inferred type `Simple... 04:42:12 > (f <*> (g :: Expr -> Expr) <*> h) x 04:42:12 Ambiguous type variable `a' in the constraints: 04:42:13 `SimpleReflect.FromExpr ... 04:42:15 :t (f <*> (g :: Expr -> Expr) <*> h) x 04:42:15 Ambiguous type variable `a' in the constraints: 04:42:15 `SimpleReflect.FromExpr a' 04:42:16 arising from a use of `h' at :1:31 04:42:18 > (f <*> (g :: Expr -> Expr) <*> h) x :: Expr 04:42:19 Ambiguous type variable `a' in the constraints: 04:42:19 `SimpleReflect.FromExpr ... 04:42:23 ummmm... 04:42:30 fuck it 04:42:36 oh wait 04:42:38 > (f <> (g :: Expr -> Expr) <*> h) x :: Expr 04:42:39 Couldn't match expected type `Text.PrettyPrint.HughesPJ.Doc' 04:42:39 agains... 04:42:40 > (f <$> (g :: Expr -> Expr) <*> h) x :: Expr 04:42:41 Ambiguous type variable `a' in the constraints: 04:42:41 `SimpleReflect.FromExpr ... 04:42:43 >_< 04:42:48 yeah it's frustrating... 04:43:04 :t f 04:43:05 forall a. (SimpleReflect.FromExpr a) => a 04:43:12 > (("f $ " ++) <$> ((++")") . ("(g " ++)) <*> ((++")") . ("(h " ++)) x 04:43:13 : parse error (possibly incorrect indentation) 04:43:15 > ((("f $ " ++) <$> ((++")") . ("(g " ++)) <*> ((++")") . ("(h " ++))) x 04:43:16 : parse error (possibly incorrect indentation) 04:43:17 fuck 04:43:24 :t f <*> g <*> :: Expr -> Expr 04:43:25 parse error on input `<' 04:43:30 lol 04:43:34 :t f <*> g <*> h :: Expr -> Expr 04:43:34 Ambiguous type variable `a' in the constraints: 04:43:35 `SimpleReflect.FromExpr a' 04:43:35 arising from a use of `g' at :1:6 04:43:39 > (("f $ " ++) <$> ((++")") . ("(g " ++)) <*> ((++")") . ("(h " ++))) x 04:43:39 Couldn't match expected type `a -> b' 04:43:40 against inferred type `[GHC.T... 04:43:43 :t (("f $ " ++) <$> ((++")") . ("(g " ++)) <*> ((++")") . ("(h " ++))) x 04:43:43 Couldn't match expected type `a -> b' 04:43:44 against inferred type `[Char]' 04:43:44 In the first argument of `(<$>)', namely `("f $ " ++)' 04:43:48 > (("f $ " ++) <$> ((++")") . ("(g " ++)) <*> ((++")") . ("(h " ++))) "x" 04:43:49 Couldn't match expected type `a -> b' 04:43:49 against inferred type `[GHC.T... 04:44:15 > let fuck name x = "(" ++ name ++ " " ++ x ++ ")" in (("f $ " ++) <$> fuck "f" <*> fuck "g") "x" 04:44:15 Couldn't match expected type `a -> b' 04:44:16 against inferred type `[GHC.T... 04:44:17 FML 04:44:21 lol 04:44:37 @unpl f <*> g <*> h 04:44:37 ((f <*> g) <*> h) 04:44:39 > ((,) <$> f <*> g) 42 04:44:39 Ambiguous type variable `a' in the constraints: 04:44:40 `SimpleReflect.FromExpr ... 04:44:45 > ((,) <$> f <*> g) 42 :: (Expr,Expr) 04:44:46 (f 42,g 42) 04:44:48 FINALLY 04:45:16 what does that tell you? 04:45:22 > join (liftA2 (,)) f 42 :: (Expr,ExpR) 04:45:23 Not in scope: type constructor or class `ExpR' 04:45:23 > join (liftA2 (,)) f 42 :: (Expr,Expr) 04:45:24 (f 42,f 42) 04:46:07 > (flip ($) <$> 42 <*> 43) pred 04:46:08 Ambiguous type variable `a' in the constraint: 04:46:08 `GHC.Enum.Enum a' 04:46:08 ar... 04:46:10 :t (flip ($) <$> 42 <*> 43) 04:46:11 forall a b (f :: * -> *). (Num (f a), Applicative f, Num (f (a -> b))) => f b 04:46:11 elliott: is that loop construct helpful? 04:46:16 :t (flip ($) <$> 42) 04:46:17 forall a b (f :: * -> *). (Num (f a), Functor f) => f ((a -> b) -> b) 04:46:20 while (my ($line, $str) = split(/\n/, $str, 2)) { ... } 04:46:32 kallisti: nope, when I said I was gonna restructure it I meant I gave up 04:46:36 but I'll probably incorporate that next time, tahnks 04:46:37 thanks 04:46:39 ah. 04:46:41 :P 04:46:45 :t (($) <$> 42) 04:46:45 forall a b (f :: * -> *). (Num (f (a -> b)), Functor f) => f (a -> b) 04:46:57 I'm looking at the ReifiesNum thingy 04:46:59 I see Pred and Succ 04:47:01 :t ((\x f -> f x) <8> 42) 04:47:02 Precedence parsing error 04:47:02 cannot mix `<' [infix 4] and `>' [infix 4] in the same infix expression 04:47:03 :t ((\x f -> f x) <*> 42) 04:47:04 forall t b. (Num (t -> t -> b), Applicative ((->) t)) => t -> b 04:47:09 gah 04:47:10 But ... Twice? I guess that makes it more efficient to reify some numbers? 04:47:15 Sgeo: binary 04:47:16 elliott: if you wanted two lines at a time you could also do 04:47:19 I still don't know what is meant by Reify 04:47:26 while (my ($line1, $line2, $str) = split(/\n/, $str, 3)) { ... } 04:47:28 :t fmap (\x f -> f x) 04:47:28 and stuff like that. 04:47:29 forall a t (f :: * -> *). (Functor f) => f a -> f ((a -> t) -> t) 04:47:31 but that's probably not what you want. 04:47:41 (c -> a) -> (c -> (a -> t) -> t) 04:47:41 hmm 04:47:58 > fmap (flip ($)) (const 42) (+) 43 04:47:59 43 04:48:02 aha 04:48:05 :t liftA2 (\x f -> f x) 04:48:06 forall a c (f :: * -> *). (Applicative f) => f a -> f (a -> c) -> f c 04:48:19 ....what the hell. 04:48:20 ohd uh 04:48:22 *oh duh 04:48:41 * elliott is trying to point-free: f x y z = g (h x) (h y) (h z) 04:48:45 *free of points: 04:48:55 hm 04:49:21 sounds, difficult. 04:49:25 it looks like the reader monad but it isn't :P 04:49:26 you probably won't get a good solution. 04:49:41 i think i can, but who knows 04:50:41 elliott: is @pl cheating? :P 04:50:48 good luck 04:51:06 @pl \g h x y z -> g (h x) (h y) (h z) 04:51:06 join . ((flip . ((flip . ((.) .)) .)) .) . join . ((flip . ((.) .)) .) . (.) 04:51:10 @pl \x y z -> g (h x) (h y) (h z) 04:51:11 flip flip h . ((.) .) . (. h) . g . h 04:51:13 yeah. 04:51:17 (flip flip h?) 04:51:17 elliott, is this thing commonly used in Haskell projects? It looks cool 04:51:23 Sgeo: What thing? 04:51:23 :t flip flip h . ((.) .) . (. h) . g . h 04:51:24 forall (f :: * -> *) a b (f1 :: * -> *) a1 a2 (f2 :: * -> *). (Functor f, SimpleReflect.FromExpr (f1 a), Functor f1, SimpleReflect.FromExpr (f a1), Show a2, Show a1, Show a, SimpleReflect.FromExpr b, 04:51:24 SimpleReflect.FromExpr (f2 a2), Functor f2) => f2 (f (f1 b)) 04:51:28 :t \g h -> flip flip h . ((.) .) . (. h) . g . h 04:51:29 forall a b (f :: * -> *). (Functor f) => (a -> a -> a -> b) -> f a -> f (f (f b)) 04:51:32 :t \g h -> h . ((.) .) . (. h) . g . h 04:51:33 Occurs check: cannot construct the infinite type: 04:51:33 f = (->) (f (f1 a -> f1 b)) 04:51:33 Probable cause: `h' is applied to too few arguments 04:51:34 elliott, "Functional Pearl: Implicit Configurations" 04:51:36 oh 04:52:11 Sgeo: not that commonly afaik. I think it's being used in the mpfr binding copumpkin and edwardk are working on 04:52:17 -!- Darth_Cliche has joined. 04:52:32 I promised edwardk I'd get it in a working state before the end of the year 04:53:11 elliott, there's no reason I shouldn't use it instead of, say, Reader, right? 04:53:22 Or are they entirely separate concepts 04:53:37 Here, copumpkin said something; he's the official representative for the reflection package. 04:53:41 Enjoy! 04:53:52 wat 04:53:54 I was talking about mpfr 04:53:59 lol 04:54:00 Yes, but it is too late now. 04:54:02 Your fate is sealed. 04:54:02 oh okay 04:54:07 I like reflection too 04:54:13 elliott: this may be one of those situations 04:54:37 elliott: where, without additional standard higher-order functions, attempting to write a point-free function is not going to be fruitful? 04:54:53 -!- Darth_Cliche has changed nick to Klisz. 04:55:12 elliott: though perhaps by attempting these puzzles, you can devise combinators that would be useful for writing pointfree code? 04:55:29 -!- DCliche has quit (Ping timeout: 252 seconds). 04:55:44 kallisti: hi. 04:55:52 copumpkin: Good, tell Sgeo all about it and how it differs from the reader monad. 04:56:03 Sgeo: like, totally, man 04:56:08 duuude 04:56:40 "We rely on type classes, higher-rank polymorphism, and—in ad- 04:56:40 vanced cases—the foreign function interface. 04:56:40 " 04:56:44 o.O at ffi involvement 04:58:04 Sgeo: It uses the FFI to store a value at a pointer, and then serialises that pointer to type-level naturals, and then deserialises it with unsafePerformIO to read the pointer. 04:58:12 I now predict that Sgeo will never use the reflection package. 04:58:55 I haven't used much Haskell libraries thus far.. 04:59:44 elliott: didn't I make f (g x ) (g y) or something? 04:59:48 I don't remember what it was. 05:00:17 Sgeo: I would also predict that you will never use the base package. 05:00:29 oooooh wicked burn. 05:01:15 elliott: surely Sgeo has imported Control.Applicative. 05:01:37 -!- azaq23 has joined. 05:01:43 or Data.List even/ 05:01:46 kallisti: I predict that Sgeo has never written a program not strictly intended to learn Haskell by writing a one-file program with no real use (like hello world or fizzbuzz, etc.). 05:01:47 -!- azaq23 has quit (Max SendQ exceeded). 05:01:49 Prelude is in base too. 05:01:58 oh 05:02:17 -!- azaq23 has joined. 05:02:25 elliott, what does my BF interpreter count as? 05:03:17 OK, "to achieve a purpose other than rehashing a standard program skeleton to learn Haskell". 05:03:33 elliott: be careful. you might accidentally imply that bf has no real use. 05:03:34 oh okay. 05:03:37 you didn't 05:04:05 I've never written a BF interpreter before 05:07:17 Gee golly gosh. 05:08:13 Sgeo: it's okay I've never written anything substantial in Haskell and I'm still awesome. :) 05:10:33 elliott: find is an awesome program 05:10:38 now that I know how to properly use -exec 05:10:41 It's not. 05:10:49 are there better alternatives? 05:11:02 burn 05:11:02 Certainly; you won't be interested in any of them though. 05:11:12 Also that's irrelevant to the question of whether it's awesome or not. 05:11:13 why not? what are they? go on. 05:11:32 elliott: it's slightly relevant. It fills a niche and that's why it's awesome. 05:11:35 if other things do it better 05:11:38 It doesn't. 05:11:40 then it is less awesome than I initially thought. 05:11:41 It fills about five thousand niches. 05:11:55 It has a mini implementation of about 50 Unix commands in there and it doesn't compose well at all. 05:12:08 Plan 9 gets along just fine without a find, for instance, mostly by disallowing pesky control characters in filenames so that line-based IO works fine. 05:12:22 pikhq: Can you get 1 GiB on amd64? 05:12:47 shachaf: Yes. 05:13:00 elliott: right but I use find to run commands on a whole directory tree at once. how does plan 9 do this? 05:13:17 Hah: 05:13:52 i386 | Page Size: 4KB | Huge Page Size: 4M (2M in PAE mode) | Large Page Size: 1GB 05:14:11 kallisti: By listing the entire directory tree and piping it through e.g. grep to filter out the commands you don't want, then passing it to xargs. 05:14:20 shachaf: Sorry, I use "x86" to refer to x86_64 anymore, because seriously 32-bit x86 is an archaicism anymore. 05:14:49 kallisti: To quote the Plan 9 wiki: 05:14:49 find du -a | grep pattern 05:14:49 grep pattern `{du -a root} 05:14:50 -name du -a root | grep name 05:14:50 pattern in a file grep -n pattern `{du -a root | awk '{print $2}'} 05:14:50 -exec cp '{}' x ';' cp `{ du -a | grep pattern } x 05:14:52 I didn't see it listed in /sys, but I suppose that doesn't constitute trying very hard. 05:14:54 (View in a monospaced font.) 05:15:03 elliott: I've done similar things with find before I realized I could use -exec 05:15:14 kallisti: It's unsafe with Unix because filenames can contain anything apart from NUL bytes. 05:15:20 You have to use -print0 and | xargs -0 and it's a gigantic mess. 05:15:34 find -print0 | xargs -0 > find -exec 05:17:32 "The fourth approach to the configurations problem is to use a 05:17:32 reader monad [3]. Its drawback is that any code that uses configu- 05:17:32 ration data (even only indirectly, by calling other functions that do) 05:17:32 must be sequenced into monadic style—even if it does not other- 05:17:32 wise have to be. 05:17:32 " 05:19:01 elliott: so your basic argument against find, despite it doing everything it needs to do to work in Unix, is a) unix filenames b) it goes against Unix philosophy 05:19:30 kallisti: Many things work. I use find all the time. That does not mean I think it worthy of being called out as "awesome". 05:19:42 kallisti: Have I mentioned that its calling convention is completely unlike almost all Unix software? 05:19:44 Only dd is worse in that regard. 05:19:54 (And that's because dd was ported from another system, IIRC.) 05:19:54 yes it's unique in that regard. 05:20:01 elliott: What's the gigantic mess exactly? 05:20:10 shachaf: Context? 05:20:14 You just typed out the entire solution to the problem. 05:20:19 You have to use -print0 and | xargs -0 and it's a gigantic mess. 05:20:39 shachaf: Well, yes, but it's a gigantic mess because Unix is based around line-based IO, not \0-based. 05:20:45 You can't really grep the result of that, etc. 05:20:54 UNIX is based around byte-based I/O. 05:20:55 Yes, you don't need to because find can filter filenames itself, but that's kind of my point, it isn't modular. 05:21:11 shachaf: If you don't think the Unix shell and its tools are line-oriented, then you're delusional... 05:21:19 -!- DCliche has joined. 05:21:32 elliott: whitespace-oriented, even. in some cases. 05:21:38 Also, the way that UNIX tools are meant to be both machine-usable and human-usable doesn't really work, as was pointed out to me recently. 05:21:56 "machine-usable"? 05:21:57 Unix's design doesn't really work in general. 05:22:05 Have I mentioned @ yet? 05:22:18 ...but still, I'd rather a Unix system adhere to its philosophy, at least in broad strokes. 05:22:18 http://www.johndcook.com/blog/2010/06/30/where-the-unix-philosophy-breaks-down/ 05:22:21 this guy hasn't heard of @ 05:22:27 A consistent crappy system beats an inconsistent crappy system. 05:23:12 elliott: @? What a weird name for an operating system. 05:24:10 Hey, that's going to be replaced by the PERFECT name for an operating system in a few centuries! 05:24:14 shachaf: calling it a "name" would be using misfitting terminology of present-day operating systems, which no longer applies to @. 05:24:19 DEAR FUTURE LOGREADERS: Disregard this line and my previous line. 05:24:21 kallisti++ 05:24:27 -!- Klisz has quit (Ping timeout: 252 seconds). 05:24:32 "Unix's design doesn't really work in general." 05:24:38 Except, you know, for the entire internet. 05:24:49 elliott: Wait, what? 05:25:00 cswords_: It's true that Unix software functions perfectly fine. I'm hardly advocating Windows. Or VMS. 05:25:05 That's why I said "design". 05:25:07 elliott: I was talking about the name that \@ is substituted by, obviously, not about \@. 05:25:13 shachaf: There is no escaping. Sorry. 05:25:14 elliott: Come on. 05:25:23 shachaf: You're just going to sound incoherent in the future. 05:25:24 elliott: also did you read that stupid blog entry? the guy is talking about how programs gain overlapping features over time because it becomes difficult to communicate complex data across byte streams. 05:25:31 elliott: something that shouldn't be a problem in @. 05:25:32 kallisti: I read a few paragraphs and then got bored. 05:25:41 But yes, @ is probably the answer to whatever question he has or should have. 05:26:14 Also, De Bruijn sequences are neat. 05:26:37 cswords_: I mean, yes, Unix is probably a Good Thing, at least compared to what we could have had instead (although Multics was actually pretty well-designed and innovative for its time...), but it's way past its expiry date. 05:26:55 De Bruijn indicies... 05:27:00 So in my final today 05:27:02 We got a question 05:27:03 It was 05:27:11 cswords_: Yes, it's the same De Bruijn. 05:27:17 De Bruijn indices++ 05:27:18 "Go through this nested lambda expression and provide the de bruijn indicies for each one" 05:27:28 sounds difficult. 05:27:30 @quote kmc unix 05:27:30 >_> 05:27:31 No quotes match. :( 05:27:31 No, it's easy. 05:27:35 cswords_: That's impossible. 05:27:41 What? It's scheme. 05:27:44 It's easy. 05:27:48 Yeah, Chaitin proved it in 1982. 05:27:49 Any free variables were to be denoted with a -1. 05:27:50 You must have made a mistake. 05:27:55 I think your professor was trying to catch you out. 05:28:05 I am sure you are trolling. 05:28:06 * elliott is trolling, but would also have used a symbol instead of -1. 05:28:07 WHOA, MAN, A DE BRUIJN INDEX OF -1 05:28:11 Anyway. 05:28:13 THINK OF THE POSSIBILITIES 05:28:18 We were supposed to use a -1 if it was a free variable 05:28:21 And the expression was this: 05:28:25 shachaf: It gets the argument from one lambda IN. 05:28:28 IT'S, LIKE, A LAMBDA *INSIDE* A LAMBDA! 05:28:38 If you have two nested lambdas, it turns the language into a nondeterministic one. 05:28:45 That... that sounds pretty cool, actually. 05:28:57 ((lambda (a) (lambda (b) ((d c) (lambda (a) d))) (lambda (c) a)) (lambda (a) c)) 05:29:02 exciting 05:29:03 elliott: Well, other than how the lambda hasn't been applied yet. 05:29:10 elliott: Not to mention De Bruijn indices of 0. 05:29:10 elliott: the more non-deterministic you can make something, the cooler gets. a little known fact. 05:29:14 cswords_: Did they write it in Scheme notation? It's awfully clunky for pure LC. :( 05:29:14 Wait, I just mentioned them. 05:29:28 LC? 05:29:30 shachaf: Yeah, that's why it gets the value in the future, duh. 05:29:32 cswords_: Lambda calculus. 05:29:33 They should've used Common Lisp. 05:29:33 lambda calculus, cswords_ 05:29:34 Yes, the class was in scheme. 05:29:40 -!- MDude has quit (Ping timeout: 240 seconds). 05:29:41 wh 05:29:46 Aaanyway. 05:29:55 #'(LAMBDA (LAMBDA) (LAMBDA LAMBDA) I don't have the heart to finish it. 05:29:56 Lambda calculus in sexp is saddening. 05:29:56 Well, yeah, but presumably you didn't write a De Bruijn substitutor for the entirety of Scheme :P 05:29:57 Someone should do the de bruijns for those real quick. 05:30:03 Okay. 05:30:04 It was... unnerving. 05:30:28 unnerving? 05:30:35 Each is free. 05:30:35 sounds quite nerving to me, actually 05:30:36 he lost his nerves. 05:30:42 \ \ (-1 -1) \ (-1) ... yeah, this is ridiculous. 05:30:45 Yeah. 05:30:55 Apparently the problem was randomly generated. 05:30:59 great 05:30:59 I redid it like three times. 05:31:12 Real programmers don't use syntax, they just input the directed graph directly. 05:31:19 That's why it's called a Directed graph, see. 05:31:22 directly graph 05:31:26 Hmm, lambda calculus programs would look nice as graphs, except for the nodes. 05:31:31 real programmers usse@. 05:31:32 They'd look all sad and empty. 05:31:48 lol 05:31:55 edgemess 05:31:55 Anyway, now I"m drinking and making techno. Life is grand. 05:32:06 Wait, just use @ symbols as the nodes. 05:32:08 i'm sitting 05:32:14 cswords_: "techno" 05:32:18 o.O 05:32:21 techno 05:32:21 (Yes, use an operating system name as a node!) 05:32:23 (Future people.) 05:32:26 (That is what I will do.) 05:32:34 (It's funny because injokes are funny.) 05:32:46 elliott: the future people don't know that @ is the name of their operating system though. 05:32:48 every node labeled "elliott is cool" 05:32:51 because you renamed it to something perfect. 05:32:57 * elliott waits for cswords_ to ask what @ is. 05:33:06 I know what @ is. 05:33:08 I'm not a noob. 05:33:11 elliott: WHAT'S @ 05:33:13 You... do? 05:33:25 shachaf: It's a difficult question, because @ is impossible to describe. One might ask the same about Feather. What *is* Feather? We just don't know. 05:33:28 I've red the page. 05:33:33 cswords_: techno refers to a specific style of electronic music. Is that what you're making? 05:33:36 There's... a page... for @? 05:33:43 kallisti . . . 05:33:44 at.html 05:33:55 at.html isn't on any web servers. :( 05:34:01 Wait, what OS am I thinking of, then? 05:34:02 Hmmm. 05:34:04 cswords_ is hacking into my computer to read my top secret @ files. 05:34:10 email: at@at.org 05:34:12 lol 05:34:14 You didn't know? 05:34:17 I rooted your box hours ago/ 05:34:20 I was taking an "exam" 05:34:29 Oh, so THAT'S why all this gay porn came up. 05:34:33 I assumed I just forgot about it. 05:34:39 Hawt. 05:34:54 From this extensive evidence I deduce that cswords_ is pikhq. 05:35:00 Alas, no. 05:35:01 cswords_: yes I'm one of those people who are all pretentious about their electornic genres. 05:35:02 -_- 05:35:12 kallisti, it isn't dubstep if that helps. 05:35:18 a little. 05:35:18 If I can get soundcloud to work I'll link to some. 05:35:26 techno pretension is quite a hilarious pretension 05:35:35 Techension. 05:35:47 monqy: I'm not pretentious about just techno. I'm pretentious about electronic music genres, obviously. 05:35:53 kallisti: that's the joke 05:36:00 monqy: BECAUSE THEY'RE DIFFERENT? DO YOU SEE? YES? 05:36:02 YES. 05:36:03 yes 05:36:04 nope 05:36:06 http://esolangs.org/wiki/Everything2_Chat_Box_Archive 05:36:06 finally! 05:36:11 all I've wanted in life is an everything2 chat box archive 05:36:16 thanks to spam, I can have it! 05:36:34 we also have single fifo, animated chatrooms, bbw dating north dakota, dating program 05:36:52 *antimated 05:36:53 there was a good one earlier today but I forget what it was 05:37:02 oh yes antimated 05:37:06 even better 05:37:18 Well gosh darnit, I'm looking for a BBW dating program in North Dakota so that I can use a single FIFO to communicate with animated chatrooms. 05:37:22 LOOKS LIKE I'VE GOT IT MADE. 05:37:40 What the fuck? 05:37:42 I wonder what antimated chat rooms are 05:37:51 antimated 05:37:52 As in 05:37:53 anti 05:37:54 mated 05:37:54 cswords_: We're talking about our wiki spam. 05:37:56 How a prosperous Link Building Service Displays Profitable Results on Expenditure 05:38:00 elliott: I used my FIFO to communicate with your antimated BB mom. 05:38:00 yes!!! 05:38:07 monqy: I read that as "preposterous" first time round and it was better. 05:38:24 Gah 05:38:24 i seem to have missed white wives dating black men 05:38:27 My internet is terrible. 05:38:37 and secret friends sex chat ;_; 05:38:49 friendship sex chat. 05:38:54 You'll never get into our secret friends sex chat now!!! 05:39:02 ppc johnny chat 05:39:15 cswords_: I'm sorry that none of this makes any sense to you. 05:39:20 kallisti, http://soundcloud.com/kaosjester/sines-in-space 05:39:24 fond memories of my name is johny, what the f**k 05:39:34 Also, http://soundcloud.com/kaosjester/saws-in-bass 05:39:41 cswords_: sines in space? sounds impossible. 05:40:12 cswords_: There's no sound in space, dude. 05:40:18 Oh? 05:40:21 That's as impossible as de-Bruijn numbering lambdas. 05:40:23 But if you had a Space ship 05:40:33 And you were having a disco on said space ship. 05:40:35 By that standard sines on earth are sines in space. :( 05:40:47 F- WOULD NOT BUY AGAIN BOOK CLAIMED TO BE ABOUT SPACE BUT WAS ACTUALLY JUST ABOUT EARTH 05:41:01 wheres the sines 05:41:12 monqy: THERE ARE NO SINES IN SPACE!!! 05:41:14 Only square waves. 05:41:36 That must make space travel difficult. 05:41:45 YOU MUST MOVE UP AND DOWN RAPIDLY WHILE TRAVELING! 05:41:49 Exactly. 05:41:52 That's how the Earth travels. 05:41:55 cswords_: this is kind of like house I would say. Except there was one breakbeat part, but I guess that's okay. 05:42:04 oh there's that effect similar to that of rapidly plugging and unplugging ears 05:42:05 lawl 05:42:07 electronic genres are strange. 05:42:09 The second one is housy-er. 05:42:26 monqy: Wow, that's ... the best intuitive description ever. 05:42:34 kallisti: You knew what he meant first time, right?? 05:42:49 elliott: sure. 05:42:56 If we keep this up I will need to fetch more alcohol. 05:43:02 blinking : strobe lights :: ear plug cycling : this thing 05:43:03 We always operate at this level. 05:43:10 Only the toughened few survive. 05:43:13 monqy: :D 05:43:13 Hmmm. I feel like coding something. Balmer peak! 05:43:32 The Ballmer peak is reached at the point where you can no longer spell "Ballmer". 05:43:55 Oh. 05:43:57 I've had like 05:44:02 A guinness and half a bottle of wine 05:44:11 I'm nowhere near that drunk. 05:44:13 cswords_: Don't tell PH. 05:44:17 PH? 05:44:27 Phantom_Hoover. 05:44:29 alcohol is for old people 05:44:31 -!- GreaseMonkey has joined. 05:44:39 monqy is actually sixteen 05:44:42 monqy: you might be referring to side-chaining compression? 05:44:45 cswords_: not yet 05:44:54 lawl 05:45:05 monqy: where everything becomes softer when the kick drum hits. 05:45:11 to emphasize the bass. 05:45:13 monqy is actually 4 years old. 05:45:23 kallisti: i don't know what you're talking about im bad at techno 05:45:50 monqy: it's a good thing I'm not talking about techno specifically. -more pretentiousness- 05:46:51 It is, in fact, side-chaining compression on the bass line. 05:47:17 ok, so one envies the greener grass.. in spite of the fact that the grass is not infact greener. acting on this envy (which is always a hassle), one now envies ones initial grass which is now the greener. 05:47:45 .. 05:47:57 what 05:48:09 hi 05:48:10 "the grass is greener on the other side of the fence" 05:48:14 I live on both sides of the fence and the grass is always green. 05:48:17 cswords_: whatt porgrmus u use 4 soundz0xrz 05:48:27 Reason. 05:48:39 I make music with PURE LOGI- wait god dammit Logic is an audio program too. 05:48:52 DEAR AUDIO PEOPLE: Stop being so bloody pretentious you are not the epitome of rationality?? 05:48:57 I feel like developing! 05:49:02 oh good 05:49:04 * kallisti makes music with PURE-DA --- fuuuuuuck 05:49:12 `log developers 05:49:20 That's not developing itidus21. 05:49:22 2007-10-10.txt:15:40:34: and you have't seen it fail because web developers have to prance around until IE accepts it 05:49:26 `log developers 05:49:33 2011-08-20.txt:23:22:30: They're (according to current plans/rumours) going to release a grand total of approximately 1.1 MeeGo devices; the N9, plus the N950 "developers only" phone, which I'm counting as 0.1 because (even though it is a MeeGo device) it's not going to actually be released. 05:50:32 Stupid OpenDNS. 05:50:35 Being all lame. 05:50:36 elliott: I still need to start working on The Best Signal Processing And Music Production Library Ever (in Haskell)... right after I gain more practical experience with Haskell. 05:50:49 cswords_: 8.8.8.8 or that Verizon one that I don't recall if you believe you can escape Google's infinite clutches. 05:51:03 kallisti: Have I mentioned that your design for that was terrible and mine was awesome? 05:51:05 elliott, I have long ago accepted thgat I cannot. 05:51:12 I just don't remember how to change my DNS settings. 05:51:14 elliott: yes. I have considered different designs. 05:51:15 i'm still not certain which type of person balmer is keen on. 05:51:16 And I can't google it. 05:51:19 cswords_: vi /etc/resolv.conf 05:51:21 elliott: involving LAYERS OF ABSTRACTION. -gasp- 05:51:26 ... 05:51:38 So I'm using a windows computer for the music development, whereis where it needs to happne. 05:51:40 This is the point where we laugh at cswords_ because he uses Windows. 05:51:47 Nope. 05:51:49 * elliott begins laughter routines. 05:51:51 i use windows 05:51:51 I have a windows box, too. 05:51:53 laughe 05:51:58 I also have a mac somewhere... 05:52:04 er, linux 05:52:06 I run arch. 05:52:12 * elliott runs Arch. It's terrible. 05:52:15 But SC2 + Linux is not hte kinded thing. 05:52:18 elliott: oh right it's winter break I need to switch to Debian eventually. 05:52:20 is anything not terribel................ 05:52:21 gah, that spelling was terrible 05:52:22 By the way, I hate everything. 05:52:24 Debian is terrible. 05:52:30 Not as bad as Gentoo. 05:52:34 cswords_: do you watch pro SC2 games? 05:52:34 i run winxp sp2 05:52:36 elliott, just switch to slackware. 05:52:37 it'll be fine. 05:52:39 Debian is more terrible than, but not as obnoxious as Arch. YMMV. 05:52:40 kallisti, yes! 05:52:52 cswords_: I watch them on youtube. 05:52:55 cswords_: If I'm switching to another existing distro it'll be NixOS. 05:52:55 all the time. 05:52:58 like. daily. 05:53:07 kallisti is actually the abstract concept of StarCraft II. 05:53:35 even though i've never been a starcraft player, or a pc-game player, i will try to make more starcraft references from now on 05:53:40 cswords_: Anyway, go find your internet connection in Control Panel, and then double click it and it's in one of those tabs. 05:53:52 8.8.8.8 and 8.8.4.4. 05:54:09 God 05:54:16 I was going to try to avoid doing that much work to fix it 05:54:19 And instead just bitch 05:54:19 itidus21: you can use "canon rush" to mean any kind of cheap trick that doesn't pay off in the long run. 05:54:20 But NO 05:54:23 itidus21: *cannon 05:54:24 You have to make it sound easy 05:54:25 That's like three clicks. 05:54:32 You just can't operate on our level. 05:54:52 hmmm.. freenode is really zerg rushing me 05:55:07 verily 05:55:08 itidus21: also "I nydus'd her main" is a popular sexual reference, for some reason. 05:55:15 kallisti: Stop it stop it. 05:55:18 You're encouraging him. 05:56:12 itidus21: cannon rush to 3gate DT rush blah blah blah 05:56:15 i guess battlenet references are important too 05:56:18 you can find endless combinations 05:56:38 Wow, that's way better. 05:56:52 elliott, I've been running linux since I'm 12. Back off! 05:57:02 whoa!!!!!!! 05:57:04 fungot is running out of minerals 05:57:04 itidus21: where is samsara?." " yeah, i see what the value of the current working directory 05:57:14 cswords_: I've been running Linux since I was 10 or 11, I think. 05:57:18 I am now 5 years old. 05:57:22 That's one year older than monqy! 05:57:22 Sweet 05:57:27 You have never ran linux before. 05:57:28 Excellent. 05:57:38 Shit, there was something I needed to buy from amazon. 05:57:39 Uh, I just ran it in the FUTURE? With FEATHER? Hello? 05:57:41 I don't remember what it is. 05:57:44 You must be new here. 05:57:52 cswords_: for some reason husky has like completely stopped casting pro games. I don't understand. 05:58:00 I don't like Husky or HD. 05:58:03 feather sounds like some kind of protoss technology 05:58:05 I watch Day9 and GSL. 05:58:18 cswords_: I don't like HD but Husky is a pretty good caster. he's just not a very good player so his strategy stuff isn't good. 05:58:23 cswords_: Day9 is great. 05:58:37 FUCK 05:58:39 itidus21: Stop iiiit. 05:58:46 I needed to buy something IMPORTANT. 05:58:53 oops 05:59:02 your base is under attack 05:59:03 The lamest part about getting married is that you can't ask for knives. 05:59:21 cswords_: though I wish day9 would do just a few pro games. I like his strategy analysis but sometimes I just want to watch him cast a game. 05:59:39 kallisti, watch MLG? 05:59:55 cswords_: how? where? 05:59:57 elliott: its fairly safe since i really haven't played the game in any meaningful extent 06:00:08 When MLG happens. 06:00:12 Day9 always casts. 06:00:13 It's great. 06:00:17 cswords_: right but like... where do I view this? 06:00:20 preferably on the internet. 06:00:25 or is it like... a television thing? 06:01:33 cswords_: I remember the first time I heard day9 cast mlg, and thought he was annoying. 06:01:40 because I was accustomed to Husky's beautiful voice. :P 06:01:48 Well I can't help that your'e dumb. 06:01:50 :P 06:01:51 lol 06:01:56 It's on the internet. 06:02:05 MLG is a US-based tournament. 06:02:08 It happens about once a month. 06:02:12 They livestream the games. 06:02:14 cswords_: I changed my mind. The casting was kind of bad for the first game I watched. 06:02:19 lots of shouting. :P 06:02:34 but then I listened to more day9 stuff. 06:03:21 wow what's this here now, cswords' nick is of such a bright and morningly color 06:03:45 my eyes are rejoicing 06:04:27 WTF does that even mean? 06:04:54 er 06:05:06 -!- cswords_ has changed nick to cswords. 06:05:08 can you be more specific 06:05:18 wow what's this here now, cswords' nick is of such a bright and morningly color 06:05:35 well "what's this here now" means i'm astonished about something 06:05:48 Thanks. 06:05:50 Thanks for that. 06:06:07 well i'm going to explain the rest as well, just gimme a minute 06:06:19 cswords' nick is your nick which i see on my screen 06:06:27 when you say things, i see your nick before those lines 06:06:35 your nick is cswords 06:06:48 now, your nick has a color, as is obvious from my line 06:06:55 it is very bright and morningly. 06:06:55 was it bright and morningly 06:06:57 yes 06:06:57 :o 06:07:02 it was very bright and morningly 06:07:08 and still is 06:07:16 bright means like emits lots of light 06:07:21 Aren't. 06:07:23 What the fuck 06:07:26 all I see is grey; my eyes are rejoicing 06:07:30 Aren't all the nicks the same color? 06:07:34 Why would mine be different? 06:07:43 different clients or extensions or w/e 06:07:47 some people like colored names 06:07:49 cswords: but yeah... HD is bad. 06:07:54 no, none of the colors are the same. 06:07:55 I don't care enough to do name coloring 06:08:02 as is very common in modern irc clients 06:08:12 sometimes name coloring can be ugly 06:08:17 try always 06:08:37 i don't care enough to not do it. because it's done automatically 06:08:37 * kallisti just reads peoples' names. 06:08:39 it's amazing. 06:08:48 one time I heard of name coloring that colored both the foreground and the background 06:08:51 double ugly 06:08:55 What color is mine, oklopol? 06:09:00 bright and morningly 06:09:07 cswords: super bright morning green 06:09:23 Because mornings are green in Finland! 06:09:52 mine colors backgrounds too 06:10:00 eugh 06:10:07 Ugh. 06:10:09 WTF internet. 06:10:11 nonblack backgrounds make me sad 06:10:16 make my eyes sad 06:10:18 make me sad 06:10:19 well it makes logreading way faster 06:10:23 monqy: White on black makes your eyes sad. 06:10:38 but then again i'm sure you could do all kinds of horrible things with colors that would make it even faster 06:10:55 elliott: I prefer it a bit dimmer than white 06:11:11 I also have some green stuff going on 06:11:12 monqy: Well, pure black backgrounds in general are a bad idea on LCDs. Try #333. 06:11:26 Green on black. You're a bad person. I bet it's monospaced too. 06:11:30 It might even be aliased. 06:11:35 not aliased 06:11:42 but it's a bitmap font 06:11:48 do i lose points for that 06:11:51 oh wait 06:11:53 There are antialiased bitmap fonts? 06:11:54 i mixed up 06:11:57 aliased and antialiased 06:12:00 woops 06:12:00 white on black is my favorite irc and porn style 06:12:02 cries 06:12:09 You've pretty much lost all the points monqy. 06:12:12 It's been nice knowing you. 06:12:12 :( 06:12:22 the green is just for the 06:12:23 uh 06:12:29 "everything" 06:12:31 no 06:12:36 just for the very bottom and top 06:12:42 That's too much green, monqy. 06:12:44 where the topic goes and the info bar thing goes 06:12:45 My IRC is many colors on black with monospaced 06:12:55 what's so bad about green 06:12:57 green is coooool 06:13:12 green can be bright and morningly 06:13:14 You're not a hacker monqy. You won't be like in those movies just because you use green to make your IRC client less boring. 06:13:23 oklopol: Yes, I'll allow bright and morningly greens. 06:13:26 But only for nicks. 06:13:34 Other contexts are unworthy of the privilege of that colour. 06:13:39 i dont want to be a hacker :( but i don't have other good colors 06:13:48 blue is a bit too dim and red is a bit too bright 06:13:49 green is 06:13:51 ~just right~ 06:13:53 and also a good color 06:13:58 There are more than three colours, monqy. 06:14:00 -!- azaq23 has quit (Remote host closed the connection). 06:14:08 monqy: I think, select the color of your choice; the choice of your color does not make you a hacker or not hacker 06:14:16 -!- cswords_ has joined. 06:14:16 thanks zzo38 06:14:19 i feel better now 06:14:22 STOP PROMOTING EQUALITY 06:14:36 Ah 06:14:49 What equality? 06:14:55 i could pick grey but so all the chatter is grey and making the ui grey would be boringggg 06:15:02 Equality of green and non-green people! 06:15:05 are there other colors 06:15:10 monqy: Yes. 06:15:12 :o 06:15:16 So 06:15:22 Resetting modem = good internet 06:15:23 monqy: Haven't you upgraded to RGBOA yet? 06:15:23 Why should other people care what color you use on your IRC if other people do not use your computer? 06:15:28 Red, green, blue, octarine, alpha. 06:15:40 :o octarine 06:15:44 some people are way better than others 06:16:00 alpha would be bad because my background color is black so it would all just blend in 06:16:17 elliott: pure (==) --promoting equality 06:16:38 Nobody uses any computers. 06:16:40 :t pure (==) 06:16:41 That I won 06:16:41 forall a (f :: * -> *). (Eq a, Applicative f) => f (a -> a -> Bool) 06:16:43 Except me 06:16:46 cswords_: What. 06:17:08 -!- cswords has quit (Ping timeout: 268 seconds). 06:17:28 zzo38: would you not care if someone killed the whole population of norway just because you don't know any people worth knowing from there? 06:17:31 OOOOOPS 06:17:31 I don't know. 06:17:32 Never mind. 06:18:36 oklopol: That is different for at least two reasons. 06:18:39 elliott: why did you check the type of that... 06:18:43 tell me 06:18:49 kallisti: Magic. 06:18:52 i need to leave soonish 06:19:07 elliott: "magic" is only an acceptable answer to "how" questions. 06:19:43 in one case, someone is hurting themselves, in the other, they are only hurting (all) norwegians (to death) 06:19:44 oklopol, don't go! 06:20:16 i have to go do some programming 06:20:25 oklopol: Norway must stay. Sweden must go. 06:20:33 and before that, visit the uni to leave my friend's projector there 06:20:38 oklopol: You still program? Ever? 06:20:44 well kind of 06:21:05 `addquote in one case, someone is hurting themselves, in the other, they are only hurting (all) norwegians (to death) 06:21:07 766) in one case, someone is hurting themselves, in the other, they are only hurting (all) norwegians (to death) 06:21:14 what we do is that i stare at the screen and my friend programs, and when he has a bug i look at the screen and fix it, and program the few interesting ones 06:21:31 (staring doesn't imply looking) 06:21:40 erm 06:21:52 ones? like the few interesting bugs? i think i meant, like, things. 06:22:05 oklopol: Yes, that is one thing. If you hurt yourself on purpose then probably that is what you wished anyways..... But there is also, many other people might care even if one person does not care (note the qualified "just because you don't know any people worth knowing from there" as well). 06:22:33 well you make a waterproof point 06:22:46 i guess all i can say is LEAVING TIME, WOOOOOO 06:22:49 see you :))))) 06:23:23 :') 06:37:04 -!- Slereah_ has quit (Ping timeout: 244 seconds). 06:42:35 -!- augur has changed nick to NOTBROSEFSTALIN. 06:42:42 -!- NOTBROSEFSTALIN has changed nick to augu. 06:42:44 -!- augu has changed nick to augur. 06:59:31 -!- DCliche has quit (Quit: You are now graced with my absence.). 07:30:58 Wow. 07:31:02 Merge sort is older than bubble sort. 07:32:12 Merge sort was done in 1945 by von Neumann, bubble sort in 1956 by some grad student at Stanford. 07:33:07 aw, I was hoping quicksort would be older than bubblesort too 07:35:34 But radix sort is older still: "Radix sort dates back as far as 1887 to the work of Herman Hollerith on tabulating machines." 07:36:02 turns out people like to sort stuff fast! 07:37:19 I wouldn't be surprised if insertion sort also beat bubble-bobble, but couldn't find a reference for that, just that shell sort (as an extension of insertion sort) is from 1959. 07:37:59 modern cutting edge research into sorting algorithms includes: bogosort and quantum bogosort. 07:40:25 best case on bogo sort is even O(n) 07:40:28 !!! 07:42:02 What was the point of bubble sort? 07:42:13 Besides educational? 07:42:27 Non-seriously you could argue that the best case for any sort is O(1), happening when the array is already sorted and a random cosmic ray flips the instruction pointer (and related bits of memory, if any) so that the implementation glitches and jumps directly to the "okay, sorted" stage. 07:43:31 O(1) sorting could be possible if you maintained some kind of "sorted" bit. I'm not really sure if you could maintaining its accuracy with constant time though. 07:43:46 weroweroiijwer enghlish 07:44:15 I'm calling that bogo-best case. 07:44:37 but you could certainly turn on the sorted bit after you sort something, and then turn it off when you modify the sequence. 07:45:20 Bogo-best case for sorting is, indeed, O(1). 07:45:33 for appends/pushes/pops you could actually continue to maintain the sorted bit in constant time provided you also knew if it were ascending or descending order. 07:45:42 pikhq: oh I thought it was linear, because it has to shuffle it once. 07:46:11 oh 07:46:13 bogo-best 07:46:15 kallisti: "Bogo-best case" is the case where the list is already sorted and the instruction pointer randomly skips the sorting function. 07:46:17 not bogosort best case :P 07:46:24 gotcha 07:47:11 "Bozo sort is another sorting algorithm based on random numbers. If the list is not in order, it picks two items at random and swaps them, then checks to see if the list is sorted. The running time analysis of Bozo Sort is more difficult, but some estimates are found in H. Gruber's analysis of perversely awful randomized sorting algorithms.[1]" 07:47:15 "[1] Gruber, H.; Holzer, M.; Ruepp, O., "Sorting the slow way: an analysis of perversely awful randomized sorting algorithms", 4th International Conference on Fun with Algorithms, Castiglioncello, Italy, 2007." 07:47:26 Computer scientists having fun? How inappropriate. 07:48:14 a constant-time sort is possible for pointers to C arrays by swapping out the array with an already sorted array. 07:48:45 for example, an empty array! 07:49:34 "To our knowledge, the analysis of perversely awful algorithms can be tracked back at least to the seminal paper on pessimal algorithm design in 1984 [2]. -- Among other solutions, the formerly mentioned work contains a remarkably slow sorting algorithm named slowsort achieving running time Omega(n^(log n/(2+eps))) even in the best case." 07:49:42 These dudes certainly like their slow sorts. 07:51:17 bogosort and bozosort have the maximal worst time at O(infinity) 07:51:24 can't beat that 07:51:49 if so, I think they would fail to count as algorithms 07:52:24 (because an algorithm must terminate) 07:52:26 though isn't O(infinity) a kind of constant time? 07:52:30 where the constant is infinity? 07:52:41 it doesn't vary with the input. 07:52:42 The odds of them halting are 1. 07:52:49 olsner: Well, it's a probabilistic algorithm, and it will "almost surely" (as they say) terminate, so. 07:52:52 But they're not guaranteed to halt. 07:53:05 :P 07:53:12 With a bad PRNG, it might also in practice never halt. 07:53:16 fizzie: so "almost" algorithms then? :) 07:53:47 Though if you say "in practice", I suppose it'll halt at heat death time, if not earlier. 07:53:49 Quantum bogosort is much better. 07:54:16 Yay, O(n). 07:54:38 if you're lucky 07:54:44 your universe only gets a few of those perfect sorts. 07:55:10 But by MWI and quantum immortality, I'm sure to be in the universe that gets perfect sorts! 07:55:13 :P 07:55:25 consider the universes in which a bogosort was needed to run at O(n) in order to save humanity 07:55:35 now consider the ones that failed to do so. tragic. 07:55:42 Tragic indeed. 07:55:53 now consider the ones that succeeded. TRIUMPH. 07:56:09 Should've had broken world destruction mechanisms. 07:56:16 I think it's funny how the "List of dates predicted for apocalyptic events" also lists heath death of the universe, at (a remarkably stetson-harrison looking number of) 10^100 years, claimed by "various scientists". (And the Sun's red-giant stage in about 5 billion years, also claimed by "various scientists".) 07:56:59 fizzie: the only true apocalypse is IPv4 address exhaustion. 07:57:20 Don't say that, someone's going to add IPv4 exhaustion predictions onto that list. 07:57:22 * kallisti needs to get a static IP to Prepare. 07:57:37 but maybe even that won't save me! 07:58:23 for appends/pushes/pops you could actually continue to maintain the sorted bit in constant time provided you also knew if it were ascending or descending order. 07:58:36 kallisti: the word you are looking for here to explain why this doesn't make everything O(1) is "amortised" 07:59:00 elliott: wow thanks I had no clue what that was. 07:59:09 Clearly. :P 07:59:19 I "have" two IP addresses, but sadly they're just assigned to me by the ISP and not actually allocated to myself, so when the Ipocalypse hits they can just terminate my contract and reclaim them. :( 07:59:33 If only Ilari were here. 07:59:37 fizzie: Track down Ilari for us. 07:59:40 Bring him home. 07:59:50 I don't even know his last name. 08:00:06 ReaderT seem to make a Kleisli compose, for example you make a monoid of (ReaderT x m x) by Kleisli composition 08:00:07 There are quite a few of Ilaries in Finland. 08:00:41 mempty = ReaderT return; mappend (ReaderT x) (ReaderT y) = ReaderT (x >=> y); 08:00:46 finland, famous for its ilaries 08:01:02 Because it is also like a Kleisli category 08:01:08 elliott: "amortized" doesn't explain in what way. 08:01:43 -!- monqy has quit (Quit: hello). 08:01:43 olsner: Land of a thousand Ilaries. 08:02:09 fizzie: Unfortunately grepping produces naught. 08:02:18 hmm, some sense of the IPv4 address exhaustion has already happened though, hasn't it? 08:02:19 Wait, Ilari is online now. 08:02:23 fizzie: As a Finn you must invite Ilari back. 08:02:24 olsner: Yes. 08:02:44 it just hasn't yet become apocalyptic 08:02:49 olsner: In fact, land of the 13724 Ilaries, at December 12th, according to the Population Register Centre. 08:02:57 fizzie: wow! 08:03:32 *Ilarien 08:04:15 Or the 13724 male Ilaries and "less than 15" female ones, even though it's a male name. (It doesn't give exact numbers if there are <=5 people in the particular name/gender/year-of-birth-range bucket.) 08:04:54 Also some of those are dead. 08:05:16 Of surnames it gives different living/dead counts, but of first names no. :/ 08:05:25 Det finns 206 män som har förnamnet Ilari. Av dessa har 20 namnet Ilari som tilltalsnamn. 08:05:37 but no swedes with ilari as their surname, apparently 08:05:37 why do I have 20 cents in my paypal. 08:06:03 There are "less than 5" dead people with the surname "Ilari"; none living. 08:06:23 no living dead people? 08:06:52 10 living, 7 dead, and "less than 5" had-the-name-earlier-but-not-any-more people with my surname. It's an exclusive club. 08:07:22 -!- zzo38 has quit (Remote host closed the connection). 08:09:01 oh, 3 people in sweden have olsner as their surname 08:10:19 fizzie: INVITE ILARI BACK ;__; 08:10:29 hes our bef 08:10:29 bff 08:10:31 fbfbf 08:10:59 hmm, 2011-04-30 was the last day Ilari was in here 08:11:03 Ilari: i am _so_ tempted to ban you for ignoring my comments... 08:11:12 last non-join/part line mentioning Ilari before he left :P 08:11:25 and there are 16 swedes (all men) with the name Django 08:11:34 I don't want to, it would be a SOCIAL INTERACTION THING, I don't do those. 08:11:43 olsner: It takes 16 to Django. 08:11:46 fizzie: I KNOW YOU'RE A FINN BUT CAN'T YOU NOT BE A FINN JUST FOR A LITTLE WHILE? 08:13:32 <=20 Djangos in Finland; <=10 male, <= female; <=5 men born in 1980-99, <=5 women born in 1980-99, <=5 men born in 2011, <=5 women born in 2011. So during this year there's been at least one boy and girl both named Django. 08:13:46 Wonder if they're named after the web framework. 08:13:57 Also whether they're in the same family. 08:14:05 * elliott decides to name his future children after web frameworks. 08:14:16 ASP.NET MVC is such a good baby name. 08:14:32 "Little Aspy", you can call him/her. 08:14:41 /it. 08:18:59 fizzie: what are you using to determine those name-related statistics? 08:19:23 the department of name-related statistics, obviously 08:22:26 There's a web-terface to our population registry; it can look up given names (and return a histogram-ish thing of counts per gender/birth-year-range) and surnames (counts per gender/{current name,ex-name,deceased}). 08:22:42 http://verkkopalvelu.vrk.fi/Nimipalvelu/default.asp?L=3 08:25:07 "verkkopalvelu" Oh, Finland, your non-Indoeuropeanness is so strange. 08:27:52 Lit. "network service". 08:28:21 The Population Information System does not contain the surname you searched for 08:29:45 not a big surprise. 08:30:10 does it contain sweden too fizzie? 08:30:23 or just finland finland 08:30:40 different countries, man 08:31:14 the swedish counterpart: http://www.scb.se/Pages/NameSearch____259432.aspx 08:32:08 they actually have that in english too, but since swedish is indo-european you should have no problems understanding it 08:33:36 fizzie: Does it contain Russia? 08:33:40 How about France? 08:35:26 Huh, Hitchens died. 08:52:21 elliott: so does infinite time technically count as a sort of constant time or does infinity not work like that. 08:52:51 kallisti: "Infinity" is not a real number. 08:52:55 or do algorithms not work like that. since they must always halt. 08:52:57 elliott: I'm aware. 08:53:36 Can I just say "no, it doesn't count" or will you ask why? 08:53:44 no that's fine. 08:54:14 No, it doesn't count. 08:55:21 but why? it doesn't vary with input. 08:55:28 >:) 08:55:30 It's also a non-number. 08:55:46 is big O constrained to reals? 08:56:06 kallisti: I'm not answering the "why", that's why I checked first. 08:56:07 I guess so, yes. 08:56:52 elliott: Well, there's the unexplanative answer. 08:56:57 "It just doesn't work that way". 08:57:02 I'm going with that. 08:57:09 And considering sleep. 08:57:42 I ask because Wikipedia lists bogosorts worst case complexity at O(infinity) 08:57:53 which I'm guess is not an actual thing but just an intuitive idea? 08:58:00 As far as I'm aware. 08:58:33 Sure O(\infty) makes sense. 08:58:40 See http://en.wikipedia.org/wiki/Big_O_notation. 09:00:52 so O(infinity) is O(g(x)) where g(x) = infinity 09:00:59 LOOKS PRETTY CONSTANT TO ME. :> 09:01:07 constantly infinite. 09:01:40 Note the bit about "reals" there. 09:01:50 \infty is not in R. 09:01:56 yeah I noticed that. 09:02:51 so then the O(infinity) that makes sense to elliott is not the thing that's being described here. Though maybe I'm missing some section about infinity. 09:03:39 f(x) = O(\infty) iff there exists a positive real number M and a real number x_0 such that |f(x)\ <= M|\infty| for all x > x_0 09:03:48 f(x) = O(\infty) iff there exists a real number x_0 such that |f(x)\ <= |\infty| for all x > x_0 09:03:53 f(x) = O(\infty) iff there exists a real number x_0 such that |f(x)| <= \infty for all x > x_0 09:04:04 Everything is <= \infty, blah blah blah 09:04:11 It's about growth, \infty makes perfect sense there 09:04:19 It means unbounded growth 09:04:47 ah okay. O(1) is no growth. 09:04:56 YES, I CAN INTUIT THIS. 09:05:17 but I don't grok the math much. Soon I'll be taken an algorithm analysis class though. 09:05:20 so maybe I'll actually learn something. 09:05:37 It is... really not difficult, f(x) here is the number of steps f takes to complete. 09:05:44 no I get all of that. 09:05:47 Machine instructions, whatever, it's all constant factors so it ends up equivalent. 09:05:50 Once you go Inuit, you never come out of it. (elliott: that's an isometric quote this time.) 09:06:11 elliott: I understand what the function represents. 09:06:35 fizzie: Thanks for letting me know. 09:07:02 I'm trying to find it but I just recall that the name wasn't very related to the contents. 09:07:20 http://isometric.sixsided.org/strips/you_dont_go_back 09:07:24 Related enough. 09:07:27 It's even on the front page. 09:07:30 Oh. 09:07:44 I was being too diffikult. :/ 09:07:46 This is a good comic. 09:07:47 elliott: oh hmmm, big O notation really isn't saying much at all. 09:07:50 So much better than Station V3. 09:07:53 elliott: it basically eliminates constant factors. 09:07:59 kallisti: You only just realised? 09:08:01 in the actual definition 09:08:09 elliott: no I knew that just not /how/ 09:08:17 I have never actually sat down and studied the definition of big O 09:08:20 Saying an algorithm is O(g(n)) is just saying that the number of steps it takes is g(n), modulo constant factors. 09:08:26 just what it means intuitively. 09:08:30 elliott: yes yes I know. 09:08:36 Well, now you know twice. 09:08:43 So that's the full battle. 09:09:12 elliott: I thought perhaps there was more to it than that. 09:09:22 Come on guys, don't G.I. Joe references satisfy you?!?!?! 09:09:26 It's FUNNY. 09:09:35 fizzie: Tell me you got it. 09:09:43 elliott: I have no idea what G.I. Joe is. 09:09:51 The only thing I've ever seen is references. 09:09:52 Yes, yes, twice a half is the whole enchilada, sure. 09:09:53 shachaf: YOU'RE JUST NOT GOOD (BAD) ENOUGH FOR US 09:09:55 In particular, that reference. 09:10:14 I have actually watched *several episodes* of the animated series. 09:10:16 elliott: lawyer time: it doesn't /have/ to be "steps" 09:10:33 elliott: it could be oranges, for example. You could have an orange orchard algorithm. 09:10:36 kallisti: Yes it does; big-O in algorithms is always referring to the time the function takes. 09:10:46 It does? 09:10:55 elliott: not space? 09:10:55 shachaf: Well, in the kind of low-class dreck /kallisti/ will be reading. 09:11:01 Or that, yse. 09:11:02 yes. 09:11:04 lol 09:11:04 But not oranges. 09:11:10 it COULD be though 09:11:16 there is no unit specified. 09:11:18 elliott: It could be "comparisons" or "swaps" or something. 09:11:30 I guess those count as steps. 09:11:33 it could be people. the rate of growth of people ignoring uh, multiplication. 09:11:42 In fact, if you broaden your definition of "step" enough, anything counts as a step. 09:11:48 shachaf: That's why I clarified to "time". 09:12:11 shachaf: But we can just fix the definition of "step" to something Turing-machiney which has O(1) integer arithmetic, and we'll b done. 09:12:11 in minecraft, n could be boredom. 09:12:12 *be 09:12:19 constant factors could include how prone you are to boredom 09:12:26 but the rate of growth is always factorial for everyone. 09:12:27 :> 09:12:38 O(1) integer arithmetic? 09:13:19 shachaf: People tend to assume that when calculating big-Os. At least in my experience. 09:13:36 people who actually play minecraft just have an enormously tiny constant factor, so they haven't realized they're bored yet. 09:15:14 * kallisti sound maths. 09:15:32 elliott: By the way, huge pages didn't magically make my thing faster. :-( 09:15:43 shachaf: That's because it's NoSQL. Try adding some SQL and it'll be fast. 09:15:57 Who said anything about NoSQL? 09:16:13 Memcache is, like, NoSQL, so you're NoSQL too, so EVERYTHING YOU TOUCH IS NOSQL. 09:16:21 I suppose this program doesn't have any SQL support. 09:16:39 Quite a lot of things are NoSQL, come to think of it. 09:16:46 NoSql could easily be a rip-off band copying NOFX 09:16:48 My toothbrush is NoSQL. 09:16:53 That's why us Brits have such bad dental hygiene. 09:17:22 * elliott is kidding; he doesn't actually have teeth. 09:17:54 I thought it was because you ate limes all day. 09:18:03 limes and tea. 09:18:19 90% of the britons diet. 09:18:21 kallisti: That was the predominant hypothesis before Newton invented science and discovered that what we needed was a good dose of SQL. 09:18:31 lolwat 09:20:00 elliott: Men, remember that it was my citrus laser which protected you from the space scurvy! (I've got that comic in my brain now, thanks to earlier.) 09:20:00 my plan for future success: invent time machine; travel to 90s; invest in promising startups; exploit stupid things like poor input sanitization and javascript validation 09:22:03 other plans: take versions of present day open source software and sell it to somebody for last sums of money (would that even work???) 09:22:11 s/last/vast/ 09:23:06 You could sell the completed Hurd to Stallman in the 80s. 09:23:19 fizzie: no such thing 09:23:53 (haha hurd humor) 09:29:13 candide's ",english", the most useful bot-command ever: http://codepad.org/EaZo3jrm 09:29:18 It translates C code to English. 09:36:30 fizzie: What is that function? 09:36:59 Hey shachaf, take a look at this (probably) GHC bug: http://stackoverflow.com/questions/8531997/adding-ghcis-inferred-type-signature-causes-an-error 09:37:00 It's a brainfuck interp; I just picked something short. 09:37:04 The last line is a punchline 09:37:10 I HEAR YOU'RE A CONNOISSEUR OF THEM. 09:37:38 fizzie: Hey, it turns DeCSS into something legally redistributable... 09:41:27 elliott: Not as good as the one where it deletes your source code. 09:42:13 o.O 09:43:17 ACTION �n����������n�p�@�?����U`>�1�R`>A�.���r��r��r��r��r��r��r��r�p��0s���������@s��t� �?����U`>W1�R`>A�.��Sw�Sw�Sw�Sw�Sw�Sw�Sw�Tw��t���w����������w�y��?����U`>ǰ�R`>A�.���{��{��{��{��{��{��{��{�y��0|���������@| 09:43:23 shachaf: Hi. 09:44:11 Sgeo: "ghc had a bug once where it deleted the source file if it had a type error. Quite sensible, I think." --augustss 09:44:14 I hope that random memory I just pasted didn't have anything confidential in it. 09:44:21 Or the HIPSTER 2011 TWITTER VERSION, http://twitter.com/#!/bos31337/status/116372971509121025. 09:44:27 shachaf: You forgot the terminating one-byte. 09:44:48 Hey, snow. 09:45:20 Unicode snow? 09:45:23 Yes. 09:45:26 IRL. 09:45:28 IRL Unicode snow. 09:45:41 elliott: Note that the [] is apparently superfluous. 09:46:05 elliott: I.e., f' :: a -> F a b; f' a = f a has the same problem. 09:46:34 shachaf: Yikes. 09:46:57 shachaf: Can I quote you on that? 09:47:42 I suppose. 09:47:50 Don't worry, I won't bother attributing it. 09:47:55 :p 09:49:03 "I am never forget the day I first meet the great elliott. In one word he told me secret of success in mathematics." 09:49:28 PRECISELY. 09:49:33 There's REPUTATION at stake here!!!! 09:49:41 I put it in quote marks though, so everyone knows I don't really "believe" it. 09:50:26 -!- elliott has quit (Remote host closed the connection). 09:51:44 Aw, elliott's gone. I was about to tell him I simplified it even further. 09:53:04 @tell elliott type family F a; f :: x -> F a; f = undefined; f' a = f a 09:53:04 Consider it noted. 10:02:04 -!- elliott has joined. 10:02:09 I'm back now. 10:02:09 elliott: You have 1 new message. '/msg lambdabot @messages' to read it. 10:02:12 @messages 10:02:12 shachaf said 9m 8s ago: type family F a; f :: x -> F a; f = undefined; f' a = f a 10:02:17 And HUNGRY FOR REPUTATION. 10:02:49 shachaf: Also, surely you need a type signature on that f' for it to fail. 10:03:02 elliott: I know. 10:04:09 shachaf: Nice tip. I'll do you one better still: type family F a; x, y :: F a; x = undefined; y = x. – Daniel Wagner 1 min ago 10:04:21 I HAVE TO REPUTE FAST AND SHACHAF TOO SLOW 10:04:51 elliott: While you were gone I gave my improvement to dmwit in #haskell. 10:04:58 So really everything here is a derivative work of me. 10:05:07 TRAITOR!!!! 10:05:34 shachaf: (At this point I realise that that guy is dmwit.) 10:05:43 * elliott is a clever, clever person. 10:05:54 elliott: It's OK, he realized that you were ehird a little while before. 10:06:17 I think he realised I'm ehird pretty quickly, seeing as it's right there below my answer. 10:06:40 elliott: When I mentioned "elliott" in IRC, I mean. 10:06:57 shachaf: I think what we can learn from this is to never rely on you for plagiarisation. 10:07:29 @tell shachaf he's a bad person. 10:07:30 Consider it noted. 10:07:36 -!- elliott has quit (Quit: DRAMATIC EXIT). 10:07:50 @messages 10:07:50 elliott said 21s ago: he's a bad person. 10:25:28 -!- Jafet has joined. 10:49:58 -!- elliott has joined. 10:55:00 -!- MSleep has joined. 11:26:39 -!- cheater has quit (Ping timeout: 248 seconds). 11:27:59 -!- cheater has joined. 11:32:42 -!- cheater has quit (Excess Flood). 11:33:55 -!- cheater has joined. 11:36:31 -!- cheater has quit (Excess Flood). 11:36:58 -!- cheater has joined. 11:40:06 -!- Phantom_Hoover has joined. 11:40:41 What,, are,,, the hap 11:40:41 Phantom_Hoover: You have 2 new messages. '/msg lambdabot @messages' to read them. 11:42:26 -!- cheater has quit (Ping timeout: 244 seconds). 11:43:05 -!- cheater has joined. 11:45:00 -!- cheater has quit (Excess Flood). 11:46:11 -!- cheater has joined. 11:50:39 -!- cheater has quit (Ping timeout: 248 seconds). 11:56:22 -!- cheater has joined. 11:59:43 -!- cheater has quit (Excess Flood). 12:01:01 -!- cheater has joined. 12:04:35 -!- cheater has quit (Excess Flood). 12:31:24 Hmm, Christopher Hitchens is dead. 12:31:40 Was he the terrible Hitchens or the— wait both Hitchenses were terrible. 12:39:12 -!- GreaseMonkey has quit (Quit: The Other Game). 12:39:44 -!- Ngevd has joined. 12:40:15 Hello! 12:44:16 GOODBYE 12:44:17 hi 12:58:45 Well, I've started my first BytePusher project 13:01:53 I saw. 13:02:06 It will take a while 13:02:10 BUT IT WILL BE EPIC 13:02:47 Also, it is snowing. 13:03:06 I don't know if you know this, but it is true 13:03:48 No, I live in Finland. 13:03:51 It never snows here. 13:04:56 It's not snowing here :( 13:06:49 Serves you right for not going to Edinburgh from York via Carlisle, Dumfries, and Glasgow 13:09:38 I'm so sorry. 13:09:51 Hang on. 13:10:00 We need ais523 to tell us if that would be legal 13:10:22 Ngevd: You could read the book yourself! 13:10:31 I REFUSE 13:11:04 "Enthusiasts using the routeing guide to identify good value travel often use the two together." BUT WHY 13:14:24 http://blackboardsinporn.blogspot.com/ 13:14:35 a) why is this a thing; b) why is this such an amazing thing 13:15:03 I've seen that site before! I am hipstererer than thou. 13:15:11 (I spend my days googling for blackboards in porn.) 13:16:40 -!- derdon has joined. 13:17:35 "Unfortunately, despite this good academic work, Dr Lagina is entirely unsuited to a career in education due to his surname. It would be no use trying to insist on a different pronunciation such as La-GHEE-na as students of any age will still make cruel remarks – it is little wonder that his detention list is so long. It is a shame that no careers officer ever tried to dissuade him from his current employment path, though he is still young enoug 13:17:35 h to change his vocation. It is either that or change his name: even a teacher should be able to afford the £33 fee for a Deed Poll, though perhaps he has already changed it from something even more embarrassing, like Dr Lesticle, Dr Lyphilis or Nick Clegg." 13:17:36 :D 13:20:30 * Phantom_Hoover wonders if there's a pro-SOPA subreddit. 13:21:44 Phantom_Hoover: Does your contrarianism have no bounds??????????????//////////1111 13:22:15 http://www.reddit.com/reddits/search?q=sopa ;; Well, there's /r/SOPACIRCLEJERK. 13:33:59 -!- sebbu2 has joined. 13:34:00 -!- sebbu2 has quit (Changing host). 13:34:00 -!- sebbu2 has joined. 13:35:59 -!- sebbu has quit (Ping timeout: 255 seconds). 13:42:17 -!- ais523 has joined. 13:42:29 -!- Betawolf33 has quit (Quit: Quick, say something cutting!). 13:42:43 -!- Vorpal has joined. 13:42:53 -!- Betawolf has joined. 13:43:00 -!- Betawolf has left. 13:50:18 hi 13:50:39 Hello! 13:52:42 -!- derdon has quit (Remote host closed the connection). 14:12:16 -!- Ngevd has quit (Ping timeout: 244 seconds). 14:13:50 -!- Patashu has quit (Quit: MSN: Patashu@hotmail.com , Gmail: Patashu0@gmail.com , AIM: Patashu0 , YIM: patashu2 , Skype: patashu0 .). 14:14:01 -!- elliott has quit (Ping timeout: 240 seconds). 14:28:37 -!- pikhq has quit (Ping timeout: 245 seconds). 14:28:43 -!- pikhq has joined. 14:35:44 -!- cheater has joined. 14:38:06 -!- kmc has joined. 14:41:21 -!- cheater has quit (Ping timeout: 252 seconds). 14:45:40 -!- cheater has joined. 14:46:28 -!- cheater has quit (Excess Flood). 14:47:47 -!- Slereah_ has joined. 14:51:40 -!- cheater has joined. 14:51:40 -!- cheater has quit (Excess Flood). 14:52:11 -!- cheater has joined. 14:54:05 -!- cheater has quit (Excess Flood). 14:56:15 -!- cheater has joined. 14:56:23 -!- cheater has quit (Excess Flood). 15:01:16 -!- Ngevd has joined. 15:06:30 now we need to invent an esolang called Single Fifo 15:06:54 it's the most ontopic name a spambot's come up with yet, even if it's not as /funny/ as My name Is Johny, what the F**K??? 15:14:17 -!- cheater has joined. 15:16:23 -!- copumpkin has quit (Quit: Computer has gone to sleep.). 15:19:22 -!- cheater has quit (Ping timeout: 240 seconds). 15:19:22 -!- sebbu2 has changed nick to sebbu. 15:40:02 -!- copumpkin has joined. 15:44:39 -!- kmc has quit (Quit: Leaving). 15:49:02 -!- sebbu has quit (Read error: Connection reset by peer). 15:49:07 -!- kmc has joined. 15:49:27 -!- sebbu has joined. 15:49:27 -!- sebbu has quit (Changing host). 15:49:27 -!- sebbu has joined. 16:19:28 -!- Taneb has joined. 16:20:21 -!- Ngevd has quit (Ping timeout: 240 seconds). 16:20:52 hmm, I just walked out of the office Christmas party, because I didn't understand it 16:21:03 Oh god. 16:21:04 Why. 16:21:16 I, umm, just don't get it 16:21:33 it's like everyone's just turning up and acknowledging that it's a Christmas party 16:21:37 aren't those things meant to have some purpose? 16:23:14 Naw 16:24:31 so why do they happen at all? 16:24:44 it just seems like a huge waste of time and organisation effort for everyone involved 16:24:54 Pretty much 16:25:32 that doens't explain why they hapen 16:25:33 *happen 16:26:39 -!- KingOfKarlsruhe has joined. 16:36:29 -!- Taneb has quit (Ping timeout: 248 seconds). 16:44:25 -!- Ngevd has joined. 16:57:07 -!- MSleep has changed nick to MDude. 16:58:10 -!- Ngevd has quit (Ping timeout: 240 seconds). 16:59:49 -!- Ngevd has joined. 17:07:47 -!- derdon has joined. 17:07:49 ais523: EGGNOG BODY SHOTS WOOOOO 17:07:49 Cobalt comes out sometime today! 17:08:14 Gregor: I don't think it's that sort of Christmas party 17:08:29 ais523: Then MAKE IT that sort of Christmas party! 17:16:17 We just had a free lunch. 17:16:32 Can't say I minded that part. 17:17:07 Though that was for the whole "school" (~1500 employees); the departmental party was more partyish. (I.e. a free dinner instead.) 17:19:33 I've always assumed their main purpose is to be some sort of a collective present from the company/department/organization/whatever to the people, in that they're being given free consumables + someone pays the rent for a place where they can socialize; wasn't aware of any sort of hidden deeper purpose there. 17:20:22 fizzie: there doesn't even seem to be socializing, though 17:20:25 just… noting that people are there 17:21:46 Well, our department party had socializing. Yesterday's lunch not so much, but maybe it was the 600-or-so people who were mostly unfamiliar. On the other hand, it *was* in just the lobby of the building next door, so that one I interpreted as a free lunch coupon from the school. 17:23:45 (I may have a slightly phdcomics-y "free food" focus on events.) 17:23:47 "Yeah, we had a Christmas party. It was on the third floor of a building nearby, in some Real Estate company's office. I didn't recognize anybody there, but the food was good!" 17:24:31 Sadly, it wasn't especially good. 17:24:51 Except for the quality/price ratio, which is easy to get up by providing non-negative-quality food with zero cost. 17:25:45 If the quality was /precisely/ zero though then they ratio would be /NULLITY/ 17:26:54 Sadly our food scientists are unable to obtain absolute zero (aka "the ultimate meh") in food quality yet. 17:29:03 fizzie: there doesn't even seem to be socializing, though 17:29:12 So noöne is talking to anyone else. 17:30:08 they're just leaving one at a time after realising they have no reason to be there 17:30:56 The aisiest party ever. 17:31:34 nah, a party entirely full of me and duplicates of me would go fine 17:31:41 assuming there were actually multiple people there 17:31:49 it wouldn't work too much like normal parties, though 17:52:47 Is jedit usually considered decent? 17:56:15 gah, there are a large number of people in the atrium wielding umbrellas 17:56:28 I think it's connected to the Christmas party somehow, but don't want to delve too deeply into it 17:56:41 Sgeo: it's entirely usable 18:17:50 -!- Ngevd has quit (Ping timeout: 240 seconds). 18:27:59 -!- Ngevd has joined. 18:54:27 @pl \x -> length (filter (\y -> length y == 3) (nub (concat (concat (map subsequences (permutations x)))))) > 0 18:54:27 (> 0) . length . filter ((3 ==) . length) . nub . join . join . map subsequences . permutations 18:58:04 Hmm 18:58:15 pl looks easier to read, I think 18:58:27 Neither of them are what I wanted... 18:58:45 Although I did trip up on the ((3 ==) . length) at first 19:00:02 Some variation of map subsequences (permutations x) should be in the final 19:00:11 But beyond that I just confused myself 19:04:30 @pl \x -> any (15==) $ map sum $ filter ((3 ==) . length) $ nub $ concat $ map subsequences (permutations x) 19:04:30 any (15 ==) . map sum . filter ((3 ==) . length) . nub . join . map subsequences . permutations 19:04:34 Uh 19:04:45 You ... did get a variation of map subsequences (permutations x) 19:05:01 So that is what I wanted 19:05:13 I have no idea what you want, but it's possible. 19:05:37 Somehow, it's for my stupidly complicated naughts and crosses game 19:05:46 (> 0) . length . filter ((3 ==) . length) . nub . join . join . map subsequences . permutations is the same as 19:06:19 \x -> (> 0) . length . filter ((3 ==) . length) . nub . join . join $ map subsequences $ permutations x 19:06:40 I think 19:09:59 ,,,, 19:11:24 you think? 19:14:05 that's a 4D list. 19:14:13 what is it for? 19:14:38 Who are you asking? 19:14:44 relevant persons. 19:15:12 The bit of code happens to be for seeing whether a game of naughts and crosses has been won 19:15:20 ah 19:15:58 so the input is two-dimensional? 19:16:08 :t permutations 19:16:09 forall a. [a] -> [[a]] 19:16:11 :t map subsequences 19:16:12 forall a. [[a]] -> [[[a]]] 19:16:16 oh no 19:16:19 one dimensional. 19:16:21 okay. 19:16:49 or... 19:16:53 SO MANY DIMENSIONS AAAAH 19:17:50 I'm going to guess 2D because that would make sense. :P 19:18:02 The type signature is Num a => [a] -> Bool, I thin 19:18:03 k 19:18:22 yes that's correct. 19:18:41 that's simply because it can work on lists of arbitrary dimension. 19:18:53 but it may not be relevant to what you're trying to solve. 19:20:04 Tic-tac-toe, also called wick wack woe (in some Asian countries) and noughts and crosses (in the UK, Australia, New Zealand, South Africa, India and the rest of the British Commonwealth countries) 19:20:09 I like how US-centric Wikipedia can be. 19:22:39 http://en.wikipedia.org/wiki/Wikipedia:LAME#Spelling 19:27:53 Who was it that was asking me about "classical" composers? 19:28:01 But is also never on while I'm awake. 19:30:54 Chopin is the only clsaasical ocmpostr 19:31:14 ... wow. 19:31:22 I was Chopin for more from you, kallisti 19:31:24 That statement is so bizarre on so many levels. 19:31:34 Ngevd: THAT IS NOT HOW CHOPIN IS PRONOUNCED. 19:32:13 I pronounce it "showpan" 19:32:27 roughly 19:32:56 Showpa(french sound) 19:33:19 And hence, not "hopin'" with a 'c' X_X 19:33:35 Gregor OFFENDED 19:34:07 Gregor: exactly how many levels is my statement bizzare on? 19:34:15 three? 19:34:20 I've got a whole Bach of these 19:34:40 ...... 19:35:15 kallisti: 1) Not a classical composer, 2) not a pre-20th-century composer people usually think of in the top five, making "only" bizarre, 3) "clsaasical", 4) "ocmpostr" 19:35:34 Gregor: I grouped the misspellings into one level. 19:36:11 I like Chopin 19:36:18 but doesn't the Romantic period count as a period of classical music? 19:36:30 kallisti: No, the classical period counts as a period of classical music. 19:36:30 Classical and Romantic are distinct 19:36:46 hmmm, okay. 19:37:31 I think someone else would disagree though. 19:37:41 And they would be wrong 8-D 19:37:48 someone who knew what they were talking about even. As the "classical period" is not the only source of "classical music" 19:37:48 Not all Classical music is classical music 19:38:23 When people group Mozart and Borodin into the same style of music, I respond "well, blues and indy-grunge are basically the same, so I call them both 'modern music'" 19:38:38 yes, that's accurate. 19:38:42 THE VENN DIAGRAM OF MUSIC. 19:39:09 http://www.amazon.co.uk/Venn-That-Tune-Bringing-Poetry/dp/0340955678/ref=sr_1_1?ie=UTF8&qid=1324064329&sr=8-1 19:39:41 I think you could probably make a distinction between Western classical music and classica era music, with "classical music" meaning either the more general or the more specific depending on the context. 19:40:04 +l 19:40:57 if you're in a class about musical history, "classical music" would probably not be how you would describe Romantic period music. 19:41:33 The problem is that part of the reason why people are so quick to dismiss all music more than a hundred years old is that everybody else is so quick to categorize it as one huge group. 19:41:46 Gregor: lame. 19:41:52 As if Rigoletto and Bach's Air on G are one in the same. 19:42:09 everyone knows Bariouqe is teh only clsaasical 19:42:14 X-D 19:43:05 incidentally, I've taken a liking to a lot of "very very new" "classical" music. 19:43:37 I think they call it like "alt classical" or something? 19:43:41 something silly like that. 19:44:22 I've heard the terms "neo-classical" and "modern classical" (which are both weird) 19:45:32 I think this is even newier 19:45:41 How 'bout modern classical-influence neo-jazz fusion (lol I'm putting so many nonsense words here) 19:45:52 neo-jazz fusion? definitely not. 19:45:59 http://erictheallen.com/music/Contrafunktus.mp3 19:46:14 I think you're just genre pretentious. GOSH I fucking hate those people. 19:46:32 (see: electronic music genre pretentious earlier) 19:46:36 I'm mostly just inventing words here :P 19:47:08 Gregor: well no, that's not where the pretentiousness arises. It's the insistence that "classical" refers to a specific historical period in absolutely all contexts 19:47:12 so "modern classical" is impossible. 19:47:18 or something. 19:48:11 in much the same way that I think people use "techno" when they really mean "electronic music" 19:48:34 the difference being that I'm totally right. :P 19:49:55 I see you have no comment on my link though :P 19:50:55 There's gotta be an easier way to do what I'm trying to do 19:50:56 oh I was too busy being right, I stopped paying attention to everyone else. 19:50:58 * kallisti clicks. 19:51:50 Ngevd: what kind of possible inputs do you have for your problem? 19:52:14 Subsets of [1..9] 19:52:17 Gregor: noice 19:52:23 But not that problem 19:52:33 It's making that thing useful 19:52:39 Ngevd: so this is a theoretical problem and not part of something more practical? 19:52:46 oh 19:52:49 okay. 19:52:57 Wait, OF COURSE 19:53:00 kallisti: That's a friend of mine whose current career is "trying desperately to be noticed in New York" :P 19:53:04 Of course? 19:53:05 YES 19:53:10 Gregor: sounds difficult. 19:53:10 It's surprising just how unmoonlike the far side of the moon looks. 19:53:18 I just need some sort of version of Either that has three things 19:53:31 :D 19:53:33 Either a (Either b c) :P 19:53:44 kallisti, perfect. 19:53:53 or you know, like, an ADT. 19:54:09 Actually, even better, Maybe (Either Piece Piece) 19:54:10 I've read those are useful. 19:54:15 * Phantom_Hoover didn't remember if disjoint union was associative for a second there. 19:54:28 Or Maybe (Either Int Int) 19:56:10 Gregor: "eric the allen"? 19:56:45 Oh, hey, Cobalt is out 19:56:50 kallisti: Eric [of] the [house of] Allen :P 19:57:17 -!- zzo38 has joined. 19:57:17 kallisti: Which of course is ultimately just his name, with "the" in the middle because all other combinations of domain names were taken. 19:57:24 okay.. 19:57:45 kallisti: It has more relevance to his name than codu.org has to mine :P 19:57:50 Ngevd: are you making a tic tac toe AI? 19:58:02 kallisti, that would be easier 19:58:20 Gregor: codu is pretty catchy though it could easily be a business name 19:58:30 kallisti, I'm just making a game 19:58:41 Ngevd: a game of tic tac toe? 19:58:49 Gregor: though I pronounce it as "code you" 19:58:55 kallisti, NO 19:59:12 Naughts and Crosses, for I is a citizen of two different commonwealth countries 19:59:28 uh.. 19:59:33 chances are you don't need subsets of anything. 19:59:36 to code that. I would think. 20:00:24 Yeah, but I'm crazyu 20:00:46 @pl \xs -> lefts (filter isJust xs) 20:00:46 lefts . filter isJust 20:00:52 and don't really understand (.) 20:00:56 lol 20:01:04 think of it as like... 20:01:05 Gregor: though I pronounce it as "code you" // heh, I just pronounce it co-du, though code-you is better :P 20:01:08 function composition. :p 20:01:18 Gregor: less accurate though. 20:01:24 co-du makes way more sense. 20:01:29 given the spelling. 20:01:51 I pronounce it Code ooh 20:01:59 Code! Oooooooh 20:02:02 lol 20:02:10 @pl \xs -> has_won (lefts (filter isJust xs)) 20:02:11 has_won . lefts . filter isJust 20:02:20 Ngevd: ....really? 20:02:23 Yup 20:02:52 Ngevd: imagine you have like.... functions 20:02:58 now you want the output of one to be the input of another. 20:03:12 and you want the result of this combination to be A NEW FUNCTION 20:03:16 bam! function composition! 20:03:19 +_+ 20:03:35 Hold on, Scrabble time 20:04:31 :t isLeft 20:04:32 Not in scope: `isLeft' 20:04:40 @hoogle Either a b -> Bool 20:04:40 Data.Graph.Inductive.Basic hasLoop :: Graph gr => gr a b -> Bool 20:04:40 Data.Graph.Inductive.Query.DFS isConnected :: Graph gr => gr a b -> Bool 20:04:40 Data.Graph.Inductive.Graph isEmpty :: Graph gr => gr a b -> Bool 20:04:41 f x = a $ b $ c $ d x is the same as f x = a . b . c $ d x is the same as f = a . b . c . d if that helps 20:05:12 Having elliott yell at me for using the first one helped me learn that >.> 20:05:13 :t lefts 20:05:13 forall a b. [Either a b] -> [a] 20:05:38 Sgeo: either usage is fine, honestly. obviously you want to use function composition when writing pointfree though 20:05:54 @source (.) 20:05:54 (.) not available 20:06:07 @source Prelude.. 20:06:07 Prelude.. not available 20:06:13 oh, hm. 20:07:41 -!- Ngevd has quit (Ping timeout: 240 seconds). 20:07:46 -!- monqy has joined. 20:08:01 monqy: hi 20:08:09 hi 20:08:28 I think it can make for other m (Either a b) -> m a (>>= either return (const mzero)) 20:09:02 @source . 20:09:03 . not available 20:09:11 @source (Prelude..) 20:09:11 (Prelude..) not available 20:09:30 :t f Prelude.. x 20:09:31 Couldn't match expected type `a -> b' against inferred type `Expr' 20:09:31 In the second argument of `(GHC.Base..)', namely `x' 20:09:31 In the expression: f GHC.Base.. x 20:09:34 :t f Prelude.. g 20:09:35 @tell Ngebd COME BACK I HAVE SOMETHING IMPORTANT TO SAY. 20:09:35 Consider it noted. 20:09:35 Ambiguous type variable `b' in the constraints: 20:09:35 `Show b' arising from a use of `f' at :1:0 20:09:35 `SimpleReflect.FromExpr b' 20:09:42 :t f . g 20:09:43 forall a b (f :: * -> *). (Show a, SimpleReflect.FromExpr b, SimpleReflect.FromExpr (f a), Functor f) => f b 20:09:47 Hmm, that's weird 20:09:57 Sgeo: . is fmap in lambdabot 20:10:07 Oh 20:10:21 -!- Phantom_Hoover has quit (Ping timeout: 240 seconds). 20:10:22 > f . [1..] 20:10:23 Ambiguous type variable `b' in the constraints: 20:10:23 `SimpleReflect.FromExpr ... 20:10:30 > f . [1..] :: [Expr] 20:10:32 [f 1,f 2,f 3,f 4,f 5,f 6,f 7,f 8,f 9,f 10,f 11,f 12,f 13,f 14,f 15,f 16,f 1... 20:10:34 @unpl (.) 20:10:35 (\ a b c -> a (b c)) 20:11:22 Sgeo: though really I think it should be (.) from Category 20:12:09 we already have <$> for fmap and it looks quite nice. 20:12:47 @tell Ngevd f x = a $ b $ c $ d x is the same as f x = a . b . c $ d x is the same as f = a . b . c . d if that helps Having elliott yell at me for using the first one helped me learn that >.> 20:12:47 Consider it noted. 20:13:53 Yes <$> for fmap is better. Since you can use . for category morphism composition 20:14:18 also <$> has the $ which implies function application, which is how fmap is typically uses. 20:15:14 @tell Ngevd also lefts (filter isJust xs) isn't going to work because xs is still a list of Maybes after filtering. 20:15:14 Consider it noted. 20:16:04 @hoogle [Maybe a] -> a 20:16:05 Data.Maybe catMaybes :: [Maybe a] -> [a] 20:16:05 Data.Maybe fromJust :: Maybe a -> a 20:16:05 Control.Monad msum :: MonadPlus m => [m a] -> m a 20:16:15 @tell Ngevd Is the same as f x = a . b . c . d $ x 20:16:15 Consider it noted. 20:16:16 oh hmmm I thought catMaybes would return a 20:16:31 @tell Ngevd use catMaybes :: [Maybe a] -> [a] instead 20:16:32 Consider it noted. 20:16:38 @teel Ngevd AAAAAAAH SO MANY MESSAGES 20:16:38 Consider it noted. 20:16:57 And then lambdabot crashes. 20:17:08 -!- Phantom_Hoover has joined. 20:17:18 @lastspoke Phantom_Hoover 20:17:18 Unknown command, try @list 20:17:43 -!- derrik has joined. 20:21:22 Should it be fixed to work with other monads too? Such as, instead of only list monad it can work other MonadPlus as well. 20:22:09 zzo38: that would make it much more inefficient for the list case I believe. 20:22:57 zzo38: also what are you using MonadPlus for? 20:23:21 you'd want Functor I think. 20:23:32 or... 20:23:35 kallisti: MonadPlus in case you need to use mzero, and you also need join 20:23:38 Functor and MonadPlus? 20:24:26 :t join 20:24:27 forall (m :: * -> *) a. (Monad m) => m (m a) -> m a 20:24:34 zzo38: what do you need join for 20:24:39 catMaybes = (>>= maybe mzero return); lefts = (>>= either return (const mzero)); 20:25:02 Note that >>= combines join with fmap 20:25:06 join = (>>= id) 20:25:10 ah yes. 20:25:17 cool. 20:25:41 @src catMaybes 20:25:41 catMaybes ls = [x | Just x <- ls] 20:26:21 -!- oerjan has joined. 20:26:22 :t either 20:26:23 forall a c b. (a -> c) -> (b -> c) -> Either a b -> c 20:26:23 hmm, I guess that's equivalently efficient. 20:26:42 -!- sebbu2 has joined. 20:26:42 -!- sebbu2 has quit (Changing host). 20:26:42 -!- sebbu2 has joined. 20:28:31 fmap f = (>>= return . f) 20:28:36 x >>= f = join $ fmap f x 20:29:41 -!- sebbu has quit (Ping timeout: 240 seconds). 20:35:37 * elliott is trying to point-free: f x y z = g (h x) (h y) (h z) 20:36:01 http://boards.trutv.com/showthread.php?14444-seth-gold-is-hot!!! 20:36:29 :t \x -> ?g (?h x) `on` ?h 20:36:30 oerjan: with lambdabot around, why is that hard? 20:36:30 forall b c a. (?h::a -> b, ?g::b -> b -> b -> c) => a -> a -> a -> c 20:36:51 ais523: because the @pl result looks awful 20:37:12 @pl lacks many of the more subtle methods 20:37:41 :t on 20:37:42 forall b c a. (b -> b -> c) -> (a -> b) -> a -> a -> c 20:38:05 what he really needs is some kind of on3 20:38:12 yep 20:38:25 :t on ?h . ?g . ?h 20:38:25 forall b c a. (?h::b -> b -> c, ?g::(b -> c) -> a -> b) => b -> a -> a -> c 20:38:56 maybe I'm missing something here... 20:39:43 well a flip in front of on, to start 20:39:56 oh 20:39:59 :t flip on ?h . ?g . ?h 20:40:00 forall c a a1. (?h::a -> a1, ?g::a1 -> a1 -> a1 -> c) => a -> a -> a -> c 20:40:07 is that equivalent? 20:40:11 to what you just wrote? 20:40:14 i think so 20:40:38 oerjan: you and elliott should devise a pointfree library. :3 20:40:40 with an on3! 20:41:09 i vaguely think i made a recursive onN sort of thing in a previous discussion 20:41:22 -!- zzo38 has quit (Remote host closed the connection). 20:44:52 \x y z -> g (h x) (h y) (h z) = \x y -> g (h x) (h y) . h = \x y -> on g h x y . h 20:45:08 @pl \x y -> on g h x y . h 20:45:08 flip flip h . ((.) .) . on g h 20:45:19 bah 20:47:17 :t \x y z -> foldl (. ?h) ?g [x,y,z] 20:47:18 Occurs check: cannot construct the infinite type: a = a1 -> a 20:47:18 Expected type: a 20:47:18 Inferred type: a1 -> a 20:47:22 eek 20:47:36 oh well 20:50:01 How about dup and swap? 20:50:13 cleave 20:50:16 etc 20:50:19 All the Factor stuff 20:50:22 Can that be done? 20:50:59 fsvo done 20:51:19 it's not like haskell naturally is about stacks 20:51:36 or concatenative 20:51:59 I want a function f, such that (+) . f :: (Num a) => a -> a 20:52:17 Why don't I say dup instead of f 20:52:18 :t (+) . ?f 20:52:18 forall a (f :: * -> *). (Num a, ?f::f a, Functor f) => f (a -> a) 20:52:28 oerjan, huh? 20:52:35 :t (+) Prelude.. ?f 20:52:36 forall b a. (Num b, ?f::a -> b) => a -> b -> b 20:52:39 Sgeo: join (+) 20:52:43 or uh 20:52:45 wait i forget ugh 20:52:57 Lemme solve for the types 20:52:59 been a long time since i did that sort of thing 20:53:10 :t (.) 20:53:11 forall a b (f :: * -> *). (Functor f) => (a -> b) -> f a -> f b 20:53:12 oops 20:53:15 :t (Prelude..) 20:53:16 forall b c a. (b -> c) -> (a -> b) -> a -> c 20:53:18 :t join (+) 20:53:18 forall a. (Num a) => a -> a 20:53:25 > join (+) 5 20:53:26 10 20:53:28 monqy, that's not quote what I want, though 20:53:31 quite 20:53:39 Sgeo: i just did, and there is no solution 20:53:45 o.O 20:54:20 -!- variable has quit (Quit: I found a 1 /dev/zero). 20:54:24 you cannot get around the fact that (+) . f will still be a function of two arguments 20:54:35 Sgeo: uncurry (+) . (id &&& id) 20:55:11 > uncurry (+) . (id &&& id) $ 5 20:55:13 10 20:55:43 basically, (.) does _not_ access all the arguments of its first argument, only the first, so there's no way to use it to treat its first argument as taking a stack. 20:56:38 :t join 20:56:38 forall (m :: * -> *) a. (Monad m) => m (m a) -> m a 20:56:58 :t join.($) 20:56:58 forall a a1. (a1 -> a1 -> a) -> a1 -> a 20:56:59 * Sgeo whats at monqy's join example 20:57:03 :t join :: (a -> a -> b) -> a -> b 20:57:04 forall a b. (a -> a -> b) -> a -> b 20:57:38 -!- Ngevd has joined. 20:57:46 * Sgeo ducks for cover 20:57:56 all brace for the hello 20:58:56 there seems to be a malfunction 20:59:02 `? welcome 20:59:10 Welcome to the international hub for esoteric programming language design and deployment! For more information, check out our wiki: http://esolangs.org/wiki/Main_Page 21:00:02 * oerjan looks suspiciously at ais523 21:00:22 ais523 is clearly new to this community. 21:00:37 sgeo: what's so scary about my join example 21:01:03 monqy, I guess I wasn't thinking of functions as a monad 21:01:14 Although I guess they are. Still not intuitive for me though. 21:01:37 iirc it's the same as Reader 21:02:14 all you need to know for join is: join f = \ a -> f a a 21:03:20 Ngevd: hmmm apparently lambdabot is not informing you of MESSAGES? 21:03:21 and iirc fmap f g = f . g 21:03:28 monqy: yes 21:03:44 kallisti: this _might_ be related to the fact Ngevd isn't speaking. 21:03:55 oerjan: oh I thought it informed people when they joined. 21:03:59 no[e 21:04:13 I've never had to use >>= so I've forgotten what it does intuitively :( 21:04:15 okY 21:04:28 f >>= g = f (g x) x 21:04:31 I believe 21:04:35 er 21:04:40 f >>= g x = f (g x) x 21:04:45 f >>= g $ x = f (g x) x 21:04:46 :P 21:04:53 \x -> 21:05:03 ?src >>= -> 21:05:04 Source not found. And you call yourself a Rocket Scientist! 21:05:04 lambdas are for chumps. 21:05:08 ?src -> >>= 21:05:08 Source not found. Take a stress pill and think things over. 21:05:13 ?src (->) (>>=) 21:05:14 f >>= k = \ r -> k (f r) r 21:05:51 kallisti: WRONG!!!!!!!!!!!!!!!!!!!!111111111111111111ELEVEN 21:06:16 oh 21:06:17 indeed 21:06:27 I think f (g x) x is ap right? 21:06:38 ap is whatever S is 21:06:43 i always forget it :( 21:06:45 kallisti: WRONG!!!!!!!!!!!!!!!!!!!!111111111111111111ELEVEN 21:06:49 and pure is const 21:06:52 i.e. k 21:06:56 f x (g x) 21:06:57 is ap 21:07:21 mhm 21:08:06 so >>= is like ap but turnways. 21:08:11 wh 21:08:31 sure 21:12:17 -!- Ngevd has quit (Read error: Connection reset by peer). 21:15:16 monqy: http://www.mspaintadventures.com/sweetbroandhellajeff/?cid=010.jpg 21:15:59 yes i know 21:17:15 g (f x) x vs. f x (g x) 21:17:42 if that isn't turnways I don't EVEN know what it is. 21:18:49 -!- derrik has quit (Read error: Connection reset by peer). 21:21:41 :t flip ap 21:21:42 forall (m :: * -> *) a b. (Monad m) => m a -> m (a -> b) -> m b 21:22:29 :t flip ap . flip 21:22:30 forall b (f :: * -> *) a b1. (Functor f) => f (a -> b1) -> (a -> f b1 -> b) -> a -> b 21:22:53 :t flip ap Prelude.. flip 21:22:54 forall b (f :: * -> *) a b1. (Functor f) => f (a -> b1) -> (a -> f b1 -> b) -> a -> b 21:23:06 :t flip ap . Prelude.flip 21:23:06 forall b a b1 c. (a -> b1 -> c) -> (b1 -> (a -> c) -> b) -> b1 -> b 21:25:05 \f g x -> g (f x) x = \f g x -> flip g x (f x) = \f g -> ap (flip g) f = flip (ap . flip) 21:25:11 :t flip (ap . flip) 21:25:12 forall a b a1. (a1 -> a) -> (a -> a1 -> b) -> a1 -> b 21:25:25 woo 21:25:27 :t (>>=).($) 21:25:28 forall a b a1. (a1 -> a) -> (a -> a1 -> b) -> a1 -> b 21:26:08 :t flip ((>>=) . flip) 21:26:09 forall b (f :: * -> *) a b1. (Functor f) => (f b1 -> a -> b) -> f (a -> b1) -> a -> b 21:26:20 flippity floppity floo 21:26:24 -!- Klisz has joined. 21:26:25 :t ap.($) 21:26:25 forall a b a1. (a1 -> a -> b) -> (a1 -> a) -> a1 -> b 21:26:38 hm that's not quite right 21:26:50 :t flip (>>=) . flip 21:26:51 forall (m :: * -> *) a b. (Monad m, Functor m) => m (a -> b) -> m a -> m b 21:27:19 <*>? :P 21:27:25 oh hm that's actually _general_ ap 21:27:51 given sufficient caleskell 21:27:57 heh 21:28:32 :t Prelude.flip (>>=) Prelude.. flip 21:28:33 forall (m :: * -> *) a b. (Monad m, Functor m) => m (a -> b) -> m a -> m b 21:28:45 :t Prelude.flip (>>=) Prelude.. Prelude.flip --too little 21:28:46 forall a b a1. (a1 -> a -> b) -> (a1 -> a) -> a1 -> b 21:29:28 http://www.guardian.co.uk/science/blog/2009/mar/02/god-particle-peter-higgs-portrait-lhc 21:29:33 This is the best portrait. 21:29:34 :t flip . flip 21:29:34 forall a b a1. (a -> a1 -> b) -> a -> a1 -> b 21:29:50 I like all the blue glowy lines around his head. 21:30:11 It reminds me of that bit in Fine Structure where — oh wait future elliott. 21:30:20 :t flip 21:30:20 forall (f :: * -> *) a b. (Functor f) => f (a -> b) -> a -> f b 21:31:13 only for functions is caleskell flip its own inverse 21:31:48 I'm guessing that's what the higgs boson looks like? 21:32:42 -!- augur has quit (Remote host closed the connection). 21:34:12 i'm guessing that's supposed to be a collision diagram from a particle accelerator 21:38:50 IT'S, LIKE, A LAMBDA *INSIDE* A LAMBDA! <-- BRUIJNCEPTION 21:39:25 Good old De Bruijndices. 21:44:37 we also have single fifo, animated chatrooms, bbw dating north dakota, dating program <-- i suspect we are just going to give up fighting the spam and turn the wiki into a spam appreciation site. 21:48:16 -!- Ngevd has joined. 21:48:21 Hello! 21:48:21 Ngevd: You have 5 new messages. '/msg lambdabot @messages' to read them. 21:48:33 Wow, messages, me? 21:51:52 Ngevd: yes you're special. 21:52:04 Wow 21:52:14 Also, I won at that game of Scrabble 21:52:19 good! 21:52:38 Even low I was below 50 when the person who would eventually lose broke the hundred (he had a good start) 21:52:40 now you can go fix your haskell program in the way that I described. :) 21:53:04 Has anyone got Cobalt? 21:53:20 no what's that 21:53:50 A new game that's being somethinged by the company that makes Minecraft 21:54:04 lol 21:54:05 okay 21:54:58 oh hm, it looks pretty fun 21:56:00 -!- Klisz has quit (Quit: You are now graced with my absence.). 21:56:52 -!- Klisz has joined. 21:57:53 * kallisti wants to play a game that's a sort of mixture between Magicka and Demons' Souls. 21:58:21 a somewhat complex magic system. a strategic, fast-paced action RPG. 21:59:14 Hold on a second 21:59:18 I don't need the Maybes 22:00:23 Ngevd: I'm guessing the eithers represent the two different players? 22:00:27 Yes 22:00:40 what does the inner-type represent? 22:00:42 The Maybe would have represented empty squares 22:00:51 Sounds like you may want Maybe Bool 22:01:04 True = x, False = o, Nothing = empty 22:01:26 Clever plan: Left n = square n is x, Right n = square n is o. 22:01:31 No need for Maybe 22:02:40 oh okay 22:03:12 What's a cool type for the internal "Sorry, that square is full, ask for another square" message? 22:03:28 well if you had. 22:03:34 Map Int (Maybe Bool) 22:03:36 er 22:03:38 Map Int Bool 22:03:39 I mean 22:03:51 then a lookup on the Map would return a Maybe Bool 22:04:03 so you could just test on that. 22:04:20 if it's Nothing, you can place a mark, if it's Just _ then you can't 22:04:30 Clever idea! 22:04:40 Essentially the opposite of what you just said! 22:04:46 a "cool type" for the error message would be String. A cool type to send an error message would be IO. :P 22:04:54 Ngevd: oh? 22:05:12 Nothing = not good enough, try again 22:05:20 that doesn't make any sense. 22:05:25 Just (Either Int Int) = brilliant, here's the new board 22:05:32 wat 22:05:42 I think Map Int Bool would be easier honestly. 22:05:59 and you could turn it into a [Either Int Int] if you needed. 22:06:50 but if you've got a good idea, don't let me stop you. :> 22:06:54 -!- KingOfKarlsruhe has quit (Quit: ChatZilla 0.9.87 [Firefox 8.0/20111104165243]). 22:07:34 Ngevd: because the key piece of data you have is the square I assume. 22:07:41 Ngevd: with the list you have to search through the list 22:07:49 with the Map you can just lookup via the integer. 22:08:02 It's a list with maximum length of 9 22:08:16 well yes, it's not difficult to search through. 22:08:34 If searching through the list is going to be a serious problem, I recommend you get a new computer and a new Haskell compiler 22:08:46 I was referring to conceptual simplicity. :P 22:08:49 But a Map could be really good for my other project... 22:08:52 not a problem of efficiency, really. 22:12:01 placePiece m i p = maybe (insert i p m) (const m) (lookup i m) 22:12:20 m is the Map Int Bool, i is the Int, p is the player (True or False) 22:12:57 of course you'll probably want more logic than that. 22:13:06 because that doesn't tell you whether or not the board changed. 22:13:16 it just leaves it alone if it didn't change. 22:14:11 you could have it return an IO (Map Int Bool) instead or something. 22:14:24 with the error case sending a message to the player. 22:16:24 is it a text-based interface? 22:16:29 or something more complicated? 22:16:37 Haven't actually done the interface yet 22:16:46 what do you plan for it to be? 22:16:54 Probably text 22:17:17 :t lookup -- the list version also exists 22:17:18 forall a b. (Eq a) => a -> [(a, b)] -> Maybe b 22:17:22 then yes placePiece :: Map Int Bool -> Bool -> Int would work 22:17:28 oerjan: indeed. 22:17:31 but MAPS ARE SO MUCH COOLER. 22:17:36 /trees/ man. 22:18:00 yeah but at 9 elements its quite plausible that lists are actually faster, isn't it? 22:18:06 > logBase 2 9 22:18:06 3.1699250014423126 22:18:11 oerjan: nah man never. 22:18:22 NEVER 22:18:24 NOT IN ANY CASE 22:18:28 THERE IS NO SCENARIO 22:18:30 (lies) 22:18:35 just like bubble sort actually wins over quicksort if the array is short enough 22:18:57 oerjan: but you're not thinking about scalability. Maybe Ngevd wants a 1 million square game of tic-tac toe. 22:19:03 eventually 22:19:07 THE REQUIREMENTS CHANGE. 22:19:11 plausible. 22:19:15 best to go with the one with the best growth factor. 22:19:33 kallisti: ah but then you need larger pointers 22:20:05 hm? 22:20:07 lest your solution runs out of them before filling the entire universe 22:20:33 Ngevd: if you'd rather maintain purity then you could return an Either String (Map Int Bool) instead 22:20:47 Ngevd: or Either String [Either Int blah blah blah dumb 22:20:49 :P 22:20:58 also, http://xkcd.com/865/ 22:21:17 What I really want is something like elemBy 22:21:41 :t any 22:21:41 forall a. (a -> Bool) -> [a] -> Bool 22:21:43 :t all 22:21:43 forall a. (a -> Bool) -> [a] -> Bool 22:21:53 any is good 22:23:06 @hoogle Either a a -> a 22:23:07 Data.Either rights :: [Either a b] -> [b] 22:23:07 Data.Either lefts :: [Either a b] -> [a] 22:23:07 Data.Typeable typeOf2 :: Typeable2 t => t a b -> TypeRep 22:23:33 ah I guess no one would need something so silly except Taneb. 22:23:38 >:) 22:23:56 Ngevd: if your elements are ((Int,Int),Bool) then lookup is perfect. 22:24:07 they're Either Int Int 22:24:28 which is isomorphic to (Int, Bool) 22:24:29 or (Int, Bool) equivalently 22:24:30 yes 22:24:35 What I'm probably going to stick with is taken n = any (\x -> Left n == x || Right n == x) 22:24:41 Because I am crazy 22:24:57 ....WHY 22:25:00 And pl'ing that is crazy 22:25:10 map is so much easier... 22:25:13 *Map 22:25:15 @pl \n -> any (\x -> Left n == x || Right n == x) 22:25:16 any . ap (ap . ((||) .) . (==) . Left) ((==) . Right) 22:26:02 Ngevd: (Int, Bool) would probably be easier as well 22:26:07 as then you could just ignore the Bool element 22:26:09 I DON'T CARE 22:26:15 instead of dealing with the Left and Right constructors 22:26:32 Ngevd: okay. 22:27:07 :t join either . (==) 22:27:08 forall a. (Eq a) => a -> Either a a -> Bool 22:27:32 That works too 22:28:04 Except no 22:28:05 oerjan: fancy 22:29:21 Ngevd: the list /might/ end up being easier to work with when you have to compute a win. 22:30:21 -!- MDude has quit (Ping timeout: 240 seconds). 22:32:23 There's probably thousands of different ways of doing this, each with its own merits 22:32:33 but not really because you just generate a list of winning configurations, and then use any (`isSubmapOf` board) 22:32:34 -!- augur has joined. 22:32:50 I'm going to continue with the way I've got half a program to 22:34:43 (the "winning configurations" meaning the 4 different ways to win * the 2 players, not literally every possible winning configuration as that would be crazy slow) 22:38:25 well actually no it wouldn't be that slow. 22:38:44 I was confusing ending positions with possible games. 22:39:02 > 91 + 44 22:39:03 135 22:39:11 is the number of winning positions. 22:39:22 and 3 draws. 22:39:25 > 3^9 22:39:26 19683 22:39:43 > product [1..9] 22:39:44 362880 22:40:00 Number of possible games 22:40:12 not quite. 22:40:37 Niave upper bound for the number of possible games 22:40:45 yes. 22:41:15 "Naive"? 22:41:33 it doesn't take into account that the game /stops/ when you win. 22:41:40 It's an upper bound, aren't all upper bounds of things that can in principle be calculated exactly "naive"? 22:41:52 some can be more naive than others. 22:42:16 Positive infinity is a perfectly accurate upper bound for most things 22:43:29 Ngevd: how do you currently calculate wins? with the permutations thing? 22:43:36 Yes 22:43:40 It uses a magic square 22:44:09 also, 19683 is an upper bound on the number of board positions. 22:44:40 which means you could quite plausibly store them all. 22:44:41 Gonna play Cobalt now 22:44:58 Is Graham's Number naive? 22:45:08 in this case, yes. 22:45:23 well, maybe more like "dumb" :P 22:45:24 worst approximation to 6^H11 ever 22:45:59 Sgeo: oh nevermind 22:46:21 I thought you were asking if Graham's number was a naive upper bound to the number of possible games or something else we were talking about. 22:46:51 sorry, 13. 22:48:00 I'm not even sure why I am doing this 22:49:04 Ngevd: me neither 22:49:24 I could be doing something actually useful to my education and wellbeing rather than make a silly game 22:49:30 Sillily 22:50:21 Now, if I moved to a certain island group, I'd be the silly silly game developer of Scilly 22:53:34 Ngevd: I would be able to take your game more seriously if it used better data structures. 22:53:38 I can't get Cobalt to run 22:53:43 :~( 22:53:48 (is not serious, btw) 22:54:11 Ngevd: what platforms is it available on? 22:54:29 Windows 22:54:38 Coming soon for Mac and Linux 22:54:43 Apparently it works in Wine? 22:55:00 Got it working, maybe 22:59:48 !perl $x=3;$x=3**($x%10**50)for1..500;print$x 22:59:50 Bareword found where operator expected at /tmp/input.15721 line 1, near ")for1" 22:59:56 !perl $x=3;$x=3**($x%10**50)for 1..500;print$x 22:59:57 nan 23:00:18 !perl use integer;$x=3;$x=3**($x%10**50)for 1..500;print$x 23:00:18 1 23:00:20 .. 23:00:32 oh 23:00:40 !perl use integer;$x=3;$x=3**$x%10**50for 1..500;print$x 23:00:41 0 23:02:26 > iterate (\x -> 3^x `mod` 10^50) 3 !! 500 23:02:31 mueval: ExitFailure 1 23:02:31 mueval: Prelude.undefined 23:02:37 oops 23:02:47 oerjan: (^) is slow and stuff 23:03:00 not really 23:03:15 it's slower than (**) isn't it? 23:03:20 but the numbers get huge _before_ you mod them 23:04:06 ** is not exact, so obviously 23:04:11 > 5 ** 5000 23:04:12 Infinity 23:04:21 > 5^5000 23:04:21 :P 23:04:22 707981126104817289238561515869405755294754851033943135872983022354636725918... 23:04:37 > 5 ** 5000 :: CReal 23:04:41 707981126104817289238561515869405755294754851033943135872983022354636725918... 23:04:50 SO MUCH FASTER SEE? 23:04:57 >_> 23:05:50 > x ** 4 23:05:51 x**4 23:05:58 i assume you are trying to calculate the final digits of graham's number as described on wp 23:06:04 yes 23:06:25 i don't think it is quite as simple as that though 23:06:47 -!- ais523 has quit (Remote host closed the connection). 23:06:55 afair i did it myself once 23:07:08 Gonna play Cobalt now 23:07:10 It's out? 23:07:29 -!- DCliche has joined. 23:08:17 > scanl (*3) 1 23:08:18 Occurs check: cannot construct the infinite type: a = b -> a 23:08:28 > iterate (*3) 1 23:08:29 [1,3,9,27,81,243,729,2187,6561,19683,59049,177147,531441,1594323,4782969,14... 23:08:37 `run dc -e '[3z202>xO200^|]dsxxrp' 23:08:55 the thing is, there isn't actually any pattern if you just do 3^x, it has to be 3^3^x 23:09:07 or something like that 23:09:08 No output. 23:09:37 `run dc 0e ;dc -e '[3z202>xO200^|]dsxxrp' 23:09:42 > iterate (^3) 3 23:09:43 er 23:09:43 [3,27,19683,7625597484987,443426488243037769948249630619149892803,871896424... 23:10:03 > map (`mod` 10^10) $ iterate (^3) 3 23:10:06 `run dc -e '3[3rAz^|dz202>x]dsxxAz3-^%p' 23:10:08 mueval: ExitFailure 1 23:10:08 mueval: Prelude.undefined 23:10:09 dc: Could not open file 0e 23:10:12 eek 23:10:18 > take 10 . map (`mod` 10^10) $ iterate (^3) 3 23:10:20 [3,27,19683,5597484987,9149892803,5225665627,1838846883,6369147387,94380896... 23:10:27 ok even that doesn't work 23:10:38 No output. 23:10:54 anyway those programs work on my computer 23:10:57 they just timeout on hackego 23:11:02 -!- Klisz has quit (Ping timeout: 252 seconds). 23:11:59 Why did it hit undefined? 23:12:05 -!- copumpkin has quit (Quit: Computer has gone to sleep.). 23:12:28 Sgeo: dunno, something going wrong when it times out, i assume 23:14:42 -!- Ngevd has quit (Ping timeout: 252 seconds). 23:14:49 > 21*60 23:14:50 1260 23:15:48 oh hm it says on wp that algorithm is actually correct 23:16:43 > iterate (\x -> 3^x `mod` 10^50) 3 !! 50 23:16:48 mueval: ExitFailure 1 23:16:49 mueval: Prelude.undefined 23:16:54 > iterate (\x -> 3^x `mod` 10^10) 3 !! 10 23:16:59 mueval: ExitFailure 1 23:16:59 mueval: Prelude.undefined 23:17:04 darn 23:17:09 > iterate (\x -> 3^x `mod` 10^10) 3 !! 10 23:17:14 mueval: ExitFailure 1 23:17:14 mueval: Prelude.undefined 23:17:58 @hoogle modpow 23:17:58 No results found 23:18:02 @hoogle powmod 23:18:02 No results found 23:18:36 http://en.wikipedia.org/wiki/Vampire_number 23:18:43 I don't really get the point' 23:19:10 http://www.reddit.com/r/AskReddit/comments/nepda/whats_something_you_found_so_pretentious_that_it/c38i4ay 23:19:16 I wish I had taken art. 23:20:18 why? so you could spend lots of money on useless classes? 23:20:29 No, so I could study Dr McNinja. 23:21:23 Oh god now I remember that I *still* haven't read the fourth book of The Sandman, about two years after I read the first. 23:21:37 -!- PiRSquared17 has joined. 23:22:29 * kallisti has never heard of this so-called Dr. McNinja 23:22:33 * kallisti googles. 23:22:39 * kallisti awe 23:22:42 -!- Vorpal has quit (Ping timeout: 276 seconds). 23:23:25 oh god this is beautiful what is this. 23:24:14 "we'll talk once your ghastronaut buddy shows up and gets stuffed on holy knuckle cheeseburgers" 23:24:17 wow. what. 23:24:27 I feel like I should probably read this from the beginning instead of backwards. 23:24:38 yes 23:26:47 !haskell m = 10; newtype M = M Integer deriving (Eq, Show); instance Num M where { M x * M y = M $ (x * y) `mod` 10^m; (+) = undefined; (-) = undefined; abs = undefined; signum = undefined; fromInteger = undefined }; main = print . iterate m (\M x -> M 3 ^ x) $ M 3 23:26:52 runhaskell: syntax: runghc [-f GHC-PATH | --] [GHC-ARGS] [--] FILE ARG... 23:27:12 !haskell 2+2 23:27:15 4 23:27:21 !haskell main = print $ 2+2 23:27:24 runhaskell: syntax: runghc [-f GHC-PATH | --] [GHC-ARGS] [--] FILE ARG... 23:27:32 Gregor: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 23:28:55 how do you even analyze Dr. McNinja 23:29:16 "the author here is trying to convey that a ninja doctor riding a raptor is awesome." 23:31:00 Gregor: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 23:31:28 oerjan: there would be no problem if elliott hadn't deleted my hackego script.. 23:31:39 ic 23:31:40 * kallisti pouts. 23:33:02 `haskell 23:33:04 ​/home/hackbot/hackbot.hg/multibot_cmds/lib/limits: line 5: exec: haskell: not found 23:33:55 @tell elliott you appear to have deleted kallisti's HackEgo haskell script while EgoBot's wasn't even _working_ properly. what do you have to say in defense and how would you like to be executed? 23:33:55 Consider it noted. 23:34:08 oerjan: well. 23:34:11 it was working at the time 23:34:12 but 23:34:14 also at the time 23:34:17 egobot had been down for several days. 23:34:23 ic 23:34:59 I actually don't remember how I wrote it now... 23:35:46 btw i need a version which does newtype and instance declarations, of course. 23:36:22 can ghc run from standard input? 23:36:51 unless someone remembers that lambdabot has an obscure imported module which does modular powers. 23:37:12 -!- copumpkin has joined. 23:37:20 kallisti: for module compilation? doubt it. 23:37:25 oerjan: help how do I runhaskell with standard input. 23:37:30 HOW DID I DO THAT? 23:37:32 maybe I didn't. 23:37:34 what. 23:37:36 I don't know. 23:37:46 tmpfile? it's what EgoBot does, afaik. 23:37:53 I don't recall using a tempfile. 23:37:59 but that's an option. 23:38:07 maybe you just did ghc -e 23:38:14 oh, maybe. 23:39:21 that _should_ be enough with a ghc recent enough to support all declarations in ghci. but that's pretty recent, maybe even after latest platform. 23:39:37 `run ghc -e ' main = print (2+2)' 23:39:44 ​\ :0:6: parse error on input `=' 23:40:08 no, ghc -e doesn't do modules. afaict it does ghci commands 23:41:29 `run ghc -e 'let {m = 10}; newtype M = M Integer deriving (Eq, Show); instance Num M where { M x * M y = M $ (x * y) `mod` 10^m; (+) = undefined; (-) = undefined; abs = undefined; signum = undefined; fromInteger = undefined }; print . iterate m (\M x -> M 3 ^ x) $ M 3' 23:41:34 ​\ :0:13: parse error on input `;' 23:41:43 * Phantom_Hoover → sleep 23:41:45 fancy 23:41:48 -!- Phantom_Hoover has quit (Quit: Leaving). 23:41:54 `run ghc -e 'print (2+2)' 23:41:59 4 23:42:16 `run ghc -e 'let {m = 2}; print (m+m)' 23:42:21 ​\ :0:12: parse error on input `;' 23:42:35 ic :( 23:42:50 not quite all of ghci, i take 23:43:15 `run ghc -e 'putStr "test"; print (m+m)' 23:43:20 ​\ :0:14: parse error on input `;' 23:43:32 right, no support of multiple commands :( 23:43:38 `run cd bin && echo '#!/bin/sh' > haskell && echo '$T=mktemp; echo $1 > $T; runhaskell $T' >> haskell && chmod +x haskell 23:43:40 No output. 23:43:42 oerjan: this is wrong isn't it. 23:44:22 you need .hs extension. 23:44:32 it's... enforced? 23:44:52 well, there's a flag to ignore it 23:45:14 `run cd bin && echo '#!/bin/sh' > haskell && echo '$T=`mktemp`; echo "$1" > $T; runhaskell $T' >> haskell && chmod +x haskell 23:45:16 No output. 23:45:24 `haskell main = print $ 2+2 23:45:31 >_> 23:45:40 maybe I need to actually print something. 23:45:51 > print $ 2+2 23:45:52 23:45:55 boo 23:45:57 ​/hackenv/bin/haskell: 2: =/tmp/tmp.yr3eUgdBhN: not found \ /hackenv/bin/haskell: 2: cannot create : Directory nonexistent 23:46:11 um, okay. 23:46:23 >_>oh 23:46:32 `run cd bin && echo '#!/bin/sh' > haskell && echo 'T=`mktemp`; echo "$1" > $T; runhaskell $T' >> haskell && chmod +x haskell 23:46:34 No output. 23:46:39 `haskell main = print $ 2+2 23:46:42 -!- copumpkin has changed nick to pumpmas. 23:46:44 4 23:46:47 bam 23:47:10 -!- pikhq has quit (Read error: Operation timed out). 23:47:25 oerjan: presumably runhaskell turns on said option. 23:48:02 `haskell m = 10; newtype M = M Integer deriving (Eq, Show); instance Num M where { M x * M y = M $ (x * y) `mod` 10^m; (+) = undefined; (-) = undefined; abs = undefined; signum = undefined; fromInteger = undefined }; main = print . iterate m (\M x -> M 3 ^ x) $ M 3 23:48:06 also when do temp files go away? maybe I shouldn't just create them all the time. 23:48:07 ​\ /tmp/tmp.k5wpKFOHX0:1:224: \ Couldn't match expected type `a0 -> b0' with actual type `[a1]' \ In the return type of a call of `iterate' \ Probable cause: `iterate' is applied to too many arguments \ In the second argument of `(.)', namely \ `iterate m (\ M x -> M 3 ^ x)' \ In the expression: print . iterate m (\ M x -> M 3 ^ x) 23:48:08 -!- pikhq has joined. 23:48:14 fffffffff 23:48:35 kallisti: it is possible .hs is the default assumption, i guess 23:48:47 oh hm 23:49:07 `haskell m = 10; newtype M = M Integer deriving (Eq, Show); instance Num M where { M x * M y = M $ (x * y) `mod` 10^m; (+) = undefined; (-) = undefined; abs = undefined; signum = undefined; fromInteger = undefined }; main = print $ iterate m (\M x -> M 3 ^ x) (M 3) !! m 23:49:12 ​\ /tmp/tmp.ALDmG4ubTI:1:224: \ The function `iterate' is applied to three arguments, \ but its type `(a0 -> a0) -> a0 -> [a0]' has only two \ In the first argument of `(!!)', namely \ `iterate m (\ M x -> M 3 ^ x) (M 3)' \ In the second argument of `($)', namely \ `iterate m (\ M x -> M 3 ^ x) (M 3) !! m' \ In the expression: print $ iterate m (\ M x -> M 3 ^ x) (M 3) !! m 23:49:24 oops 23:49:28 `haskell m = 10; newtype M = M Integer deriving (Eq, Show); instance Num M where { M x * M y = M $ (x * y) `mod` 10^m; (+) = undefined; (-) = undefined; abs = undefined; signum = undefined; fromInteger = undefined }; main = print $ iterate (\M x -> M 3 ^ x) (M 3) !! m 23:49:33 ​\ /tmp/tmp.ME0aPlxkPR:1:234: \ Couldn't match expected type `t0 -> t1' with actual type `M' \ In the pattern: M \ In the first argument of `iterate', namely `(\ M x -> M 3 ^ x)' \ In the first argument of `(!!)', namely \ `iterate (\ M x -> M 3 ^ x) (M 3)' 23:51:03 :t iterate 23:51:04 forall a. (a -> a) -> a -> [a] 23:51:08 explosion of tempfiles. 23:51:28 `ls /tmp 23:51:30 No output. 23:51:34 oh 23:51:48 they're probably not put in the repository 23:53:08 -!- Klisz has joined. 23:53:32 oh hm 23:53:50 `haskell m :: Integer; m = 10; newtype M = M Integer deriving (Eq, Show); instance Num M where { M x * M y = M $ (x * y) `mod` 10^m; (+) = undefined; (-) = undefined; abs = undefined; signum = undefined; fromInteger = undefined }; main = print $ iterate (\M x -> M 3 ^ x) (M 3) !! fromIntegral m 23:53:55 ​\ /tmp/tmp.qMSSrjhqHX:1:248: \ Couldn't match expected type `t0 -> t1' with actual type `M' \ In the pattern: M \ In the first argument of `iterate', namely `(\ M x -> M 3 ^ x)' \ In the first argument of `(!!)', namely \ `iterate (\ M x -> M 3 ^ x) (M 3)' 23:54:04 * kallisti considered actually making a script that generates hackego commands 23:54:19 oh duh 23:54:26 `haskell m :: Integer; m = 10; newtype M = M Integer deriving (Eq, Show); instance Num M where { M x * M y = M $ (x * y) `mod` 10^m; (+) = undefined; (-) = undefined; abs = undefined; signum = undefined; fromInteger = undefined }; main = print $ iterate (\(M x) -> M 3 ^ x) (M 3) !! fromIntegral m 23:54:32 M 2464195387 23:54:35 yay! 23:54:50 -!- pikhq_ has joined. 23:55:06 oerjan: the fabled mod-10 integers... 23:55:09 `haskell m :: Integer; m = 10; newtype M = M Integer deriving (Eq, Show); instance Num M where { M x * M y = M $ (x * y) `mod` 10^m }; main = print $ iterate (\(M x) -> M 3 ^ x) (M 3) !! fromIntegral m 23:55:14 ​\ /tmp/tmp.Ybxs5kTYQA:1:75: \ Warning: No explicit method nor default method for `+' \ In the instance declaration for `Num M' \ \ /tmp/tmp.Ybxs5kTYQA:1:75: \ Warning: No explicit method nor default method for `abs' \ In the instance declaration for `Num M' \ \ /tmp/tmp.Ybxs5kTYQA:1:75: \ Warning: No explicit method nor default method for `signum' \ In the instance declaration for `Num M' 23:55:21 *sigh* 23:55:34 it seems all those undefined's are necessary in HackEgo too 23:55:56 -!- DCliche has quit (Ping timeout: 248 seconds). 23:56:03 `run haskell 'm :: Integer; m = 10; newtype M = M Integer deriving (Eq, Show); instance Num M where { M x * M y = M $ (x * y) `mod` 10^m }; main = print $ iterate (\(M x) -> M 3 ^ x) (M 3) !! fromIntegral m' | tail -1 23:56:06 well necessary if you want to see your output through all the warnings. 23:56:08 ​\ /tmp/tmp.90muCEPMJy:1:75: \ Warning: No explicit method nor default method for `+' \ In the instance declaration for `Num M' \ \ /tmp/tmp.90muCEPMJy:1:75: \ Warning: No explicit method nor default method for `abs' \ In the instance declaration for `Num M' \ \ /tmp/tmp.90muCEPMJy:1:75: \ Warning: No explicit method nor default method for `signum' \ In the instance declaration for `Num M' 23:56:22 wat 23:56:43 um 23:56:45 dunno 23:56:52 -!- pikhq has quit (Ping timeout: 248 seconds). 23:57:23 why in the world didn't the tail -1 work 23:57:52 oh wait hm 23:57:52 my script is too cool for it. 23:58:31 `run haskell 'm :: Integer; m = 10; newtype M = M Integer deriving (Eq, Show); instance Num M where { M x * M y = M $ (x * y) `mod` 10^m }; main = print $ iterate (\(M x) -> M 3 ^ x) (M 3) !! fromIntegral m' 2&>/dev/null 23:58:36 No output. 23:58:51 er hm wait 23:58:55 `run haskell 'm :: Integer; m = 10; newtype M = M Integer deriving (Eq, Show); instance Num M where { M x * M y = M $ (x * y) `mod` 10^m }; main = print $ iterate (\(M x) -> M 3 ^ x) (M 3) !! fromIntegral m' 2>/dev/null 23:59:00 M 2464195387 23:59:03 whew 23:59:20 lol 23:59:23 it didn't work because it only affected stdout 23:59:40 &> redirects everything. 23:59:59 i remembered