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