00:01:20 -!- MDude has joined. 00:02:10 elliott_: also, foldr performs tail call elimination. 00:02:14 kallisti: You're an idiot. 00:02:23 NEXT PLEASE. 00:02:43 elliott_: it does. that's precisely why it's constant space. no stack frames are allocated. 00:02:50 aside from the first one 00:03:19 ... oy. 00:03:20 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 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 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 Gregor: sooooo pedantic. for fucks sake. 00:03:52 Gregor: It doesn't do that, either. 00:04:00 kallisti has no idea how the call stack works in Haskell. 00:04:09 And I for one am not going to be the one to teach him how it does. 00:04:22 Ohwait, foldl would actually benefit, wouldn't it, not foldr ... 00:04:25 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 But that's not tail recursion. 00:04:39 Tail recursion is a purely syntactic property that is roughly 100% irrelevant in Haskell. 00:05:17 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 kallisti: Have I mentioned you're an idiot? 00:06:03 no. 00:07:20 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 "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 elliott_: perhaps you think I'm talking about tail recursion in a strict language. 00:07:58 that would be silly, since I'm talking about Haskell. 00:08:42 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 fizzie: Thx for -c btw, it's best. 00:15:10 elliott_: ...I 00:15:15 okay, you're not going to give me a chance. 00:15:21 waste of time. 00:16:04 kallisti: I've given you about a hundred chances, it's called every single time you've done this. 00:16:28 I'm just stupid enough to keep biting the bait. 00:16:55 elliott_: first of all, I know how Haskell's "call stack" works. 00:18:09 That's what you say literally every time. 00:18:22 I've made multiple claims to knowing about Haskell's call stack? 00:18:38 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 Seriously, I'm not interested. 00:19:08 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 elliott "too good for #esoteric" hird 00:20:46 Yes, that's absolutely what I said. 00:21:32 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 Feh, generating arbitrary timelines would be tough though X-D 00:23:15 Probably not impossible >_> 00:23:45 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 Plus of course certain people are more important to history than others ... 00:25:27 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 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:25:59 -!- DeadlyFugu has quit (Read error: Connection reset by peer). 00:26:24 elliott_: because I've written both of them and observed that constructing the list directly is faster. 00:26:32 -!- DeadlyFugu has joined. 00:27:24 elliott_: I'm not talking about a syntactic tail call. 00:27:48 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:27:51 Please stop. 00:32:19 elliott_: I really don't think there's anything to argue about. 00:32:44 another thing I "always" do, therefore: the result must always be the same because lol 00:43:57 I think I will go to bed. 00:49:48 hmm interesting. 00:50:02 so if I use Word -> [Word] for my factoring function, it runs extremely fast. 00:50:09 ah wait nevermind 00:50:44 okay. sanity restored 00:51:42 -!- elliott_ has quit (Ping timeout: 244 seconds). 00:59:53 @tell oerjan do you think there could be a faster way to write integer squareroot than floor . sqrt . fromIntegral 00:59:53 Consider it noted. 01:02:44 What's wrong with that? 01:03:08 NOT FAST ENOUGH 01:03:14 I think I've found a faster intsqrt 01:03:30 in Math.NumberTheory.Powers.Squares 01:05:15 Sgeo: nothing is wrong with it. 01:05:55 in fact since I only do one sqrt this is entirely a waste of time. 01:06:39 Clearly, you should use the magic number thingy 01:07:04 Oh, that's the reciprocal of the square root 01:07:38 Also, not integer I guess 01:10:09 wow amazing 01:10:17 no significant improvement in speed 01:10:28 from optimizing one square root operation. 01:10:51 ~.53 to ~.52 01:14:03 (seconds) 01:14:12 (Use ministat (from e.g. FreeBSD) or something equivalent for your benchmarking before calling something significant) 01:14:36 Deewiant: what? I can't just spam time over and over and guesstimate? 01:14:53 anyway I don't think this is measurably significant. 01:14:56 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 Generally speaking no 01:15:17 http://sprunge.us/LBOd any suggestions? 01:16:30 EQ | m == 0 -> [i]; _ -> [] 01:16:36 Not that it should matter 01:17:18 ...why would I do that? 01:18:27 looks to be about the same. 01:18:33 Wait, they consider the edge to be in the Antarctic, right? 01:19:08 I think to make this any significantly faster I'd need to change the algorithm. 01:19:19 I've pretty much optimized this one as much as possible. 01:19:30 Branch prediction should handle most of this kind of thing anyway 01:20:18 You can try using 'if m == 0' as a higher-level check if you want, though 01:21:16 I don't think that will do anything, and will make the code uglier probably. 01:22:11 if' t f True = t 01:22:17 if' t f False = f 01:22:33 Hmm, wait 01:22:57 That makes it hard to do an if based on (==0)\ 01:22:59 I think 01:23:12 ...what. 01:23:38 heh, I could make the code really ugly and unroll the loop a little. :P 01:24:20 for probably absolutely no gain. 01:27:55 -!- MDude has quit (Ping timeout: 240 seconds). 01:36:36 -!- zzo38 has joined. 01:41:51 zzo38: how do you print a Word#? 01:43:32 kallisti: Maybe you use a constructor, is it called W# or something like that 01:43:59 hm 01:43:59 ? 01:44:11 @hoogle W# 01:44:12 GHC.Exts W# :: Word# -> Word 01:44:19 oh, I have to do that. 01:44:19 okay. 01:47:33 @hoogle Word# -> Ordering 01:47:33 Unsafe.Coerce unsafeCoerce :: a -> b 01:47:33 Data.Ord comparing :: Ord a => (b -> a) -> b -> b -> Ordering 01:47:33 Prelude ($) :: (a -> b) -> a -> b 01:47:36 hm 01:48:10 hmmm no wordCompare# 01:56:35 going from about 5 seconds to .5 is a pretty big improvement. 01:56:44 I'm too lazy to try unboxing though 02:02:04 -!- nooga has quit (Ping timeout: 252 seconds). 02:02:44 @hoogle Word# -> Float# 02:02:44 Unsafe.Coerce unsafeCoerce :: a -> b 02:02:44 Prelude ($) :: (a -> b) -> a -> b 02:02:44 Data.Function ($) :: (a -> b) -> a -> b 02:02:47 hm 02:03:40 @hoogle Word -> Word# 02:03:40 Unsafe.Coerce unsafeCoerce :: a -> b 02:03:41 Control.OldException throwDyn :: Typeable exception => exception -> b 02:03:41 Control.DeepSeq ($!!) :: NFData a => (a -> b) -> a -> b 02:04:22 -!- derdon has quit (Remote host closed the connection). 02:13:40 :t 2## 02:13:41 GHC.Prim.Word# 02:13:45 excellent 02:17:17 > float2Int# 3.2# 02:17:17 Not in scope: `float2Int#' 03:03:40 -!- Klisz has joined. 03:06:16 telnet miku.acm.uiuc.edu 03:11:49 :( 03:13:24 turns out using explicit unboxing is slower because I have to reconstruct the boxed types in order to print them. 03:19:40 oh, hmmm, wait. 03:19:52 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 What's a 10th doctor episode I should watch? (Not Blink) 04:24:59 And not SitL/FotD 04:25:38 Why don't you just watch them in order ... 04:25:52 I've heard that they're mostly bad 04:26:09 So? 04:26:12 Suck it up. 04:28:28 yes being entertained should feel like running cross country. 04:28:38 you must endure it. 04:29:28 * Sgeo has yet to watch the rest of DS9 04:29:48 you know what I find really bizzare about American television? aside from the material itself... 04:29:51 canned laughter. 04:30:35 Yeah, laugh tracks are stupid. 04:30:58 But there is a lot of honest-to-goodness recorded-audience too, and laugh tracks are getting much less common. 04:32:53 I would like a window mode that's "always on top of maximized windows" 04:33:43 or "always on top of larger windows" 04:34:00 Hmm, I'm trying to think of what sit-coms I like that actually /use/ a laugh track ... almost none ... 04:34:09 Sgeo: bli-- oh 04:34:14 uh how about silence in th--- oh 04:34:22 uh 04:35:00 how about the season 4 finale. 04:35:10 Oh wait, duh, Seinfeld. 04:35:46 man whats the deal with seinfeld 04:36:00 It's the greatest sit-com ever made? 04:36:15 -_- 04:36:32 All those who don't like Seinfeld are bad people. 04:36:41 apparently subtle seinfeld references made to seinfeld snobs go unnoticed 04:36:42 * Sgeo is not a bad person. 04:37:14 Gregor: if i could ban you from life i wold 04:37:42 augur: That reference, it was way too subtle, I didn't get it X-D 04:38:10 Gregor: Seinfeld is good 04:38:12 Since it's, y'know, a thing people say. 04:38:30 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 kallisti: It definitely does. 04:38:55 I've basically removed all television from my daily mind diet. 04:39:05 for... like 3 years now. 04:40:13 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 I don't think that one was. 04:40:34 I like All in the Family, which is live. 04:41:29 Oh well. Silly laugh tracks. 04:44:27 -!- Darth_Cliche has joined. 04:46:04 I should make a laugh track bot. 04:46:20 And use some terrible heuristics to decide when it should laugh. 04:46:51 -!- I0ther has joined. 04:47:11 `welcome I0ther 04:47:22 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 Hi Gregor 04:47:38 Thanks HackEgo 04:47:45 -!- DCliche has quit (Ping timeout: 252 seconds). 04:48:14 Meet the bots! 04:48:24 Erm, so many bots I'm not quite sure which do what, tbh 04:48:34 Gregor: use a weighting factor that looks at different patterns and totals a weight, which has to pash a threshhold. 04:48:36 > text "Hello, I'm lambdabot. I do Haskell stuff." 04:48:37 Hello, I'm lambdabot. I do Haskell stuff. 04:48:42 Gregor: :P would be such a pattern. 04:49:16 `echo Hello. I'm .. some bot. I do Linuxy stuff. Shell commands can be run on me. 04:49:19 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 ... 04:49:28 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 fungot: introduce yourself 04:49:41 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 Sgeo: Nobody ever thought he was going to stay. 04:49:58 I didn't mean to scare him off 04:49:59 Gregor: ah that's a good idea. You could also use "heh" or "(ha)+" 04:50:07 Indeed 04:52:23 (b|mw|mua)?a*(h+a+)+ 04:52:37 Nah, people don't muahahaha when something is funny. 04:52:56 They muahahaha right after taking a bite out of a baby's skull while The Good Guy watches helplessly. 04:52:57 sure they do. 04:52:58 muahahahahahahaha 04:55:57 baa 04:56:10 Oh, that doesn't fit 04:56:22 mwha 04:56:57 Actually baa does fit. 04:57:00 As does baaaaaaaaaaaaaaaaaaaaa 04:57:06 also, a 04:57:12 Err, aa 04:57:17 But the h is unavoidable, isn't it? 04:57:21 + is one or more? 04:57:23 Nowait, yeah, need an h. 04:57:25 I missed that. 04:57:29 Thought it was * for some reason. 04:57:49 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 http://0taku.livedoor.biz/archives/4055139.html On the WTF scale of 1 to 10, this somehow overflows int. 05:26:37 (Japanese language, understanding not necessary) 05:27:42 (Context: They are celebrating Christmas. ... With characters from animation and animated porn.) 05:28:21 sounds like good fun 05:28:32 I think in Japanese it's something like 「なんでやねん!?」 05:29:35 Yeah, that would be a translation for WTF. 05:33:39 I may have inadvertantly lead Haskellers here, just a headsup 05:34:41 Does this mean anything meaningful to you? newtype T v f x = T (T x f v -> f x); 05:35:27 Sgeo: Meh, no worries. 05:38:21 zzo38, what 05:38:52 Madoka-Kaname: I don't really know what, it is why I asked 05:43:40 There exists a paper about PerlNomic 05:44:26 perlnomic? 05:44:41 ...you've never heard of perlnomic. 05:44:44 nope 05:44:47 is it context based? 05:44:54 Huh? 05:44:55 do you evaluate laws in list and scalar context? 05:45:03 The code is the law 05:45:11 ah, so yes. 05:49:36 -!- PiRSquared17 has joined. 05:50:25 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 Sgeo, let's play Python nomic 05:52:40 elliott apparently thought about HaskellNomic back in 2008 06:01:24 I propose the following be made law: 06:01:25 import zlib;exec reduce(lambda x,y:x.decode("hex"),[zlib.decompress("eJxtUsuOwjAMvPtrYLsc94AEhx6SqlJ74MwBKXwANF+/sROPnYIq5VHb45lxQg45pvAT8lxOvJdv4fXOp5fcE6+PFr9l+Vf3d3D1BICEhENLKOuV75vEL2jwW8G4TuID36YSL2AjFx4FYEHnI+/xa4OnKchoIHH6DuAaJJTtJbp4ZUgmcTQJxsBJFICTAdw+LKAe4IrOURJmz1CZyR6XniHXF7AzPNAElRbhi4+PmHJpWP6vaEBKufdobRLUo7Ux64Yk98kIHMgYnE1CwpQ2i8+7IVkDfYcEEw3ASXziHdVvzH2+Dql6SErx0+TQhnD3z0Dfl/PQCFBIMHHYjf29Axj8kNDAhrSJZ9MFEk5Owh/9AyvTW+4=".de 06:01:25 code("base64")).decode("base64")]*4) 06:02:35 o.O 06:03:02 (This is the code version of legalese, right?) 06:07:24 Or, if you want a slightly less line-overflowing version: 06:07:25 import zlib;exec reduce(lambda x,y:x.decode("hex"),[zlib.decompress("eJxVkT2uwkAMhPs9TX4eB0CCIsUYPSkptk6BtBwAmNPjsZMIimi1a3u+GQesg10wgFca8QQn3vxuDfTvhaM+6d75nZjxBs/q/wO9NmME7yxotQcXDffW6jFwmyUADXTf9ez3kwew3wBjERFNhGkTeKghnOCSRIRDyGFnbfF6HcJx9C+qPyVY9BAEsfzBIkIAdMpdOp5DIIDW/reVVM2OsQJPUH4jpENEQwBO4CrMDjgJYLtgOqRFgsWdSSQdhUDuZN2iXpn1lXukTBA/6a2VCFA+a7ib1g==".decode("base64")).decode("base64")]*3) 06:09:09 I don't trust that 06:10:56 Sgeo, has anybody done something like that in Perl Nomic? 06:11:25 Get rid of the exec and it should be .. n/m 06:22:48 http://paste.strictfp.com/23213?key=1acffb6a1f52d873c798284b55fc730e 06:22:53 Sgeo, this is the final version of the "law" 06:23:17 Madoka-Kaname, "helpful" 06:23:55 What does that decode to 06:24:03 (to scared to try) 06:24:04 ? 06:24:07 *too 06:25:52 PiRSquared17, replace the "exec" with a "print" 06:25:52 =p 06:26:37 http://codepad.org/X4JZieG4 06:28:55 The trick here is this: 06:28:55 __builtins__.__dict__["X19pbXBvcnRfXw==".decode("base64")]("X19idWlsdGluX18=".decode("base64")).__dict__["6576616c".decode("hex")] 06:29:00 This is the actual exec call 06:29:03 The first one is a decoy 06:45:53 -!- DeadlyFugu has quit (Ping timeout: 252 seconds). 06:47:30 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 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:37:46 zzo38, what's the difference between the barrier monad and http://hackage.haskell.org/package/monad-coroutine ? 07:40:06 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 -e expr Evaluate expr; see for details. 08:05:15 thanks ghc! 08:11:41 Hmm. I wonder. What is the monetary value of Vatican City? 08:11:55 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 This primarily involves learning to get to grips with quickcheck 08:12:59 At least, the quickcheck on lambdabot 08:25:01 -!- oerjan has joined. 08:31:35 -!- Patashu has joined. 08:33:16 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 Is it any kind of data structure or control structure? 08:35:29 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 oerjan: You have 1 new message. '/msg lambdabot @messages' to read it. 08:37:30 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 oerjan: O, what were you going to use that HJ type for exactly? 08:38:08 I don't know what a "haskelljoust" game is 08:39:29 But, yes I can see what kind of similarity there is 08:42:50 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 What happens if they both succeed or both fail? 08:46:03 I don't know how well that would actually work. 08:46:07 Sgeo: a tie 08:46:30 Also, Haskell functions are opaque, aren't they? 08:46:31 Do you have an example of a pair of functions that both succeed? 08:46:39 Well, I guess you could pass them data to see how they act 08:47:47 Hmm 08:47:48 However, the type I specified is a bit different, in a few ways 08:47:50 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 Not sure where I got the idea from 08:49:27 Trivial warrior that's tough to defeat unless a human writes a specialized warrior to defeat it: 08:49:32 ...n/m 08:49:33 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 I was thinking some sort of warrior that could do a signature thing, but that makes no sense 08:49:59 *returning 08:50:16 Sgeo: actually i think that makes quite a bit of sense. 08:50:26 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 I have no idea how you'd pass in a signature though. 08:51:01 Sgeo: well think of const False and const True as the simplest possible signatures. 08:54:36 Oh no, Satan is giving presents to Vorpal now. <-- is he? 08:55:18 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 imagines a world in which wolfram alpha is actually kind of good 09:01:26 Sgeo: warrior for what? 09:01:42 haskelljoust 09:01:45 Read scrollup 09:01:46 heh 09:04:15 Can any Alternative or MonadPlus be made backward? I would think so, by swapping the order of <|> 09:04:40 This might affect functions that use <|> such as optional and some and many 09:08:04 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 or pointfree, fmap g (T h) = T (fmap g . h . fmap' g); fmap' g (T t) = T (t . fmap g) 09:10:09 I think I'm in love with enumerator 09:12:12 fmap' :: (x -> y) -> T y f v -> T x f v 09:12:29 *fmap' :: Functor f => (x -> y) -> T y f v -> T x f v 09:12:53 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 `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:00 ​/home/hackbot/hackbot.hg/multibot_cmds/lib/limits: line 5: exec: haskell: not found 09:15:04 AAAAAAAAAAAAAAAAAAAAAa 09:15:34 !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 oerjan: why not use lambdabot? 09:15:41 runhaskell: syntax: runghc [-f GHC-PATH | --] [GHC-ARGS] [--] FILE ARG... 09:15:58 Vorpal: HAVE YOU EVER SEEN LAMBDABOT ACCEPT A TYPE DECLARATION? 09:16:06 oerjan: now that you mention it, no 09:16:14 which is kind of silly 09:16:16 it should 09:16:59 bbiab 09:17:06 -!- Vorpal has quit (Quit: ZNC - http://znc.sourceforge.net). 09:18:29 -!- Vorpal has joined. 09:18:29 `run ls bin h* 09:18:32 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 @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 Consider it noted. 09:22:21 `which runhaskell 09:22:24 ​/opt/ghc/bin/runhaskell 09:23:10 @tell elliott oh well i guess can use runhaskell directly. i still have this urge to ban you though. merry christmas. 09:23:10 Consider it noted. 09:23:30 oerjan: lol 09:24:11 `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 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 goddammit 09:24:43 `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 No output. 09:24:55 `cat typetest.hs 09:24:57 oerjan, use `revert to get kallisti's code? 09:24:58 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 Vorpal: i am not proficient with vcs'es; won't that revert everything else done since then? 09:26:04 oerjan, well yes, so extract the file only then 09:26:21 well it would be trivial to rewrite I believe. 09:26:44 `runhaskell typetest.hs 09:26:49 oerjan: noep 09:26:50 oh 09:26:52 ​\ 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 oops 09:27:10 `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 No output. 09:27:16 `runhaskell typetest.hs 09:27:21 ​"Yay it types!" 09:27:24 whew 09:29:43 `help 09:29:45 Runs arbitrary code in GNU/Linux. Type "`", or "`run " for full shell commands. "`fetch " downloads files. Files saved to $PWD are persistent, and $PWD/bin is in $PATH. $PWD is a mercurial repository, "`revert " can be used to revert to a revision. See http://codu.org/projects/hackbot/fshg/ 09:31:04 how can it take minutes to load the system event log in windows.... 09:32:05 @tell elliott i suppose you helped kallisti with it, too... 09:32:05 Consider it noted. 09:32:40 ah there we go 09:32:44 `run (echo '#!/bin/sh'; echo 'runhaskell <<< "$1") > bin/haskell 09:32:47 bash: -c: line 0: unexpected EOF while looking for matching `'' \ bash: -c: line 1: syntax error: unexpected end of file 09:32:55 `run (echo '#!/bin/sh'; echo 'runhaskell <<< "$1"') > bin/haskell 09:32:58 No output. 09:33:01 `haskell main = print (2+2) 09:33:04 ​/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 `run chmod +x bin/haskell 09:33:15 No output. 09:33:18 `haskell main = print (2+2) 09:33:21 ​/hackenv/bin/haskell: 2: Syntax error: redirection unexpected 09:33:25 oh 09:33:27 kallisti: you know i just looked it up on http://codu.org/projects/hackbot/fshg/index.cgi/rev/d30da6e6e1c6?revcount=240 09:33:34 `run (echo '#!/bin/bash'; echo 'runhaskell <<< "$1"') > bin/haskell 09:33:36 No output. 09:33:41 `run chmod +x bin/haskell 09:33:43 No output. 09:33:45 `haskell main = print (2+2) 09:33:50 4 09:33:57 oerjan: that's pretty much what it was. 09:34:57 oh well. EgoBot's version still works in ghci mode, anyway. 09:35:41 `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 ​\ /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 `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 ​"Yay it types!" 09:37:39 oerjan: this program is a proof that it types. 09:37:43 beautiful 09:38:30 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 *i think 09:38:59 oh and import overlaps too 09:42:24 hm making that pointfree actually made checking the Functor laws easier. 09:44:22 which is sort of expected for category theory, come to think of it. 09:45:36 @tell zzo38 btw, fmap' shows that T is also a contravariant functor in its first argument. 09:45:36 Consider it noted. 09:46:59 -!- ais523 has joined. 09:47:18 merry christmas everyone 09:51:59 ho ho ho 09:53:27 oerjan: is it Christmas today in Norway? 09:53:31 or is it on some other day of the year? 09:53:35 -!- Taneb has joined. 09:53:38 yesterday, mainly 09:54:11 T v f x = T ((T v f x -> f v) -> f x) if you combine two levels, which makes 09:54:31 it clear that all x positions are covariant, so it should be a functor. 09:56:00 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 but I think I can remember the difference nowadays in simple cases like that 09:57:09 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 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 and if all positions of an argument in a data type are covariant you can usually make the corresponding functor. 10:00:00 (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 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 the former wipes out the Int 10:01:41 and the constructor 10:02:37 > flip f x y 10:02:37 Ambiguous type variable `b' in the constraints: 10:02:38 `SimpleReflect.FromExpr ... 10:02:42 > flip f x y :: Expr 10:02:44 f y x 10:02:51 > flip f (g x) y :: Expr 10:02:52 Ambiguous type variable `a' in the constraints: 10:02:52 `SimpleReflect.FromExpr ... 10:02:56 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 hm... 10:04:01 :t expr -- this function can be useful to fix types 10:04:02 Expr -> Expr 10:04:30 > flip f (expr $ g x) y :: Expr 10:04:32 f y (g x) 10:04:45 i guess that case wasn't much shorter than :: Expr 10:05:16 > f . expr . g . expr . h $ x :: Expr 10:05:17 f (g (h x)) 10:06:18 I see. 10:06:20 @src expr 10:06:20 Source not found. Do you think like you type? 10:06:23 that one's harder to do with just :: Expr though 10:06:35 kallisti: it's just id with a type annotation, i think 10:06:52 and simplereflect isn't going to be in @src, it's an obscure package. 10:09:55 oerjan: obviously @src needs to be a universal oracle of Haskell source code. 10:10:44 i think haddock is the closest to that. 10:10:51 er 10:10:54 *hayoo 10:11:24 Hayoo needs to be moved to Haskell.org 10:11:25 >.> 10:11:25 which of course points to haddocks 10:13:31 @hoogle xmlSerialize 10:13:31 No results found 10:13:58 _and_ of course, @hoogle needs to expand to all of hackage 10:14:49 yes indeed 10:15:01 imports in Haskell programs should automatically install from hackage. 10:19:03 Would Hayoo have any use if Hoogle searched all of Hackage? 10:23:38 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 obviously. 10:32:31 -!- Taneb has quit (Ping timeout: 240 seconds). 10:35:54 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 nothing, there's still a patch of antarctica uncovered 10:37:34 also, stop correcting yourself when i'm about to. 10:40:31 :D 10:42:05 turns out using explicit unboxing is slower because I have to reconstruct the boxed types in order to print them. 10:42:29 i had this possibly unfounded impression ghc does a lot of things unboxed under the hood when it can 10:42:49 (which requires at a minimum that things are strict enough) 10:44:42 oerjan: it does, but since I collect values in a list I assumed that it wouldn't do any unboxing. 10:44:52 ah. 10:45:11 well it needs to box at the end 10:45:12 well, that's the rules for normal unboxed values, perhaps GHC can do more internally though 10:45:55 oerjan: well what I did instead was rewrite it in IO and just print the factors as I receive them 10:45:59 but this turns out to be slower. 10:46:56 perhaps because printing the values one at a time is slower than printing the whole list at once? 10:47:41 i dunno 10:48:23 anyway, lesson learned: writing unboxed code is awful and doesn't necessarily give any huge speed benefits. 10:48:49 ^style 10:48:49 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 fungot: can the sword alone stop? 10:48:58 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 fungot: so, it can stop, you say? 10:49:31 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 fungot: yes, but can it stop? 10:49:49 oerjan: we are looking, but well behaved! crono!! 10:49:57 fungot: look further! 10:49:57 oerjan: you! take! we find! parental discretion advised. no time to talk we had soldiers searching for you! 10:49:57 fungot: sotp 10:49:58 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 fungot: did the time machine stop her? 10:50:36 oerjan: i, myself, will bring an end to all. ghosts lurk in the ruins! the structural damage is severe. the tale? 10:51:03 fungot: how evil! 10:51:03 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 fungot: that was a lot of exclamation marks for no repetition 10:51:44 oerjan: time to shove off you go! didn't you create him? that kino guy! much danger. open hatch. 10:51:55 I like it when it does that 'i, myself, will bring an end to all" bit. 10:52:03 `quote end to all 10:52:06 518) fizzie: i, myself, will bring an end to all. 10:52:26 fungot: so you will stop it alone, then? 10:52:26 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 fungot: my shrink disagrees. 10:52:45 oops 10:53:19 fungot: Have you been replaced with your evil clone or something? 10:53:19 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 fungot: please don't stop alone 10:54:12 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 fungot: an ancient child, eh? 10:54:37 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 fungot: you said most of that before 10:55:26 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 fungot: did you bring sandwiches? 10:55:53 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 fungot: they tasted a bit evil 10:56:59 * fizzie thinks mentioning fungot like this would also trigger it. 10:56:59 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 fungot the fickle 10:57:17 oerjan: there! there it is! but by the time we're through with you, you'll be in danger. open hatch. 10:57:42 fungot: can you stop me alone? 10:57:43 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 The source text is a bit short so it keeps being quite repetitive. 10:58:17 fungot: what do you have to say of the use of ancient sharp weapons? 10:58:17 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 fungot: llllllllllllllllllllllllllike this, orrrrrrrrrrrr something else? 10:59:03 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 fungot: humans are overrated. needs more ketchup. 10:59:39 fungot: Oh how many times we ask before the sword can't stop? 10:59:39 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 fungot: SWORD. STOP. Do you get it? 11:00:06 fizzie: yes, it's been awhile prometheus! what're you doing there! 11:00:09 fungot: do you have a sword to stop those monsters with? 11:00:09 oerjan: you! take! we find! 11:00:32 fungot: It's hopeless. 11:00:32 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 fungot: You just said that *exactÂ* thing. Same quotation and all. 11:01:02 fizzie: that no one was allowed to use the crane, enter any two of these letters, a b y. 11:01:02 fungot: we toasted our land and now it's all burnt and stuff 11:01:03 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 fungot: does the hero have a good sword? 11:01:38 oerjan: and you call yourself a frog, and ayla... i will not betray my friends! 11:01:48 fungot: ...no. not usually. 11:01:49 oerjan: it's a machine that looks like you! take! we find! 11:01:51 fungot: You're hopeless. 11:01:51 fizzie: but, we are far outnumbered! 11:01:57 fungot: AIYEEEH 11:01:57 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 fungot: this is the problem with statistics 11:02:16 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 fungot: yes, we need only the one sword 11:02:51 oerjan: like, thanks princess. i'll take that under advisement!! crono!! 11:02:56 fungot: Continut this sentence: "the sword alone can't stop". 11:02:57 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 fungot: are you calling me a princess? 11:03:05 oerjan: but, we are far outnumbered! so! that cathedral to the west?... yes! well then rest and relax! huh? 11:03:14 fungot: okay 11:03:14 oerjan: i, myself, will bring an end to all. ghosts lurk in the ruins! the structural damage is severe. the tale? 11:03:35 fungot: was there a sword involved? 11:03:35 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 fungot: Bah, I should retrain this style with different parameters. 11:03:45 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 When in doubt, use threats, I guess. 11:04:05 fizzie: i think you scared fungot with that last comment 11:04:05 oerjan: there! there it is! but by the time we're through with you, you'll be in danger. open hatch. 11:04:35 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 http://tahville.myminicity.com/ 11:24:03 * oerjan whistles innocently 11:29:20 goddammit browser why do you have to lock up _now_ 11:30:52 myminicity is so $INSULTINGLY_OLD_DATE 11:31:08 :( 11:31:28 * Sgeo enters anyway 11:31:46 -!- SgeoN1 has joined. 11:31:54 Or, attempting to. My computer is now slow. 11:32:35 What happens at 5,000? 11:32:37 it seemed to lock up somewhat just after i pasted that link 11:32:57 It was a while after that that I clicked 11:33:08 So not my fault 11:33:25 Anyways, you are now at 49,999 population 11:33:31 Wow, no 11:33:33 4,999 11:33:42 Sorry to disappoint if you mistakenly believed me somehow 11:33:48 no XD 11:34:10 Should I go to the transport link? 11:34:36 we've been aiming to get 5000 before new year 11:34:45 nothing else in particular 11:35:00 Ah, ok 11:35:04 So close 11:35:06 and i couldn't resist increasing the chances of making it today 11:35:30 * Sgeo tries the tra link 11:35:46 it does only allow one visit per ip per day, btw 11:35:51 Um 11:35:58 You succeeded 11:36:03 After I reloaded 11:36:05 yay :P 11:37:07 That was probably me. 11:37:16 Assuming a visitation counts as something. 11:37:23 yes it does, thank you 11:37:41 That was purely accidental, though, I clickeded before reading the conversation. 11:37:57 Congratulations! You are the 5,000th visitor! 11:38:17 > intToDigit 42 "" 11:38:18 Couldn't match expected type `[GHC.Types.Char] -> t' 11:38:18 against inferr... 11:38:36 ah 11:38:51 ? showIntAtBase 16 intToDigit 42 "" 11:38:54 > showIntAtBase 16 intToDigit 42 "" 11:38:55 "2a" 11:40:04 > showHex 42 "" 11:40:05 "2a" 11:40:57 :t let bases = flip (map showIntAtBase [2..16] <*> intToDigit) "" in bases 11:40:57 Couldn't match expected type `[Int -> Char]' 11:40:58 against inferred type `Int -> Char' 11:40:58 In the second argument of `(<*>)', namely `intToDigit' 11:41:09 oh 11:41:12 yes 11:42:02 :t let bases = map flip (map showIntAtBase [2..16] <*> intToDigit) "" in bases 11:42:03 Couldn't match expected type `[Int -> Char]' 11:42:03 against inferred type `Int -> Char' 11:42:03 In the second argument of `(<*>)', namely `intToDigit' 11:42:33 :t let bases = ((map flip (map showIntAtBase [2..16] <*> intToDigit) <*> "") <*>) in bases 11:42:34 Couldn't match expected type `[Int -> Char]' 11:42:34 against inferred type `Int -> Char' 11:42:35 In the second argument of `(<*>)', namely `intToDigit' 11:42:43 I'm definitely doing something wrong. :P 11:43:32 :t let bases n = showIntAtBase <$> [2..16] <*> intToDigit <*> n <*> "" in bases 11:43:33 Couldn't match expected type `[Int -> Char]' 11:43:33 against inferred type `Int -> Char' 11:43:33 In the second argument of `(<*>)', namely `intToDigit' 11:43:51 :t showIntAtBase 11:43:52 forall a. (Integral a) => a -> (Int -> Char) -> a -> String -> String 11:44:39 :t let bases n = showIntAtBase <$> [2..16] in bases 11:44:40 forall t a. (Integral a) => t -> [(Int -> Char) -> a -> String -> String] 11:44:48 intToDigit needs []'s around it 11:44:55 oooooh rite 11:45:05 some of the others too 11:45:10 that's a stupid way to write that anyway. :P 11:45:59 hm... 11:46:57 > let bases n = showIntAtBase `flip` intToDigit `flip` n `flip` "" <$> [2..16] in bases 42 11:46:58 ["101010","1120","222","132","110","60","52","46","42","39","36","33","30",... 11:47:07 :t let bases n = showIntAtBase <$> [2..16] <*> [intToDigit] <*> [n] <*> [""] in bases 5 11:47:07 [String] 11:47:11 > let bases n = showIntAtBase <$> [2..16] <*> [intToDigit] <*> [n] <*> [""] in bases 5 11:47:12 ["101","12","11","10","5","5","5","5","5","5","5","5","5","5","5"] 11:47:20 oerjan: oh, so that's what cale flip does. 11:47:21 :t flip 11:47:22 forall (f :: * -> *) a b. (Functor f) => f (a -> b) -> a -> f b 11:47:30 kallisti: ordinary flip suffices for that 11:47:47 oooooh 11:47:51 ...clever. :P 11:49:15 showIntAtBase should allow arbitrary greater than 2 bases and also a special unary case. 11:49:39 it does allow anything up to maxBound :: Int 11:49:42 i think 11:49:52 oh hm 11:50:04 it cannot do more than one Char per digit, though. 11:50:18 :t showIntAtBase 11:50:19 forall a. (Integral a) => a -> (Int -> Char) -> a -> String -> String 11:50:53 there isn't _really_ any reason why it should be restricted to Char or Int 11:51:10 other than efficiency 11:52:31 -!- SgeoN1 has quit (Quit: Bye). 11:54:09 > let showIntWithBestDigits = (`showIntAtBase` chr) in showIntWithBestDigits 1000 515002006323414 "" 11:54:10 "\515\STX\ACK\323\414" 11:57:16 -!- Patashu has quit (Ping timeout: 240 seconds). 12:11:08 -!- Ngevd has joined. 12:12:43 > 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 "foobar" 12:12:53 I mean, if you happen to need a String -> String specialized id... 12:13:12 Have you seen the weather in Melbourne? 12:13:14 It's crazy 12:15:40 The rain in Spain stays mainly in the plain. 12:16:43 The hail in Melbourne falls mainly all over the place 12:17:00 I see it's in the news and all. 12:26:19 @hoogle showIntAtBase 12:26:19 Numeric showIntAtBase :: Integral a => a -> (Int -> Char) -> a -> ShowS 12:28:29 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 (specifically, wiktionary's a template) 12:30:37 oerjan: no; but you can use Special:ExpandTemplates for a similar effect 12:30:59 oh hm 12:33:30 wtf i cannot copy this mess of spans 12:34:23 whatever, i'll just leave it in this reduced version i already saved. 12:34:23 Gracenotes visits, doesn't e? 12:34:42 Sgeo: if he does, he doesn't speak much 12:34:59 Because e posted to my Wikipedia talk page in 2007 12:35:20 i cannot say i've noticed em in a while 12:35:49 Sgeo: he's on freenode now 12:35:54 -!- nooga has joined. 12:36:20 I'm in two channels with em, apparently 12:37:37 Gracenotes has been in here on occasion 12:38:32 -!- Ngevd has quit (Ping timeout: 240 seconds). 12:39:34 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 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 :t "hi" 12:45:21 [Char] 12:46:08 @hoogle String -> ByteString 12:46:09 Data.ByteString.Char8 pack :: String -> ByteString 12:46:09 Data.ByteString.Lazy.Char8 pack :: [Char] -> ByteString 12:46:10 Data.String fromString :: IsString a => String -> a 12:46:25 > Data.ByteString.Char8.pack "hi" 12:46:26 Not in scope: `Data.ByteString.Char8.pack' 12:46:38 :t foldr id 12:46:39 forall b. b -> [b -> b] -> b 12:46:41 shocking 12:46:58 @hoogle String -> Text 12:46:59 Data.Text.Lazy pack :: String -> Text 12:46:59 Data.Text pack :: String -> Text 12:46:59 Prelude read :: Read a => String -> a 12:47:10 > Data.Text.pack "hi" 12:47:11 Not in scope: `Data.Text.pack' 12:47:20 oerjan: lambdabot should qualified import literally everything in base and probably like 20 other packages on hackage. 12:47:39 lambdabot: you are _so_ out of date on modern haskell enterprise 12:47:51 (so am i, but still...) 12:48:40 -!- pikhq_ has joined. 12:48:42 kallisti, including System.IO.Unsafe, obviously. 12:48:48 -!- pikhq has quit (Ping timeout: 248 seconds). 12:48:49 kallisti: on first impression, yes, but on second impression, lambdabot already has annoying instance conflicts from conflicting imports 12:48:59 > sin 12:48:59 Overlapping instances for GHC.Show.Show (a -> a) 12:49:00 arising from a use of `... 12:49:18 Is there any way to avoid importing an instance? 12:49:39 nope. we've discussed this actually. 12:49:58 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 crystal records 12:50:36 particularly I'm not satisfied with any of the proposals to "fix" records. 12:50:44 and would like to see if I can come up with anything. 12:51:02 kallisti, what about turning the names of records into lenses? 12:51:07 Or is that one of them? 12:51:19 well, sort of. 12:52:03 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 so I think maybe the answer is to make a larger change to the core of the language. 12:53:00 but yes I think accessing and setting records should be writeable as a function. 12:53:17 and thus curried, abstracted, used in higher order functions, etc 13:00:27 really I wish there was a way to combine TypeDirectedNameResolution and OverloadedRecordFields 13:31:49 "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 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 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 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 such as in C, void hello() { printf("hello world\n"); hello(); } 14:19:50 -!- MDude has joined. 14:20:15 > let hello = "Hello! " ++ hello in hello 14:20:16 "Hello! Hello! Hello! Hello! Hello! Hello! Hello! Hello! Hello! Hello! Hell... 14:20:46 yay 14:21:24 i bring it up because it raises a question of whether that counts as recursion 14:21:32 which i assume it of course does 14:32:25 in haskell, recursion with parameters is just a special case of recursion without 14:33:39 > let fac = (\f n -> if n == 0 then 1 else n * f (n-1)) fac in fac 5 14:33:39 120 14:41:52 -!- nooga has quit (Ping timeout: 248 seconds). 14:54:49 -!- elliott has joined. 15:04:07 04:24:50: What's a 10th doctor episode I should watch? (Not Blink) 15:04:07 04:24:59: And not SitL/FotD 15:04:07 04:25:38: Why don't you just watch them in order ... 15:04:07 04:25:52: I've heard that they're mostly bad 15:04:07 elliott: You have 3 new messages. '/msg lambdabot @messages' to read them. 15:04:11 Sgeo: You've also heard that they're mostly really good. 15:15:14 oerjan: hi 15:16:39 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA i mean, hi 15:16:39 oerjan: You have 1 new message. '/msg lambdabot @messages' to read it. 15:36:35 05:33:39: I may have inadvertantly lead Haskellers here, just a headsup 15:36:35 elliott: You have 1 new message. '/msg lambdabot @messages' to read it. 15:36:37 OH NOOOOOOOOOOOOOOOO 15:37:12 05:44:41: ...you've never heard of perlnomic. 15:37:12 this log is terrible 15:37:18 oerjan: if you ban me ban everyone else too 15:37:47 elliott: hey at least look at my beautiful Functor instance for zzo38's type 15:38:20 oerjan: i didn't say i'd stop reading it i just said it was terribl 15:38:20 e 15:38:27 O KAY 15:39:29 06:10:56: Sgeo, has anybody done something like that in Perl Nomic? 15:39:40 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 heard of as in played. 15:40:15 or wait 15:40:23 oerjan: perlnomic was long-lived 15:40:24 no, it was schemenomic 15:40:36 schemenomic was contemporaneous iirc 15:40:45 starting-wise 15:40:54 perlnomic lasted until a few years ago 15:43:08 Gregor: http://www.topatoco.com/merchant.mvc?Screen=PROD&Store_Code=TO&Product_Code=QW-TREX-BEANBAG&Category_Code=QW Please buy this. For America. 15:46:02 08:47:50: 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 oerjan: i believe you concluded the game was shallow, no? :P 15:46:45 i did? 15:48:07 09:15:34: !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 oerjan: you realise that 15:48:16 `runhaskell 15:48:19 is a thing 15:48:48 No output. 15:48:52 of course i do, i changed to using it just after chastising you 15:48:57 oh good 15:49:39 `ls bin 15:49:41 ​? \ @ \ 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:50 `run rm bin/{_tmpe,haskell} 15:49:52 :} 15:49:53 No output. 15:50:11 elliott: YOU REALIZE RUNHASKELL DOESN'T HAVE A CONVENIENT 15:50:19 `revert 15:50:21 Done. 15:50:29 `ls bin/h* 15:50:32 ls: cannot access bin/h*: No such file or directory 15:50:36 `run ls bin/h* 15:50:39 bin/haskell \ bin/hatesgeo 15:50:58 -!- Sgeo has quit (Read error: Operation timed out). 15:51:04 `haskell main = print 42 15:51:04 CALLING CONVENTION FOR HACKEGO 15:51:06 ​/home/hackbot/hackbot.hg/multibot_cmds/lib/limits: line 5: exec: haskell: not found 15:51:09 See, it's broken. 15:51:14 `run rm -f bin/haskell 15:51:17 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 `help 15:53:02 Runs arbitrary code in GNU/Linux. Type "`", or "`run " for full shell commands. "`fetch " downloads files. Files saved to $PWD are persistent, and $PWD/bin is in $PATH. $PWD is a mercurial repository, "`revert " can be used to revert to a revision. See http://codu.org/projects/hackbot/fshg/ 15:53:58 `revert 1429 15:54:01 Done. 15:54:08 `run ls bin/h* 15:54:11 bin/haskell \ bin/hatesgeo 15:54:21 `haskell main = print 42 15:54:30 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 >_> 16:06:29 -!- elliott has joined. 16:06:31 -!- Ngevd has quit (Ping timeout: 255 seconds). 16:08:41 `haskell main = print (2 + 2) 16:08:44 ​/home/hackbot/hackbot.hg/multibot_cmds/lib/limits: line 5: exec: haskell: not found 16:08:59 `revert 1429 16:09:01 Done. 16:09:07 `haskell main = print (2 + 2) 16:09:13 4 16:09:41 `haskell main = print (2 + 2) 16:09:44 ​/home/hackbot/hackbot.hg/multibot_cmds/lib/limits: line 5: exec: haskell: not found 16:09:47 I see, it only works half the time! 16:10:50 `haskell main = print (2 + 2) 16:10:53 ​/home/hackbot/hackbot.hg/multibot_cmds/lib/limits: line 5: exec: haskell: not found 16:11:43 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 `haskell Is it working yet? 16:15:34 ​/home/hackbot/hackbot.hg/multibot_cmds/lib/limits: line 5: exec: haskell: not found 16:16:13 why should it be working. 16:16:50 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 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 most likely i'd just have killed them a long time ago. 16:31:04 ......................... dafuq 16:31:15 Gregor: problem? 16:31:29 Does it delete itself or some such nonsense? 16:31:52 Gregor: erm i'm pretty sure elliott is just doing this in privmsg to annoy me. 16:32:22 fshg sez: yup 16:32:41 so there is no technical issue on HackEgo. NOW EGOBOT OTOH... 16:32:51 !haskell main = print (2+2) 16:32:58 runhaskell: syntax: runghc [-f GHC-PATH | --] [GHC-ARGS] [--] FILE ARG... 16:33:30 Well if Gregor would apply my fix :P 16:35:28 Gregor: yeah you should apply the fix, you're putting children in danger here. 16:35:46 I don't think EgoBot can see /opt/ghc tho. 16:35:55 Unless Gregor's unified the chroots already, or just used a softlink, or... 16:40:37 Unless you have a fix fix, your fix is what broke it. 16:40:47 Gregor: I have a fix fix. 16:40:53 !sh ls /opt/ghc 16:40:53 bin 16:41:01 Gregor: Well then... 16:41:08 !sh ls /opt/ghc/bin 16:41:08 ghc 16:41:11 ... 16:41:16 Where the fuck is runghc? 16:41:20 Where the fuck are the library files? 16:41:26 Where the fuck are the package conf files? 16:41:34 There's no possible way that GHC works. 16:41:39 !sh ls /opt/ghc | fmt 16:41:39 bin lib share 16:41:43 !sh ls /opt/ghc/bin | fmt 16:41:43 ghc ghc-7.2.1 ghc-pkg ghc-pkg-7.2.1 ghci ghci-7.2.1 haddock 16:41:45 Oh :P 16:41:50 Where's runghc 16:41:57 On the next line I presume. 16:42:07 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 *I was 16:42:27 !sh ls /opt/ghc/bin | fmt -w400 16:42:27 !sh echo "main = print 42" | /opt/ghc/bin/runghc 16:42:27 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:42:30 42 16:42:35 Yep, do that and it'll work. 16:42:46 *script thing 16:43:00 "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 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 "So... this imaginary language of yours would be able to solve the halting problem?" 16:43:37 also this one. 16:43:49 !sh ls /opt/ghc/bin | xargs 16:43:50 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:08 !sh echo "-n hi" | xargs 16:44:09 hi 16:44:18 !sh echo "-e 'hi\\x00'" | xargs 16:44:19 hi 16:44:24 !sh ls /opt 16:44:24 ghc 16:44:25 !sh ls /opt/ghc 16:44:26 bin \ lib \ share 16:44:28 !sh ls /opt/ghc/bin 16:44:28 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 oh xargs defaults to echo 16:44:44 Gregor: Are you telling me EgoBot has finally ditched the stupid DCC thing? 16:44:51 Yes X-D 16:44:55 THANK THE LORD. 16:45:04 D: 16:45:19 !show slashes 16:45:21 perl (sending via DCC) 16:45:40 X-D 16:45:47 now _that_ was ridiculous. 16:45:51 What happened? 16:46:00 17:44 =EgoBot> Execution of /tmp/input.4598 aborted due to compilation errors. 16:46:00 17:44 =EgoBot> 16:46:05 X-D 16:46:11 !haskell 2+2 16:46:14 4 16:46:17 !haskell main = print 42 16:46:20 runhaskell: syntax: runghc [-f GHC-PATH | --] [GHC-ARGS] [--] FILE ARG... 16:46:20 Gimme a second here >_< 16:46:23 NOOOO 16:46:23 NO SECONDS 16:46:25 NO SECONDS ALLOWED 16:46:27 ONLY FIRSTS 16:46:40 "I think we're talking about different things. By "bottom" I mean the 16:46:40 function explicitly returns "error ..." or "undefined". In those cases, it 16:46:40 should go in an error monad instead. In cases where there is an infinite 16:46:40 loop, the function doesn't return anything because it never finishes, and 16:46:40 indeed this separate problem will never be solved while remaining Turing 16:46:41 complete because it is the halting problem." 16:46:44 THIS IS HASKELL-CAFE, WHY ARE YOU ALL SO IGNORANT 16:46:48 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 the hookers will have phds in mathematics. 16:47:16 as will the blackjack. 16:47:56 "> 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 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 !haskell main = printStr "4-tee-2" 16:48:00 wtf! you can define that in haskell! you suck! 16:48:03 ​\ /tmp/runghcXXXX21051.hs:1:8: Not in scope: `printStr' 16:48:08 Whoops X-D 16:48:09 Gregor: Faiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiil 16:48:18 Gregor: That starting \ is ugly :( WHINE WHINE WHINE 16:48:23 But hey, now oerjan can't complain 16:48:26 Oh, putStr 16:48:29 !haskell import Unsafe.Coerce; main = unsafeCoerce (42 :: Int) 16:48:31 !haskell main = putStr "4-tee-2" 16:48:32 elliott: oh you found that annoying sola guy too? 16:48:36 4-tee-2 16:48:37 oerjan: sola? 16:48:46 or something like that. 16:48:52 oerjan: i don't know what you mean 16:48:59 elliott: his name 16:49:08 on haskell-cafe 16:49:20 which i may have misremembered, but _still_ 16:49:23 oerjan: MigMit, Jesse Schalken, and Gregory Crosswhite are the ones I've quoted; is there _another_ wrong person? 16:49:47 Gregor: Could EgoBot print something when you segfault? 16:49:52 It just sort of doesn't talk to you if that happens. 16:50:03 !c abort(); 16:50:07 ​./interps/gcccomp/gcccomp: line 52: 21355 Aborted /tmp/compiled.$$ 16:50:16 !c *((int *) 0) = 0; 16:50:18 ​./interps/gcccomp/gcccomp: line 52: 21421 Segmentation fault /tmp/compiled.$$ 16:50:29 "I apologize if I was using the wrong terminology. I've seen "error ..." 16:50:29 shown as, and understood it to be, _|_, but it seems _|_ refers to either a 16:50:29 value that does not reduce or Haskell's "error" function depending on the 16:50:29 context." 16:50:30 ;__; 16:50:39 Gregor: Well that's not right... 16:50:42 !haskell import Foreign; main = peek nullPtr :: IO Int 16:50:51 Odd, why does it say stuff there ... oh, I'll bet I drop Haskell's stderr. 16:50:55 !haskell import Unsafe.Coerce; main = unsafeCoerce (42 :: Int) 16:51:09 ​\ /tmp/runghcXXXX21051.hs:1:8: Not in scope: `printStr' 16:51:11 Gregor: No you don't. 16:51:17 Oh, hmm 16:51:19 That might be to stdout 16:51:20 !haskell import Unsafe.Coerce; main = unsafeCoerce (42 :: Int) 16:51:21 runghc is weird 16:51:38 Helloooo? Tell me you segfaulted! 16:51:47 !haskell import Unsafe.Coerce; main = unsafeCoerce (42 :: Int) 16:51:52 [elliott@dinky tmp]$ runhaskell <<< 'import Unsafe.Coerce; main = unsafeCoerce (42 :: Int)' 16:51:53 [elliott@dinky tmp]$ 16:51:57 That explains things. 16:52:02 lol 16:52:08 Same with nullPtr 16:52:11 But it exits code 11 16:52:18 I could make it output "No output." as appropriate. 16:52:21 So, uh, I guess you could add || echo "died with $?" 16:52:24 Or something. 16:52:50 !haskell import Unsafe.Coerce; main = unsafeCoerce (42 :: Int) 16:52:55 No output. 16:53:05 Error codes are for losers. 16:53:43 !haskell main = main 16:53:55 Gregor: Uhh, excuse me, where is my <>? 16:54:01 !haskell import Unsafe.Coerce; main = unsafeCoerce (42 :: Int) 16:54:05 elliott: ? 16:54:06 No output. 16:54:54 Gregor: GHC has a grand tradition of optimising terminating programs into programs which print <> then exit. 16:55:02 Perhaps only the compiler does it, though. 16:55:33 [elliott@dinky tmp]$ echo 'main = main' >loop.hs && ghc --make loop.hs 16:55:33 [1 of 1] Compiling Main ( loop.hs, loop.o ) 16:55:33 Linking loop ... 16:55:33 [elliott@dinky tmp]$ ./loop 16:55:33 loop: <> 16:56:03 "I feel that monospace fonts should be used for all of programming. A 16:56:03 language could use Unicode symbols, but if it enforces typography, it 16:56:04 is destined to win an award for being really unusable" 16:56:08 EXCELLENT! @lang is unusable 16:56:10 I assume you mean non-terminating programs. 16:56:16 "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 WOW THIS IS THE WORST THREAD 16:56:23 Gregor: I... might. 16:56:30 Gregor: OTOH it could optimise terminating programs that way too. 16:56:53 True. 16:56:56 "Indeed, that is my point. "Bottom" is the representation of a computation 16:56:57 which cannot be computed. It does not have a semantic in anything less 16:56:57 than the first infinite ordinal. It should be treated as essentially 16:56:57 unique. It exists as a syntactic construct, but it cannot be given an 16:56:57 interpretation in Haskell. 16:56:57 In particular, we cannot compare "distinct" (or even indistinct) bottoms, 16:56:59 because of the halting problem. There is no consistent logic in which 16:57:01 (forall x, x = x) does not hold. Treating bottom the same way we treat 1, 16:57:03 "abc", (Just 10), and the other (in principle) comparable values introduces 16:57:05 contradiction to Haskell, as a logic. (That is why bottom has the 16:57:07 syntactic symbol _|_, the syntax for /the/ unique contradiction)" 16:57:09 AAAAAAAAAAARGH 16:59:12 elliott: i think you found the guy 16:59:36 oh, solla 16:59:51 there is a very disappointing amount of ignorance in this thread 17:02:19 "I really have no problems with the monad/functor separation that 17:02:20 somebody mentioned. 17:02:20 Maybe Monad is not the best name for that class if it's not true that 17:02:20 every Monad is a 17:02:20 Functor, but it's not very confusing anyway." 17:02:59 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 What shall I eat for Christmas lunch. 17:05:24 I'm thinkin' ... peanutbutter and jelly sandwich. 17:05:56 *sobs quietly to self* 17:06:56 this guy on SO just unaccepted my answer 17:06:58 ON CHRISTMAS! 17:06:59 CHRISTMAS!!! 17:07:42 oerjan: "Denotational semantics is unrealistic." you're right, this guy is awful 17:09:07 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 "So assuming you mean something like: 17:09:35 fst (seq [1..] (1,2))" 17:09:39 that terminates, you douche. 17:10:21 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 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 "Sure, but if you've ever used recursion, then you do have bottoms in your program." 17:18:37 no. stop. 17:18:41 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 I'll bet fnord.to is somebody here ... 17:42:35 http://isitchristmas.com/ god blses 17:42:45 Gregor: Huh? 17:42:57 *gob dles 17:44:11 fnord.to was poking around at hackiki.org 17:44:51 Hoy that's probably the isitchristmas site that was on our lobby-screen. 17:44:59 Or at least very similar. 17:45:11 17:45:11 coords="0,163, 0,198, 198,0, 163,0" 17:45:11 href="http://getfirefox.com/" 17:45:11 alt="Get Firefox!" /> 17:45:12 17:45:22 Gregor: No imagemap user would survive here. 17:45:29 fizzie: It's pretty Famous. 17:45:42 It has isitfriday normally. 17:46:18 elliott: Hard to argue with that logic ... 17:46:23 Maybe he's a would-be hacker. 17:46:25 But apparently not isitfriday.com, that seems very different. 17:50:01 "It has a security system including user permissions to make this marginally safer than it sounds." 17:50:03 Gregor: Yeah, marginally. 17:50:42 Well they're not supposed to make it /wildly/ safer X-d 17:50:44 ... 17:50:45 *X-D 17:51:13 Gregor: What the /fuck/ do you use 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:14 <elliott> fizzie: Also I thought you guys had Official Rules about your ccTLD. 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:49 <elliott> "For Eye-Fi UK, click here. For Eye-Fi France, click here. For Eye-Fi USA, click here. For Eye-Fi Japan, click here. Eye-Fi is not available in other countries at this time, but keep tuned by signing up for our mailing list." 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> `GHC.Base.Monad m' 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:50:58 <lambdabot> No results found 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:22:42 <fizzie> http://upload.wikimedia.org/wikipedia/commons/f/f4/Ad%E2%82%ACm%3D%292499.jpg <- the discontentednest cat. 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:30 <elliott> That's why people don't buy Haskell programs. 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:12:12 <elliott> For Haskell fanboy, I sure do dislike Haskell. 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:25:59 <elliott> your weather :D 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:00 <fizzie> Pää 'head', päätön 'headless', päättömämme 'our headless'. 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:40:54 <fizzie> elliott: "kauhoitus" ladle-making, ladleification, the procurement of ladles. "-kaaja" sadly doesn't really mean anything. "kauhoittaja" would be the ladle-giver, the person who makes sure everyone has ladles. 20:41:12 <elliott> :D 20:41:20 <elliott> The biggest ladle-giver. 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:40:14 * const blinked 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