←2011-12-24 2011-12-25 2011-12-26→ ↑2011 ↑all
00:01:20 -!- MDude has joined.
00:02:10 <elliott_> <kallisti> elliott_: also, foldr performs tail call elimination.
00:02:14 <elliott_> kallisti: You're an idiot.
00:02:43 <kallisti> elliott_: it does. that's precisely why it's constant space. no stack frames are allocated.
00:02:50 <kallisti> aside from the first one
00:03:19 <Gregor> ... oy.
00:03:20 <fizzie> fungot: So tell me about recharging Moon Stones? Is it true that it takes aeons? Will we see that gorgeous glow again?
00:03:20 <fungot> fizzie: to the northwest of this cape. he took back the medal from the frog king. and i'd like to see that mystical sword for myself! geez!
00:03:36 <Gregor> foldr does not /perform/ tail call elimination, foldr /benefits/ from tail call elimination.
00:03:39 -!- itidus21 has quit (Ping timeout: 244 seconds).
00:03:51 <kallisti> Gregor: sooooo pedantic. for fucks sake.
00:03:52 <elliott_> Gregor: It doesn't do that, either.
00:04:00 <elliott_> kallisti has no idea how the call stack works in Haskell.
00:04:09 <elliott_> And I for one am not going to be the one to teach him how it does.
00:04:22 <Gregor> Ohwait, foldl would actually benefit, wouldn't it, not foldr ...
00:04:25 <elliott_> Gregor: I mean, yes, it's guarded recursion, i.e. the recursion is a non-strict field of a constructor in WHNF.
00:04:28 <elliott_> But that's not tail recursion.
00:04:39 <elliott_> Tail recursion is a purely syntactic property that is roughly 100% irrelevant in Haskell.
00:05:17 <kallisti> elliott_: but it's the same optimization as tail call elimination. if it weren't, the stack would overflow as the list is traversed.
00:05:53 <elliott_> kallisti: Have I mentioned you're an idiot?
00:06:03 <kallisti> no.
00:07:20 <elliott_> See, usually when I call people idiots, I make some attempt to explain to them why they're wrong. Also fun fact: This offer is voided when said person has a history of being adamant and sarcastic in asserting 1they're correct in the face of someonew ho knows more about them about a topic!
00:07:28 <elliott_> "The fundamental cause of the trouble is that in the modern world the stupid are cocksure while the intelligent are full of doubt." --Jesus
00:07:53 <kallisti> elliott_: perhaps you think I'm talking about tail recursion in a strict language.
00:08:42 <elliott_> Perhaps I'm not making any unwarranted or unreasonable assumptions, know exactly what you're trying to say, and you're just wrong.
00:08:48 <elliott_> fizzie: Thx for -c btw, it's best.
00:15:10 <kallisti> elliott_: ...I
00:15:15 <kallisti> okay, you're not going to give me a chance.
00:15:21 <kallisti> waste of time.
00:16:04 <elliott_> kallisti: I've given you about a hundred chances, it's called every single time you've done this.
00:16:28 <elliott_> I'm just stupid enough to keep biting the bait.
00:16:55 <kallisti> elliott_: first of all, I know how Haskell's "call stack" works.
00:18:09 <elliott_> That's what you say literally every time.
00:18:38 <elliott_> You understand everything perfectly, you're just having a perfectly reasonable and valid disagreement among peers, until a few days later someone manages to bang into your head why you've made a fundamental misunderstanding, which you then claim was minor.
00:18:43 <elliott_> Seriously, I'm not interested.
00:19:08 <elliott_> It's even more a waste of time than the rest of this channel's topics but at least those are entertaining.
00:19:42 <kallisti> elliott "too good for #esoteric" hird
00:20:46 <elliott_> Yes, that's absolutely what I said.
00:21:32 <Gregor> Y'know, I'll bet if you /generated/ timelines instead of having presets (or as well as having presets), you could actually do an arbitrary-date time travel game reasonably ...
00:23:01 <Gregor> Feh, generating arbitrary timelines would be tough though X-D
00:23:15 <Gregor> Probably not impossible >_>
00:23:45 <Gregor> You'd have to find a way to do it on a massive scale and then sub-divide for individuals without making the whole no longer equal the sum of the parts.
00:23:58 <Gregor> Plus of course certain people are more important to history than others ...
00:25:27 <elliott_> Gregor: Remember when you had that awesome time raytracing thing and it turned out to be boring? :(
00:25:42 * elliott_ still bitter
00:25:57 <kallisti> elliott_: in fact I'm also aware that writing a function with "tail calls" and an accumulating list can be slower than an equivalent function that simply constructs the list directly.
00:26:24 <kallisti> elliott_: because I've written both of them and observed that constructing the list directly is faster.
00:27:24 <kallisti> elliott_: I'm not talking about a syntactic tail call.
00:27:48 <elliott_> Tail calls are about complexity, not speed. And the definition of "tail call" is syntactic (consult e.g. the Scheme specification if you disagree). And I'm not arguing this so why am I even typing this.
00:32:19 <kallisti> elliott_: I really don't think there's anything to argue about.
00:32:44 <kallisti> another thing I "always" do, therefore: the result must always be the same because lol
00:43:57 <elliott_> I think I will go to bed.
00:49:48 <kallisti> hmm interesting.
00:50:02 <kallisti> so if I use Word -> [Word] for my factoring function, it runs extremely fast.
00:50:09 <kallisti> ah wait nevermind
00:50:44 <kallisti> okay. sanity restored
00:51:42 -!- elliott_ has quit (Ping timeout: 244 seconds).
00:59:53 <kallisti> @tell oerjan do you think there could be a faster way to write integer squareroot than floor . sqrt . fromIntegral
00:59:53 <lambdabot> Consider it noted.
01:02:44 <Sgeo> What's wrong with that?
01:03:08 <kallisti> NOT FAST ENOUGH
01:03:14 <kallisti> I think I've found a faster intsqrt
01:03:30 <kallisti> in Math.NumberTheory.Powers.Squares
01:05:15 <kallisti> Sgeo: nothing is wrong with it.
01:05:55 <kallisti> in fact since I only do one sqrt this is entirely a waste of time.
01:06:39 <Sgeo> Clearly, you should use the magic number thingy
01:07:04 <Sgeo> Oh, that's the reciprocal of the square root
01:07:38 <Sgeo> Also, not integer I guess
01:10:09 <kallisti> wow amazing
01:10:17 <kallisti> no significant improvement in speed
01:10:28 <kallisti> from optimizing one square root operation.
01:10:51 <kallisti> ~.53 to ~.52
01:14:03 <kallisti> (seconds)
01:14:12 <Deewiant> (Use ministat (from e.g. FreeBSD) or something equivalent for your benchmarking before calling something significant)
01:14:36 <kallisti> Deewiant: what? I can't just spam time over and over and guesstimate?
01:14:53 <kallisti> anyway I don't think this is measurably significant.
01:14:56 <Sgeo> http://www.independent.co.uk/travel/news-and-advice/airlines-cleared-to-use-santas-shortcut-6281263.html What will this do to the Flat Earth society?
01:14:57 <Deewiant> Generally speaking no
01:15:17 <kallisti> http://sprunge.us/LBOd any suggestions?
01:16:30 <Deewiant> EQ | m == 0 -> [i]; _ -> []
01:16:36 <Deewiant> Not that it should matter
01:17:18 <kallisti> ...why would I do that?
01:18:27 <kallisti> looks to be about the same.
01:18:33 <Sgeo> Wait, they consider the edge to be in the Antarctic, right?
01:19:08 <kallisti> I think to make this any significantly faster I'd need to change the algorithm.
01:19:19 <kallisti> I've pretty much optimized this one as much as possible.
01:19:30 <Deewiant> Branch prediction should handle most of this kind of thing anyway
01:20:18 <Deewiant> You can try using 'if m == 0' as a higher-level check if you want, though
01:21:16 <kallisti> I don't think that will do anything, and will make the code uglier probably.
01:22:11 <Sgeo> if' t f True = t
01:22:17 <Sgeo> if' t f False = f
01:22:33 <Sgeo> Hmm, wait
01:22:57 <Sgeo> That makes it hard to do an if based on (==0)\
01:22:59 <Sgeo> I think
01:23:12 <kallisti> ...what.
01:23:38 <kallisti> heh, I could make the code really ugly and unroll the loop a little. :P
01:24:20 <kallisti> for probably absolutely no gain.
01:27:55 -!- MDude has quit (Ping timeout: 240 seconds).
01:36:36 -!- zzo38 has joined.
01:41:51 <kallisti> zzo38: how do you print a Word#?
01:43:32 <zzo38> kallisti: Maybe you use a constructor, is it called W# or something like that
01:43:59 <kallisti> hm
01:43:59 <kallisti> ?
01:44:11 <kallisti> @hoogle W#
01:44:12 <lambdabot> GHC.Exts W# :: Word# -> Word
01:44:19 <kallisti> oh, I have to do that.
01:44:19 <kallisti> okay.
01:47:33 <kallisti> @hoogle Word# -> Ordering
01:47:33 <lambdabot> Unsafe.Coerce unsafeCoerce :: a -> b
01:47:33 <lambdabot> Data.Ord comparing :: Ord a => (b -> a) -> b -> b -> Ordering
01:47:33 <lambdabot> Prelude (\$) :: (a -> b) -> a -> b
01:47:36 <kallisti> hm
01:48:10 <kallisti> hmmm no wordCompare#
01:56:35 <kallisti> going from about 5 seconds to .5 is a pretty big improvement.
01:56:44 <kallisti> I'm too lazy to try unboxing though
02:02:04 -!- nooga has quit (Ping timeout: 252 seconds).
02:02:44 <kallisti> @hoogle Word# -> Float#
02:02:44 <lambdabot> Unsafe.Coerce unsafeCoerce :: a -> b
02:02:44 <lambdabot> Prelude (\$) :: (a -> b) -> a -> b
02:02:44 <lambdabot> Data.Function (\$) :: (a -> b) -> a -> b
02:02:47 <kallisti> hm
02:03:40 <kallisti> @hoogle Word -> Word#
02:03:40 <lambdabot> Unsafe.Coerce unsafeCoerce :: a -> b
02:03:41 <lambdabot> Control.OldException throwDyn :: Typeable exception => exception -> b
02:03:41 <lambdabot> Control.DeepSeq (\$!!) :: NFData a => (a -> b) -> a -> b
02:04:22 -!- derdon has quit (Remote host closed the connection).
02:13:40 <kallisti> :t 2##
02:13:41 <lambdabot> GHC.Prim.Word#
02:13:45 <kallisti> excellent
02:17:17 <kallisti> > float2Int# 3.2#
02:17:17 <lambdabot> Not in scope: `float2Int#'
03:03:40 -!- Klisz has joined.
03:06:16 <Sgeo> telnet miku.acm.uiuc.edu
03:11:49 <monqy> :(
03:13:24 <kallisti> turns out using explicit unboxing is slower because I have to reconstruct the boxed types in order to print them.
03:19:40 <kallisti> oh, hmmm, wait.
03:19:52 <kallisti> maybe since IO is strict I should use an accumulating parameter.
03:21:57 -!- incomprehensibly has quit (Ping timeout: 255 seconds).
03:28:50 -!- incomprehensibly has joined.
03:30:31 -!- incomprehensibly has quit (Client Quit).
03:43:39 -!- DCliche has joined.
03:47:24 -!- Klisz has quit (Ping timeout: 276 seconds).
04:03:21 -!- azaq23 has quit (Quit: Leaving.).
04:16:58 -!- Gregor has quit (Ping timeout: 252 seconds).
04:20:43 -!- Gregor has joined.
04:24:50 <Sgeo> What's a 10th doctor episode I should watch? (Not Blink)
04:24:59 <Sgeo> And not SitL/FotD
04:25:38 <Gregor> Why don't you just watch them in order ...
04:25:52 <Sgeo> I've heard that they're mostly bad
04:26:09 <Gregor> So?
04:26:12 <Gregor> Suck it up.
04:28:28 <kallisti> yes being entertained should feel like running cross country.
04:28:38 <kallisti> you must endure it.
04:29:28 * Sgeo has yet to watch the rest of DS9
04:29:48 <kallisti> you know what I find really bizzare about American television? aside from the material itself...
04:29:51 <kallisti> canned laughter.
04:30:35 <Gregor> Yeah, laugh tracks are stupid.
04:30:58 <Gregor> But there is a lot of honest-to-goodness recorded-audience too, and laugh tracks are getting much less common.
04:32:53 <kallisti> I would like a window mode that's "always on top of maximized windows"
04:33:43 <kallisti> or "always on top of larger windows"
04:34:00 <Gregor> Hmm, I'm trying to think of what sit-coms I like that actually /use/ a laugh track ... almost none ...
04:34:09 <augur> Sgeo: bli-- oh
04:34:14 <augur> uh how about silence in th--- oh
04:34:22 <augur> uh
04:35:00 <augur> how about the season 4 finale.
04:35:10 <Gregor> Oh wait, duh, Seinfeld.
04:35:46 <augur> man whats the deal with seinfeld
04:36:00 <Gregor> It's the greatest sit-com ever made?
04:36:15 <augur> -_-
04:36:32 <Gregor> All those who don't like Seinfeld are bad people.
04:36:41 <augur> apparently subtle seinfeld references made to seinfeld snobs go unnoticed
04:36:42 * Sgeo is not a bad person.
04:37:14 <augur> Gregor: if i could ban you from life i wold
04:37:42 <Gregor> augur: That reference, it was way too subtle, I didn't get it X-D
04:38:10 <kallisti> Gregor: Seinfeld is good
04:38:12 <Gregor> Since it's, y'know, a thing people say.
04:38:30 <kallisti> I also enjoy How I Met Your Mother but I don't remember if it has a lauhg trakc or ont I am dontr emeber
04:38:38 <Gregor> kallisti: It definitely does.
04:38:55 <kallisti> I've basically removed all television from my daily mind diet.
04:39:05 <kallisti> for... like 3 years now.
04:40:13 <Gregor> I like some classique sitcoms too, I wonder if I Dream of Jeannie has a laugh track ... probably, but it may have been live.
04:40:29 <kallisti> I don't think that one was.
04:40:34 <kallisti> I like All in the Family, which is live.
04:41:29 <Gregor> Oh well. Silly laugh tracks.
04:44:27 -!- Darth_Cliche has joined.
04:46:04 <Gregor> I should make a laugh track bot.
04:46:20 <Gregor> And use some terrible heuristics to decide when it should laugh.
04:46:51 -!- I0ther has joined.
04:47:11 <Gregor> `welcome I0ther
04:47:22 <HackEgo> I0ther: 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
04:47:31 <I0ther> Hi Gregor
04:47:38 <I0ther> Thanks HackEgo
04:47:45 -!- DCliche has quit (Ping timeout: 252 seconds).
04:48:14 <Sgeo> Meet the bots!
04:48:24 <Sgeo> Erm, so many bots I'm not quite sure which do what, tbh
04:48:34 <kallisti> Gregor: use a weighting factor that looks at different patterns and totals a weight, which has to pash a threshhold.
04:48:36 <Sgeo> > text "Hello, I'm lambdabot. I do Haskell stuff."
04:48:37 <lambdabot> Hello, I'm lambdabot. I do Haskell stuff.
04:48:42 <kallisti> Gregor: :P would be such a pattern.
04:49:16 <Sgeo> `echo Hello. I'm .. some bot. I do Linuxy stuff. Shell commands can be run on me.
04:49:19 <HackEgo> Hello. I'm .. some bot. I do Linuxy stuff. Shell commands can be run on me.
04:49:25 -!- I0ther has left.
04:49:27 <Sgeo> ...
04:49:28 <Gregor> kallisti: I was thinking I'd make a decision tree and train it off of the channel logs, with lines followed by "lol" or "rofl" etc having high value.
04:49:40 <kallisti> fungot: introduce yourself
04:49:41 <fungot> kallisti: time to shove off! the name's bandeau. here to build the ocean palace? when do i work! the ultimate in defense for my, daughter! just like crono!
04:49:45 <Gregor> Sgeo: Nobody ever thought he was going to stay.
04:49:58 <Sgeo> I didn't mean to scare him off
04:49:59 <kallisti> Gregor: ah that's a good idea. You could also use "heh" or "(ha)+"
04:50:07 <Gregor> Indeed
04:52:23 <kallisti> (b|mw|mua)?a*(h+a+)+
04:52:37 <Gregor> Nah, people don't muahahaha when something is funny.
04:52:56 <Gregor> They muahahaha right after taking a bite out of a baby's skull while The Good Guy watches helplessly.
04:52:57 <kallisti> sure they do.
04:52:58 <kallisti> muahahahahahahaha
04:55:57 <Sgeo> baa
04:56:10 <Sgeo> Oh, that doesn't fit
04:56:22 <Sgeo> mwha
04:56:57 <Gregor> Actually baa does fit.
04:57:00 <Gregor> As does baaaaaaaaaaaaaaaaaaaaa
04:57:06 <Gregor> also, a
04:57:12 <Gregor> Err, aa
04:57:17 <Sgeo> But the h is unavoidable, isn't it?
04:57:21 <Sgeo> + is one or more?
04:57:23 <Gregor> Nowait, yeah, need an h.
04:57:25 <Gregor> I missed that.
04:57:29 <Gregor> Thought it was * for some reason.
04:57:49 <Gregor> That's actually a pretty good RE :(
04:58:16 * kallisti is master of regex.
04:58:25 * kallisti master
05:01:20 -!- Darth_Cliche has quit (Quit: You are now graced with my absence.).
05:11:04 -!- copumpkin has quit (Ping timeout: 240 seconds).
05:18:09 -!- copumpkin has joined.
05:26:15 <pikhq> http://0taku.livedoor.biz/archives/4055139.html On the WTF scale of 1 to 10, this somehow overflows int.
05:26:37 <pikhq> (Japanese language, understanding not necessary)
05:27:42 <pikhq> (Context: They are celebrating Christmas. ... With characters from animation and animated porn.)
05:28:21 <monqy> sounds like good fun
05:28:32 <Madoka-Kaname> I think in Japanese it's something like 「なんでやねん！？」
05:29:35 <pikhq> Yeah, that would be a translation for WTF.
05:34:41 <zzo38> Does this mean anything meaningful to you? newtype T v f x = T (T x f v -> f x);
05:35:27 <pikhq> Sgeo: Meh, no worries.
05:38:52 <zzo38> Madoka-Kaname: I don't really know what, it is why I asked
05:43:40 <Sgeo> There exists a paper about PerlNomic
05:44:26 <kallisti> perlnomic?
05:44:41 <Sgeo> ...you've never heard of perlnomic.
05:44:44 <kallisti> nope
05:44:47 <kallisti> is it context based?
05:44:54 <Sgeo> Huh?
05:44:55 <kallisti> do you evaluate laws in list and scalar context?
05:45:03 <Sgeo> The code is the law
05:45:11 <kallisti> ah, so yes.
05:49:36 -!- PiRSquared17 has joined.
05:50:25 <zzo38> I wonder whether the type I specified is a functor or monad or category (with type arguments swapped) or anything else at all
05:52:17 <Madoka-Kaname> Sgeo, let's play Python nomic
06:02:35 <PiRSquared17> o.O
06:03:02 <Madoka-Kaname> (This is the code version of legalese, right?)
06:07:24 <Madoka-Kaname> Or, if you want a slightly less line-overflowing version:
06:09:09 <PiRSquared17> I don't trust that
06:10:56 <Madoka-Kaname> Sgeo, has anybody done something like that in Perl Nomic?
06:11:25 <Sgeo> Get rid of the exec and it should be .. n/m
06:22:53 <Madoka-Kaname> Sgeo, this is the final version of the "law"
06:23:55 <PiRSquared17> What does that decode to
06:24:03 <PiRSquared17> (to scared to try)
06:24:04 <PiRSquared17> ?
06:24:07 <PiRSquared17> *too
06:25:52 <Madoka-Kaname> PiRSquared17, replace the "exec" with a "print"
06:28:55 <Madoka-Kaname> The trick here is this:
06:29:00 <Madoka-Kaname> This is the actual exec call
06:29:03 <Madoka-Kaname> The first one is a decoy
06:45:53 -!- DeadlyFugu has quit (Ping timeout: 252 seconds).
06:47:30 <zzo38> Make a computer game based on the story of Dungeons&Dragons game I have been playing in (you can read it in order to do so, because I recorded everything in this story so far)
07:09:41 -!- PiRSquared17 has changed nick to PiRSquaredAway.
07:34:03 <zzo38> The type I specified above, it seem to me, x is always going to be covariant and v always contravariant, if f is functor. But I don't know how well they will work
07:40:06 <zzo38> Sgeo: Barrier monad is really a somewhat more specific version of that. I did not see that until afterward, though, and barrier monad library also has some of its addition functions
08:05:12 <kallisti> -e expr Evaluate expr; see for details.
08:05:15 <kallisti> thanks ghc!
08:11:41 <pikhq> Hmm. I wonder. What is the monetary value of Vatican City?
08:11:55 <pikhq> Thus far, estimates I've found have stated NAN.
08:12:33 * Sgeo wonders how to coerce quickcheck into doing what he wants
08:12:49 <Sgeo> This primarily involves learning to get to grips with quickcheck
08:12:59 <Sgeo> At least, the quickcheck on lambdabot
08:25:01 -!- oerjan has joined.
08:31:35 -!- Patashu has joined.
08:33:16 <zzo38> What might the type I specified to make? newtype T v f x = T (T x f v -> f x); Do you have any idea about this?
08:33:50 <zzo38> Is it any kind of data structure or control structure?
08:35:29 <oerjan> i don't know but it reminds me of the "haskelljoust" game elliott and i discussed, and the type i made for it which he seemed not to like: newtype HJ = HJ (HJ -> Bool)
08:35:30 <lambdabot> oerjan: You have 1 new message. '/msg lambdabot @messages' to read it.
08:37:30 <zzo38> Is it any kind of... Functor? Category? Monad? Applicative? Transformer? (Of course to be a category you would need to flip the type arguments, if it can make any category at all!)
08:37:53 <zzo38> oerjan: O, what were you going to use that HJ type for exactly?
08:38:08 <zzo38> I don't know what a "haskelljoust" game is
08:39:29 <zzo38> But, yes I can see what kind of similarity there is
08:42:50 <oerjan> well i mean that as an analogy to bfjoust: each player makes a "warrior", a haskell expression of type HJ -> Bool. they are then tested by calculating w1 (HJ w1), w1 (HJ w2), w2 (HJ w1) and w2 (HJ w2). each warrior must return True when passed itself, and to win it should return False when passed the other, while the other fails at the reverse (by either returning True or not returning a Bool at all within the time limit)
08:46:01 <Sgeo> What happens if they both succeed or both fail?
08:46:03 <zzo38> I don't know how well that would actually work.
08:46:07 <oerjan> Sgeo: a tie
08:46:30 <Sgeo> Also, Haskell functions are opaque, aren't they?
08:46:31 <zzo38> Do you have an example of a pair of functions that both succeed?
08:46:39 <Sgeo> Well, I guess you could pass them data to see how they act
08:47:47 <Sgeo> Hmm
08:47:48 <zzo38> However, the type I specified is a bit different, in a few ways
08:47:50 <oerjan> yes, basically you can start with const True (a warrior which never wins) and const False (always disqualified) and build more complicated HJ values from that
08:48:20 * Sgeo wonders if it's possible to make a warrior that always forces a tie
08:48:37 <Sgeo> Not sure where I got the idea from
08:49:27 <Sgeo> Trivial warrior that's tough to defeat unless a human writes a specialized warrior to defeat it:
08:49:32 <Sgeo> ...n/m
08:49:33 <oerjan> Sgeo: i don't know. you can do something like \w -> w (HJ w) which will tend to cause loops, but then you get disqualified for not return True for yourself
08:49:58 <Sgeo> I was thinking some sort of warrior that could do a signature thing, but that makes no sense
08:49:59 <oerjan> *returning
08:50:16 <oerjan> Sgeo: actually i think that makes quite a bit of sense.
08:50:26 <Sgeo> Unless you can make this idea work: A signature that the warrior checks for, if it means the signature it returns true, otherwise false
08:50:38 <Sgeo> I have no idea how you'd pass in a signature though.
08:51:01 <oerjan> Sgeo: well think of const False and const True as the simplest possible signatures.
08:54:36 <Vorpal> <elliott_> Oh no, Satan is giving presents to Vorpal now. <-- is he?
08:55:18 <zzo38> For my type: lift = T . const; empty = T \$ const empty; T x <|> T y = T \$ \z -> x z <|> y z; And I am not sure what else, if any
08:59:57 <kallisti> imagines a world in which wolfram alpha is actually kind of good
09:01:26 <Vorpal> Sgeo: warrior for what?
09:01:46 <Vorpal> heh
09:04:15 <zzo38> Can any Alternative or MonadPlus be made backward? I would think so, by swapping the order of <|>
09:04:40 <zzo38> This might affect functions that use <|> such as optional and some and many
09:08:04 <oerjan> zzo38: does this work for Functor f => Functor (T v f x): fmap g (T h) = T (\t -> fmap g . h \$ fmap' g t); fmap' g (T t) = T (\h -> t \$ fmap g h)
09:09:47 <oerjan> or pointfree, fmap g (T h) = T (fmap g . h . fmap' g); fmap' g (T t) = T (t . fmap g)
09:10:09 <Sgeo> I think I'm in love with enumerator
09:12:12 <oerjan> fmap' :: (x -> y) -> T y f v -> T x f v
09:12:29 <oerjan> *fmap' :: Functor f => (x -> y) -> T y f v -> T x f v
09:12:53 <zzo38> oerjan: Maybe; I am going to sleep now, though. Try it yourself or keep writing message if you want to, which I will read tomorrow or the next day. Or just wait until I am back on
09:12:57 -!- zzo38 has quit (Quit: zzo38).
09:14:02 -!- itidus21 has joined.
09:14:50 <oerjan> `haskell newtype T v f x = T (T x f v -> f x); instance Functor f => Functor (T v f x) where { fmap g (T h) = T (fmap g . h . fmap' g) }; fmap' g (T t) = T (t . fmap g); main = print "Yay it types!"
09:15:04 <oerjan> AAAAAAAAAAAAAAAAAAAAAa
09:15:34 <oerjan> !haskell newtype T v f x = T (T x f v -> f x); instance Functor f => Functor (T v f x) where { fmap g (T h) = T (fmap g . h . fmap' g) }; fmap' g (T t) = T (t . fmap g); main = print "Yay it types!"
09:15:41 <Vorpal> oerjan: why not use lambdabot?
09:15:41 <EgoBot> runhaskell: syntax: runghc [-f GHC-PATH | --] [GHC-ARGS] [--] FILE ARG...
09:15:58 <oerjan> Vorpal: HAVE YOU EVER SEEN LAMBDABOT ACCEPT A TYPE DECLARATION?
09:16:06 <Vorpal> oerjan: now that you mention it, no
09:16:14 <Vorpal> which is kind of silly
09:16:16 <Vorpal> it should
09:16:59 <Vorpal> bbiab
09:17:06 -!- Vorpal has quit (Quit: ZNC - http://znc.sourceforge.net).
09:18:29 -!- Vorpal has joined.
09:18:29 <oerjan> `run ls bin h*
09:18:32 <HackEgo> ls: cannot access h*: No such file or directory \ bin: \ ? \ @ \ No \ _tmpe \ addquote \ allquotes \ calc \ define \ delquote \ etymology \ forget \ fortune \ frink \ google \ hatesgeo \ json \ k \ karma \ karma+ \ karma- \ learn \ log \ logurl \ macro \ marco \ paste \ pastekarma \ pastelog \ pastelogs \ pastenquotes \ pastequotes \ pastewisdom \ pastlog \ ping \ prefixes \ qc \ quote \ quotes \ roll \ toutf8
09:20:25 <oerjan> @tell elliott so let me see, i complained the other day that we didn't have a bot which accepted haskell modules because EgoBot's was broken; kallisti helpfully put one in HackEgo despite your best attempts to sabotage him; you sent a fix for EgoBot and then considered the fact you had _sent_ the fix enough reason to DELETE kallisti's version; which with Gregor's usual responsivity means we _still_ don't have a bot capable of haskell modules.
09:20:25 <lambdabot> Consider it noted.
09:23:10 <oerjan> @tell elliott oh well i guess can use runhaskell directly. i still have this urge to ban you though. merry christmas.
09:23:10 <lambdabot> Consider it noted.
09:23:30 <kallisti> oerjan: lol
09:24:11 <oerjan> `run echo 'newtype T v f x = T (T x f v -> f x); instance Functor f => Functor (T v f x) where { fmap g (T h) = T (fmap g . h . fmap' g) }; fmap' g (T t) = T (t . fmap g); main = print "Yay it types!"' >typetest.hs
09:24:14 <HackEgo> bash: -c: line 0: syntax error near unexpected token `)' \ bash: -c: line 0: `echo 'newtype T v f x = T (T x f v -> f x); instance Functor f => Functor (T v f x) where { fmap g (T h) = T (fmap g . h . fmap' g) }; fmap' g (T t) = T (t . fmap g); main = print "Yay it types!"' >typetest.hs'
09:24:22 <oerjan> goddammit
09:24:43 <oerjan> `run echo "newtype T v f x = T (T x f v -> f x); instance Functor f => Functor (T v f x) where { fmap g (T h) = T (fmap g . h . fmap' g) }; fmap' g (T t) = T (t . fmap g); main = print "'"Yay it types!"' >typetest.hs
09:24:46 <HackEgo> No output.
09:24:55 <oerjan> `cat typetest.hs
09:24:57 <Vorpal> oerjan, use `revert to get kallisti's code?
09:24:58 <HackEgo> newtype T v f x = T (T x f v -> f x); instance Functor f => Functor (T v f x) where { fmap g (T h) = T (fmap g . h . fmap' g) }; fmap' g (T t) = T (t . fmap g); main = print "Yay it types!"
09:25:40 <oerjan> Vorpal: i am not proficient with vcs'es; won't that revert everything else done since then?
09:26:04 <Vorpal> oerjan, well yes, so extract the file only then
09:26:21 <kallisti> well it would be trivial to rewrite I believe.
09:26:49 <kallisti> oerjan: noep
09:26:50 <kallisti> oh
09:26:52 <HackEgo> ​\ typetest.hs:1:70: \ Kind mis-match \ The first argument of `Functor' should have kind `* -> *', \ but `T v f x' has kind `*' \ In the instance declaration for `Functor (T v f x)'
09:26:59 <oerjan> oops
09:27:10 <oerjan> `run echo "newtype T v f x = T (T x f v -> f x); instance Functor f => Functor (T v f) where { fmap g (T h) = T (fmap g . h . fmap' g) }; fmap' g (T t) = T (t . fmap g); main = print "'"Yay it types!"' >typetest.hs
09:27:13 <HackEgo> No output.
09:27:21 <HackEgo> ​"Yay it types!"
09:27:24 <oerjan> whew
09:29:43 <oerjan> `help
09:29:45 <HackEgo> Runs arbitrary code in GNU/Linux. Type "`<command>", or "`run <command>" for full shell commands. "`fetch <URL>" downloads files. Files saved to \$PWD are persistent, and \$PWD/bin is in \$PATH. \$PWD is a mercurial repository, "`revert <rev>" can be used to revert to a revision. See http://codu.org/projects/hackbot/fshg/
09:32:05 <oerjan> @tell elliott i suppose you helped kallisti with it, too...
09:32:05 <lambdabot> Consider it noted.
09:32:40 <Vorpal> ah there we go
09:32:47 <HackEgo> bash: -c: line 0: unexpected EOF while looking for matching `'' \ bash: -c: line 1: syntax error: unexpected end of file
09:32:58 <HackEgo> No output.
09:33:01 <kallisti> `haskell main = print (2+2)
09:33:04 <HackEgo> ​/home/hackbot/hackbot.hg/multibot_cmds/lib/limits: line 5: /hackenv/bin/haskell: Permission denied \ /home/hackbot/hackbot.hg/multibot_cmds/lib/limits: line 5: exec: /hackenv/bin/haskell: cannot execute: Permission denied
09:33:12 <kallisti> `run chmod +x bin/haskell
09:33:15 <HackEgo> No output.
09:33:18 <kallisti> `haskell main = print (2+2)
09:33:21 <HackEgo> ​/hackenv/bin/haskell: 2: Syntax error: redirection unexpected
09:33:25 <kallisti> oh
09:33:27 <oerjan> kallisti: you know i just looked it up on http://codu.org/projects/hackbot/fshg/index.cgi/rev/d30da6e6e1c6?revcount=240
09:33:36 <HackEgo> No output.
09:33:41 <kallisti> `run chmod +x bin/haskell
09:33:43 <HackEgo> No output.
09:33:45 <kallisti> `haskell main = print (2+2)
09:33:50 <HackEgo> 4
09:33:57 <kallisti> oerjan: that's pretty much what it was.
09:34:57 <oerjan> oh well. EgoBot's version still works in ghci mode, anyway.
09:35:41 <oerjan> `haskell newtype T v f x = T (T x f v -> f x); instance Functor f => Functor (T v f x) where { fmap g (T h) = T (fmap g . h . fmap' g) }; fmap' g (T t) = T (t . fmap g); main = print "Yay it types!"
09:35:47 <HackEgo> ​\ /tmp/runghcXXXX279.hs:1:70: \ Kind mis-match \ The first argument of `Functor' should have kind `* -> *', \ but `T v f x' has kind `*' \ In the instance declaration for `Functor (T v f x)'
09:35:57 * oerjan facepalm
09:36:05 <oerjan> `haskell newtype T v f x = T (T x f v -> f x); instance Functor f => Functor (T v f) where { fmap g (T h) = T (fmap g . h . fmap' g) }; fmap' g (T t) = T (t . fmap g); main = print "Yay it types!"
09:36:10 <HackEgo> ​"Yay it types!"
09:37:39 <kallisti> oerjan: this program is a proof that it types.
09:37:43 <kallisti> beautiful
09:38:30 <oerjan> so i think. there are some cases where ghc only looks things up when used, but i that's mostly to check instance overlap.
09:38:39 <oerjan> *i think
09:38:59 <oerjan> oh and import overlaps too
09:42:24 <oerjan> hm making that pointfree actually made checking the Functor laws easier.
09:44:22 <oerjan> which is sort of expected for category theory, come to think of it.
09:45:36 <oerjan> @tell zzo38 btw, fmap' shows that T is also a contravariant functor in its first argument.
09:45:36 <lambdabot> Consider it noted.
09:46:59 -!- ais523 has joined.
09:47:18 <ais523> merry christmas everyone
09:51:59 <oerjan> ho ho ho
09:53:27 <ais523> oerjan: is it Christmas today in Norway?
09:53:31 <ais523> or is it on some other day of the year?
09:53:35 -!- Taneb has joined.
09:53:38 <oerjan> yesterday, mainly
09:54:11 <oerjan> T v f x = T ((T v f x -> f v) -> f x) if you combine two levels, which makes
09:54:31 <oerjan> it clear that all x positions are covariant, so it should be a functor.
09:56:00 <ais523> hmm, I used to be one of those people who knew the difference between covariant and contravariant, but not which was which
09:56:29 <ais523> but I think I can remember the difference nowadays in simple cases like that
09:57:09 <oerjan> well the way i think about it in haskell, the top position is covariant and then things stay the same when you go down into the fields of a data type, _except_ for the first argument of a -> which swaps them.
09:58:29 <oerjan> and of course there is the functor definition, fmap (f . g) = fmap f . fmap g but cofmap (f . g) = cofmap g . cofmap f
09:59:19 <oerjan> and if all positions of an argument in a data type are covariant you can usually make the corresponding functor.
10:00:00 <oerjan> (i thought about it the other day and if there are strict fields the laws can break down a bit in presence of bottom)
10:01:11 <oerjan> like if you have data Test x = Test Int !x; then Test is not quite a functor because fmap (const a) . fmap undefined is not = fmap (const a)
10:01:24 <oerjan> the former wipes out the Int
10:01:41 <oerjan> and the constructor
10:02:37 <kallisti> > flip f x y
10:02:37 <lambdabot> Ambiguous type variable `b' in the constraints:
10:02:38 <lambdabot> `SimpleReflect.FromExpr ...
10:02:42 <kallisti> > flip f x y :: Expr
10:02:44 <lambdabot> f y x
10:02:51 <kallisti> > flip f (g x) y :: Expr
10:02:52 <lambdabot> Ambiguous type variable `a' in the constraints:
10:02:52 <lambdabot> `SimpleReflect.FromExpr ...
10:02:56 <oerjan> of course haskellers sometimes say bottoms don't count for laws, but for ordinary lazy data structures Functor instances are frequently completely correct even then
10:03:40 <oerjan> hm...
10:04:01 <oerjan> :t expr -- this function can be useful to fix types
10:04:02 <lambdabot> Expr -> Expr
10:04:30 <oerjan> > flip f (expr \$ g x) y :: Expr
10:04:32 <lambdabot> f y (g x)
10:04:45 <oerjan> i guess that case wasn't much shorter than :: Expr
10:05:16 <oerjan> > f . expr . g . expr . h \$ x :: Expr
10:05:17 <lambdabot> f (g (h x))
10:06:18 <kallisti> I see.
10:06:20 <kallisti> @src expr
10:06:23 <oerjan> that one's harder to do with just :: Expr though
10:06:35 <oerjan> kallisti: it's just id with a type annotation, i think
10:06:52 <oerjan> and simplereflect isn't going to be in @src, it's an obscure package.
10:09:55 <kallisti> oerjan: obviously @src needs to be a universal oracle of Haskell source code.
10:10:44 <oerjan> i think haddock is the closest to that.
10:10:51 <oerjan> er
10:10:54 <oerjan> *hayoo
10:11:24 <Sgeo> Hayoo needs to be moved to Haskell.org
10:11:25 <Sgeo> >.>
10:11:25 <oerjan> which of course points to haddocks </lame-excuse>
10:13:31 <kallisti> @hoogle xmlSerialize
10:13:58 <oerjan> _and_ of course, @hoogle needs to expand to all of hackage
10:14:49 <kallisti> yes indeed
10:15:01 <kallisti> imports in Haskell programs should automatically install from hackage.
10:19:03 <Sgeo> Would Hayoo have any use if Hoogle searched all of Hackage?
10:23:38 <fizzie> If Hoogle searched all of Hackage, the obvious solution is to extend Hayoo to search all Haskell source, period. Including e.g. stuff on private people's disks and so on.
10:24:19 <oerjan> obviously.
10:32:31 -!- Taneb has quit (Ping timeout: 240 seconds).
10:35:54 <oerjan> <Sgeo> http://www.independent.co.uk/travel/news-and-advice/airlines-cleared-to-use-santas-shortcut-6281263.html What will this do to the Flat Earth society?
10:36:14 <oerjan> nothing, there's still a patch of antarctica uncovered
10:37:34 <oerjan> also, stop correcting yourself when i'm about to.
10:40:31 <Sgeo> :D
10:42:05 <oerjan> <kallisti> turns out using explicit unboxing is slower because I have to reconstruct the boxed types in order to print them.
10:42:29 <oerjan> i had this possibly unfounded impression ghc does a lot of things unboxed under the hood when it can
10:42:49 <oerjan> (which requires at a minimum that things are strict enough)
10:44:42 <kallisti> oerjan: it does, but since I collect values in a list I assumed that it wouldn't do any unboxing.
10:44:52 <oerjan> ah.
10:45:11 <oerjan> well it needs to box at the end
10:45:12 <kallisti> well, that's the rules for normal unboxed values, perhaps GHC can do more internally though
10:45:55 <kallisti> oerjan: well what I did instead was rewrite it in IO and just print the factors as I receive them
10:45:59 <kallisti> but this turns out to be slower.
10:46:56 <kallisti> perhaps because printing the values one at a time is slower than printing the whole list at once?
10:47:41 <oerjan> i dunno
10:48:23 <kallisti> anyway, lesson learned: writing unboxed code is awful and doesn't necessarily give any huge speed benefits.
10:48:49 <oerjan> ^style
10:48:49 <fungot> Available: agora alice c64 ct* darwin discworld europarl ff7 fisher fungot homestuck ic irc iwcs jargon lovecraft nethack pa qwantz sms speeches ss wp youtube
10:48:58 <oerjan> fungot: can the sword alone stop?
10:48:58 <fungot> oerjan: from where does the hero alone have the power. " m, madam...! i am the master of war! i've seen all kinds of battles from here, step back, prometheus!
10:49:31 <oerjan> fungot: so, it can stop, you say?
10:49:31 <fungot> oerjan: must think of a way to the ocean palace! and if you wish! we shall hold this position to the last man! big fire where lavos fall from sky! we no can call you " knight, slain by magus in? well, the mystical sword for myself!
10:49:49 <oerjan> fungot: yes, but can it stop?
10:49:49 <fungot> oerjan: we are looking, but well behaved! crono!!
10:49:57 <oerjan> fungot: look further!
10:49:57 <fungot> oerjan: you! take! we find! parental discretion advised. no time to talk we had soldiers searching for you!
10:49:57 <kallisti> fungot: sotp
10:49:58 <fungot> kallisti: there! there it is! but by the time we're through with you, you'll be in danger. open hatch. make yourself at home! the queen has been through a time machine! nya ha!
10:50:36 <oerjan> fungot: did the time machine stop her?
10:50:36 <fungot> oerjan: i, myself, will bring an end to all. ghosts lurk in the ruins! the structural damage is severe. the tale?
10:51:03 <oerjan> fungot: how evil!
10:51:03 <fungot> oerjan: it's a machine that looks like you! no matter what the price! it is, you idiot! hey! is that for us! the chef's in a snit, trying to get food to the front lines. heard a spell to energize the sword takes immense evil! indeed! this thing. what you have? transform! this trading house. it's the kind! i've decided to stay with these humans! you're a traitor! you're not our king! but, we are far outnumbered!
10:51:44 <oerjan> fungot: that was a lot of exclamation marks for no repetition
10:51:44 <fungot> oerjan: time to shove off you go! didn't you create him? that kino guy! much danger. open hatch.
10:51:55 <fizzie> I like it when it does that 'i, myself, will bring an end to all" bit.
10:52:03 <fizzie> `quote end to all
10:52:06 <HackEgo> 518) <fungot> fizzie: i, myself, will bring an end to all.
10:52:26 <oerjan> fungot: so you will stop it alone, then?
10:52:26 <fungot> oerjan: it's time you jumped off this mortal coil... ...but it appears to be the right time... ...and...they...have to show you the time of day! the black wind...
10:52:41 <oerjan> fungot: my shrink disagrees.
10:52:45 <oerjan> oops
10:53:19 <fizzie> fungot: Have you been replaced with your evil clone or something?
10:53:19 <fungot> fizzie: and you call yourself a frog, and ayla... i will not betray my friends!...... how cruel! umm! thanks! it's about the missing queen. she still looks so much like leene, that they will take you to your place of execution?! strange, but you are true heros. the world, tee, hee! it's not the only one thing we need to defeat you, lavos.
10:54:12 <oerjan> fungot: please don't stop alone
10:54:12 <fungot> oerjan: is the gate key okay!! get' em! 200g per night. care, and stay...healthy! my husband...he's...he's...gone... but he left me precious gifts! the seeds...and our child, it's ancient history now...!
10:54:36 <oerjan> fungot: an ancient child, eh?
10:54:37 <fungot> oerjan: time to shove off! the name's bandeau. here to build the ocean palace? nu...! just trying to get food to the front lines. heard a spell to energize the sword takes immense evil! indeed! this thing. what you have? transform! this trading house. it's the kind! i've decided to stay with these humans! you're a traitor! you're not our king! but, we are far outnumbered!
10:55:26 <oerjan> fungot: you said most of that before
10:55:26 <fungot> oerjan: shall we get back to the present? he's been known. we reptites will rule the world in a mere door that keeps us bound, hand, foot...and tongue kid? ...oh, it's you, isn't this morbid? the great adventurer toma levine rests in a grave to the north. it's a great place for a picnic! heard that magus's place...
10:55:53 <oerjan> fungot: did you bring sandwiches?
10:55:53 <fungot> oerjan: are you a man, if there weren't evil in this kingdom to you! eat! fun!
10:56:11 * oerjan eats some of fungot's sandwiches
10:56:30 <oerjan> fungot: they tasted a bit evil
10:56:59 * fizzie thinks mentioning fungot like this would also trigger it.
10:56:59 <fungot> fizzie: it's time you jumped off this mortal coil... and just what are you two doing! prepare for the moonlight parade! this is the masamune! ride again!
10:57:17 <oerjan> fungot the fickle
10:57:17 <fungot> oerjan: there! there it is! but by the time we're through with you, you'll be in danger. open hatch.
10:57:42 <oerjan> fungot: can you stop me alone?
10:57:43 <fungot> oerjan: as long as you keep crono in your heart, the day of lavos"... go to " leene square" 1000 a.d.? yes, i'd have done something very brave! he's probably up north, to guardia!!! let's toast our land! now we'll have some peace! magus is a tad on the spooky side. our only hope.
10:57:47 <fizzie> The source text is a bit short so it keeps being quite repetitive.
10:58:17 <oerjan> fungot: what do you have to say of the use of ancient sharp weapons?
10:58:17 <fungot> oerjan: and you call yourself a frog, and ayla... i will not betray my friends! sir, you must come with us! please! pretty please! hmmm, two-legged, walking humanoid robot! incredible! hold down the l, and r buttons and then press the a button to access, but stay off of " techniques." stop immobilizes and disables you. in these bones, i shall return! by the way, the wings! now this is a treasure there... found the treasure!! pr
10:59:03 <oerjan> fungot: llllllllllllllllllllllllllike this, orrrrrrrrrrrr something else?
10:59:03 <fungot> oerjan: to the northwest of this cape. he took back the medal from the frog king. and i'd like to see that mystical sword for myself! geez! i can rest now, knowing that everyone! humans! they're my friends!
10:59:30 <oerjan> fungot: humans are overrated. needs more ketchup.
10:59:39 <fizzie> fungot: Oh how many times we ask before the sword can't stop?
10:59:39 <fungot> fizzie: see? i like marle better than " princess,' the chosen time has come! he's strong and he's gonna thrash those monsters! yea! is it?
11:00:06 <fizzie> fungot: SWORD. STOP. Do you get it?
11:00:06 <fungot> fizzie: yes, it's been awhile prometheus! what're you doing there!
11:00:09 <oerjan> fungot: do you have a sword to stop those monsters with?
11:00:09 <fungot> oerjan: you! take! we find!
11:00:32 <fizzie> fungot: It's hopeless.
11:00:32 <fungot> fizzie: as long as you keep crono in your heart, the day of lavos"... go to " leene square" 1000 a.d.? yes, i'd have done something very brave! he's probably up north, to guardia!!! let's toast our land! now we'll have some peace! magus is a tad on the spooky side. our only hope.
11:01:02 <fizzie> fungot: You just said that *exactÂ* thing. Same quotation and all.
11:01:02 <fungot> fizzie: that no one was allowed to use the crane, enter any two of these letters, a b y.
11:01:02 <oerjan> fungot: we toasted our land and now it's all burnt and stuff
11:01:03 <fungot> oerjan: the knight spirit has the hero! hurrah to the hero! hurrah to the hero! hurrah to the hero! hurrah to the hero! hurrah to the hero! hurrah to the hero! hurrah to the hero! hurrah to the hero! hurrah to the hero! hurrah to the hero! hurrah to the hero! hurrah to the hero! hurrah to the hero! hurrah to the hero! hurrah to the hero! hurrah to the hero! hurrah to the hero! hurrah to the hero! hurrah to the hero! hurrah to t
11:01:37 <oerjan> fungot: does the hero have a good sword?
11:01:38 <fungot> oerjan: and you call yourself a frog, and ayla... i will not betray my friends!
11:01:48 <oerjan> fungot: ...no. not usually.
11:01:49 <fungot> oerjan: it's a machine that looks like you! take! we find!
11:01:51 <fizzie> fungot: You're hopeless.
11:01:51 <fungot> fizzie: but, we are far outnumbered!
11:01:57 <oerjan> fungot: AIYEEEH
11:01:57 <fungot> oerjan: by thy leave, crono?!! you brought back my cat! thank you, crono! schala!! how can i do for you? thanks! it's about the missing queen. she still looks so much like leene, that they will take you to your place of execution?! strange, but!?
11:02:15 <oerjan> fungot: this is the problem with statistics
11:02:16 <fungot> oerjan: it's time you jumped off this mortal coil... but you are true heros. the world, tee, hee! it's not the only one thing we need to defeat you, lavos. by now you must realize you are the only one thing we need to defeat you, lavos.
11:02:51 <oerjan> fungot: yes, we need only the one sword
11:02:51 <fungot> oerjan: like, thanks princess. i'll take that under advisement!! crono!!
11:02:56 <fizzie> fungot: Continut this sentence: "the sword alone can't stop".
11:02:57 <fungot> fizzie: but, we are far outnumbered! go!! hp recovered! the chef's in a snit, trying to get food to the front lines. heard a spell to energize the sword takes immense evil! indeed! this thing. what you have? transform! this trading house. it's the kind! i've decided to stay with these humans! you're a traitor! you're not our king! but, we are far outnumbered!
11:03:05 <oerjan> fungot: are you calling me a princess?
11:03:05 <fungot> oerjan: but, we are far outnumbered! so! that cathedral to the west?... yes! well then rest and relax! huh?
11:03:14 <oerjan> fungot: okay
11:03:14 <fungot> oerjan: i, myself, will bring an end to all. ghosts lurk in the ruins! the structural damage is severe. the tale?
11:03:35 <oerjan> fungot: was there a sword involved?
11:03:35 <fungot> oerjan: as long as you keep crono in your heart, the day of lavos"... go to " leene square" 1000 a.d.? yes, i'd have done something very brave! he's probably up north, to guardia!!! let's toast our land! now we'll have some peace! magus is a tad on the spooky side. our only hope.
11:03:45 <fizzie> fungot: Bah, I should retrain this style with different parameters.
11:03:45 <fungot> fizzie: that sword alone can't stop! that sword alone can't stop! that sword alone can't stop! that sword alone can't stop! that sword alone can't stop! that sword alone can't stop! that sword alone can't stop! that sword alone can't stop! that sword alone can't stop! that sword alone can't stop! that sword alone can't stop! that sword alone can't stop! that sword alone can't stop! that sword alone can't stop! that sword alone
11:04:00 <fizzie> When in doubt, use threats, I guess.
11:04:05 <oerjan> fizzie: i think you scared fungot with that last comment
11:04:05 <fungot> oerjan: there! there it is! but by the time we're through with you, you'll be in danger. open hatch.
11:04:35 <oerjan> mission accomplished. now ice coffee ->
11:07:53 -!- monqy has quit (Quit: hello).
11:18:35 -!- copumpkin has quit (Ping timeout: 240 seconds).
11:23:04 -!- copumpkin has joined.
11:23:58 <oerjan> http://tahville.myminicity.com/
11:24:03 * oerjan whistles innocently
11:29:20 <oerjan> goddammit browser why do you have to lock up _now_
11:30:52 <Sgeo> myminicity is so \$INSULTINGLY_OLD_DATE
11:31:08 <oerjan> :(
11:31:28 * Sgeo enters anyway
11:31:46 -!- SgeoN1 has joined.
11:31:54 <Sgeo> Or, attempting to. My computer is now slow.
11:32:35 <Sgeo> What happens at 5,000?
11:32:37 <oerjan> it seemed to lock up somewhat just after i pasted that link
11:32:57 <Sgeo> It was a while after that that I clicked
11:33:08 <Sgeo> So not my fault
11:33:25 <Sgeo> Anyways, you are now at 49,999 population
11:33:31 <Sgeo> Wow, no
11:33:33 <Sgeo> 4,999
11:33:42 <Sgeo> Sorry to disappoint if you mistakenly believed me somehow
11:33:48 <oerjan> no XD
11:34:10 <Sgeo> Should I go to the transport link?
11:34:36 <oerjan> we've been aiming to get 5000 before new year
11:34:45 <oerjan> nothing else in particular
11:35:00 <Sgeo> Ah, ok
11:35:04 <Sgeo> So close
11:35:06 <oerjan> and i couldn't resist increasing the chances of making it today
11:35:30 * Sgeo tries the tra link
11:35:46 <oerjan> it does only allow one visit per ip per day, btw
11:35:51 <Sgeo> Um
11:35:58 <Sgeo> You succeeded
11:36:05 <oerjan> yay :P
11:37:07 <fizzie> That was probably me.
11:37:16 <fizzie> Assuming a visitation counts as something.
11:37:23 <oerjan> yes it does, thank you
11:37:41 <fizzie> That was purely accidental, though, I clickeded before reading the conversation.
11:37:57 <Sgeo> Congratulations! You are the 5,000th visitor!
11:38:17 <kallisti> > intToDigit 42 ""
11:38:18 <lambdabot> Couldn't match expected type `[GHC.Types.Char] -> t'
11:38:18 <lambdabot> against inferr...
11:38:36 <kallisti> ah
11:38:51 <kallisti> ? showIntAtBase 16 intToDigit 42 ""
11:38:54 <kallisti> > showIntAtBase 16 intToDigit 42 ""
11:38:55 <lambdabot> "2a"
11:40:04 <oerjan> > showHex 42 ""
11:40:05 <lambdabot> "2a"
11:40:57 <kallisti> :t let bases = flip (map showIntAtBase [2..16] <*> intToDigit) "" in bases
11:40:57 <lambdabot> Couldn't match expected type `[Int -> Char]'
11:40:58 <lambdabot> against inferred type `Int -> Char'
11:40:58 <lambdabot> In the second argument of `(<*>)', namely `intToDigit'
11:41:09 <kallisti> oh
11:41:12 <kallisti> yes
11:42:02 <kallisti> :t let bases = map flip (map showIntAtBase [2..16] <*> intToDigit) "" in bases
11:42:03 <lambdabot> Couldn't match expected type `[Int -> Char]'
11:42:03 <lambdabot> against inferred type `Int -> Char'
11:42:03 <lambdabot> In the second argument of `(<*>)', namely `intToDigit'
11:42:33 <kallisti> :t let bases = ((map flip (map showIntAtBase [2..16] <*> intToDigit) <*> "") <*>) in bases
11:42:34 <lambdabot> Couldn't match expected type `[Int -> Char]'
11:42:34 <lambdabot> against inferred type `Int -> Char'
11:42:35 <lambdabot> In the second argument of `(<*>)', namely `intToDigit'
11:42:43 <kallisti> I'm definitely doing something wrong. :P
11:43:32 <kallisti> :t let bases n = showIntAtBase <\$> [2..16] <*> intToDigit <*> n <*> "" in bases
11:43:33 <lambdabot> Couldn't match expected type `[Int -> Char]'
11:43:33 <lambdabot> against inferred type `Int -> Char'
11:43:33 <lambdabot> In the second argument of `(<*>)', namely `intToDigit'
11:43:51 <kallisti> :t showIntAtBase
11:43:52 <lambdabot> forall a. (Integral a) => a -> (Int -> Char) -> a -> String -> String
11:44:39 <kallisti> :t let bases n = showIntAtBase <\$> [2..16] in bases
11:44:40 <lambdabot> forall t a. (Integral a) => t -> [(Int -> Char) -> a -> String -> String]
11:44:48 <oerjan> intToDigit needs []'s around it
11:44:55 <kallisti> oooooh rite
11:45:05 <oerjan> some of the others too
11:45:10 <kallisti> that's a stupid way to write that anyway. :P
11:45:59 <oerjan> hm...
11:46:57 <oerjan> > let bases n = showIntAtBase `flip` intToDigit `flip` n `flip` "" <\$> [2..16] in bases 42
11:46:58 <lambdabot> ["101010","1120","222","132","110","60","52","46","42","39","36","33","30",...
11:47:07 <kallisti> :t let bases n = showIntAtBase <\$> [2..16] <*> [intToDigit] <*> [n] <*> [""] in bases 5
11:47:07 <lambdabot> [String]
11:47:11 <kallisti> > let bases n = showIntAtBase <\$> [2..16] <*> [intToDigit] <*> [n] <*> [""] in bases 5
11:47:12 <lambdabot> ["101","12","11","10","5","5","5","5","5","5","5","5","5","5","5"]
11:47:20 <kallisti> oerjan: oh, so that's what cale flip does.
11:47:21 <kallisti> :t flip
11:47:22 <lambdabot> forall (f :: * -> *) a b. (Functor f) => f (a -> b) -> a -> f b
11:47:30 <oerjan> kallisti: ordinary flip suffices for that
11:47:47 <kallisti> oooooh
11:47:51 <kallisti> ...clever. :P
11:49:15 <kallisti> showIntAtBase should allow arbitrary greater than 2 bases and also a special unary case.
11:49:39 <oerjan> it does allow anything up to maxBound :: Int
11:49:42 <oerjan> i think
11:49:52 <oerjan> oh hm
11:50:04 <oerjan> it cannot do more than one Char per digit, though.
11:50:18 <oerjan> :t showIntAtBase
11:50:19 <lambdabot> forall a. (Integral a) => a -> (Int -> Char) -> a -> String -> String
11:50:53 <oerjan> there isn't _really_ any reason why it should be restricted to Char or Int
11:51:10 <oerjan> other than efficiency
11:52:31 -!- SgeoN1 has quit (Quit: Bye).
11:54:09 <fizzie> > let showIntWithBestDigits = (`showIntAtBase` chr) in showIntWithBestDigits 1000 515002006323414 ""
11:54:10 <lambdabot> "\515\STX\ACK\323\414"
11:57:16 -!- Patashu has quit (Ping timeout: 240 seconds).
12:11:08 -!- Ngevd has joined.
12:12:43 <fizzie> > let b = toInteger . (+1) \$ ord (maxBound :: Char); strId :: String -> String; strId s = showIntAtBase b chr (sum \$ zipWith (*) (toInteger . ord <\$> reverse s) ((b^) <\$> [0..])) "" in strId "foobar"
12:12:45 <lambdabot> "foobar"
12:12:53 <fizzie> I mean, if you happen to need a String -> String specialized id...
12:13:12 <Ngevd> Have you seen the weather in Melbourne?
12:13:14 <Ngevd> It's crazy
12:15:40 <fizzie> The rain in Spain stays mainly in the plain.
12:16:43 <Ngevd> The hail in Melbourne falls mainly all over the place
12:17:00 <fizzie> I see it's in the news and all.
12:26:19 <kallisti> @hoogle showIntAtBase
12:26:19 <lambdabot> Numeric showIntAtBase :: Integral a => a -> (Int -> Char) -> a -> ShowS
12:28:29 <oerjan> ais523: is there a way to get a subst: template expanded on preview? i am trying to copy something from wiktionary to wikipedia and a template doesn't exist in both places
12:29:19 <oerjan> (specifically, wiktionary's a template)
12:30:37 <ais523> oerjan: no; but you can use Special:ExpandTemplates for a similar effect
12:30:59 <oerjan> oh hm
12:33:30 <oerjan> wtf i cannot copy this mess of spans
12:34:23 <oerjan> whatever, i'll just leave it in this reduced version i already saved.
12:34:23 <Sgeo> Gracenotes visits, doesn't e?
12:34:42 <oerjan> Sgeo: if he does, he doesn't speak much
12:34:59 <Sgeo> Because e posted to my Wikipedia talk page in 2007
12:35:20 <oerjan> i cannot say i've noticed em in a while
12:35:49 <oerjan> Sgeo: he's on freenode now
12:35:54 -!- nooga has joined.
12:36:20 <Sgeo> I'm in two channels with em, apparently
12:37:37 <ais523> Gracenotes has been in here on occasion
12:38:32 -!- Ngevd has quit (Ping timeout: 240 seconds).
12:39:34 <oerjan> <Ngevd> Have you seen the weather in Melbourne? <-- i am suddenly grasped by the realization that there is only one Hexham, which is expanded by portals to three locations on two continents. at least.
12:42:13 <oerjan> i have the sense _someone_ is in way over their head in today's mezzacotta. i'm just not entirely sure who.
12:45:20 <kallisti> :t "hi"
12:45:21 <lambdabot> [Char]
12:46:08 <oerjan> @hoogle String -> ByteString
12:46:09 <lambdabot> Data.ByteString.Char8 pack :: String -> ByteString
12:46:09 <lambdabot> Data.ByteString.Lazy.Char8 pack :: [Char] -> ByteString
12:46:10 <lambdabot> Data.String fromString :: IsString a => String -> a
12:46:25 <oerjan> > Data.ByteString.Char8.pack "hi"
12:46:26 <lambdabot> Not in scope: `Data.ByteString.Char8.pack'
12:46:38 <kallisti> :t foldr id
12:46:39 <lambdabot> forall b. b -> [b -> b] -> b
12:46:41 <oerjan> shocking
12:46:58 <oerjan> @hoogle String -> Text
12:46:59 <lambdabot> Data.Text.Lazy pack :: String -> Text
12:46:59 <lambdabot> Data.Text pack :: String -> Text
12:47:10 <oerjan> > Data.Text.pack "hi"
12:47:11 <lambdabot> Not in scope: `Data.Text.pack'
12:47:20 <kallisti> oerjan: lambdabot should qualified import literally everything in base and probably like 20 other packages on hackage.
12:47:39 <oerjan> lambdabot: you are _so_ out of date on modern haskell enterprise
12:47:51 <oerjan> (so am i, but still...)
12:48:40 -!- pikhq_ has joined.
12:48:42 <Sgeo> kallisti, including System.IO.Unsafe, obviously.
12:48:48 -!- pikhq has quit (Ping timeout: 248 seconds).
12:48:49 <oerjan> kallisti: on first impression, yes, but on second impression, lambdabot already has annoying instance conflicts from conflicting imports
12:48:59 <oerjan> > sin
12:48:59 <lambdabot> Overlapping instances for GHC.Show.Show (a -> a)
12:49:00 <lambdabot> arising from a use of `...
12:49:18 <Sgeo> Is there any way to avoid importing an instance?
12:49:39 <kallisti> nope. we've discussed this actually.
12:49:58 <kallisti> I think there should be instance hiding.
12:50:13 * kallisti has some other "interesting" ideas concerning records that he would like to crystalize.
12:50:29 <oerjan> crystal records
12:50:36 <kallisti> particularly I'm not satisfied with any of the proposals to "fix" records.
12:50:44 <kallisti> and would like to see if I can come up with anything.
12:51:02 <Sgeo> kallisti, what about turning the names of records into lenses?
12:51:07 <Sgeo> Or is that one of them?
12:51:19 <kallisti> well, sort of.
12:52:03 <kallisti> from what I can tell trying to just add a little bit of sugar / type resolution rules over functions/typeclasses results in some sort of problem.
12:52:24 <kallisti> so I think maybe the answer is to make a larger change to the core of the language.
12:53:00 <kallisti> but yes I think accessing and setting records should be writeable as a function.
12:53:17 <kallisti> and thus curried, abstracted, used in higher order functions, etc
13:00:27 <kallisti> really I wish there was a way to combine TypeDirectedNameResolution and OverloadedRecordFields
13:31:49 <kallisti> "The warm fuzzy feeling you get when you've persuaded your program to live in a total programming language should not be underestimated. It's a strong static guarantee -- you can say that you've written a function without having to pretend that _|_ is a value." -- Why Dependent Typing Matters.
13:33:14 <Sgeo> Isn't totality a separate concern from dependent typing?
13:33:40 * Sgeo would like static guarantees about performance :/
13:33:55 -!- nooga has quit (Ping timeout: 240 seconds).
13:35:14 <kallisti> Sgeo: in this context it's discussing the misconception that general recursion is difficult or impossible in a dependently typed language.
13:44:21 -!- nooga has joined.
14:02:15 -!- Slereah_ has quit (Ping timeout: 240 seconds).
14:02:18 -!- Slereah has joined.
14:17:37 <itidus21> the best kind of recursion is recursion with zero parameters :-D
14:18:40 -!- ais523 has quit (Remote host closed the connection).
14:19:36 <itidus21> such as in C, void hello() { printf("hello world\n"); hello(); }
14:19:50 -!- MDude has joined.
14:20:15 <oerjan> > let hello = "Hello! " ++ hello in hello
14:20:16 <lambdabot> "Hello! Hello! Hello! Hello! Hello! Hello! Hello! Hello! Hello! Hello! Hell...
14:20:46 <itidus21> yay
14:21:24 <itidus21> i bring it up because it raises a question of whether that counts as recursion
14:21:32 <itidus21> which i assume it of course does
14:32:25 <oerjan> in haskell, recursion with parameters is just a special case of recursion without
14:33:39 <oerjan> > let fac = (\f n -> if n == 0 then 1 else n * f (n-1)) fac in fac 5
14:33:39 <lambdabot> 120
14:41:52 -!- nooga has quit (Ping timeout: 248 seconds).
14:54:49 -!- elliott has joined.
15:04:07 <elliott> 04:24:50: <Sgeo> What's a 10th doctor episode I should watch? (Not Blink)
15:04:07 <elliott> 04:24:59: <Sgeo> And not SitL/FotD
15:04:07 <elliott> 04:25:38: <Gregor> Why don't you just watch them in order ...
15:04:07 <elliott> 04:25:52: <Sgeo> I've heard that they're mostly bad
15:04:07 <lambdabot> elliott: You have 3 new messages. '/msg lambdabot @messages' to read them.
15:04:11 <elliott> Sgeo: You've also heard that they're mostly really good.
15:15:14 <elliott> oerjan: hi
15:16:39 <oerjan> AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA i mean, hi
15:16:39 <lambdabot> oerjan: You have 1 new message. '/msg lambdabot @messages' to read it.
15:36:35 <lambdabot> elliott: You have 1 new message. '/msg lambdabot @messages' to read it.
15:36:37 <elliott> OH NOOOOOOOOOOOOOOOO
15:37:12 <elliott> 05:44:41: <Sgeo> ...you've never heard of perlnomic.
15:37:12 <elliott> this log is terrible
15:37:18 <elliott> oerjan: if you ban me ban everyone else too
15:37:47 <oerjan> elliott: hey at least look at my beautiful Functor instance for zzo38's type
15:38:20 <elliott> oerjan: i didn't say i'd stop reading it i just said it was terribl
15:38:20 <elliott> e
15:38:27 <oerjan> O KAY
15:39:29 <elliott> 06:10:56: <Madoka-Kaname> Sgeo, has anybody done something like that in Perl Nomic?
15:39:40 <elliott> i love how everyone fails to understand that you can't just unilaterally introduce laws in nomic
15:39:44 * oerjan heard of perlnomic so long ago that it wasn't even the same perlnomic, he thinks.
15:40:08 <oerjan> heard of as in played.
15:40:15 <oerjan> or wait
15:40:23 <elliott> oerjan: perlnomic was long-lived
15:40:24 <oerjan> no, it was schemenomic
15:40:36 <elliott> schemenomic was contemporaneous iirc
15:40:45 <elliott> starting-wise
15:40:54 <elliott> perlnomic lasted until a few years ago
15:46:02 <elliott> 08:47:50: <oerjan> yes, basically you can start with const True (a warrior which never wins) and const False (always disqualified) and build more complicated HJ values from that
15:46:11 <elliott> oerjan: i believe you concluded the game was shallow, no? :P
15:46:45 <oerjan> i did?
15:48:07 <elliott> 09:15:34: <oerjan> !haskell newtype T v f x = T (T x f v -> f x); instance Functor f => Functor (T v f x) where { fmap g (T h) = T (fmap g . h . fmap' g) }; fmap' g (T t) = T (t . fmap g); main = print "Yay it types!"
15:48:14 <elliott> oerjan: you realise that
15:48:19 <elliott> is a thing
15:48:48 <HackEgo> No output.
15:48:52 <oerjan> of course i do, i changed to using it just after chastising you
15:48:57 <elliott> oh good
15:49:39 <elliott> `ls bin
15:49:41 <HackEgo> ​? \ @ \ No \ _tmpe \ addquote \ allquotes \ calc \ define \ delquote \ etymology \ forget \ fortune \ frink \ google \ haskell \ hatesgeo \ json \ k \ karma \ karma+ \ karma- \ learn \ log \ logurl \ macro \ marco \ paste \ pastekarma \ pastelog \ pastelogs \ pastenquotes \ pastequotes \ pastewisdom \ pastlog \ ping \ prefixes \ qc \ quote \ quotes \ roll \ toutf8 \ translate \ translatefromto \ translateto \ units
15:49:52 <elliott> :}
15:49:53 <HackEgo> No output.
15:50:11 <oerjan> elliott: YOU REALIZE RUNHASKELL DOESN'T HAVE A CONVENIENT
15:50:19 <oerjan> `revert
15:50:21 <HackEgo> Done.
15:50:29 <oerjan> `ls bin/h*
15:50:32 <HackEgo> ls: cannot access bin/h*: No such file or directory
15:50:36 <oerjan> `run ls bin/h*
15:50:58 -!- Sgeo has quit (Read error: Operation timed out).
15:51:04 <elliott> `haskell main = print 42
15:51:04 <oerjan> CALLING CONVENTION FOR HACKEGO
15:51:09 <elliott> See, it's broken.
15:51:14 <elliott> `run rm -f bin/haskell
15:51:17 <HackEgo> No output.
15:51:36 -!- ChanServ has set channel mode: +o oerjan.
15:51:51 -!- oerjan has set channel mode: +b *!*elliott@unaffiliated/elliott.
15:51:51 -!- oerjan has kicked elliott elliott.
15:51:57 -!- oerjan has set channel mode: -o oerjan.
15:52:17 -!- elliott has quit (Quit: Leaving).
15:53:00 <oerjan> `help
15:53:02 <HackEgo> Runs arbitrary code in GNU/Linux. Type "`<command>", or "`run <command>" for full shell commands. "`fetch <URL>" downloads files. Files saved to \$PWD are persistent, and \$PWD/bin is in \$PATH. \$PWD is a mercurial repository, "`revert <rev>" can be used to revert to a revision. See http://codu.org/projects/hackbot/fshg/
15:53:58 <oerjan> `revert 1429
15:54:01 <HackEgo> Done.
15:54:08 <oerjan> `run ls bin/h*
15:54:21 <oerjan> `haskell main = print 42
15:54:30 <HackEgo> 42
15:55:50 -!- Sgeo has joined.
16:01:55 -!- Ngevd has joined.
16:05:07 -!- ChanServ has set channel mode: +o oerjan.
16:05:18 -!- oerjan has set channel mode: -b *!*elliott@unaffiliated/elliott.
16:05:24 -!- oerjan has set channel mode: -o oerjan.
16:06:08 -!- elliott has joined.
16:06:08 -!- elliott has quit (Client Quit).
16:06:29 <oerjan> >_>
16:06:29 -!- elliott has joined.
16:06:31 -!- Ngevd has quit (Ping timeout: 255 seconds).
16:08:41 <elliott> `haskell main = print (2 + 2)
16:08:59 <oerjan> `revert 1429
16:09:01 <HackEgo> Done.
16:09:07 <oerjan> `haskell main = print (2 + 2)
16:09:13 <HackEgo> 4
16:09:41 <elliott> `haskell main = print (2 + 2)
16:09:47 <elliott> I see, it only works half the time!
16:10:50 <oerjan> `haskell main = print (2 + 2)
16:11:43 <elliott> Less than half the time.
16:13:23 * oerjan does a brain scan on elliott and discovers that he lacks the hintus perceptor lobe
16:15:16 * oerjan writes down `revert 1429 on a piece of paper for future use
16:15:31 <elliott> `haskell Is it working yet?
16:16:13 <oerjan> why should it be working.
16:16:50 <oerjan> i'll just use `revert 1429 when i actually need it. in a month or so. and leave you to clean it up afterwards.
16:18:43 <elliott> Maybe I just won't clean it up :)
16:24:16 * oerjan ponders if he'd know how to handle this if he had any (younger, annoying) siblings.
16:29:21 <oerjan> most likely i'd just have killed them a long time ago.
16:31:04 <Gregor> ......................... dafuq
16:31:15 <oerjan> Gregor: problem?
16:31:29 <Gregor> Does it delete itself or some such nonsense?
16:31:52 <oerjan> Gregor: erm i'm pretty sure elliott is just doing this in privmsg to annoy me.
16:32:22 <Gregor> fshg sez: yup
16:32:41 <oerjan> so there is no technical issue on HackEgo. NOW EGOBOT OTOH...
16:32:51 <oerjan> !haskell main = print (2+2)
16:32:58 <EgoBot> runhaskell: syntax: runghc [-f GHC-PATH | --] [GHC-ARGS] [--] FILE ARG...
16:33:30 <elliott> Well if Gregor would apply my fix :P
16:35:28 <oerjan> Gregor: yeah you should apply the fix, you're putting children in danger here.
16:35:46 <elliott> I don't think EgoBot can see /opt/ghc tho.
16:35:55 <elliott> Unless Gregor's unified the chroots already, or just used a softlink, or...
16:40:37 <Gregor> Unless you have a fix fix, your fix is what broke it.
16:40:47 <elliott> Gregor: I have a fix fix.
16:40:53 <Gregor> !sh ls /opt/ghc
16:40:53 <EgoBot> bin
16:41:01 <elliott> Gregor: Well then...
16:41:08 <Gregor> !sh ls /opt/ghc/bin
16:41:08 <EgoBot> ghc
16:41:11 <elliott> ...
16:41:16 <elliott> Where the fuck is runghc?
16:41:20 <elliott> Where the fuck are the library files?
16:41:26 <elliott> Where the fuck are the package conf files?
16:41:34 <elliott> There's no possible way that GHC works.
16:41:39 <Gregor> !sh ls /opt/ghc | fmt
16:41:39 <EgoBot> bin lib share
16:41:43 <Gregor> !sh ls /opt/ghc/bin | fmt
16:41:43 <EgoBot> ghc ghc-7.2.1 ghc-pkg ghc-pkg-7.2.1 ghci ghci-7.2.1 haddock
16:41:45 <elliott> Oh :P
16:41:50 <elliott> Where's runghc
16:41:57 <Gregor> On the next line I presume.
16:42:07 <elliott> Gregor: As Iw as saying, s|ghc|/opt/ghc/bin/ghc|g s|runghc|/opt/ghc/bin/runghc|g in EgoBot's GHC sccript thing.
16:42:11 <elliott> *I was
16:42:27 <oerjan> !sh ls /opt/ghc/bin | fmt -w400
16:42:27 <elliott> !sh echo "main = print 42" | /opt/ghc/bin/runghc
16:42:30 <EgoBot> 42
16:42:35 <elliott> Yep, do that and it'll work.
16:42:46 <elliott> *script thing
16:43:00 <elliott> "Okay, I'm completely convinced! Now all that we have to do is to solve the halting problem to make your solution work... :-)"
16:43:17 <elliott> oerjan: while you're on your banning spree, please ban this guy from the haskell lists for apparently thinking total functional languages are impossible
16:43:35 <elliott> "So... this imaginary language of yours would be able to solve the halting problem?"
16:43:37 <elliott> also this one.
16:43:49 <Deewiant> !sh ls /opt/ghc/bin | xargs
16:44:08 <elliott> !sh echo "-n hi" | xargs
16:44:09 <EgoBot> hi
16:44:18 <elliott> !sh echo "-e 'hi\\x00'" | xargs
16:44:19 <EgoBot> hi
16:44:24 <Gregor> !sh ls /opt
16:44:24 <EgoBot> ghc
16:44:25 <Gregor> !sh ls /opt/ghc
16:44:26 <EgoBot> bin \ lib \ share
16:44:28 <Gregor> !sh ls /opt/ghc/bin
16:44:28 <EgoBot> ghc \ ghc-7.2.1 \ ghc-pkg \ ghc-pkg-7.2.1 \ ghci \ ghci-7.2.1 \ haddock \ haddock-ghc-7.2.1 \ hp2ps \ hpc \ hsc2hs \ runghc \ runhaskell
16:44:39 <oerjan> oh xargs defaults to echo
16:44:44 <elliott> Gregor: Are you telling me EgoBot has finally ditched the stupid DCC thing?
16:44:51 <Gregor> Yes X-D
16:44:55 <elliott> THANK THE LORD.
16:45:04 <oerjan> D:
16:45:19 <oerjan> !show slashes
16:45:21 <EgoBot> perl (sending via DCC)
16:45:40 <elliott> X-D
16:45:47 <oerjan> now _that_ was ridiculous.
16:45:51 <elliott> What happened?
16:46:00 <oerjan> 17:44 =EgoBot> Execution of /tmp/input.4598 aborted due to compilation errors.
16:46:00 <oerjan> 17:44 =EgoBot>
16:46:05 <elliott> X-D
16:46:14 <EgoBot> 4
16:46:17 <elliott> !haskell main = print 42
16:46:20 <EgoBot> runhaskell: syntax: runghc [-f GHC-PATH | --] [GHC-ARGS] [--] FILE ARG...
16:46:20 <Gregor> Gimme a second here >_<
16:46:23 <elliott> NOOOO
16:46:23 <elliott> NO SECONDS
16:46:25 <elliott> NO SECONDS ALLOWED
16:46:27 <elliott> ONLY FIRSTS
16:46:40 <elliott> "I think we're talking about different things. By "bottom" I mean the
16:46:40 <elliott> function explicitly returns "error ..." or "undefined". In those cases, it
16:46:40 <elliott> should go in an error monad instead. In cases where there is an infinite
16:46:40 <elliott> loop, the function doesn't return anything because it never finishes, and
16:46:40 <elliott> indeed this separate problem will never be solved while remaining Turing
16:46:41 <elliott> complete because it is the halting problem."
16:46:44 <elliott> THIS IS HASKELL-CAFE, WHY ARE YOU ALL SO IGNORANT
16:46:48 <oerjan> this is christmas day, you're allowed seconds on christmas day.
16:47:04 * elliott is going to make his own language, with blackjack, and hookers, that /really/ avoids popularity at all costs.
16:47:11 <elliott> the hookers will have phds in mathematics.
16:47:16 <elliott> as will the blackjack.
16:47:56 <elliott> "> Then use a separate type for natural numbers excluding 0. Then you can define a total integer division function on it (although the return value may be zero and so needs a different type).
16:47:56 <elliott> That would certainly be a lovely idea *if* we were programming in Agda, but I was under the assumption that this conversation was about Haskell. :-) "
16:47:58 <Gregor> !haskell main = printStr "4-tee-2"
16:48:00 <elliott> wtf! you can define that in haskell! you suck!
16:48:03 <EgoBot> ​\ /tmp/runghcXXXX21051.hs:1:8: Not in scope: `printStr'
16:48:08 <Gregor> Whoops X-D
16:48:09 <elliott> Gregor: Faiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiil
16:48:18 <elliott> Gregor: That starting \ is ugly :( WHINE WHINE WHINE
16:48:23 <elliott> But hey, now oerjan can't complain
16:48:26 <Gregor> Oh, putStr
16:48:29 <elliott> !haskell import Unsafe.Coerce; main = unsafeCoerce (42 :: Int)
16:48:31 <Gregor> !haskell main = putStr "4-tee-2"
16:48:32 <oerjan> elliott: oh you found that annoying sola guy too?
16:48:36 <EgoBot> 4-tee-2
16:48:37 <elliott> oerjan: sola?
16:48:46 <oerjan> or something like that.
16:48:52 <elliott> oerjan: i don't know what you mean
16:48:59 <oerjan> elliott: his name
16:49:20 <oerjan> which i may have misremembered, but _still_
16:49:23 <elliott> oerjan: MigMit, Jesse Schalken, and Gregory Crosswhite are the ones I've quoted; is there _another_ wrong person?
16:49:47 <elliott> Gregor: Could EgoBot print something when you segfault?
16:49:52 <elliott> It just sort of doesn't talk to you if that happens.
16:50:03 <Gregor> !c abort();
16:50:07 <EgoBot> ​./interps/gcccomp/gcccomp: line 52: 21355 Aborted /tmp/compiled.\$\$
16:50:16 <Gregor> !c *((int *) 0) = 0;
16:50:18 <EgoBot> ​./interps/gcccomp/gcccomp: line 52: 21421 Segmentation fault /tmp/compiled.\$\$
16:50:29 <elliott> "I apologize if I was using the wrong terminology. I've seen "error ..."
16:50:29 <elliott> shown as, and understood it to be, _|_, but it seems _|_ refers to either a
16:50:29 <elliott> value that does not reduce or Haskell's "error" function depending on the
16:50:29 <elliott> context."
16:50:30 <elliott> ;__;
16:50:39 <elliott> Gregor: Well that's not right...
16:50:42 <elliott> !haskell import Foreign; main = peek nullPtr :: IO Int
16:50:51 <Gregor> Odd, why does it say stuff there ... oh, I'll bet I drop Haskell's stderr.
16:50:55 <Gregor> !haskell import Unsafe.Coerce; main = unsafeCoerce (42 :: Int)
16:51:09 <elliott> <EgoBot> ​\ /tmp/runghcXXXX21051.hs:1:8: Not in scope: `printStr'
16:51:11 <elliott> Gregor: No you don't.
16:51:17 <elliott> Oh, hmm
16:51:19 <elliott> That might be to stdout
16:51:20 <Gregor> !haskell import Unsafe.Coerce; main = unsafeCoerce (42 :: Int)
16:51:21 <elliott> runghc is weird
16:51:38 <Gregor> Helloooo? Tell me you segfaulted!
16:51:47 <Gregor> !haskell import Unsafe.Coerce; main = unsafeCoerce (42 :: Int)
16:51:52 <elliott> [elliott@dinky tmp]\$ runhaskell <<< 'import Unsafe.Coerce; main = unsafeCoerce (42 :: Int)'
16:51:53 <elliott> [elliott@dinky tmp]\$
16:51:57 <elliott> That explains things.
16:52:02 <Gregor> lol
16:52:08 <elliott> Same with nullPtr
16:52:11 <elliott> But it exits code 11
16:52:18 <Gregor> I could make it output "No output." as appropriate.
16:52:21 <elliott> So, uh, I guess you could add || echo "died with \$?"
16:52:24 <elliott> Or something.
16:52:50 <Gregor> !haskell import Unsafe.Coerce; main = unsafeCoerce (42 :: Int)
16:52:55 <EgoBot> No output.
16:53:05 <Gregor> Error codes are for losers.
16:53:43 <elliott> !haskell main = main
16:53:55 <elliott> Gregor: Uhh, excuse me, where is my <<loop>>?
16:54:01 <Gregor> !haskell import Unsafe.Coerce; main = unsafeCoerce (42 :: Int)
16:54:05 <Gregor> elliott: ?
16:54:06 <EgoBot> No output.
16:54:54 <elliott> Gregor: GHC has a grand tradition of optimising terminating programs into programs which print <<loop>> then exit.
16:55:02 <elliott> Perhaps only the compiler does it, though.
16:55:33 <elliott> [elliott@dinky tmp]\$ echo 'main = main' >loop.hs && ghc --make loop.hs
16:55:33 <elliott> [1 of 1] Compiling Main ( loop.hs, loop.o )
16:55:33 <elliott> [elliott@dinky tmp]\$ ./loop
16:55:33 <elliott> loop: <<loop>>
16:56:03 <elliott> "I feel that monospace fonts should be used for all of programming. A
16:56:03 <elliott> language could use Unicode symbols, but if it enforces typography, it
16:56:04 <elliott> is destined to win an award for being really unusable"
16:56:08 <elliott> EXCELLENT! @lang is unusable
16:56:10 <Gregor> I assume you mean non-terminating programs.
16:56:16 <elliott> "I'd suggest, in addition to the symbols, renaming some of the fundamental types and concepts, like Monad. I would violently agree that Monad is the correct term, but try to communicate with a commodity software developer sometime (or a government acquisition professional). RWH goes a long way to explaining the concepts, as do the countless Web pages dedicated to explaining the monad concept."
16:56:19 <elliott> WOW THIS IS THE WORST THREAD
16:56:23 <elliott> Gregor: I... might.
16:56:30 <elliott> Gregor: OTOH it could optimise terminating programs that way too.
16:56:53 <Gregor> True.
16:56:56 <elliott> "Indeed, that is my point. "Bottom" is the representation of a computation
16:56:57 <elliott> which cannot be computed. It does not have a semantic in anything less
16:56:57 <elliott> than the first infinite ordinal. It should be treated as essentially
16:56:57 <elliott> unique. It exists as a syntactic construct, but it cannot be given an
16:56:57 <elliott> In particular, we cannot compare "distinct" (or even indistinct) bottoms,
16:56:59 <elliott> because of the halting problem. There is no consistent logic in which
16:57:01 <elliott> (forall x, x = x) does not hold. Treating bottom the same way we treat 1,
16:57:03 <elliott> "abc", (Just 10), and the other (in principle) comparable values introduces
16:57:05 <elliott> contradiction to Haskell, as a logic. (That is why bottom has the
16:57:07 <elliott> syntactic symbol _|_, the syntax for /the/ unique contradiction)"
16:57:09 <elliott> AAAAAAAAAAARGH
16:59:12 <oerjan> elliott: i think you found the guy
16:59:36 <elliott> oh, solla
16:59:51 <elliott> there is a very disappointing amount of ignorance in this thread
17:02:19 <elliott> "I really have no problems with the monad/functor separation that
17:02:20 <elliott> somebody mentioned.
17:02:20 <elliott> Maybe Monad is not the best name for that class if it's not true that
17:02:20 <elliott> every Monad is a
17:02:20 <elliott> Functor, but it's not very confusing anyway."
17:02:59 <oerjan> i recall that was very confusing
17:03:10 -!- pikhq has joined.
17:03:13 -!- pikhq_ has quit (Ping timeout: 255 seconds).
17:05:14 <Gregor> What shall I eat for Christmas lunch.
17:05:24 <Gregor> I'm thinkin' ... peanutbutter and jelly sandwich.
17:05:56 <Gregor> *sobs quietly to self*
17:06:56 <elliott> this guy on SO just unaccepted my answer
17:06:58 <elliott> ON CHRISTMAS!
17:06:59 <elliott> CHRISTMAS!!!
17:07:42 <elliott> oerjan: "Denotational semantics is unrealistic." you're right, this guy is awful
17:09:07 <elliott> oerjan: he's skipped the "being any good at theory" part and jumped straight to the "adopting hard-line constructivism" part, it seems
17:09:35 <elliott> "So assuming you mean something like:
17:09:35 <elliott> fst (seq [1..] (1,2))"
17:09:39 <elliott> that terminates, you douche.
17:10:21 <elliott> now that I think of it, this Solla name is very familiar...
17:10:24 -!- azaq23 has joined.
17:10:33 -!- azaq23 has quit (Max SendQ exceeded).
17:11:02 -!- azaq23 has joined.
17:11:52 <elliott> oerjan: ooh look, he's made a cottage industry out of this: http://blog.ezyang.com/2011/09/lets-play-a-game/comment-page-1/#comment-2974
17:12:44 -!- oerjan has quit (Remote host closed the connection).
17:18:36 <elliott> "Sure, but if you've ever used recursion, then you do have bottoms in your program."
17:18:37 <elliott> no. stop.
17:18:41 <elliott> you're making it worse
17:27:13 -!- incomprehensibly has joined.
17:27:18 -!- incomprehensibly has quit (Client Quit).
17:29:35 -!- sebbu2 has joined.
17:29:35 -!- sebbu2 has quit (Changing host).
17:29:35 -!- sebbu2 has joined.
17:30:36 -!- sebbu has quit (Ping timeout: 240 seconds).
17:31:04 -!- sebbu2 has changed nick to sebbu.
17:42:30 <Gregor> I'll bet fnord.to is somebody here ...
17:42:35 <elliott> http://isitchristmas.com/ god blses
17:42:45 <elliott> Gregor: Huh?
17:42:57 <elliott> *gob dles
17:44:11 <Gregor> fnord.to was poking around at hackiki.org
17:44:51 <fizzie> Hoy that's probably the isitchristmas site that was on our lobby-screen.
17:44:59 <fizzie> Or at least very similar.
17:45:11 <elliott> <map name="ffmap">
17:45:11 <elliott> <area shape="poly"
17:45:11 <elliott> coords="0,163, 0,198, 198,0, 163,0"
17:45:11 <elliott> href="http://getfirefox.com/"
17:45:11 <elliott> alt="Get Firefox!" />
17:45:12 <elliott> </map>
17:45:22 <elliott> Gregor: No imagemap user would survive here.
17:45:29 <elliott> fizzie: It's pretty Famous.
17:45:42 <fizzie> It has isitfriday normally.
17:46:18 <Gregor> elliott: Hard to argue with that logic ...
17:46:23 <Gregor> Maybe he's a would-be hacker.
17:46:25 <fizzie> But apparently not isitfriday.com, that seems very different.
17:50:01 <elliott> "It has a security system including user permissions to make this marginally safer than it sounds."
17:50:03 <elliott> Gregor: Yeah, marginally.
17:50:42 <Gregor> Well they're not supposed to make it /wildly/ safer X-d
17:50:44 <Gregor> ...
17:50:45 <Gregor> *X-D
17:51:13 <elliott> Gregor: What the /fuck/ do you use <xmp> for
17:51:57 <elliott> 403
17:51:57 <elliott> Permission denied.
17:51:57 <elliott> Due to spam, all edits to this wiki require that you log in.
17:52:03 <elliott> Gregor: You have successfully defeated my 'sploit.
17:52:22 <elliott> fizzie: Although you may think you are frolicking happily across the internet surf, make no mistake. There are sharks in the surf who will infect your PC, steal your valuable information, your identity and wreck unimaginable havoc on your life and PC.
17:52:52 <fizzie> Those wifi-enabled SD cards -- http://uk.eye.fi/ -- are so confusing. It's a SD card. But it magically wifizes and remungles its contents and whatnot.
17:53:24 <fizzie> Next they'll make a microsd card like that.
17:53:38 <Gregor> elliott: <xmp> apparently just ignores HTML tags.
17:53:53 <fizzie> (Also they're misusing our ccTLD.)
17:54:16 <Gregor> elliott: I think he was just trying to find the environment.
17:55:31 <elliott> Gregor: Oh, he added that, not you.
17:55:47 <elliott> fizzie: So it's a ... dropbox SD card or something?
17:55:59 <elliott> That's actually not a terrible idea...
17:56:07 <elliott> Although you'd want 3G really.
17:56:38 <elliott> Or at least Bluetooth so it can work short-range if you just lug about a laptop.
17:57:30 <fizzie> We had, last millennium.
17:57:41 <fizzie> Well, maybe still during this one too.
17:57:49 <fizzie> But nowadays they're very relaxed.
17:58:08 <elliott> I wonder if they made a shell company in Finland just to register that or something. :p
17:58:27 <Gregor> I looked at Eye-Fi, went "wow, that's surprisingly inexpensive", then noticed it's in GBP :(
17:58:31 <fizzie> There might still be a residence-or-place-of-business rule, yes.
17:58:39 -!- oerjan has joined.
17:59:36 <elliott> Gregor: Multiply by 1000 to get current US market rates.
17:59:52 <elliott> Discrimination against fizzies.
18:00:11 <fizzie> They're selling it in the local department store.
18:00:21 <fizzie> Their catalog is where I noticed it from.
18:00:35 <fizzie> The website went to uk.eye.fi automagically though.
18:01:40 <fizzie> eye.fi's been registered to "Web Solutions ApS, Suomen sivuliike" -- where "Suomen sivuliike" means "subsidiary in Finland", basically. (And it has a snailmail address in Copenhagen.)
18:03:09 <fizzie> They've had wifi-enabled CF cards for quite a while, aimed for professionals; but those are at least a bit bigger.
18:03:20 <elliott> fizzie: Web Solutions sounds like the name of a company that could forseeably register .fi domains on behalf of people not in finland.
18:03:23 <elliott> *Finland
18:03:36 <elliott> "I would have compose (probably not called '.') read the same way we read
18:03:36 <elliott> this sentence (and unix pipes) ie left to right."
18:03:39 <elliott> NOOO I JUST ARGUED ABOTU THIS
18:04:24 <elliott> oerjan: if you gave up on that thread don't worry MCBRIDE SAVES THE DAY
18:04:26 <elliott> By
18:04:27 <elliott> talking
18:05:05 <elliott> "> I'd like to program with an applicative notion, but
18:05:05 <elliott> > in monadic types. That's what I'd do different, and for me, the subject
18:05:06 <elliott> > is not a hypothetical question.
18:05:06 <elliott> So... you are developing a programming language with all calculations being automatically lifted to a monad?"
18:05:06 <lambdabot> <no location info>: parse error on input `in'
18:05:06 <lambdabot> can't find file: L.hs
18:05:09 <elliott> HE INVENTED IDIOM BRACKETS YOU DOLT
18:05:19 <elliott> oerjan: hi, im a stable and mature human being
18:05:44 <fizzie> I'm vaguely curious how that "auto-upload and delete oldest to free space" feature works. It has to fake some sort of FAT filesystem for the camera, and it doesn't sound especially safe to go altering that while the camera's on, if it has cached parts of it.
18:05:49 <oerjan> elliott: it's not like i visit haskell-cafe every hour
18:06:02 <oerjan> more like once a day
18:06:47 <elliott> oerjan: this is from dec 22 :P
18:06:55 <oerjan> making compose go left to right is somewhat dubious all the time application is still right to left
18:07:12 <elliott> fizzie: It could just cause FAT requests to block until it does the fiddling, no?
18:07:54 <elliott> oerjan: indeed. yesterday I objected to it at length because I find the notion that composition works "backwards" very misguided, as it's applying an intuition about how strict languages are evaluated to a non-strict language
18:08:06 <elliott> (I don't recall whether you were present or not)
18:08:15 <Gregor> elliott: LOLOLOL
18:08:21 <elliott> Gregor: hi
18:08:24 <Gregor> elliott: Price is \$50 or 50GBP
18:08:31 <Gregor> LOGIC MUCH?
18:08:52 <elliott> Gregor: That's a common thing.
18:09:21 <elliott> Gregor: If you see pricing like that, you know it's a ripoff any country you're in, because they're going to be making almost 100% profit, and so are making pricing decisions based on psychology rather than mathematics :)
18:09:27 <Gregor> I know that's common for less expensive things, I thought it started to approach the actual conversion rate as things got more expensive. Although I suppose \$50 isn't exactly expensive.
18:09:35 <Gregor> Yup.
18:09:45 <elliott> It probably costs them three cents and a Chinese orphan's tear to make.
18:10:16 <elliott> Gregor: Anyway, 50 pounds is pretty expensive.
18:10:22 <elliott> Especially for an SD card :P
18:10:30 <elliott> Oh, wait, you said for less expensive things.
18:10:42 <fizzie> There are no "FAT requests" the SD card gets, it's a block device. And the camera can reasonably assume nothing else will change the contents and e.g. cache the FAT directory structure, and write the directory contents from that cache after snapping a new shot, which would break badly if the directory had had some files deleted.
18:10:43 <Gregor> Like food and clothes.
18:11:00 <oerjan> <elliott> oerjan: hi, im a stable and mature human being <-- i think the term is "compulsive liar"
18:11:00 <elliott> "Oh, so it's not an arbitrary monad, but a single one. That's a bit disappointing."
18:11:09 <elliott> THAT'S NOT HOW EFFECT SYSTEMS WORK
18:11:24 <elliott> HOW DARE YOU INSULT THE GREAT EXALTED MCBRIDE
18:11:32 <elliott> IM GOING TO MAKE YOU CRY INTO A VAT OF TEARS ;__;
18:11:33 <elliott> hi
18:11:54 <oerjan> i sense that christmas is grating on us all
18:12:03 <elliott> fizzie: Fair enough, but I don't know that cameras would actually do that.
18:12:09 <elliott> oerjan: Naw, Christmas is great, it's the other parts.
18:12:19 <elliott> fizzie: I mean, they presumably don't have much computing RAM.
18:12:28 <elliott> (i.e. RAM not being used for camera-y things, I don't really know how cameras work.)
18:13:17 <Gregor> They typically run VxWorks.
18:13:33 <Gregor> So, you could probably find out.
18:13:34 <fizzie> You could run Linux on some old Canons, IIRC.
18:13:36 -!- PiRSquaredAway has quit (Quit: bye).
18:14:01 <fizzie> Anyway, they do seem to have a camera compatibility page. Maybe it just makes some assumptions.
18:14:14 <elliott> fizzie: Maybe you have to turn off the camera and press a button. :
18:14:15 <elliott> :p
18:14:28 <elliott> "> > Denotational semantics is unrealistic.
18:14:28 <elliott> > And so are imaginary numbers. But they are damn useful for electrical
18:14:28 <elliott> > circuits calculations, so who cares?
18:14:28 <elliott> Not a fair comparison. Quaternions are not particularly useful for
18:14:28 <elliott> electrical circuits, because it is unrealistic to apply a four-dimensional
18:14:28 <elliott> construct to two-dimensional phase spaces. In the same way, denotational
18:14:29 <lambdabot> Not in scope: data constructor `And'Not in scope: `so'Not in scope: `are'No...
18:14:29 <lambdabot> can't find file: L.hs
18:14:30 <elliott> semantics adds features which do not apply to a theory of finite
18:14:32 <elliott> computation."
18:14:34 <elliott> oerjan: this guy is crazy
18:14:51 <Gregor> Maybe it just doesn't eff with the presented filesystem until the camera is off?
18:14:59 <Gregor> I mean, it is a memory card as well as a Wi-Fi device.
18:15:04 <oerjan> elliott: so you think he'd fit in here?
18:15:04 <fizzie> The card doesn't get power when the camera is off.
18:15:13 <Gregor> fizzie: Tiny battery.
18:15:23 <elliott> "I did not introduce "good" and "bad" into this discussion. I have merely
18:15:23 <elliott> said (in more words) that I want my hypothetical perfect language to prefer
18:15:23 <elliott> OPERATIONAL (model) SEMANTICS for a typed PARACONSISTENT LOGIC over the
18:15:23 <elliott> DENOTATIONAL SEMANTICS which the official documentation sometimes dips into."
18:15:31 <elliott> PARACONSISTENT LOGICS! awesome, he's going right off the deep end
18:16:01 <fizzie> Apparently at least some cameras do explicit support, with "doesn't turn off until uploads are complete" + "can disable wifi via menu" + "provides wifi indicators in menus" sort of features.
18:16:39 <elliott> fizzie: I wonder how you enter WAP keys.
18:16:47 <elliott> Maybe there's a little binary input switch on the back.
18:16:56 <elliott> Maybe it shows the results by faking a picture file that you view with your camera.
18:17:07 <fizzie> There's a pre-setup you do with a computer, sorry. :p
18:17:19 <oerjan> elliott: at least he has a para-chute
18:18:20 <elliott> fizzie: I do wonder how useful the WiFi-as-soon-as-you-take-a-picture thing is, unless you take pictures of areas in your house with particularly good signal strength.
18:18:33 <elliott> It seems like most of the time you'd want to take photos, return home, and press a button to do the uploadering.
18:18:44 <elliott> Then the benefits seem rather dubious wrt just plugging it in to a computer.
18:18:46 <Gregor> elliott: Frankly, I'd be happy with having my laptop strapped 'round me, on, as a WiFi hotspot.
18:18:48 <elliott> s/wrt/as opposed to/
18:18:57 <elliott> Gregor: That's why I said it should do Bluetooth :)
18:19:07 <Gregor> Mmmm.
18:19:08 <Gregor> True.
18:19:20 <elliott> Gregor: Now CLEARLY what we need is a wearable computer to do that part.
18:19:23 <fizzie> Laptop in your pants.
18:19:30 <elliott> Then we could just put a camera in the glasses.
18:19:37 <elliott> And look like total fuckin' nerd.
18:19:37 <elliott> s.
18:19:45 <elliott> fizzie: Or that, yes.
18:20:03 <fizzie> Doubles as a sack-warmer in colder climates.
18:20:27 <elliott> oerjan: Did you see that "strict, lazy, non-strict, eager" thread?
18:20:36 <elliott> It's, um, very pleasantly worded.
18:21:25 <elliott> > comparing void [] [0..]
18:21:26 <lambdabot> Not in scope: `void'
18:21:34 <elliott> > let void = liftM \$ const () in comparing void [] [0..]
18:21:35 <lambdabot> LT
18:21:45 <elliott> Deewiant: You may find ^ useful for lazily comparing lengths of lists without having to define your own function for it
18:22:29 <elliott> Deewiant: (Obviously with Control.Monad.void)
18:23:49 <fizzie> > let void = liftM \$ const () in comparing void [0..] [1..] -- WHY IS IT NOT GT IT OBVSLY HAS ONE MORE NUMBER
18:23:53 <lambdabot> mueval-core: Time limit exceeded
18:24:21 <oerjan> of course
18:25:33 <elliott> > let void = liftM \$ const () in compаring void [0..] [1..]
18:25:34 <lambdabot> Ambiguous type variable `m' in the constraint:
18:25:34 <lambdabot> a...
18:26:01 <oerjan> :t (()<\$) -- this too
18:26:02 <lambdabot> forall (f :: * -> *) b. (Functor f) => f b -> f ()
18:26:07 <elliott> > let void = liftM \$ const () in compаring void [0..] [1..]
18:26:08 <lambdabot> GT
18:26:12 <elliott> fizzie: It just needed some time to think, that's all.
18:26:12 <fizzie> "comp?ring" -- poor terminal font strikes again.
18:26:16 <elliott> Darn.
18:26:38 <fizzie> (On the phone here, Droid Sans Mono or whatever.)
18:27:27 <elliott> It's just Crycrycarcyarcuyrcihcruwehricuhweirchaorchuiweorhcawercllic!
18:27:29 <oerjan> > 'а'
18:27:30 <elliott> AKA Welsh.
18:27:30 <lambdabot> '\1072'
18:46:43 -!- incomprehensibly has joined.
18:48:18 <elliott> atomicModifyMutVar# :: MutVar# s a -> (a -> b) -> State# s -> (#State# s, c#)
18:48:24 <elliott> oh god, it's that type copumpkin warned me about
18:48:28 <elliott> oerjan: help, i'm so scared
18:48:35 <copumpkin> :)
18:49:16 <oerjan> you are far from your safe boxes now, elliott
18:50:24 <elliott> oerjan: it's not the boxes
18:50:33 <elliott> oerjan: where does b go, and where does c come from
18:50:40 <elliott> know that and you will know true horror
18:50:45 <elliott> hint:
18:50:48 <elliott> :t atomicallyModifyIORef
18:50:49 <lambdabot> Not in scope: `atomicallyModifyIORef'
18:50:51 <elliott> argh
18:50:57 <elliott> @hoogle atomicallyModifyIORef
18:51:00 <elliott> argh!
18:51:04 <oerjan> ayieeh
18:51:08 <elliott> :t atomicModifyIORef
18:51:09 <lambdabot> Not in scope: `atomicModifyIORef'
18:51:11 <elliott> @hoogle atomicModifyIORef
18:51:11 <lambdabot> Data.IORef atomicModifyIORef :: IORef a -> (a -> (a, b)) -> IO b
18:51:15 <elliott> oerjan: there's hint
18:53:19 <oerjan> well b = (a, c) would seem a safe bet
18:54:23 -!- incomprehensibly has quit (Quit: Leaving.).
18:54:49 <oerjan> so why in the world isn't it fixed to that
18:55:40 -!- incomprehensibly has joined.
18:56:11 -!- incomprehensibly has quit (Client Quit).
18:57:42 <elliott> oerjan: because tuples aren't available at the stage GHC.Prim is compiled at
18:57:47 <elliott> or something
18:57:50 <elliott> or the stage the types are expressed at
18:57:55 <elliott> so it just unsafeCoerces it
18:58:01 <oerjan> AIEEH
18:58:07 <elliott> it's amazing :D
18:58:12 <elliott> hmm
18:58:16 <elliott> copumpkin: why doesn't it just use an unboxed tuple?
18:59:03 <fizzie> Heh, that's funny; the laptop which I upgraded to Ubuntu 11.10 has lost the Ubuntu branding from the GRUB menu; now it has Debian branding there. "debian: The Universal Operating System", and a globe, and whatever.
18:59:33 <elliott> fizzie: Are you sure you didn't upgrade it to Debian?
18:59:46 <fizzie> I'm... reasonably sure. It has that Ubuntu LightDM stuff going on.
19:00:59 <oerjan> elliott: presumably it would then have to repack it to get it into an actual IO?
19:01:23 <elliott> oerjan: hm right
19:18:26 -!- incomprehensibly has joined.
19:21:48 -!- incomprehensibly has quit (Client Quit).
19:24:34 <elliott> @src Int compare
19:24:34 <lambdabot> Source not found. That's something I cannot allow to happen.
19:24:36 <elliott> gah
19:24:55 <elliott> fizzie: [bad shakespeare reference]
19:28:14 <elliott> *Data.Unique.Snowflake> fmap hash newUnique
19:28:14 <elliott> 256
19:28:14 <elliott> *Data.Unique.Snowflake> fmap hash newUnique
19:28:14 <elliott> 512
19:28:14 <elliott> *Data.Unique.Snowflake> fmap hash newUnique
19:28:15 <elliott> 768
19:28:17 <elliott> *Data.Unique.Snowflake> fmap hash newUnique
19:28:19 <elliott> 1024
19:28:21 <elliott> *Data.Unique.Snowflake> fmap hash newUnique
19:28:23 <elliott> 1280
19:28:25 <elliott> Well that's not right.
19:28:52 <elliott> @src Int
19:28:53 <lambdabot> data Int = I# Int#
19:28:56 <elliott> Hmm.
19:29:36 <elliott> oerjan: why the heck can't I unsafeCoerce "data Foo = Foo Int#" into Int and get the right results :(
19:30:23 <oerjan> shocking
19:31:24 <elliott> oerjan: why is that shocking :( they have :( the exact same constructors
19:31:37 <oerjan> yes, that's why it's shocking
19:32:35 <elliott> oerjan: you usually am be sarcastic when say shocking >:(
19:33:00 <oerjan> why can't i be both? </dogbert>
19:37:46 <oerjan> storm's a-coming :(
19:38:17 <elliott> oerjan: *santa
19:38:47 <oerjan> i thought even you brits were finished with that bit now
19:39:37 <elliott> oerjan: SANTA NEVER DIES.
19:41:05 <oerjan> surely this must be about when he goes on vacation.
19:42:24 <elliott> oerjan: well see because he exists in his own space-time continuum, he actually works normal workdays
19:42:42 <elliott> monday to friday he does his deliveries, and he gets the weekend off, which translates to like a few ms pause
19:42:49 <elliott> he gets all this extra time from the rest of the yaer
19:42:50 <elliott> year
19:43:02 <elliott> so for santa the year is december 24/25
19:43:06 <elliott> qez
19:43:57 <oerjan> fancy
19:44:12 <oerjan> quod est zombocom?
19:44:55 <elliott> yes.
19:45:03 <elliott> that's where santa's power comes from
19:45:09 <oerjan> because you can do anything as santa
19:45:14 <elliott> the only limit is yourself.
19:45:18 <elliott> oerjan: did you get lutefisk for christmas
19:45:32 <oerjan> no.
19:46:33 -!- KingOfKarlsruhe has joined.
19:51:05 <elliott> oerjan: why not
19:51:13 <oerjan> it doesn't really work as microwave dinner.
19:51:54 <elliott> oerjan: does santa not cook things for you in .no
19:52:19 <oerjan> not lutefisk.
19:55:26 <elliott> data Int = I# Int#
19:55:27 <elliott> hmph
19:55:33 <elliott> I was wondering if the representation mightn't have changed
19:55:49 <elliott> and I know current GHC doesn't pointer-tag Ints, so wtf
19:55:52 <elliott> or hmm
19:56:02 <elliott> it doesn't tag Int#s
19:56:05 <elliott> but it has no reason to tag Ints, either
19:56:09 <elliott> since they're just regular objects
19:57:27 <Gregor> `words --eng-all -o 100
19:57:38 <HackEgo> stronycaetinearettanessedbyaminatriquemosientastorresitamportcolithoxyfullankowskywherytiarynooarding
19:58:01 <oerjan> Gregor: i think that must be illegal
19:58:28 <Gregor> Eff off, pig, I'll stronycaetinearettanessedbyaminatriquemosientastorresitamportcolithoxyfullankowskywherytiarynooard all I want!
19:59:40 <oerjan> well don't come running to us if you get in trouble
20:00:12 <elliott> `words --french -o 1000000000000
20:00:18 <HackEgo> graphilardantsukundanifeloppéesdictumonomitatusilissementaranssuyerdentor's
20:00:22 <elliott> :D
20:00:33 -!- elliott has set topic: The graphilardantsukundanifeloppéesdictumonomitatusilissementaranssuyerdentor's domain | http://codu.org/logs/_esoteric/.
20:01:07 <Gregor> `words --eng-all -o 2
20:01:13 <HackEgo> estonen
20:01:29 <Gregor> `words --help
20:01:32 <HackEgo> Usage: words [-dhNo] [DATASETS...] [NUMBER_OF_WORDS] \ \ valid datasets: --eng-1M --eng-all --eng-fiction --eng-gb --eng-us --french --german --hebrew --russian --spanish --irish --german-medical --bulgarian --catalan --swedish --brazilian --canadian-english-insane --manx --italian --ogerman --portuguese --polish --gaelic --finnish --norwegian \ default: --eng-1M \ \ options: \ -h, --help this help text
20:01:33 <elliott> Estonen, it's like estonian but bad.
20:01:45 <elliott> `words --german-medical -o 100
20:01:49 <HackEgo> vigitallsprozeptusionephalternaltenstlinsuchenorelsunfallsfreichondrogrendesequetiralemedierenzenzprävalerientibins
20:02:19 <oerjan> whatever you do, don't catch that
20:02:46 <Gregor> It can be cured quickly and easily, but you'll die while they try to tell each other what you have.
20:03:06 <oerjan> each part may be curable, but you'll never survive the full drug combination
20:03:54 <elliott> `words --german-medical -o -42
20:03:58 <HackEgo> cliom
20:04:37 <elliott> cliom
20:04:52 <Gregor> What does -o actually do, more specifically than vaguely affect the length ...
20:04:58 <elliott> "Yes, it takes the birth of Jesus to enumerate total functions, so Merry Christmas!"
20:05:02 <elliott> Gregor: Set the offset.
20:05:13 <oerjan> the cliom is just below and to the left of the splanch
20:05:31 <elliott> Gregor: For more detail see Hird, Kallasjoki et al. 2011.
20:05:44 <Gregor> lol
20:05:50 <elliott> AS PLAGIARISED BY CURTIS 2011
20:06:09 <Gregor> Plagiarism is the sincerest form of plagiarism.
20:06:20 <elliott> :D
20:06:43 <elliott> "And another observation: Haskell has access to the real world and can use real-world data to construct elements of type Integer -> Bool. Are you saying there are only countably many streams of bits in the real world?"
20:06:45 <elliott> Err... yes.
20:07:06 <oerjan> If I write that in my book of tautologies, I will have written it in my book of tautologies.
20:08:46 <Gregor> elliott: If you collect Love of Jesus photons (which are at a particularly high density this time of year anyway), you can get infinite streams of bits from the Real World.
20:09:23 <elliott> Gregor: Haskell doesn't let you talk to the real world, man.
20:09:48 <elliott> "Functional programming may have moved on from when I was at university, but as I recall the main point of a functional programming system was to stop the programmer creating any “side effect”. However users buy software due to the side effects that are created, e.g. updating a UI."
20:10:00 <Gregor> lol
20:10:11 <Gregor> This guy is a real champion.
20:10:17 -!- oerjan has quit (Quit: Good night).
20:11:40 <elliott> "Also, I don't see why
20:11:40 <elliott> partiality deserves an applicative notation where other, perhaps more
20:11:40 <elliott> benign effects (like *handled* exceptions) are forced into an imperative
20:11:40 <elliott> (or clunky Applicative) mode."
20:11:42 <elliott> BURRRRRRRRRRRRN
20:16:40 <fizzie> `words --norwegian 15
20:16:44 <HackEgo> fremiddagsstemulig botnfirehjemmerliging bruktemass fein mørkbilleken enklenets insenotikke tabsolengen bjølvstøver styrmarked begrets kole skanalfartering bahrens mollda
20:16:46 <fizzie> (Oh, it has that now.)
20:17:40 <fizzie> Aw, oerjan just left; I was going to ask whether he's got his bjølvstøvers warmed up, and mørkbilleken in the oven.
20:17:45 <fizzie> After all, it's Christmas now!
20:18:31 <elliott> `words --finnish 15
20:18:34 <HackEgo> näytempiisimmassa toisemme suomassa venpähäneet sohjauttavistuvaa minansa kutikapestuin piisarmoksee selkääni leissasi sofisellestäsi sääsi allittuissammilta laveristaan grafialleen
20:18:47 <elliott> fizzie: Taken a trip to the suomassa recently?
20:18:57 <elliott> fizzie: If not, I hope you're eating some delicious venpähäneet.
20:19:10 <elliott> fizzie: My favourite Finnish delicacy has to be selkääni, though.
20:19:20 <elliott> fizzie: And Sääsi is such a lovely town.
20:19:25 <fizzie> Taken a trip to the mass of swamp? Can't say I have.
20:19:30 <elliott> X-D
20:19:31 <elliott> Seriously?
20:19:52 <fizzie> Well, it's not a *regular* word; but suo is a swamp, and massa is pretty much mass, so...
20:20:55 <fizzie> Also 'selkääni' is a regular word, e.g. "nouse selkääni" 'get on my back', "selkääni koskee" 'my back hurts'.
20:22:10 <Gregor> Mmmm, back.
20:22:11 <fizzie> First-person singular possessive version of the illative case, or some-such.
20:22:26 <fizzie> I guess you could say "syöt selkääni" 'you are eating my back'.
20:22:57 <elliott> :D
20:23:04 <elliott> fizzie: What about the othe rtwo?
20:23:05 <elliott> *other two
20:24:04 <fizzie> Those don't really have a meaning, though Sääsi could well be a Finnish place name, and "vehnä" == wheat, so I keep reading "venpähäneet" as wheat-something, since it's got the right letters, just not in the right order.
20:25:04 <fizzie> "vehnäpäneet" is still nothing, as far as I know of, but it could easily be "wheat X", where X is some horrible traditional food from the ass-end of nowhere.
20:25:38 <elliott> :D
20:25:38 <Gregor> WHEAT-RELATED ANECDOTE:
20:25:44 <fizzie> Actually hmm, I guess "sääsi" is also "your weather", come to think of it. People don't usually have private weathers, but I guess it could be used to mean "weather in where you are".
20:26:13 <elliott> ic an;t stop laughing your language is so funny
20:26:14 <fizzie> ("sää" is weather.)
20:26:21 <Gregor> I remember somebody saying that they would organize a "grad student challenge", where you had to do conventional grad-student stuff all day. But as they described it, the first thing they said is "you get up and eat wheat for breakfast", and everybody laughed at them, so we didn't hear the rest.
20:26:23 <Gregor> Mmmm, wheat.
20:27:25 <elliott> Gregor: Backs are nicer.
20:27:44 <Gregor> I use raw wheat as a garnish for back.
20:30:34 <fizzie> elliott: Also from your `words list: "toisemme" 'we -- each other' if you add a verb; "laveristaan" '(out of/about) his/her (wooden bed/bed-frame)'.
20:30:38 <Gregor> Wheat is also the greatest aphrodisiac.
20:30:48 <fizzie> "laveri: A rough wooden bed or platform for sleeping. (furniture) A simple wooden bed, the bottom of which is typically made of laths."
20:30:59 <elliott> fizzie: We about her wooden bed each other.
20:31:31 <Gregor> Are you propositioning fizzie?
20:31:52 <fizzie> "löysimme toisemme laveristaan" -- "we found each other in his wooden bed". (Okay, that sounds a bit dirty.)
20:32:16 <elliott> Gregor: No; are you?
20:32:23 <elliott> fizzie: Are *you*?
20:32:39 <Gregor> Depends on the quality of his laveri.
20:32:42 <elliott> `words --finnish 15
20:32:45 <HackEgo> saan päättömämme kauhoituskaaja lamme rakelmoittelemme eläviävinaan kuolettaisit myöntävi täsi ylistumaa hyödynti tempiensä esihän tukeutteleville karkeimmikseen
20:33:09 <elliott> fizzie: Päättömämme is the best kind of theatre.
20:33:15 <fizzie> It means "our headless one".
20:33:16 <elliott> fizzie: But sometimes it can be a bit lamme, you know?
20:33:18 <elliott> I...
20:33:24 <elliott> I love Finnish?
20:33:29 <Gregor> X-D
20:33:29 <Vorpal> `url words
20:33:32 <HackEgo> http://codu.org/projects/hackbot/fshg/index.cgi/raw-file/tip/words
20:33:39 <Vorpal> `run type words
20:33:41 <HackEgo> words is /hackenv/bin/words
20:33:42 <Vorpal> `url bin/words
20:33:46 <HackEgo> http://codu.org/projects/hackbot/fshg/index.cgi/raw-file/tip/bin/words
20:34:39 <Vorpal> elliott, learn it
20:34:52 -!- monqy has joined.
20:34:57 <elliott> fizzie: So now that I've stopped laughing: It was the biggest kauhoituskaaja I've ever seen. Easily twice the size of my own kuolettaisit's one. I thought "Myöntävi! This is gigantic!".
20:35:05 <Vorpal> `words 15
20:35:10 <HackEgo> cut emthe blssol osta grav hadwel eai inhan riger jube lonal hoppe rethe sethyroof autome
20:35:11 <elliott> fizzie: But then my tempiensä broke, and, well, you know how it can be with little eläviävinaans.
20:35:23 <Gregor> `words --swedish 20
20:35:26 <HackEgo> kommandlar samarassonsningenod drömmangor konklimrade själts seglastej avveckning kiskrivet kels puttrafterbiste degelsen domernas expanstet vernas katadlas daljer åbyglantroling från famaskinnen ödspekullpaj
20:35:33 <elliott> fizzie: DECIPHER MY WORDS, PLEB
20:35:50 <Vorpal> Gregor, one valid word there: "från", means "from"
20:36:42 <Vorpal> `words --swedish 20
20:36:45 <HackEgo> damorfatt förvinprocen trare avsättan tröm vik cenerna diskarnspel busar gryta hugsvander kufiskt ändningarna försmåvil kändningrip begivelsensinflat krosats expedarna mentroll milist
20:36:47 <fizzie> elliott: Will take a while. At least kuolettaisit 'you should amortize', in an accounting context.
20:37:33 <Vorpal> lol
20:38:31 <Vorpal> fizzie, do any of the other words even mean anything?
20:39:00 <Vorpal> No Japanese?
20:39:28 <Vorpal> guess the algorithm might only work on languages using a latin script
20:39:35 <Vorpal> or hm
20:39:42 <Vorpal> `words --russian 20
20:39:43 <fizzie> elliott: "myöntävi" sounds like an old-fashioned way to say "myöntänee", that is "he/she is likely to agree/concede/grant"; it's not really valid, though. But with a couple of more letters it would be, e.g. "myöntäviä" 'granting (plural)' or some-such.
20:39:46 <HackEgo> ​дунувшихся яэнером заочника эское кикета средвссверта разонич пъсням выгоров фузить просман госуном опредент цзадела шость мигрублешя пание икатопника ьдцев сдедо
20:39:47 <elliott> The "algorithm", aka "Markov chain".
20:39:52 <Vorpal> elliott, right
20:40:00 <Vorpal> elliott, would it work at all on Japanese?
20:40:04 <elliott> fizzie: It even SORT OF MAKES SENSE in context!
20:40:12 <elliott> Vorpal: kallisti was just too lazy to do it, I think.
20:40:22 <Vorpal> heh
20:41:12 <elliott> :D
20:41:36 <elliott> (65 over 3. :/)
20:41:52 <Vorpal> elliott, what is that thing you are trying to get to converge?
20:41:53 <fizzie> "eläviävinaans" isn't a valid word, and can't really be, it breaks the vowel harmony rules. "eläviä" = 'living (plural)', but that's about it for the meaning.
20:42:05 <elliott> Oops, I missed the vole harmony violation.
20:42:12 <elliott> Vorpal: Units.
20:42:26 <Vorpal> elliott, what units?
20:42:47 <Vorpal> elliott, the number you gave lacked units, it looked dimensionless to me
20:42:51 <elliott> Vorpal: Big ones.
20:43:04 <Vorpal> elliott, like terrameter?
20:43:26 <Vorpal> that is fairly large I believe
20:43:42 <elliott> That's not a thing.
20:43:54 <Vorpal> elliott, well you never gave your unit
20:43:56 <elliott> Terametre is a thing, though.
20:44:01 <Vorpal> right
20:44:02 <Vorpal> whatever
20:44:23 <elliott> It's not The thing, though.
20:44:33 <Vorpal> elliott, "The metre (meter in the US), symbol m [...]" says wikipedia
20:44:36 <Vorpal> so meter is a thing
20:44:50 <fizzie> Also sadly no 'tempiensä'. "hyödynti" from your list is "made use of", approximately. "tukeutteleville" could be "for the people who keep calling other people fat" if you're *real* generous ("tukeva" == fat, chubby, "tukeutteleva" could barely mean "someone who calls other people fat", and then "tukeutteleville" is the proper inflection for what I said.) And "saan" is "I get". And now it's time for some chocolate and awayness. ->
20:45:08 <elliott> Vorpal: Terra isn't.
20:45:18 <Vorpal> elliott, oops, right
20:45:21 <Vorpal> missed that typo
20:45:37 <Vorpal> elliott, I blame playing terraria for 4 hours straight
20:45:51 <Vorpal> (in hardmode)
20:56:41 -!- KingOfKarlsruhe has quit (Quit: ChatZilla 0.9.88 [Firefox 9.0.1/20111220165912]).
21:01:23 <elliott> WHY DOESN'T THIS SHIT WORK
21:09:14 -!- GreaseMonkey has joined.
21:25:57 -!- zzo38 has joined.
21:32:08 <zzo38> OK, I can now see that my type is functor, which is what I thought. I could already see it is all x covariant and v contravariant. But is it applicative or monad or something else too?
21:32:08 <lambdabot> zzo38: You have 3 new messages. '/msg lambdabot @messages' to read them.
21:39:04 <zzo38> It seem to me might make, since lift = T . const; and then if you map the values (f x) instead of (x) then you might be able to make join
21:39:14 <const> o.O
21:39:50 <zzo38> const: What did you mean, exactly?
21:40:06 <const> zzo38: apparently I'm being dotted with T
21:41:25 <Gregor> const: Yeah, but you're the one dotting O with o.
21:43:47 <const> Gregor: instinctive response
21:44:53 -!- zzo38 has quit (Remote host closed the connection).
21:44:58 <elliott> const: Suddenly I realise that your name is probably a reference to the worst thing in C rather than the Haskell function.
21:45:16 <const> elliott: worst thing in C ?
21:46:09 <const> elliott: also, I wasn't thinking of any particular language when I went from variable -> const
21:46:18 <const> just thought the two worked together :)
21:47:10 <elliott> const: Worst thing in C, yes.
21:47:21 <elliott> Oh, you're that variable person.
21:47:24 <const> elliott: why do you say that?
21:47:30 <const> curious
21:48:31 <elliott> const: const is both the ugliest thing ever to get working, with basically every library working against you as far as const-correctness goes and signatures ballooning in size and becoming unreadable (since, let's face it, *nobody* remembers which way round the consts go first time), and in return gives you... an incredibly tiny amount of safety and static checking for your work.
21:48:48 <elliott> Though of course C is not known for its static checking, it's also not known for making you work for the privilege of not getting strong static checks :P
21:49:00 -!- derdon has joined.
21:54:44 <const> <elliott> Oh, you're that variable person. --> is that a bad thing?
21:54:46 -!- sebbu2 has joined.
21:55:29 <const> elliott: also, I see what your saying. constness in theory is also supposed compilers generate faster code
21:55:33 <const> duno how much it helps though
21:57:36 -!- sebbu has quit (Ping timeout: 240 seconds).
21:59:09 -!- sebbu has joined.
21:59:10 -!- sebbu has quit (Changing host).
21:59:10 -!- sebbu has joined.
22:00:16 -!- sebbu2 has quit (Ping timeout: 240 seconds).
22:00:46 -!- sebbu2 has joined.
22:04:21 -!- sebbu has quit (Ping timeout: 252 seconds).
22:04:24 <elliott> const: I've never seen it have an effect in practice.
22:04:29 <elliott> And no, I just didn't realise :)
22:18:35 <elliott> 45 over 1.72 :(
22:28:09 <elliott> 20 over 1.5 :)
22:44:38 -!- sebbu2 has changed nick to sebbu.
22:47:05 <elliott> http://sprunge.us/IMKR
22:47:09 <elliott> well today's hack is going perfectly!
22:53:00 -!- zzo38 has joined.
22:54:37 <zzo38> I have two Christmas trees. One is nice Christmas tree, it is small one, and is on top of the phonograph. The other one is messy Christmas tree that might be suitable for the D&D monster character. My D&D character is monster character so is good we have two Christmas trees
22:59:30 <elliott> :D
23:03:11 <zzo38> I played a short D&D game session today
23:03:24 <zzo38> Now maybe I can meet the requirement of prestige class
23:05:05 <zzo38> Did you figure it out?
23:19:45 -!- zzo38 has quit (Remote host closed the connection).
23:22:30 -!- sebbu has quit (Read error: Connection reset by peer).
23:23:04 -!- sebbu has joined.
23:23:05 -!- sebbu has quit (Changing host).
23:23:05 -!- sebbu has joined.
23:24:02 -!- incomprehensibl1 has joined.
23:33:53 -!- incomprehensibl1 has quit (Quit: Leaving.).
23:52:33 -!- Patashu has joined.
23:53:26 <elliott> copumpkin: You should hurry up making iteratees nicer before these hideous conduit things catch on :(
23:58:09 <Sgeo> conduit?
23:58:19 <Sgeo> And what's not nice about iteratees?
23:58:50 <Sgeo> Oh, conduits are connected to the Resource monad stuff?
23:59:12 <Sgeo> Oh, conduit blog post up yay
23:59:47 <elliott> Sgeo: Enumerator vs. Enumeratee is ugly, the "return unused data" thing is super ugly, since there's nothing stopping you lying
←2011-12-24 2011-12-25 2011-12-26→ ↑2011 ↑all