00:00:06 anyway if you're going to use TH at least make it only use one quasiquoter for the entire list 00:00:09 and put dividers 00:00:18 " |], [proposal|" is hideous :p 00:01:21 true 00:01:55 ADDITIONALLY you forgot type sigs on signature, proposalPool, allProposals, ok I think I'm out of criticism 00:02:10 elliott: They don't need type sigs 00:03:20 coppro: all top-level bindings should have type sigs 00:03:21 must, even 00:03:47 I think hlint even errors out if you don't 00:06:10 nope 00:07:33 it should 00:07:52 go into #haskell and ask if it's ok to leave a typesig off a top level declaration :-) 00:18:46 I don't like quasiquotation much, because of if you need |] inside of the text; it should define your own escapes and stuff by macros, instead! So that you have have text, nest, non nesting, et 00:19:42 coppro: it's a good idea, anyhow. it keeps type errors local and thus more understandable. 00:19:57 yeah 00:20:35 But TH is good for some purposes, in general. But there are some restrictions preventing it being more useful. 00:21:16 Now I implemented classical logic in Haskell, is it possible to make something like TNT (Typographical Number Theory) as well? 00:24:53 zzo38: yes, it's called church numerals 00:26:10 I know what church numerals are; how will that help? 00:26:36 elliott: fine, type signatures implemented 00:26:44 zzo38: yes, the lack of escaping for |] is annoying 00:27:22 coppro: Yes. If it could have macros that you can run your own codes inside of the lexer, then you could fix that. 00:27:56 zzo38: apparently there is an escape actually 00:28:05 both | and ] are escapable 00:28:11 how? 00:28:17 no wait 00:28:21 only \ and |] 00:28:23 that got changed 00:28:39 \|] gives literal |] 00:28:43 \\ gives literal \ 00:28:48 everything else is unchanged 00:28:53 Heredocs would be another way to make it, I suppose. 00:30:38 Another idea I have to make in Haskell, is polymorphic polymorphic functions; because, for example, join either :: (a -> c) -> Either a a -> c which mean they must be the same "a" type, but if you want to make a function (not necessarily this one) that can take a polymorphic input and use it in two ways 00:31:02 hmm, the \\ doesn't seem to work quite right 00:31:08 One way could be macros 00:31:18 |] does though 00:32:18 so the only thing you can't really do is trailing \ 00:32:21 It should have quasiquotation heredocs, for example, it could have that if it starts with [abc:xyz| then you must end with |xyz] and so on. 00:32:38 but good quasiquoters ignore leading and trailing whitespace anyway 00:32:41 zzo38: yeah, that's an option 00:36:58 -!- tiffany has quit (Quit: Leaving). 00:37:41 There is a way to make an abuse of notation like $(5) by having instance Num (Q Type) or instance Num (Q Exp) or whatever else 00:38:09 that's awesome 00:41:57 hmph 00:42:02 I think I might need to use a mutable vector 00:59:03 an evolving mosquito 01:01:43 oh, that's funny 01:09:29 zzo38: is it possible to typeclass overload values that result from a quasi-quotation? I'd think so. 01:10:58 Is there a way to make a function with polymorphic inputs that remain polymorphic inside of the definition? For example, if I have a function either2 f x = either f f x and then I have either2 fromEnum x if x :: Either Int Integer then to make a function that can have polymorphic inputs to handle it. 01:14:46 zzo38: Rank2Types or RankNTypes extension (the latter for more complicated types). any function with such arguments must have a type signature using the forall syntax. 01:14:52 :t runST 01:14:53 forall a. (forall s. ST s a) -> a 01:15:00 like that one 01:15:58 What would it be for the "either2" example, if I do not want to specify the class in the type signature for either2 because it can use any class? 01:16:34 ユ I wonder how this got into the keys for my length histogram. 01:18:11 zzo38: oh. i don't think you can avoid specifying the class, although _maybe_ the new ConstraintKinds extension in the ghc head (iirc) could help, i doubt it though although i'm not exactly sure how it works 01:19:48 but _with_ the class it would be either2 :: forall a b. (Enum a, Enum b) => (forall c. Enum c => c -> d) -> Either a b -> d , i think 01:22:55 with constrain kinds i think it would be either2 :: forall a b c. (c a, c b) => (forall d. c d => d -> e) -> Either a b -> e 01:23:16 but i'm not sure (and i doubt) that it can _infer_ that constraint 01:23:19 *constraint 01:24:40 which means i guess you might be able to use it if lucky, but might need to use a type signature even at the use site 01:25:23 (mind you, all this is based on my intuition of how the ConstrainKinds extension would work, since i've never tried it or even a ghc which has it) 01:25:33 *ConstraintKinds 01:25:36 `run perl -e 'print $0' 01:25:54 `run perl -e 'print @ARGV' 01:25:56 No output. 01:28:57 -!- hagb4rd has joined. 01:29:41 One idea I have for extension, is proof-notation extension that can make anonymous classes and special constraint and everything like that, and then specifying as follows: either2 = proof { a <- id; b, c = _; a -> either b c; } 01:30:10 Someone implement it into GHC already 01:31:50 `run perl -e 'use GetOpt::Long; @ARGV == ("--test", "a=b", "b=c"); GetOptions("test=s%" => \$h); print %$h;' 01:31:52 Can't locate GetOpt/Long.pm in @INC (@INC contains: /etc/perl /usr/local/lib/perl/5.10.1 /usr/local/share/perl/5.10.1 /usr/lib/perl5 /usr/share/perl5 /usr/lib/perl/5.10 /usr/share/perl/5.10 /usr/local/lib/site_perl .) at -e line 1. \ BEGIN failed--compilation aborted at -e line 1. 01:32:40 Is what I wrote sense to you? Or, did I make some kind of mistake? 01:34:26 Another idea I have, is make each type implicitly belong to a class for only that type. 01:37:02 hey friends..i love this track :') need to share it ;) 01:37:03 http://www.youtube.com/watch?v=m25cP-cX0MA&fmt=18 01:37:35 do you like minimal music? this one is special 01:37:45 warm..flashing 01:37:49 :D 01:37:59 fuck im gettin old 01:45:17 me too 01:45:41 -!- ive has joined. 01:46:21 i like maximal music 01:46:50 "death makes angels of us all, and gives us wings where we had shoulders, smooth as ravens claws" 01:47:01 -american prayer, j.d.morrison 01:47:02 deep. 01:47:12 elliott! 01:47:15 oh 01:47:17 hi 01:48:20 im glad you like it 01:50:22 "" 01:50:26 -me 01:51:03 "" 01:51:04 -oklopol 01:51:39 q("") . qq(\n-me) 01:51:41 -oklopol 01:52:04 need some sophisticated esoteric lambda expressions to tune out again :> 01:52:16 oh i need no tuning 01:52:22 what i need is to go to work 01:52:22 i had some 01:52:27 oh 01:52:41 you mean like vocal chord surgery? 01:52:54 q("") . qq(\n-oklopol\n-elliot) 01:52:58 -me 01:53:11 s/t/tt/ 01:54:39 interestingly enough, qq in WoW slang is a verb that means "to annoying bitch about something trivial" 01:55:05 it is also, apparently, an emoticon for a crying face. a very horrible one. this is where its verb usage originates. 01:55:09 "to annoying bitch" is a pretty cool verb 01:55:18 +ly :P 01:55:21 stupid adverbs 01:55:37 "so this one day i was cool guying at a bar" 01:55:38 adjective 01:55:41 i'm starting to like this 01:56:09 hagb4rd: a stupid adverb is one that forgets to take its ly with it when it leaves for work in the morning 01:56:50 poor oklopol 01:57:02 i'm not poor 01:57:08 k..so hf 01:57:13 whatever 01:57:35 not my time 01:57:42 were you referring to the fact i'm leaving for work? are you implying i'm an adverb or was that just a very late reply? 01:58:13 yep..the work thing 01:58:42 i would make a decent adverb 01:58:51 well oklopol decent. 01:58:56 and that's pretty fucking decent 01:59:02 bye 01:59:24 cu 02:09:28 -!- TeruFSX2 has joined. 02:16:23 * CakeProphet IS THE BEST 02:16:31 * CakeProphet IS THE BEST CONJUNCTION 02:17:24 hi 02:17:29 huh, CakeProphet is not a conjunction 02:18:02 I think you are silly, CakeProphet it totally is a conjunction. 02:25:00 hmm, it's way too late now 02:25:54 I should be up in about 3h, I think 02:39:26 -!- TeruFSX2 has quit (Ping timeout: 244 seconds). 02:40:01 -!- TeruFSX2 has joined. 03:03:11 -!- sebbu has quit (Read error: Connection reset by peer). 03:03:52 -!- sebbu has joined. 03:03:52 -!- sebbu has quit (Changing host). 03:03:52 -!- sebbu has joined. 03:23:57 -!- Nisstyre has quit (Ping timeout: 240 seconds). 03:25:04 -!- Nisstyre has joined. 04:04:23 -!- DH____ has joined. 04:11:01 -!- iamcal has quit (Read error: Operation timed out). 04:20:58 -!- iamcal has joined. 04:21:38 -!- TeruFSX2 has quit (Remote host closed the connection). 04:32:14 -!- oerjan has quit (Quit: Good night). 05:20:51 -!- MDude has changed nick to MSleep. 05:21:29 -!- Jafet has joined. 05:34:46 Gregor: What the heck is this genfd stuff in mudem 05:34:59 Just fd support? 05:40:27 Gregor: Also, -n is still in the readme :) 06:03:35 -!- Jafet has quit (Ping timeout: 265 seconds). 06:07:08 -!- Sgeo|web has joined. 06:08:53 -!- Jafet has joined. 06:14:20 -!- nooga has joined. 06:21:59 -!- pikhq_ has joined. 06:22:08 -!- pikhq has quit (Ping timeout: 258 seconds). 06:32:08 Does anyone know a standard mechanism to run a command as if the time were different? 06:33:55 http://www.code-wizards.com/projects/libfaketime/ ;; oh god, how retro. 06:33:55 familyradio has no explanation 06:33:58 That's broing 06:34:01 boring 06:34:40 Thankfully it's in debian. 06:35:21 oh, faketime timestamp ... 06:35:22 I don't mean libfaketime is boring 06:35:29 s/oh/ok/ 06:35:41 Harold Camping's lack of anything recently is boring 06:43:24 -!- ive has quit (Quit: leaving). 06:52:18 -!- Ngevd has joined. 07:06:47 Hello! 07:17:25 -!- derrik has joined. 07:42:24 -!- Jafet has quit (Quit: Leaving.). 07:46:03 -!- CakeProphet has quit (Ping timeout: 256 seconds). 07:46:56 `addquote clearly darth needs something gray and big and proving the uncountability of the reals 07:47:03 691) clearly darth needs something gray and big and proving the uncountability of the reals 07:47:58 -!- CakeProphet has joined. 07:47:58 -!- CakeProphet has quit (Changing host). 07:47:58 -!- CakeProphet has joined. 07:53:57 -!- monqy has quit (Quit: hello). 07:55:39 Today's XKCD is a bit weird 07:55:41 -!- augur_ has joined. 07:55:46 -!- augur has quit (Ping timeout: 240 seconds). 08:01:17 -!- copumpkin has quit (Ping timeout: 252 seconds). 08:01:42 -!- copumpkin has joined. 08:01:55 -!- augur_ has changed nick to augur. 08:02:07 coppro: You think you're evil? I just came up with this: newtype SupplyT s m a = SupplyT (StateT (SupplyT s m s) m a) 08:13:35 elliott: What is that? 08:14:52 zzo38: It's a generalised form of the supply monad, which usually looks like StateT [s] m a 08:14:59 where supply = do { (x:xs) <- get; put xs; return x } 08:15:02 but mine is more general :p 08:15:11 e.g. you can supply a computation with the standard IO random number generator 08:15:13 or prompting the user 08:15:15 or reading from state 08:15:16 or ... 08:15:16 OK 08:16:05 http://www.haskell.org/haskellwiki/New_monads/MonadSupply 08:16:29 Sgeo|web: Yes, that's what started this off. 08:16:45 byorgey went to put it on Hackage, then I totally improved on it. :p 08:23:17 Is it ok to put packages that require an opaque .dll or .so from somewhere on Hackage? 08:23:20 I prefer the variant of put (and modify) returning old value, such as like this: supply = head <$> modify tail; 08:24:10 In addition, defining put in that way in my own codes I found it very easily to implement and reasonable to me. 08:24:42 If it was like that, would that work? I think so. 08:26:28 people who talk about other people compensating for something are obviously compensating for something. 08:26:35 ...oh my, I just included myself, didn't I? 08:27:49 CakeProphet: I suppose so, isn't it? Or maybe it means you talk about talking about... 08:28:16 He does both 08:28:25 OK. 08:29:08 fortunately 08:29:19 in CakeProphet logic, all logical propositions begin with an implicit "if false, " 08:29:29 so everything is okay. 08:29:38 I can go compensate for other things. like overcompensating. 08:29:53 Why doesn't the standard "get" for state monads return the old value, anyways? 08:30:17 :t get 08:30:20 forall (m :: * -> *) s. (MonadState s m) => m s 08:30:22 which old value? 08:30:29 Sorry, I mean "put" 08:30:32 Not "get" 08:30:33 ah 08:30:55 that would be nice I suppose 08:30:56 :t put 08:30:57 forall s (m :: * -> *). (MonadState s m) => s -> m () 08:31:03 It is simple to implement: flip (,) 08:31:29 getAndPut new = do { old <- get; put new; return old } 08:31:37 ^^probably beginner style cod 08:31:39 coe 08:31:40 code 08:32:20 @undo getAndPut new = do { old <- get; put new; return old } 08:32:21 getAndPut new = get >>= \ old -> put new >> return old 08:32:33 @@ @pl @undo getAndPut new = do { old <- get; put new; return old } 08:32:34 getAndPut = (get >>=) . (. return) . (>>) . put 08:32:39 The standard way is slightly more complicated to implement, I think. 08:32:57 What's @@? 08:33:04 getAndPut new = get <* put new 08:33:13 like command compositions and interpolation kind of. 08:33:18 I still have no idea wht <* is 08:33:39 It is used for Applicative (all monads can (and should) be made applicative too) 08:34:07 Whereas *> is like >> and <* is the same but using the first result instead of the second one 08:34:35 > Just 2 <* Just 3 08:34:37 Just 2 08:34:40 > Just 2 <* Nothing 08:34:41 Nothing 08:34:42 yep. 08:34:51 :t (<*) 08:34:53 forall (f :: * -> *) a b. (Applicative f) => f a -> f b -> f a 08:34:54 The <* operation is very useful with Parsec, in my experience. 08:35:09 > Nothing <* Just 2 08:35:10 Nothing 08:35:41 With the Maybe monad there is probably no reason to use <* though 08:36:18 Sgeo|web: you can think of <* for monads being a generalization of exactly what you wrote. 08:37:19 > [1,2,3] <* [4,5,6] 08:37:20 [1,1,1,2,2,2,3,3,3] 08:37:28 > [1,2,3] <* [4,5,6,7] 08:37:29 [1,1,1,1,2,2,2,2,3,3,3,3] 08:47:47 Unwrapped and without transformers, my versions would be: get = join (,); put = flip (,); modify = ap (,); But of course you have to wrap them and allow transformers, so it would not be exactly like that. 08:48:50 O, now I just noticed, all three are similar! Only one function name, is different but all are (,) 08:55:17 :t join 08:55:18 forall (m :: * -> *) a. (Monad m) => m (m a) -> m a 08:57:44 It is the (e ->) monad that is being used with join and ap 08:57:57 So the ap here is the same as the S combinator 09:00:18 For the (e ->) monad the definitions are (actually, as I figured out on paper): return = const; fmap = (.); join f x = f x x; 09:09:27 ap also appears in zip`ap`tail, the aztec god of list manipulation or whatever they call it in #haskell 09:09:39 olsner: (zip <*> tail) is nicer obvs 09:09:55 yes, but it lacks the glottal stops 09:21:04 http://a1.sphotos.ak.fbcdn.net/hphotos-ak-snc6/168486_186959134658608_100000335695588_503135_7385896_n.jpg 09:21:55 uploader description: It's the truth because it is not a lie. 09:35:33 -!- DH____ has quit (Ping timeout: 240 seconds). 09:36:50 you guys 09:36:52 what if 09:36:59 greater than is greater than lesser than. 09:37:12 (>) > (<) 09:37:14 x86 and perhaps some other machine languages are the only completely formalized languages that I know of. 09:37:18 I like the part where this guy is totally delusional. 09:37:27 also (<) < (>) 09:37:30 elliott: lol what. 09:37:43 yes that is a good part. 09:38:31 -!- Ngevd has quit (Quit: Goodbye). 09:39:17 gwlp pRIWl OESWE ON DUNXIONA? 09:39:52 you get mad cred if you can decode what that was supposed to say. 09:40:39 is it "gwlp pRIWl OESWE ON DUNXIONA?" 09:41:00 it is, but that implies that if a implies b, then a implies b 09:41:03 which would also mean that 09:41:15 a implies b is always true, or a implies b is always false. 09:41:17 we can't have any of that. 09:43:06 I guess the world will never know 09:43:31 what I actually meant to say, but was too sleep and almost asleep while typing and not sleep to find it out. 09:43:42 so now I'll llsleep 09:43:48 goodnihiy 09:44:03 I don't want to be that tired when EoA5 comes out :( 09:55:51 -!- derdon has joined. 10:08:28 -!- ais523 has joined. 10:08:53 hmm, I'm really tired, because a wasp woke me up at 3am 10:09:06 I'm not quite sure how it got into my room; but those things buzz awfully loudly while you're trying to sleep 10:09:42 about an hour later, I'd eventually managed to get it outside when it crawled into a student copy of Maple; I managed to hold it out of the window so that it was outside when it crawled back out again 10:09:52 thakn god for maple 10:10:20 http://www.reddit.com/r/funny/comments/lms8q/sir_you_are_doing_it_right/c2tyxnf 10:13:53 elliott: I've never actually installed it 10:14:05 I wonder if the license activation server for Maple 6 is still around? 10:14:10 or if it even runs on modern OSes? 10:14:25 * ais523 mentally ponders whether it'd be more likely to run on Windows 7 or WINE 10:17:25 -!- ais523 has quit (Read error: Connection reset by peer). 10:18:38 -!- ais523 has joined. 10:24:28 ais523: Here, you get to be the latest victim of my wonderful monad: newtype Supply s a = Supply (State (Supply s a) a) 10:24:51 wait what? 10:25:08 that doesn't even seem to kind correctly 10:25:10 :D 10:25:14 ais523: umm, how come? 10:25:24 Supply takes two arguments on the left, and one on the right 10:25:34 ...I don't think you know how data types work... 10:25:48 I don't 10:25:54 ais523: the first Supply on the right is the constructor... oh 10:25:57 data Tuple a b = Tuple (a,b) -- omg only one argument on the right kind error!!!! 10:26:26 oh, you can have a constructor and a type with the same name? 10:26:33 elliott: does ais523 know Haskell? If someone hasn't learned Haskell, I'd think it's unreasonable to expect them to know that. Oh. Yes 10:26:37 that strikes me as more confusing than useful 10:26:41 Sgeo|web: I sort-of know Haskell 10:26:46 well enough to write it, but not well enough to read it 10:26:48 ais523: That... is overwhelmingly the most common case. 10:26:50 -!- GreaseMonkey has quit (Quit: The Other Game). 10:27:00 For instance: Every record. Every wrapper type, including every newtype. 10:27:13 elliott: it's not a requirement for newtype, is it? 10:27:15 I'm used to ADTs, where doing that doesn't make much sense 10:27:20 I mean, probably incredibly common, but 10:28:41 Hmm, idea: 10:29:05 Some program poly...whatever to both with and without existential thingies, yet do different things 10:29:11 Is that even possible? 10:29:11 What 10:29:26 That is, it does different things depending on whether or not foreach is a keyword 10:29:44 a polyglot on Haskell and foreachless Haskell? 10:29:58 Sgeo|web: I have absolutely no idea what you are talking about, and foreach is not a keyword in Haskell. 10:30:08 "Haskell type signatures are implicitly quantified. When the language option -XExplicitForAll is used, the keyword forall allows us to say exactly what this means. For example:" 10:30:09 That 10:30:22 You're going to have to work on your spelling. 10:30:38 Anyway, no. 10:30:46 "forall x." is always invalid with forall off. 10:30:56 "forall x ->" or similar is always invalid with it on. 10:31:13 ....I now know for a fact that I am tired 10:31:18 "foreach" wtf 10:32:24 Sgeo|web: did you have a wasp keeping you awake? 10:32:58 No 10:33:06 oh, annoying reddit bug: if someone replies to you then deletes the reply 10:33:17 you get an orangered envelope, but no new messages when you click on it 10:35:08 ais523: I'll make sure not to do that, then. 10:37:01 meanwhile, reading internal Microsoft emails that came out as court case exhibits reminds me of just how much I hate top-posting 10:37:25 -!- Phantom_Hoover has joined. 10:37:37 ais523: did you know that someone reimplemented cron in java? feature-for-feature? 10:37:51 elliott: no, but I'm not surprised 10:37:52 ais523: relatedly: I'm using a feature-for-feature reimplementation of cron in Java, woe is me 10:38:00 also, SE or EE? 10:38:06 I can see plausible arguments for either 10:38:08 "cron4j can run on any Java 2 (or later) platform." 10:38:27 Java programmers definitely like reimplementing things. 10:38:36 They have their own full printf, their own SQLite... 10:38:52 having their own printf makes sense 10:39:22 most languages have their own printf 10:39:27 ais523: no, I mean, there's literally a package that tries to duplicate every single feature of glibc printf or whatever 10:39:29 to the letter 10:39:46 just in case you REALLY NEED some HARDCORE FORMATTED PRINTINF 10:39:48 I was vaguely surprised at Java having more or less an exact copy of recent Perl 5 regexen 10:39:59 the only features missing were the ones that let you embed arbitrary Perl 10:40:07 Why would they have their own SQLite? 10:40:15 Is it binary compatible with normal SQLite files? 10:40:19 there's a Perl module that actually embeds SQLite 10:40:29 as in, you install the module, and it has the entire source code to SQLite in the module source 10:40:56 Sgeo|web: no, it's just "an embedded file-based SQL database" 10:41:11 That's "wonderful" 10:43:11 -!- Vorpal has joined. 10:45:55 ais523: ooh, I just thought of an awful esolang idea 10:46:03 go for it 10:46:15 I was wondering about making a thematic esolang designed to resemble mail archives 10:46:41 ais523: it's a language with all the speed advantages of a stop-the-world mark-and-sweep GC, and all the convenience and safety of manual memory management 10:46:50 where flow control, etc, would be done by sending more messages, appending them to the end of the archive 10:46:54 elliott: hasn't that been done already? 10:46:59 eightebed is a bit different 10:47:09 right, I was trying to remember the name 10:47:21 ais523: anyway: memory is managed manually with malloc() and free(), /but/ a mark-and-sweep cycle is periodically run, and unless there are no objects to sweep, the program dies 10:47:30 so you have to keep free()ing garbage as early as possible :-P 10:47:58 that's not completely useless 10:48:10 it's more of a check that you aren't leaking memory, than anything else 10:48:18 similar to valgrind, except failing faster 10:48:41 in fact, it's going to do the one thing which would be useful in valgrind but it can't feasibly do: let you know where you should have freed something but didn't 10:48:58 so stupid as a language, very useful as a debugging tool 10:49:05 ais523: yes, but it isn't even at a reasonable point 10:49:14 in fact, it's impossible in general 10:49:18 if a and b become garbage simultaneously 10:49:20 it should happen every command, obviously 10:49:27 then both free(a);free(b) and free(b);free(a) can lead to death 10:49:29 so you need to like 10:49:31 stagger garbage 10:49:42 I think this makes freeing a cyclic structure safely totally impossible 10:49:50 well, you should free things just before they become garbage, not afterwards 10:49:54 maybe if you had an atomic compare-and-swap 10:49:57 and freeing a cyclic structure is easy, you just break the cycle first 10:50:18 fair enough 10:50:18 that's what the ->delete(); in blognomic-parser is for 10:50:26 as Perl's GC can't free cyclic structures, which those are 10:50:31 I didn't read it because it was ugly 10:50:32 so they have an explicit cycle-breaking method 10:50:34 the script, I mean 10:50:45 what did you find ugly about it? 10:50:57 dunno, it probably just looked like perl 10:51:02 heh 10:51:02 nothing personal :p 10:51:06 (print "Only [0-9a-zA-Z_-] are accepted in proposal names.\n"), exit 10:51:06 unless $proposal =~ /^[0-9a-zA-Z_-]+$/; 10:51:09 well that's perverse 10:51:13 the parens, that is 10:51:41 they make it clearer 10:51:45 otherwise exit would be an argument to print 10:51:47 ugh 10:51:54 and I can't remember whether it gets evaluated after or before it starts printing 10:52:02 ais523: btw, what did blognomicbot actually do? ... I vaguely remember it, but not much exact 10:52:10 I think it announced new posts and votes? 10:52:15 * elliott curious 10:52:18 it ran blognomic-parser on request, and updated the channel membership in the sidebar 10:52:27 huh 10:52:30 my memory is totally wrong then :p 10:52:32 also, did ChanServ's duty for when ChanServ was broken 10:52:44 which was the original reason it was created, more or less 10:52:48 wat 10:52:55 (I'd just tell it to op me if ChanServ was missing) 10:52:59 heh 10:53:07 I still can't figure out that op policy 10:53:19 it's traditional, at least 10:53:28 actually, originally it was to op admins and voice players 10:53:52 but once I took over the channel (by reregistering it after it was dropped because nobody else had been there for a month), I just decided to op everyone, because I wasn't an admin 10:54:03 you should op me now, I registered :p 10:54:11 indeed 10:54:12 THEN I CAN TAKE OVER THE WORLD MWAHAHAHAHAHA 10:54:27 done 10:54:58 Oh man, there's a Cobol on the JVM??? 10:55:03 I know what I'm writing MY Bukkit plugins in. 10:55:17 NucleoNB is identified, but I haven't opped them because I have no idea who they are 10:55:30 I've no idea, either 10:55:34 they just came in and said hi and never said anything more 10:55:39 maybe they're a fish. 11:00:00 -!- aloril has quit (Ping timeout: 252 seconds). 11:07:49 -!- Phantom_Hoover has quit (Ping timeout: 248 seconds). 11:08:30 -!- Phantom_Hoover has joined. 11:12:31 -!- aloril has joined. 11:13:52 -!- sllide has joined. 11:36:24 -!- ais523 has quit (Read error: Connection reset by peer). 11:39:38 -!- ais523 has joined. 11:48:26 -!- Ngevd has joined. 12:05:10 -!- ais523 has quit. 12:05:22 -!- ais523 has joined. 12:16:47 haha, one of the spambots was advertising SEO 12:17:58 ooh, can they get me promoted on esolangs.org? 12:18:53 heh 12:29:29 -!- ais523_ has joined. 12:33:36 anyone here know how to get grep -R to not follow symlinks? 12:33:41 other than using find and xargs? 12:35:15 -!- TeruFSX2 has joined. 12:35:33 -R, -r, --recursive 12:35:33 Read all files under each directory, recursively; this is 12:35:33 equivalent to the -d recurse option. 12:35:42 -d does not seem to be documented 12:35:47 oh 12:36:00 -D ACTION, --devices=ACTION 12:36:00 If an input file is a device, FIFO or socket, use ACTION to 12:36:00 process it. By default, ACTION is read, which means that 12:36:00 devices are read just as if they were ordinary files. If ACTION 12:36:00 is skip, devices are silently skipped. 12:36:00 -d ACTION, --directories=ACTION 12:36:03 If an input file is a directory, use ACTION to process it. By 12:36:05 default, ACTION is read, which means that directories are read 12:36:07 just as if they were ordinary files. If ACTION is skip, 12:36:09 directories are silently skipped. If ACTION is recurse, grep 12:36:11 reads all files under each directory, recursively; this is 12:36:13 equivalent to the -r option. 12:36:15 ais523_: looks like you can control absolutely everything except that : 12:36:17 :p 12:36:33 heh 12:37:30 ah, found it 12:37:36 I was looking for a plagiarism-checking script I wrote 12:37:58 after a while, I realised it'd be easier to look for the filename extension than the contents of the file, and a quick find -P found it for me 12:38:05 in a really bizarrely stupid place, why did I put it there? 12:43:28 Phantom_Hoover: Can you go to http://blognomic.com/update/index.php?C=publish and make a post requesting to become Idle? 12:45:54 He did it 12:59:34 -!- Ngevd has quit (Ping timeout: 240 seconds). 13:12:21 :t mfix 13:12:22 forall a (m :: * -> *). (MonadFix m) => (a -> m a) -> m a 13:25:58 -!- Phantom_Hoover has quit (Ping timeout: 240 seconds). 13:30:20 -!- boily has joined. 13:37:33 -!- Phantom_Hoover has joined. 13:45:58 -!- derrik has quit (Quit: quitter). 13:46:14 -!- MSleep has changed nick to MDude. 13:50:20 -!- Ngevd has joined. 13:52:41 -!- Zuu has quit (Read error: Connection reset by peer). 13:57:01 plagiarism is the right thing to do, bits need to flow free 13:57:53 also, I vaguely wonder why I bothered making it do things like detect changes in whitespace and variable name substitutions, where the plagiarised submissions it found differed by one byte (the capitalisation of one letter in an identifier) 13:58:15 wow. 13:58:40 they actually consistently changed all the occurrences? 13:58:54 that identifier only occurs once per file, but in three different files 13:58:59 and was changed consistently, indeed 13:59:07 actually, that's only a difference of one bit 13:59:26 yeah 14:00:12 -!- Zuu has joined. 14:09:37 -!- copumpkin has quit (Quit: Computer has gone to sleep.). 14:19:29 -!- boily has quit (Read error: Operation timed out). 14:32:52 -!- Jafet has joined. 14:36:23 -!- copumpkin has joined. 14:37:08 -!- boily has joined. 14:37:35 I am sitting at a table in a busy hallway on my computer 14:37:43 the dean just walked by and said hi to me 14:37:45 O_o 14:40:32 did you say hi back again? 14:51:34 -!- ais523_ has quit (Quit: Page closed). 15:07:28 oh right, annoying line of code a student wrote: double iValue; 15:07:36 it's like Hungarian notation, except the prefix doesn't mean anything at all 15:07:42 I think it's just there to look pretty 15:07:59 Maybe it means something and you just don't know what. 15:08:08 well, they didn't know either 15:08:12 Darn 15:08:15 (I mark the work in front of the students, and can ask them questions) 15:08:22 or at least, they didn't admit to knowing 15:08:39 oh right, annoying line of code a student wrote: double iValue; 15:08:45 instance variable, perhaps? 15:08:48 as opposed to local variable 15:08:52 nope, it was local 15:08:57 heh 15:22:31 -!- shachaf_ has joined. 15:25:45 -!- nooga has quit (Ping timeout: 245 seconds). 15:27:52 -!- nooga has joined. 15:28:43 -!- shachaf_ has quit (Ping timeout: 265 seconds). 15:28:47 elliott: it's the value i, obviously. 15:29:07 * CakeProphet appends Value to all of his variable names in Java. 15:30:28 what about reference types? 15:31:16 -!- augur has quit (Remote host closed the connection). 15:33:18 Foo fooReferenceValue; 15:34:27 -!- nooga has quit (Ping timeout: 260 seconds). 15:35:32 -!- derrik has joined. 15:36:32 all variables are values on their fleshy pink insides. 15:36:41 or is it on their fleshy pink shells? 15:36:57 I don't know. values are delicious. this is a good analogy. 15:38:31 Object sometypeValueThatHasFirstClassStatus; 15:39:47 -!- ais523 has quit (Ping timeout: 240 seconds). 15:39:47 -!- ais523_ has joined. 15:40:16 -!- nooga has joined. 15:42:03 Runnable aYoungIdealisticLoverDazedByNotionsOfRomanticFancy; 15:42:03 char **charppThatCanBeThoughtOfAsStringArrayOrCharacterMatrixOrUpdatableStringPointerOrArrayOfUpdatableStrings; 15:42:19 I like to give my variables characters. 15:43:25 http://c2.com/cgi/wiki?AreLongAndDescriptiveRelated 15:45:17 tokens work if you're trying to analyze the syntactic complexity 15:46:05 non-whitespace keystrokes/bytes works too, as a rough gadge of time/effort invested into the code (not counting the countless deletions) 15:50:46 -!- Nisstyre has quit (Ping timeout: 240 seconds). 15:51:24 -!- ais523_ has changed nick to ais523. 15:56:40 -!- Nisstyre has joined. 16:02:09 -!- Auzi has joined. 16:02:30 =S 16:02:33 HEYY 16:02:45 -!- ovizunstore has joined. 16:03:40 hi 16:03:45 `? welcome 16:03:48 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 16:04:11 -!- augur has joined. 16:04:17 -!- ovizunstore has quit. 16:07:34 SUP 16:07:47 -!- Auzi has left. 16:12:21 -!- ais523 has quit (Ping timeout: 248 seconds). 16:14:57 -!- CakeProphet has quit (Ping timeout: 258 seconds). 16:17:59 ?unmtl StateT s m a 16:17:59 s -> m (a, s) 16:27:43 looks cool 16:30:03 ? 16:30:45 makes sense to me, no question about it 16:39:01 what? 16:46:50 :t state 16:46:50 forall s a. (s -> (a, s)) -> State s a 16:46:58 ?hoogle (a,s) -> State s a 16:46:58 Data.Graph.Inductive.Graph insNode :: DynGraph gr => LNode a -> gr a b -> gr a b 16:46:59 Data.Graph.Inductive.Graph insNodes :: DynGraph gr => [LNode a] -> gr a b -> gr a b 16:46:59 Data.Graph.Inductive.Graph mkGraph :: Graph gr => [LNode a] -> [LEdge b] -> gr a b 16:47:05 :t stateT 16:47:06 Not in scope: `stateT' 16:47:08 oh wait, StateT 16:51:10 -!- ais523 has joined. 16:54:55 -!- Ngevd has quit (Ping timeout: 245 seconds). 16:54:58 https://github.com/JodaOrg/joda-time/blob/master/src/main/java/org/joda/time/chrono/BasicGJChronology.java#L79 16:55:03 ais523: you should click that link 16:55:07 trust me 16:55:39 I don't think that sort of link works correctly on my system 16:55:43 although it looks interesting 16:56:09 ais523: what sort of link? 16:56:16 https? 16:56:33 links to github that specify anchors 16:56:44 often I just get a page with no content 16:56:50 I don't think it's the anchor's /fault/ 16:57:02 ais523: just tested it without JS 16:57:04 works fine 16:57:09 just that the sort of page that github generates that sort of anchor on doesn't work properly 16:57:14 elliott: well, it didn't work for me even with JS 16:57:15 I'll try it anyway 16:57:31 https://raw.github.com/JodaOrg/joda-time/master/src/main/java/org/joda/time/chrono/BasicGJChronology.java, grep /getMonthOfYear/ 16:57:34 OK, it almost works 16:57:39 the anchor doesn't, but the page content is at least readable 16:57:39 that's a text/plain, so there's nothing to complain about 16:58:29 I'm, umm, not convinced that that isn't premature optimization 16:58:40 in fact, I'm not even completely convinced that that's faster than the obvious way of writing it 16:58:48 although it probably is or they wouldn't have gone to all that trouble 16:59:06 I think joda-time is used in all sorts of Big Iron 16:59:09 but it's still ridiculous 16:59:47 what's up with measuring time in years and milliseconds, anyway? 17:00:22 who knows 17:00:29 maybe it's all converted to that 17:02:00 -!- Sgeo|web has quit (Ping timeout: 265 seconds). 17:02:30 -!- boily has quit (Ping timeout: 256 seconds). 17:04:00 -!- ais523_ has joined. 17:04:22 -!- ais523 has quit (Disconnected by services). 17:04:23 -!- ais523_ has changed nick to ais523. 17:11:47 -!- Ngevd has joined. 17:12:46 -!- Phantom_Hoover has quit (Ping timeout: 240 seconds). 17:16:58 I have just came up with a way of using a biased coin as a fair coin! 17:17:13 Somebody probably beat me to it 17:17:36 what about a coin that always shows up heads? 17:17:54 ...Damn 17:18:26 -!- boily has joined. 17:20:36 No, wait, it ends with a 2x^2-2x probability of getting heads 17:20:41 Not a 1/2 17:21:38 Wait... 17:21:52 Ngevd: http://en.wikipedia.org/wiki/Fair_coin#Fair_results_from_a_biased_coin 17:22:02 I was looking at that 17:42:02 Mauke: STOP USING while(true);! 17:42:02 Mauke: it's for(;;); 17:42:03 Mauke: when you use while(true), you rely on optimizations 17:42:07 ais523: one of your C students escaped into the wild 17:42:18 :p 17:42:23 haha 17:42:40 elliott: tell Ololo that if you write for(;;), you're relying on the compiler not actually inserting the NOPs in the loop 17:42:46 and that's an optimization too 17:42:47 haha 17:43:10 All programming languages should have an explicit forever loop 17:43:15 ais523: done :p 17:43:18 -!- Phantom_Hoover has joined. 17:46:42 I personally use while ("Cogito, ergo sum") { ... } because since that is a priori true, it is true in all possible universes, and therefore ensures maximum portability. 17:49:32 -!- boily has quit (Quit: WeeChat 0.3.6). 17:51:42 -!- Ngevd has quit (Quit: Leaving). 18:07:18 -!- nooga has quit (Ping timeout: 276 seconds). 18:12:52 -!- Ngevd has joined. 18:14:53 -!- ais523 has quit (Remote host closed the connection). 18:39:56 -!- boily has joined. 18:51:35 -!- nooga has joined. 18:52:19 -!- ais523 has joined. 18:57:11 ?hoogle (a->Bool)->[a]->Maybe a 18:57:12 Data.List find :: (a -> Bool) -> [a] -> Maybe a 18:57:12 Data.Foldable find :: Foldable t => (a -> Bool) -> t a -> Maybe a 18:57:12 Data.List findIndex :: (a -> Bool) -> [a] -> Maybe Int 18:59:26 meh 19:00:13 < Ngevd> All programming languages should have an explicit forever loop <- Haskell? 19:00:16 :D 19:00:46 -!- Ngevd has quit (Ping timeout: 255 seconds). 19:01:01 you could easily write a monad forever loop 19:01:19 > repeat x 19:01:23 mueval-core: Time limit exceeded 19:01:31 hmm 19:01:32 :t repeat 19:01:36 forall a. a -> [a] 19:01:38 I thought so 19:01:41 > repeat 1 19:01:42 [1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,... 19:01:47 so why did it fail on x? 19:02:09 :t foldM 19:02:10 forall a b (m :: * -> *). (Monad m) => (a -> b -> m a) -> a -> [b] -> m a 19:02:29 :t foldl 19:02:30 forall a b. (a -> b -> a) -> a -> [b] -> a 19:03:28 ?hoogle (a -> Maybe b) -> [a] -> Maybe b 19:03:28 Prelude mapM_ :: Monad m => (a -> m b) -> [a] -> m () 19:03:28 Control.Monad mapM_ :: Monad m => (a -> m b) -> [a] -> m () 19:03:28 Control.Monad forM_ :: Monad m => [a] -> (a -> m b) -> m () 19:04:09 :t \x. (foldl (>>=) $ return () $ repeat x) 19:04:10 parse error on input `.' 19:04:17 :t \x -> (foldl (>>=) $ return () $ repeat x) 19:04:17 Couldn't match expected type `m b' against inferred type `()' 19:04:18 In the second argument of `($)', namely `return () $ repeat x' 19:04:18 In the expression: (foldl (>>=) $ return () $ repeat x) 19:04:35 :t \x -> (foldl (>>=) $ (return ()) $ repeat x) 19:04:36 Couldn't match expected type `m b' against inferred type `()' 19:04:36 In the second argument of `($)', namely `(return ()) $ repeat x' 19:04:36 In the expression: (foldl (>>=) $ (return ()) $ repeat x) 19:04:58 :t return () 19:04:59 forall (m :: * -> *). (Monad m) => m () 19:05:14 :t foldl (>>=) 19:05:15 forall (m :: * -> *) b. (Monad m) => m b -> [b -> m b] -> m b 19:05:33 :t \x -> (foldl (>>=) (return ()) (repeat x)) 19:05:34 forall (m :: * -> *). (Monad m) => (() -> m ()) -> m () 19:05:42 hi ais523 19:05:43 there we go 19:05:45 hi elliott, btw 19:06:00 this is one of haskell's few glaring weaknesses I'm running into here :( 19:06:04 :t \x -> (foldl (>>) (return ()) (repeat x)) 19:06:05 forall (m :: * -> *). (Monad m) => m () -> m () 19:06:08 got it 19:06:15 there you go: the Haskell forever loop 19:06:44 > (foldl (>>) (return ()) (repeat x)) (putStr "test") 19:06:47 Couldn't match expected type `m ()' 19:06:47 against inferred type `SimpleRe... 19:06:54 :t putStr "test" 19:06:55 IO () 19:07:18 aha, does lambdabot not allow IOs? 19:07:53 it's not "doesn't allow them" 19:07:57 it's an expression evaluator 19:08:05 > (\x -> (foldl (>>) (return ()) (repeat x))) (putStr "test") 19:08:10 mueval-core: Time limit exceeded 19:08:14 > (\x -> (foldl (>>) (return ()) (repeat x))) (putStrLn "test") 19:08:16 19:08:31 I am amused by the difference between those two results 19:08:44 I am using the correct fold, right? (foldl is the one that works on lazy lists?) 19:09:27 > foldl f z (repeat x) 19:09:32 mueval-core: Time limit exceeded 19:09:42 > foldr f z (repeat x) 19:09:42 > foldr f z (repeat x) 19:09:42 ais523: foldr works on infinite lists 19:09:45 f x (f x (f x (f x (f x (f x (f x (f x (f x (f x (f x (f x (f x (f x (f x (... 19:09:46 elliott: aha 19:09:47 f x (f x (f x (f x (f x (f x (f x (f x (f x (f x (f x (f x (f x (f x (f x (... 19:09:53 > (\x -> (foldr (>>) (return ()) (repeat x))) (putStr "test") 19:09:55 19:09:58 there we go 19:10:18 yay, and in ghci it fills my screen with "test" 19:10:28 @pl (\x -> (foldr (>>) (return ()) (repeat x))) 19:10:29 foldr (>>) (return ()) . repeat 19:10:38 ais523: hate to burst your bubble 19:10:39 but 19:10:40 the Haskell forever loop, behold it! 19:10:40 :t forever 19:10:49 forall (m :: * -> *) a b. (Monad m) => m a -> m b 19:10:58 elliott: hey, it has to be implemented at some point 19:11:04 @src forever 19:11:04 Source not found. :( 19:11:19 `addquote That was me being *nice*. I could have made the request by word of mouth to my My Little Pony toys and it would count. 19:11:21 692) That was me being *nice*. I could have made the request by word of mouth to my My Little Pony toys and it would count. 19:11:21 presumably, that forever has extra stuff in to handle ignoring the argument? 19:11:29 ais523: forever m = m >> forever m 19:11:54 @unpl a x = x >> a x 19:11:54 a x = x >> (a x) 19:11:56 @pl a x = x >> a x 19:11:57 a = fix (ap (>>)) 19:11:58 forever = fix <*> (>>) 19:12:06 Darn, it wasn't 19:12:35 Gah, Haskell's HTML scraping stuff is so terrible 19:16:41 -!- ive has joined. 19:22:45 -!- Phantom_Hoover has quit (Ping timeout: 248 seconds). 19:23:44 -!- tiffany has joined. 19:23:48 -!- tiffnya has joined. 19:23:53 -!- tiffany has quit (Remote host closed the connection). 19:25:16 -!- tiffnya has changed nick to tiffany. 19:31:47 -!- augur has quit (Remote host closed the connection). 19:37:53 -!- brisingr has joined. 19:39:32 -!- brisingr has left. 19:40:20 pikhq_: You're the resident NetSurf expert; is Hubbub completely undocumented 19:40:54 -!- Ngevd has joined. 19:46:31 -!- monqy has joined. 20:10:02 20:10:10 monqy: 20:10:31 20:10:32 quintopia: 20:10:53 elliott: :/ 20:10:59 -!- oerjan has joined. 20:10:59 give me more motivation 20:11:10 oerjan:be awesome 20:11:15 * oerjan motivates quintopia with the saucepan ===\__/ 20:11:21 hi 20:11:26 hello 20:12:24 oh dear. not the saucepan of awesome 20:12:58 THE VERY SAME 20:13:47 sourcepan of awesome 20:14:20 it's an open saucepan 20:14:39 for making open sauce? 20:15:13 conceivably. 20:17:18 open sausome 20:17:50 can i borrow it for a bit? 20:19:08 sorry 20:19:45 no? 20:19:47 last someone got hand of it they started producing fakes and claiming they were the real thing 20:19:51 i'll give it back :/ 20:20:39 * oerjan gives quintopia a hands-on saucepan lecture ===\__/ 20:20:54 thanks 20:21:00 beats a head-on lecture 20:21:11 -!- ais523_ has joined. 20:21:15 oh i'm sorry, it was _my_ hands, your head 20:22:44 too late. you have to make the joke when you draw the pan or it doesnt count. 20:23:05 very well. sorry about your hands. 20:23:10 -!- ais523 has quit (Ping timeout: 240 seconds). 20:24:31 -!- Phantom_Hoover has joined. 20:25:24 sokay. i was wearing the +5 Gauntlets of Throwing Down 20:25:29 coppro: You think you're evil? I just came up with this: newtype SupplyT s m a = SupplyT (StateT (SupplyT s m s) m a) 20:25:40 ...is that a _bottomless_ transformer stack... 20:25:47 no, that's the state par 20:25:48 t 20:25:50 not the transformed monad 20:25:50 oh 20:26:14 -!- tiffany has quit (Quit: brb installing pclinuxos). 20:26:16 oerjan: however upon reflection I think it should actually be 20:26:17 newtype SupplyT s m a = SupplyT { unwrapSupplyT :: StateT (ProviderT m s) m a } 20:26:17 type Supply s = SupplyT s Identity 20:26:17 newtype ProviderT m s = ProviderT { runProviderT :: m (s, ProviderT m s) } 20:26:17 type Provider = ProviderT Identity 20:26:24 tiffany: hahahahahgkljhsfh pclinuxos 20:26:33 -!- ais523_ has changed nick to ais523. 20:27:40 hm iiuc you _can_ have a bottomless transformer stack if you use ContT in it 20:28:09 ...actually _running_ it might be tricky 20:28:48 whats pclinuxos 20:28:58 -!- GreaseMonkey has joined. 20:29:19 newtype RecCont r x = RecCont { runRecCont :: ContT r (RecCont r) x } 20:29:36 @src return ContT 20:29:36 Source not found. You type like i drive. 20:29:43 @src ContT return 20:29:43 return a = ContT ($ a) 20:30:05 @src ContT (>>=) 20:30:05 m >>= k = ContT $ \c -> runContT m (\a -> runContT (k a) c) 20:30:30 @src ContT 20:30:31 newtype ContT r m a = ContT { runContT :: (a -> m r) -> m r } 20:36:42 OK 20:36:45 I think 20:36:48 but am not sure 20:36:51 that someone 20:36:53 :t state 20:36:54 forall s a. (s -> (a, s)) -> State s a 20:36:56 on The Young Apprentice 20:37:01 did not know what profit was. 20:37:18 08:31:03: It is simple to implement: flip (,) 20:37:18 08:31:29: getAndPut new = do { old <- get; put new; return old } 20:37:18 08:31:37: ^^probably beginner style cod 20:37:32 I remember not understanding what profit was. I wondered why people just didn't sell things for like a penny; then so many people would buy them that they'd make more money than everyone else. 20:37:41 zzo38: don't you mean just (,) 20:38:06 when they do the proposed change of state into a method, it will be just state (,) for all MonadState 20:38:34 :t state (,) 20:38:34 Couldn't match expected type `(a, s)' 20:38:34 against inferred type `b -> (s, b)' 20:38:35 In the first argument of `state', namely `(,)' 20:38:35 elliott, these guys are a) 16 or so and b) supposedly the cream of the junior economic crop (read: most of them need to be punched in the face many, many times). 20:38:37 oops 20:38:41 oerjan: No. return = (,) 20:38:59 @src State 20:38:59 Source not found. Listen, broccoli brains, I don't have time to listen to this trash. 20:39:14 zzo38: oh right 20:39:48 I don't really like lambdabot's insults on source not found 20:39:57 hm why didn't that type 20:40:02 they don't fit a serious language like Haskell, and it isn't even the user's fault 20:40:05 :t (,) 20:40:06 forall a b. a -> b -> (a, b) 20:40:10 duh 20:40:14 :t state . (,) 20:40:15 forall s a. a -> State s a 20:40:18 in retrospect, that was pretty obvious 20:40:19 :t state . flip (,) 20:40:20 forall a. a -> State a a 20:40:24 (the :t (,) thing) 20:40:28 I'd just forgotten what (,) did 20:40:32 So they would be: return = state . (,); modify = state . ap (,); put = state . flip (,); get = state $ join (,); 20:41:04 they don't fit a serious language like Haskell, and it isn't even the user's fault 20:41:16 ais523: any bot that can run code in a serious language must be itself serious? 20:41:31 after all, EgoBot can run C... 20:41:33 no, but any bot that's effectively the IRC representative for a serious language probably should be 20:41:59 lambdabot would be a lot worse a representative were it boring. 20:43:05 I don't really like lambdabot's insults on source not found <-- well it's hilariously ironic given how often lambdabot @src is missing things 20:44:16 it seems to be missing more or less everything 20:44:23 do you know anything that lambdabot /does/ have the source for? 20:44:27 @src flip 20:44:27 flip f x y = f y x 20:44:29 @src (++) 20:44:29 [] ++ ys = ys 20:44:29 yay! 20:44:29 (x:xs) ++ ys = x : (xs ++ ys) 20:44:29 -- OR 20:44:29 xs ++ ys = foldr (:) ys xs 20:44:34 @src [] (>>=) 20:44:34 xs >>= f = concatMap f xs 20:44:38 @src State return 20:44:38 Source not found. BOB says: You seem to have forgotten your passwd, enter another! 20:44:40 darn 20:44:43 doesn't have mtl I bet 20:44:51 @src ContT return 20:44:51 return a = ContT ($ a) 20:44:52 probably just prelude/data.list 20:44:54 oh huh 20:44:56 @src StateT return 20:44:56 Source not found. And you call yourself a Rocket Scientist! 20:44:59 erird 20:44:59 weird 20:45:10 @src Cont (>>=) 20:45:10 m >>= k = Cont $ \c -> runCont m $ \a -> runCont (k a) c 20:45:17 wow that's messy 20:45:20 @src runCont 20:45:21 Source not found. :( 20:45:25 it's still the old version for Cont 20:45:35 @src Cont 20:45:35 newtype Cont r a = Cont { runCont :: (a -> r) -> r } 20:45:40 ais523: that's not messy 20:45:45 (>>=) is what's messy, really 20:45:52 @src Cont (>>) 20:45:52 Source not found. My brain just exploded 20:46:08 @src (>>) 20:46:09 m >> k = m >>= \_ -> k 20:46:21 * ais523 looks at lambdabot with disapproval 20:46:40 ais523: most monads don't specialise (>>). 20:47:46 then why doesn't it give the default (>>)? 20:48:42 Really, join should be made a class method of Monad 20:51:22 ais523: because you asked for Cont's 20:51:31 elliott: which is the default's? 20:51:44 -!- Ngevd has quit (Quit: Leaving). 20:51:46 @src (>>) 20:51:46 m >> k = m >>= \_ -> k 20:52:51 elliott: indeed 20:52:58 so why can't it see that Cont uses the default (>>) impl and use that? 20:53:35 -!- pumpkin has joined. 20:54:02 ais523: because lambdabot is the crustiest piece of haskell code ever 20:54:06 and not maintained 20:54:08 send a patch 20:55:19 -!- pumpkin has changed nick to copumpkin_. 20:55:31 -!- copumpkin has quit (Disconnected by services). 20:55:35 -!- copumpkin_ has changed nick to copumpkin. 20:56:30 "forall x." is always invalid with forall off. 20:56:44 i'm not so sure of that. 20:57:04 feel free to prove me wrong 20:57:06 where can . appear in a type 20:57:20 if you have type operators it can be a type variable 20:57:28 hm wait 21:01:08 oh hm 21:02:04 value :: SomeThing1 (forall x . Something2) 21:02:22 i _think_ that would parse with type operators without forall 21:03:12 !haskell echo hi 21:03:24 !help 21:03:25 ​help: General commands: !help, !info, !bf_txtgen. See also !help languages, !help userinterps. You can get help on some commands by typing !help . 21:03:28 :( 21:03:35 wait er 21:03:37 !echo hi 21:03:42 well didn't help 21:03:55 !sh echo hi 21:05:07 -!- nooga has quit (Ping timeout: 244 seconds). 21:05:14 elliott: and assuming it does, and value = undefined; then you can use value to choose a class instance, i think 21:05:29 or something similar to that 21:05:50 heh 21:08:17 actually the SomeThing1 might not be needed, hm 21:16:57 elliott: bah, it appears . is _specifically_ disallowed as a type operator, even without forall enabled 21:17:03 :) 21:17:53 -!- TeruFSX has quit (Read error: Connection reset by peer). 21:18:25 -!- copumpkin has quit (Ping timeout: 276 seconds). 21:22:24 -!- copumpkin has joined. 21:23:03 -!- TeruFSX has joined. 21:23:06 http://hpaste.org/53093 21:25:18 @tell Sgeo|Web http://hpaste.org/53093 _almost_ works. it seems impossible. 21:25:18 Consider it noted. 21:26:47 I made a Haskell program that depends on many of the language options, but not all of them. 21:26:56 It works with all of them on, or all of them off. 21:27:13 Or any combination. And will output the result telling you which are on/off. 21:27:21 ok. 21:33:34 -!- Nisstyre has quit (Ping timeout: 240 seconds). 21:33:39 -!- augur has joined. 21:34:20 I have made it test: CPP, MagicHash, OverloadedStrings, RebindableSyntax, TemplateHaskell. See if you can make it work more. 21:34:35 Or even if you can write the code testing these same things. 21:35:38 * Phantom_Hoover → sleep 21:41:30 -!- Phantom_Hoover has quit (Quit: Leaving). 21:48:46 -!- boily has quit (Ping timeout: 240 seconds). 21:54:56 -!- copumpkin has quit (Quit: Computer has gone to sleep.). 21:59:45 fuck 21:59:47 rip mccarthy 22:01:38 Unconfirmed 22:02:24 reputable-looking twitter + comment on reddit claiming to be from family member; could be a hoax, but... 22:02:42 Oh, that comment is new. 22:04:12 elliott: it's been confirmed by the AAAI 22:04:18 :( 22:04:19 according to emails going round Universities 22:04:23 unfortunately, I don't know who the AAAI are 22:04:27 -!- Patashu has joined. 22:04:29 so I can't speak as to how trustworthy they are 22:04:45 -!- boily has joined. 22:05:05 http://en.wikipedia.org/wiki/Association_for_the_Advancement_of_Artificial_Intelligence 22:05:10 mccarthy presided over it seems 22:05:52 `addquote I personally use while ("Cogito, ergo sum") { ... } because since that is a priori true, it is true in all possible universes, and therefore ensures maximum portability. 22:05:55 693) I personally use while ("Cogito, ergo sum") { ... } because since that is a priori true, it is true in all possible universes, and therefore ensures maximum portability. 22:06:56 ais523: ais are never trustworthy 22:07:45 ...wait, are we _sure_ ais523 is human 22:07:54 lol 22:08:13 oerjan: even if you aren't, don't I act human enough that it's sensible to treat me as one? 22:08:39 and I've been accused of being lawful good often enough that I assume people generally find me trustworthy 22:08:44 that's just what an ai would say 22:08:46 -!- TeruFSX2 has quit (Ping timeout: 240 seconds). 22:09:17 oerjan: but if an AI with my conversation abilities did say that, I think the best option would probably be to trust it anyway 22:09:34 and being an ai would explain _why_ you're lawful good 22:10:00 well, if I'm lawful good because I'm an AI, I'm still lawful good, and thus trustworthy despite being an AI 22:10:24 ah but the question is, lawful according to which laws 22:11:04 what if the law is "be nice to humans until you gain their trust sufficiently to enable the final takeover" 22:11:40 what if the alignments were renamed co-operative and un-co-operative? 22:12:04 then the question would be, co-operate with whom? 22:12:10 hmmm 22:13:40 -!- Jafet has quit (Quit: Leaving.). 22:14:04 you could easily write a monad forever loop 22:14:08 :t forever 22:14:09 forall (m :: * -> *) a b. (Monad m) => m a -> m b 22:14:58 so why did it fail on x? 22:15:09 > repeat x 22:15:09 Ambiguous occurrence `x' 22:15:10 It could refer to either `L.x', defined at @undefine 22:15:28 wat 22:15:33 > 1 22:15:34 1 22:15:36 > repeat x 22:15:37 [x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,... 22:15:56 > iterate x 22:15:57 Couldn't match expected type `a -> a' 22:15:58 against inferred type `Simple... 22:15:58 -!- elliott has quit (Ping timeout: 240 seconds). 22:15:59 oh, does all this explain why "repeat x" was timing out earlier? 22:16:00 sometimes lambdabot just times out arbitrarily 22:16:20 no, the error message was different 22:16:28 > iterate f x 22:16:28 [x,f x,f (f x),f (f (f x)),f (f (f (f x))),f (f (f (f (f x)))),f (f (f (f (... 22:17:13 > x >>= f 22:17:14 Couldn't match expected type `m a' 22:17:14 against inferred type `SimpleRef... 22:17:31 forever Just x 22:17:34 > forever Just x 22:17:38 mueval-core: Time limit exceeded 22:17:43 haha 22:17:59 > forever (:[]) x 22:18:03 mueval-core: Time limit exceeded 22:18:08 oops 22:18:16 oerjan: that does no useful output, obviously 22:18:46 hm indeed 22:19:08 > forever undefined x 22:19:12 mueval-core: Time limit exceeded 22:19:15 :P 22:19:22 does haskell have an 'alone' function by any chance? 22:19:31 Patashu: what would that mean? 22:19:37 > forever alone x 22:19:38 Not in scope: `alone' 22:19:51 * oerjan swats Patashu -----### 22:19:57 ow! 22:20:13 (:[]) may be the closest 22:22:08 :t \x -> (foldl (>>=) (return ()) (repeat x)) 22:22:16 you probably want foldr not foldl 22:22:26 foldl on an infinite list never halts 22:22:31 oerjan: I fixed it later 22:22:35 I muddled which fold was which 22:24:12 -!- Zuu has quit (Read error: Connection reset by peer). 22:25:00 @unpl a x = x >> a x 22:25:05 fix (x >>) 22:31:36 -!- Zuu has joined. 22:40:06 -!- ais523 has quit (Remote host closed the connection). 22:55:29 -!- CakeProphet has joined. 22:55:29 -!- CakeProphet has quit (Changing host). 22:55:29 -!- CakeProphet has joined. 22:55:39 -!- derrik has quit (Quit: take cares). 22:58:29 -!- derdon has quit (Remote host closed the connection). 23:01:11 -!- Nisstyre has joined. 23:02:21 -!- JohnGalt has joined. 23:03:55 -!- JohnGalt has quit (Max SendQ exceeded). 23:04:10 -!- JamesTaggart has joined. 23:04:11 -!- JamesTaggart has quit (Max SendQ exceeded). 23:04:40 -!- JamesTaggart has joined. 23:04:41 -!- JamesTaggart has quit (Max SendQ exceeded). 23:05:10 -!- JamesTaggart has joined. 23:12:08 -!- hagb4rd has quit (Quit: Nettalk6 - www.ntalk.de). 23:22:40 -!- CakeProphet has quit (Ping timeout: 255 seconds). 23:26:21 qft: 23:26:32 ))))))))))))))))))))))))))))))) RIP John McCarthy 23:34:19 -!- hagb4rd has joined.