00:26:57 Sgeo__: ? 00:27:09 it would be somehow amazing if elliott, monqy and Phantom_Hoover were all bots run by Sgeo__ 00:27:12 oh, was that line /meant/ to not make sense? 00:27:26 ais523: There's a "Homestuck" update. 00:27:31 Sgeo__ is notifying them. 00:27:40 aha 00:27:45 fsvo notify 00:27:53 oh, and I see the channel has become #haskell-lens for the past few hours ... thanks shachaf 00:28:18 ywolsner 00:28:21 Which channel? 00:28:30 #haskell-lens, presumably 00:28:37 what other channel could be #haskell-lens 00:28:42 monqy: ##crawl 00:28:46 :0 00:29:47 relatedly, I got three packets of ketchup for free when I paid for my food 00:29:53 LIKE A BOSS 00:30:01 what is #haskell-lens about? 00:30:11 haskell and lens 00:30:11 also I like your use of the word "relatedly" 00:30:39 hopedly, it is indeed a word 00:31:31 olsner: "hi olsner i know you like pretending to be oerjan but its not wokring" 00:32:14 ehm, I'm not pretending 00:32:20 hi shachaf i know you like pretending to ... 00:32:57 -!- nooga has quit (Ping timeout: 252 seconds). 00:33:07 elliott: be monqy+you? 00:33:22 though it would've been a bit better if I could have said that as " ehm, I'm not pretending" 00:33:22 -!- Jafet has joined. 00:36:15 ehm, I'm nøt pretending 00:38:13 This jøke is getting øld. 00:40:47 -!- copumpkin has quit (Ping timeout: 260 seconds). 00:41:18 -!- copumpkin has joined. 00:43:25 shachaf: is ##crawl where you usually discuss haskell lens libraries? 00:43:51 olsner: Sometimes I discuss them in #lesswrong 00:43:56 I have no idea what I'm doing in that channel. 00:43:58 It's terrible. 00:44:13 ok 00:47:31 if you don't know why you're there, maybe you should leave 00:47:32 how is it terrible 01:12:21 -!- Phantom_Hoover has quit (Ping timeout: 260 seconds). 01:18:12 -!- Phantom_Hoover has joined. 01:19:07 shachaf: elliott: apparently Simon Marlow is leaving MSR to work at Facebook 01:19:15 and is going to stop working on GHC full time 01:19:23 kmc: I heard. 01:19:25 and basically it is the end times 01:19:26 http://www.haskell.org/pipermail/haskell/2012-November/023566.html 01:19:41 The RTS will be lonely. 01:21:06 kmc: Now's your chance to rise up and take over the Haskell compiler world with THC. 01:22:05 I managed to make a Csound plugin, currently I made and tested the "avecrev" command which reverses a a-rate vector. 01:25:57 Heeeeeeeeey 01:26:06 Comin' up on my one year anniversary of tongue-face-smiley-freedom. 01:26:29 :P 01:36:58 what happened worth anniversarising? 01:38:12 Phantom_Hoover: On December 17th, 2011, I swore off the tongue-face smiley forever. 01:39:46 have you stayed cold-turkey since 01:39:56 Colon pee 01:40:32 Gregor proved the power of machine over man 01:40:43 Phantom_Hoover: Mmmhmm. 01:41:50 -!- Phantom_Hoover has quit (Remote host closed the connection). 02:23:41 -!- ion has quit (Ping timeout: 252 seconds). 02:26:04 -!- ion has joined. 02:33:49 so, is BSD the fourth most popular operating system family? 02:34:04 (after the Windowses and the Linuxes and the OS X/iOSes?) 02:34:14 or do old-fashioned commercial Unices still beat it? 02:34:16 or something else? 02:35:24 I'm guessing it'd depend how you count popular, like, do OSs running on embedded systems count, or just PCs, or... 02:35:27 do you mean "most popular OS to run on traditional PC hardware and macs" 02:35:32 right 02:36:24 I'm thinking about desktop/laptop/tablet systems, I guess 02:36:29 seems pretty arbitrary 02:36:31 things that are meant to be interacted with by a human 02:36:37 many embedded systems are 02:36:45 as their primary function 02:36:57 so I guess the Rasperry Pi counts, but similar systems used as industrial controllers don't 02:36:57 how about the dash computer in your car 02:37:05 kmc: I don't own a car 02:37:07 what about a thermostat -- its primary purpose is to take instructions from a human and execute them 02:37:17 and thermostats are still analog where I live 02:37:26 symbian is a phone OS even though it mostly runs on dumbphones I think 02:37:27 how about the 100 or so microcontrollers inside your PC alongside the main CPU 02:37:30 but no, a thermostat's primary function is to control the temperature 02:37:37 it does its job even when you aren't sitting there configuring it 02:37:42 a computer's primary function is to send IP packets 02:37:48 it does its job even when you aren't sitting there configuring it 02:37:50 kmc: not mine, I use it offline quite a lot 02:37:57 ok how about web servers then 02:37:59 my /server's/ primary function is to do that 02:38:11 do you include those as "meant to be interacted with by a human" 02:38:16 A computer's primary function is not to send IP packets. That is a function of some of the programs. 02:38:33 kmc: I guess no 02:39:03 also, does the baseband processor in your phone count, or only the applications processor? 02:39:34 typically they are separate and the former runs some proprietary RTOS 02:39:37 -!- ion has quit (Ping timeout: 260 seconds). 02:39:48 I also don't own a digital phone 02:39:55 what about the firmware running on your computer's GPU -- surely that is an integral part of "interacting with a human" 02:40:00 ais523: i'm using the word "your" rhetorically 02:40:02 there's a phone in my office, but it's one of those dumb-terminal-style landlines 02:40:16 also GPUs don't normally have much of an operating system 02:40:17 oh yeah right what about the ubiquitous Cisco VoIP phones 02:40:21 obviously a human interaction device 02:40:23 does their OS count? 02:40:24 I should know, I taught a class on GPU programming 02:40:35 did you teach a class on GPU firmware / driver authoring 02:41:10 kmc: nah, it was at the level of authoring software for them (the shaders, etc., that are sent to the GPU) 02:41:23 but the GPU doesn't have much of an OS to speak of 02:41:27 -!- ion has joined. 02:41:32 if it crashes, the whole system hard crashes, no permissions or anything like that 02:41:38 mm 02:41:47 (if you're lucky it'll have a watchdog timer that'll reboot it after it's spent 5 seconds crashed, sometimes it even works) 02:42:14 I guess I still don't think of computers as Internet communication devices 02:42:27 that's really what tablets are for, people used larger computers for that earlier because tablets hadn't been invented yet 02:43:17 well 02:43:21 i don't have any desire to own a tablet 02:43:30 "media consumption devices" is a description I'd seen 02:43:33 i find it useful to use the same device for internet communications and other things 02:43:34 and I think tablets are terrible too 02:44:12 it might be nice if that one device were a tablet with a keyboard dock 02:44:18 but i don't think i can get one meeting my needs 02:44:33 and so i don't have a desire to own a second device that's only good for a subset of the things the firsst device is good for 02:45:47 (it would have to be a nice keyboard, preferably with a pointing stick, and capable of running a real desktop linux distro, and not "capable" in the sense of "some guy on xda forums might have done it", but actually no bullshit) 02:46:53 the reason i finally got a smartphone is that i needed a 3G/4G hotspot device, and phone was not much more than a standalone device 03:04:18 -!- oerjan has quit (Quit: Good night). 03:11:52 -!- Jafet has quit (Quit: Leaving.). 03:28:37 "You are now traveling into the future. Please wait..." 03:28:49 One way of implementing time travel in an MMOG. 03:29:04 ok 03:29:11 -!- sivoais has quit (Ping timeout: 245 seconds). 04:19:41 -!- NihilistDandy has joined. 04:50:04 help did i just write a monad tutorial :'( 04:50:54 monad tutorial writers anonymous 04:51:49 -!- Nisstyre-laptop has joined. 04:51:56 It's actually mostly an "IO tutorial" if anything. 04:52:05 But not really either. 04:53:43 is it an Either tutorial? 04:54:50 kmc: I'm cold so I have two ghci windows open with "last [1..]" 04:54:59 Should I feel bad? 04:56:03 c.c 04:56:32 Should probably fold proteins instead or something. 04:57:53 every day 05:15:37 is there a name for the visual artifact that happens when you render antialiased text on a white background, and then composite it over something else with a transparency channel which is just white = transparent, anything else = fully opaque? 05:15:49 a local restaurant has that on their menu and it makes me not want to eat there 05:16:23 If I understand what you mean, I don't like that. :-( 05:16:45 kmc: Do you hate all antialiasing? 05:17:04 You should write a window manager and then angrily stop programming. 05:21:34 haha 05:21:37 no i love antialiasing 05:25:19 -!- carado has quit (Ping timeout: 246 seconds). 05:28:39 -!- ogrom has joined. 05:32:21 I think antialiasing should only sometimes be used. 05:32:48 tuomov has some surprisingly interesting opinions underneath the noise 05:38:10 Sure, tuomov is great. 05:38:19 I think kmc might end up like him in bitter old age. 05:49:28 -!- constant has quit (Read error: Operation timed out). 05:53:03 ah well 05:57:20 -!- augur has quit (Read error: Connection reset by peer). 05:57:51 -!- augur has joined. 06:00:40 is bitter old kmc supposed to be distinguishable from current kmc 06:03:23 -!- augur has quit (Ping timeout: 244 seconds). 06:45:32 -!- augur has joined. 06:50:39 Equivalent up to isomorphism, etc. 06:56:32 -!- Bike has quit (Quit: unworthy). 06:59:43 -!- Bike has joined. 07:04:06 -!- epicmonkey has joined. 07:12:51 -!- NihilistDandy has quit (Quit: Computer has gone to sleep.). 07:14:05 -!- quintopia has quit (Ping timeout: 252 seconds). 07:21:09 -!- quintopia has joined. 07:26:45 Someone just replied to me saying "Damn you" 07:27:02 In #jesus? 07:27:24 On Reddit 07:27:36 (Actually, they're not mad at me) 07:27:37 http://www.reddit.com/r/AskReddit/comments/13ooyr/ten_years_ago_our_family_cat_had_to_have_an/c75xis7?context=3 07:27:51 so how is this notable 07:28:18 Other than that I didn't know Sgeo was autistic, not at all. 07:28:29 #esoteric is now Wikipedia. 07:28:29 Nothing here 07:28:54 Sgeo__: Quite. You don't see me talking about myself, now do you? :P 07:28:58 well i mean it's not an uncommon phrase 07:29:09 i figured if you were bringing it up there must be something unique about the usage 07:29:13 * pikhq_ inserts life spew here 07:29:17 like maybe the person saying it was literally a demon 07:29:19 elliott: whoa, dude 07:29:26 elliott: what if infinity was, like, a number 07:29:56 shachaf, who/what are you mocking today? I assume not my 7th grade self since you haven't met him. 07:30:07 Sgeo__: Nope, it's you. 07:30:18 (Sorry.) 07:30:56 I guess my 8th grade self said some mockable math stuff, but not about infinity. 07:31:20 I tried to define a number, ati, such that |ati| = -1 07:31:39 well you were close 07:31:45 is it sad that my first thought is "but that's not a norm!" 07:32:18 :) 07:32:19 Bike, coppro: I'm now confused. 07:32:22 i think everybody who got into math and stuff later did things like that. or maybe just me and you 07:33:21 i was just referring to that being sort of like imaginary numbers. and a norm is a lengthy-y thing denoted with vertical bars. 07:33:47 I knew about imaginary numbers back then 07:36:21 -!- ais523 has quit. 07:44:39 -!- augur has quit (Ping timeout: 244 seconds). 08:00:45 -!- augur has joined. 08:03:32 -!- augur_ has joined. 08:06:52 -!- augur has quit (Ping timeout: 244 seconds). 08:18:01 -!- nooga has joined. 08:24:21 I made a Csound plugin library, not quite completed, some things I am unsure how to program them but some I did put in, I have added these commands so far: avecrev, hsvtorgb, hysteresis, integlim, interleave, rgbtohsv, slowchange, squarewave, trianglewave. 08:45:00 -!- Nisstyre-laptop has quit (Read error: Operation timed out). 09:03:17 monqy: did you unsafeCoerce today 09:03:25 no 09:03:29 should i ? 09:03:36 maybe 09:03:39 "its good for you" 09:04:00 > let a = zipper ("helloz","world") % down _1 % fromWithin traverse % rights1 6 in (a % view focus, a % save % flip unsafelyRestore ("another","world") % view focus) 09:04:02 ('z','e') 09:04:57 helloz monqy 09:05:44 -!- zzo38 has quit (Remote host closed the connection). 09:22:36 Prelude Unsafe.Coerce> unsafeCoerce id :: IO () 09:22:36 [1] 17766 segmentation fault (core dumped) ghci 09:22:43 daily unsafeCoerce 09:23:05 Why am I reading this http://www.reddit.com/r/ShittyProgramming 09:24:17 why are you reading that 09:29:05 http://www.reddit.com/r/shittyaskscience/comments/13o48n/is_it_required_to_shampoo_the_air_before_turning/ 09:29:14 * Sgeo__ is easily amused 09:30:44 hehe 09:55:22 ion: Want lens to be faster? 10:19:11 -!- Phantom_Hoover has joined. 10:20:44 shachaf: No, it’s perfect right now. 10:21:08 You're sure? 10:22:01 Making it any faster might rip a hole in the spacetime. 10:22:33 It's, uh, pretty slow right now. 10:23:20 spacetime tears pretty easily 10:24:14 monqy: Want lens to be faster? 10:24:31 Sgeo__, wow, /r/shittyprogramming is crap 10:24:41 shachaf: I don't know. 10:25:01 monqy: when will you learn that knowing is important 10:25:08 shachaf: I don't know. 10:25:22 monqy: Good answer. 10:25:29 Will making it faster require the use of unsafeCoerce/unsafePerformIO or a tradeoff in a different dimension such as space usage? 10:25:35 Nah. 10:25:47 Well, maybe. I don't know. 10:25:52 It'll require someone to write benchmarks. 10:26:30 Is there any significant liklihood thatn making it faster will require architectural considerations that should be taken into account now rather than later? 10:27:12 I don't know? 10:27:14 Like what? 10:28:02 No idea, just saying that it might be a bad idea to solidify the design and base everything around it if it fundamentally does something significantly slow, if speed is a concern. 10:28:38 But if it's slow but not due to underlying algorithm (i.e. due to not being microoptimized or something) then I assume that could wait. 10:28:53 * shachaf wonders how many "algorithms" lens has. 10:29:23 is 10:29:39 is sgeo giving shachaf advice 10:30:02 shachaf seems to need lens advice, and who better to give it than sgeo 10:30:27 monqy makes a good point 10:30:30 As far as I can tell I'm channeling Captain Obvious. 10:31:10 monqy: have you read book 10:31:13 (by vernor vinge) 10:31:19 Lieutenant Commander Obvious now. 10:31:22 She got promoted. 10:31:35 shachaf: maybe? probably not. 10:32:49 monqy: can i have some life advice???? 10:33:20 don't ask sgeo for lens advice 10:33:44 is that life enough for you 10:33:48 alt. advice enough for you 10:33:52 monqy: no monqy 10:33:57 life isn't all about lenses 10:34:20 what!!!!! 10:34:23 I've been decieved 10:34:33 oh no 10:34:33 i'll try another life advice 10:34:33 shachaf, what did you do with the real shachaf? 10:34:38 i thought lens was fast 10:34:49 elliott: Have you seen Control.Lens.Zipper? 10:34:52 "hideous" 10:34:58 your perception was distorted 10:35:03 shachaf 10:35:05 i have a site for you 10:35:06 http://www.lifeadvicefromoldpeople.com/ 10:35:14 maybe it will help you 10:35:22 control.lens.zipper isn't lens... 10:35:23 wait...... 10:35:26 monqy are you old? 10:35:37 yes 10:35:41 oh no! 10:35:46 I'm like a granny or something 10:35:46 elliott: Yes it is? 10:36:01 monqy: are you granny smith 10:36:07 a granny smith 10:36:24 is a granny smith old 10:37:14 old granny smiths are 10:37:33 is monqy a old granny smith 10:38:05 i don't see why not 10:45:11 well it doesn't make lens slow 10:45:14 just because one extra par tof itis slow 10:46:06 elliott: but 10:46:10 lens is made of parts 10:54:05 If IRC servers never sent PINGs, would some clients get disconnected because of lack of activity on the socket? 11:00:34 It sounds not impossible, though the client could very easily e.g. do TCP keepalive to mitigate that. 11:05:07 > Just ["a","b","c"] & partsOf template %~ reverse 11:05:09 Ambiguous type variable `a0' in the constraint: 11:05:09 (Data.Typeable.Internal.... 11:05:15 > Just ["a","b","c"] & partsOf template %~ (reverse :: [String] -> [String]) 11:05:18 Just ["c","b","a"] 11:05:20 cool. 11:05:26 > (Just ["a","b","c"], "e") & partsOf template %~ (reverse :: [String] -> [String]) 11:05:29 (Just ["e","c","b"],"a") 11:05:32 hee 11:05:47 monqy: isn't that magic 11:06:02 @ty template 11:06:04 (Data.Data.Data s, Typeable a, Applicative f) => (a -> f a) -> s -> f s 11:06:48 Did Cale import that? 11:07:32 > "abcde" & partsOf uniplate %~ reverse 11:07:35 "abcde" 11:08:33 > "abcde" ^.. uniplate 11:08:35 ["bcde"] 11:08:43 > over uniplate reverse "hello monqy" 11:08:45 "hyqnom olle" 11:08:58 I don't get it, what does over do there? 11:09:04 elliott: Did you know lastOf (backwards folded) compiles to the same code as listToMaybe? 11:09:20 no 11:09:30 that is pretty cool though 11:09:37 > "abcd" ^?! _head 11:09:39 Not in scope: `_head' 11:09:39 Perhaps you meant one of these: 11:09:39 `head' (imported ... 11:09:43 oh 11:09:45 "lens 3.old" 11:09:49 :t over 11:09:51 Setting s t a b -> (a -> b) -> s -> t 11:10:05 > "test abc" & uniplate %~ reverse 11:10:08 "tcba tse" 11:10:16 hmm 11:10:24 > "test abc" ^.. uniplate 11:10:26 ["est abc"] 11:10:37 what's the difference between uniplate and partsOf uniplate here? 11:10:40 > "test abc" ^. partsOf uniplate 11:10:42 ["est abc"] 11:10:46 > "test abc" ^.. partsOf uniplate 11:10:48 [["est abc"]] 11:10:52 right, but... 11:10:56 hm 11:11:05 Which part is the confusion? 11:11:32 I don't quite understand why partsOf uniplate %~ reverse doesn't do the shuffly thing 11:11:47 or how uniplate %~ reverse works, given that it seems to only give one result ("est abc") 11:11:54 yet it shuffles "recursively" inside those results when you actually do it 11:11:59 No it doesn't. 11:12:04 Look again. 11:12:17 ah, so it doesn't 11:12:32 so the reason partsOf uniplate doesn't do it is because you just reverse a one-element list and put it back; right 11:12:46 is there a recursive version of uniplate? 11:13:36 btw did you know template = uniplate 11:13:45 yes 11:13:48 but is there a recursive version of uniplate? 11:13:56 uniplate is recursive. 11:14:06 > "test abc" ^.. uniplate 11:14:08 ["est abc"] 11:14:11 doesn't look like it 11:14:27 I'd expect ["est abc", "st abc", "t abc", ..., ""] 11:14:36 > universe "test abc" 11:14:38 ["test abc","est abc","st abc","t abc"," abc","abc","bc","c",""] 11:14:43 :t universe 11:14:45 Plated a => a -> [a] 11:14:46 I guess it can't be a Lens 11:14:54 > universeOf uniplate "test abc" 11:14:57 ["test abc","est abc","st abc","t abc"," abc","abc","bc","c",""] 11:15:26 When Cale upgrades lambdabot, we'll get upon. 11:15:32 Oh, and edwardk implemented uponTheDeep 11:17:45 shachaf: is Control.Lens.WithIndex.itoList's documentation supposed to link to Data.IntMap 11:18:52 elliott: Nope. 11:19:10 someone should fix that 11:19:14 (not me) 11:20:36 elliott: Any others? 11:20:57 shachaf: the "map" in its code example links to Data.IntMap too 11:21:04 haven't noticed any other issues 11:21:05 > Node 123 [Node 12 [Node 4 []], Node 3 []] & uniplate %~ reverse 11:21:07 Couldn't match expected type `Data.Tree.Tree a0' 11:21:07 with actual t... 11:21:14 hm 11:21:15 :t Node 11:21:16 a -> Forest a -> Tree a 11:21:24 > Node 123 [Node 12 [Node 4 []], Node 3 []] 11:21:25 Node {rootLabel = 123, subForest = [Node {rootLabel = 12, subForest = [Node... 11:21:31 elliott: Thanks. 11:21:35 > Node 123 [Node 12 [Node 4 []], Node 3 []] ^.. uniplate 11:21:37 [Node {rootLabel = 12, subForest = [Node {rootLabel = 4, subForest = []}]},... 11:21:40 :t Node 123 [Node 12 [Node 4 []], Node 3 []] ^.. uniplate 11:21:42 (Data.Data.Data a, Num a) => [Tree a] 11:21:57 > Node 123 [Node 12 [Node 4 []], Node 3 []] & partsOf plate %~ reverse 11:21:57 Whoops, foldl, too 11:21:59 Node {rootLabel = 123, subForest = [Node {rootLabel = 3, subForest = []},No... 11:22:04 > Node 123 [Node 12 [Node 4 []], Node 3 []] & partsOf plate %~ reverse & drawTree 11:22:06 No instance for (GHC.Num.Num GHC.Base.String) 11:22:07 arising from the literal `... 11:22:14 huh? 11:22:15 :t drawTree 11:22:17 Tree String -> String 11:22:18 oh 11:22:22 > Node 123 [Node 12 [Node 4 []], Node 3 []] & partsOf plate %~ reverse & fmap show & drawTree & text 11:22:25 123 11:22:25 | 11:22:25 +- 3 11:22:25 | 11:22:25 `- 12 11:22:27 | 11:22:29 `- 4 11:22:32 nice 11:22:34 monqy: look'at that 11:23:22 im mmlooking 11:23:47 what 11:23:51 who invented drawTree 11:24:13 Data.Tree did 11:24:34 Data.Tree is a very smart computer 11:25:23 > Node 123 [Node 12 [Node 4 []], Node 3 []] & template *~ 2 & fmap show & drawTree & text 11:25:26 246 11:25:26 | 11:25:26 +- 24 11:25:26 | | 11:25:26 | `- 8 11:25:28 | 11:25:30 `- 6 11:25:33 coooooool 11:30:11 shachaf: would it make sense to generalise Plated to "class Plate a b where plate :: Simple Traversal a b"? so you can do what "template" does 11:30:15 I guess it'd be redundant with Data 11:30:26 and also mess up inference 11:31:36 elliott: your lens talk is offtopic in here 11:31:42 take it to #LENS!!!! 11:40:07 :t (?~) 11:40:09 Setting s t a (Maybe b) -> b -> s -> t 11:40:56 > M.empty & at "monqy" ?~ "hi" 11:40:58 fromList [("monqy","hi")] 11:44:54 -!- Phantom_Hoover has quit (Ping timeout: 240 seconds). 11:45:28 apparently my lens is 6 major versions behind 11:45:33 because I installed it a few days ago 11:46:28 upon elliott upgrade 11:46:56 -!- Phantom_Hoover has joined. 11:52:23 -!- Arc_Koen has joined. 12:15:56 @tell oerjan my Minks implementation is based on what was written in the minks page + what was said on the talk page; also I did not put any comments in it and the parser is incredibly badly written; I'm not sure considering that implementation as some sort of "reference implementation" is such a good idea ;) 12:15:57 Consider it noted. 12:16:19 @tell oerjan also I'll try to remember why I put it on the talk page in the first place and not in a wiki page of its own 12:16:19 Consider it noted. 12:23:23 -!- Vorpal has joined. 12:27:42 shachaf: what if you did the same trick that isomorphisms use for all lenses 12:28:00 ? 12:28:32 type Getter s a = forall f. (Gettable f, Gettery k) => k s a 12:28:37 instance Gettery (->) 12:28:45 instance Gettery (\s a -> (a -> f a) -> s -> f s) 12:30:16 And for Lens? 12:32:30 type Lens s t a b = forall f. (Lensy k) => k s t a b 12:32:41 instance Lensy (\s _ a _ -> (s -> a)) 12:32:51 instance Lensy (\s t a b -> forall f. (Functor f) => (a -> f b) -> s -> f t) 12:32:58 Q: if i know lens will all their type signatures stop looking really stupid 12:32:58 what could go wrong, right 12:33:03 monqy: no 12:33:37 monqy: no but! your eyes just sort of glaze over and you don't actually read the signatures after a while 12:33:44 which is basically the same as before you know lens 12:34:00 except not the same 12:34:20 :t (%~) 12:34:21 Setting s t a b -> (a -> b) -> s -> t 12:34:28 :t itraverse 12:34:29 (Applicative f, TraversableWithIndex i t) => (i -> a -> f b) -> t a -> f (t b) 12:34:39 monqy: it has some cool signatures! 12:34:40 like uh 12:35:07 @ty (%%~) 12:35:09 LensLike f s t a b -> (a -> f b) -> s -> f t 12:35:12 "pretty cool signature right" 12:35:42 :t _1 12:35:44 (Functor f, Field1 s t a b) => (a -> f b) -> s -> f t 12:35:49 um um 12:35:52 :t index 12:35:54 Ambiguous occurrence `index' 12:35:54 It could refer to either `Data.Ix.index', 12:35:54 imported from `Data.Ix' at State/L.hs:32:1-14 12:35:57 nice 12:36:01 :t upon 12:36:03 Not in scope: `upon' 12:36:04 :t Control.Lens.Indexed.index 12:36:06 Indexed i k => ((i -> a) -> b) -> k a b 12:36:08 monqy: that's a pretty nice signature! 12:36:23 :i Indexed 12:36:28 :'[ 12:36:30 :t act 12:36:31 Control.Lens.Internal.Effective m r f => (s -> m a) -> (a -> f a) -> s -> f s 12:36:33 so's that 12:36:47 except 12:36:53 :t Control.Lens.Action.act 12:36:54 elliott: help what's Eq# 12:36:55 in Core 12:36:55 Control.Lens.Internal.Effective m r f => (s -> m a) -> (a -> f a) -> s -> f s 12:36:59 weird it shows differently 12:37:01 shachaf: idk 12:37:17 monqy: duk 12:37:49 elliott: Really happy with how the Core for getters/folds turns out! 12:37:59 what about traversals 12:38:05 ion is sending patches to lens now. 12:38:09 I'm sure it's just a phase. 12:38:15 :t focus 12:38:17 (Functor f, Indexed (Tape (h :> a)) k) => k (a -> f a) ((h :> a) -> f (h :> a)) 12:38:21 monqy: also a pretty good type 12:38:26 shachaf: I see what you did there. “phase” 12:38:32 focus? more like stupidus 12:38:32 except it's actually 12:38:34 focus :: SimpleIndexedLens (Tape (h :> a)) (h :> a) a 12:38:36 @ty rezip 12:38:37 Zipper h a => (h :> a) -> Zipped h a 12:38:50 elliott: are these the sorts of types that look cool once i know lens,m because i don't know lense 12:39:09 ion: "This isn't /quite/ a legal lens." 12:39:13 this isn't ok ion 12:39:15 monqy: "sort of" 12:39:17 it 12:39:18 monqy: lens is easey 12:39:20 it' sa cool library i like it 12:39:49 elliott: edwardk already did that in polarize, so i thought it would be okay. 12:39:51 elliott: Not sure about traversals. 12:39:53 It depends. 12:39:57 im sure id find it cool if i took the time to read what the stuff meant 12:39:57 ion: he's not ok either 12:40:10 monqy: i figured out lens just by reading the haddocks 12:40:14 p. good way imo 12:40:16 yeah but i hjavent done that 12:40:24 ive been too busy doing other stuff!!!! 12:40:44 i haven't 12:41:04 monqy: i figured out lens just by going to edwardk's talk about it in san francisco 12:41:08 have you been to san francisco 12:41:13 maybe 12:41:18 i forget!! 12:41:26 how can you forget that 12:41:41 elliotts right 12:43:08 shachafs left 12:43:39 ion: tug 12:43:44 tug left 12:43:46 tugs left 5 12:43:54 shachafs left ß 12:44:22 shachaf: you should fix Data.Vector.Lens 12:44:27 it has lots of partial lenses which should be traversals 12:44:37 elliott: No, you should fix it. 12:44:50 And while you're at it, write some benchmarks for me. 12:45:08 @ty over id id 12:45:09 t -> t 12:45:11 @ty view id 12:45:13 s -> s 12:45:19 coïncidence 12:45:34 Hey, it's pretty nifty that GHC infers t for over and s for view. 12:45:36 ï? 12:45:49 ïon: What about ït? 12:46:24 monqy: another cool lens thing 12:46:25 > ala _sum foldMap [1,2,3,4] 12:46:27 10 12:46:35 import Control.Newtype 12:46:40 s̈ḧäc̈ḧäf̈:̈¨n̈öẗḧïn̈g̈ 12:46:47 > ala _endo foldMap [("a"++),reverse,(++"b")] "hello" 12:46:49 "abolleh" 12:46:50 lens has ala? yeah i remember ala from before 12:46:59 it's like Control.Newtype but better since it's not tied to the notions of newtypes 12:47:00 :t ala 12:47:01 Simple Iso s a -> ((s -> a) -> e -> a) -> e -> s 12:47:04 :t _sum 12:47:06 (Functor f, Isomorphic k) => k (Sum a -> f (Sum b)) (a -> f b) 12:47:07 :t _endo 12:47:08 (Functor f, Isomorphic k) => k (Endo a -> f (Endo b)) ((a -> a) -> f (b -> b)) 12:47:11 monqy: lens has first clarinet ala 12:47:11 o neaaeto 12:47:13 first class 12:47:29 _endo is actually 12:47:30 _endo :: Iso (a -> a) (b -> b) (Endo a) (Endo b) 12:47:32 and _sum is actually 12:47:38 @ty review 12:47:39 _sum :: Iso (Sum a) (Sum b) a b 12:47:40 Not in scope: `review' 12:47:40 Perhaps you meant `view' (imported from Control.Lens) 12:47:44 lambdabot just displays them badly :( 12:47:45 @let review = view.from 12:47:47 Defined. 12:47:55 Yes, lens has first clarinet ala. 12:47:56 > view _sum 1 12:47:58 Sum {getSum = 1} 12:48:03 > review _sum (Sum 1) 12:48:06 1 12:48:21 > isomorphic Sum getSum 1 12:48:23 Sum {getSum = 1} 12:48:25 > from (isomorphic Sum getSum) 1 12:48:27 No instance for (GHC.Num.Num (Data.Monoid.Sum a0)) 12:48:28 arising from a use of... 12:48:36 monqy: so you can also do things like get an isomorphism for your newtype made 12:48:36 oooops 12:48:52 monqy: so you can treat it as a lens field to modify it/get at it/etc. 12:49:07 monqy: Did you know GHC doesn't optimize [] to []? 12:49:10 > First (Just "abcd") & _first %~ reverse 12:49:10 Ahem. 12:49:12 Couldn't match expected type `Data.Monoid.First [GHC.Types.Char]' 12:49:12 ... 12:49:13 monqy: Did you know GHC doesn't optimize reverse [] to []? 12:49:16 oops 12:49:25 > First (Just "abcd") & _first._just %~ reverse 12:49:27 Not in scope: `_just' 12:49:28 shachaf: i hear ghc doesnt inline reverse 12:49:31 hmm 12:49:39 > First (Just "abcd") & _first.traverse %~ reverse 12:49:41 Couldn't match expected type `Data.Monoid.First [GHC.Types.Char]' 12:49:42 ... 12:49:50 > reverse [1..] 12:49:54 mueval-core: Time limit exceeded 12:50:09 > reverse [..10] 12:50:14 mueval-core: Time limit exceeded 12:50:15 > First (Just "abcd") & from _first.traverse %~ reverse 12:50:19 mueval-core: Time limit exceeded 12:50:27 uh oh 12:50:27 :t from 12:50:32 Isomorphic k => Isomorphism a b -> k b a 12:50:34 > First (Just "abcd") & from _first.traverse %~ reverse 12:50:35 right 12:50:38 mueval-core: Time limit exceeded 12:50:40 > First (Just "abcd") & from _first.traverse %~ reverse 12:50:40 > First (Just "abcd") & from _first.traverse %~ reverse 12:50:40 > First (Just "abcd") & from _first.traverse %~ reverse 12:50:41 > First (Just "abcd") & from _first.traverse %~ reverse 12:50:43 can't find file: L.hs 12:50:43 can't find file: L.hs 12:50:44 needs to go the other way 12:50:44 mueval-core: Time limit exceeded 12:50:44 mueval-core: Time limit exceeded 12:50:52 > var "hi shachaf" 12:50:55 hi shachaf 12:51:00 how did you do that 12:51:01 time limit "not exceeded" 12:51:02 > First (Just "abcd") & from _first.traverse %~ reverse 12:51:06 mueval-core: Time limit exceeded 12:51:09 help 12:51:10 Lens is too slow. 12:51:11 > 3 12:51:13 3 12:51:14 monqy: do you have magic powers 12:51:17 > First (Just "abcd") & from _first.traverse %~ reverse 12:51:19 First {getFirst = Just "dcba"} 12:51:23 congratulat 12:51:24 oh no 12:51:30 do i have magic powers now>? 12:51:32 am i monqy 12:51:58 monqy: other cool things: it has a notion of "indexes" so you can do things like 12:52:03 > "abcde" & iwhere (\i -> i `mod` 2 == 0) .~ 'q' 12:52:06 "qbqdq" 12:52:07 > "abcde" & iwhere (\i -> i `mod` 2 == 0) %~ toUpper 12:52:09 "AbCdE" 12:52:16 oh good thinking elliott 12:52:22 > M.fromList [("a",2),("b",3)] & at "b" +~ 10 12:52:24 No instance for (GHC.Num.Num (Data.Maybe.Maybe a0)) 12:52:24 arising from a use o... 12:52:26 elliott: o thats cool 12:52:27 oh 12:52:30 > M.fromList [("a",2),("b",3)] & at "b" ?~ 10 12:52:33 fromList [("a",2),("b",10)] 12:52:41 > M.fromList [("a",2),("b",3)] & at "b" ?+~ 10 12:52:43 Not in scope: `?+~' 12:52:43 Perhaps you meant one of these: 12:52:43 `+~' (imported from... 12:52:46 > M.fromList [("a",2),("b",3)] & at "b" +?~ 10 12:52:48 Not in scope: `+?~' 12:52:48 Perhaps you meant one of these: 12:52:48 `+~' (imported from... 12:52:50 hmm 12:52:54 is there even an operator for that 12:53:10 elliott: Can you believe how uninlined this is? :-( 12:53:12 monqy: anyway you get the idea 12:53:24 > M.fromList [("a",2),("b",3)] & at "b".traverse +~ 10 12:53:26 fromList [("a",2),("b",13)] 12:53:31 right 12:53:38 isn't that just traverseAt 12:53:45 > M.fromList [("a",2),("b",3)] & traverseAt "b" +~ 10 12:53:45 > M.fromList [("a",2),("b",3)] & _at "b" +~ 10 12:53:47 can't find file: L.hs 12:53:48 fromList [("a",2),("b",13)] 12:53:54 It's called _at now 12:53:57 oh it got renamed, right 12:54:02 :t at 12:54:05 :t _at 12:54:05 (Functor f, At k m, Indexed k k1) => k -> k1 (Maybe v -> f (Maybe v)) (m v -> f (m v)) 12:54:07 Not in scope: `_at' 12:54:07 But not in lambdabot 12:54:07 Perhaps you meant one of these: 12:54:07 `cat' (imported from Text.PrettyPrint.HughesPJ), 12:54:12 :t _traverseAt 12:54:13 er 12:54:13 Not in scope: `_traverseAt' 12:54:14 Perhaps you meant one of these: 12:54:14 `traverseAt' (imported from Control.Lens), 12:54:14 :t traverseAt 12:54:16 (Applicative f, At k m, Indexed k k1) => k -> k1 (v -> f v) (m v -> f (m v)) 12:54:27 right, so at is just a lens on the Maybe result 12:54:27 :i _λ> :i _at 12:54:28 _at :: 12:54:28 forall k (m :: * -> *) v. 12:54:28 At k m => 12:54:28 k -> SimpleIndexedTraversal k (m v) v 12:54:30 -- Defined in `Control.Lens.IndexedTraversal' 12:54:32 whereas traverseAt lifts it to a traversal 12:54:39 I wonder if you could unify the notions somehow so they ended up having the same type 12:54:40 @let _ = traverse 12:54:42 :4:5: 12:54:42 Ambiguous type variable `t0' in the constraint: 12:54:42 (Tr... 12:54:59 monqy: have you seen the examples with "both" 12:55:08 > (1,2) & both *~ 2 12:55:08 elliott: Wow. :-( 12:55:10 (2,4) 12:55:23 > (1,2) & partsOf both %~ reverse 12:55:25 (2,1) 12:55:31 (that last one is evil don't actually use it please) 12:55:31 "bad core" 12:55:42 > (1,2) & unsafePartsOf both %~ reverse -- less evil?? 12:55:44 (2,1) 12:56:15 can you do partsOf foo %~ reverse just by using Backwards 12:56:21 I don't think so. 12:56:24 How would that work? 12:56:29 can you do it in a way that doesn't involve a list at least 12:56:34 I don't know. :-( 12:56:39 I've wondered about that. 12:56:44 i mean you must be able to 12:57:05 You can uh, use the traversal twice? 12:57:14 Zip the traversal with its Backwrads? 13:00:28 :t (^?!) 13:00:30 Not in scope: `^?!' 13:00:30 Perhaps you meant one of these: 13:00:30 `^!' (imported from Control.Lens), 13:00:32 right 13:00:38 how is cale going to keep up 13:00:45 also how did cale get convinced to put lens in lambdabot in the first place 13:00:51 @let (^?!) = fromMaybe (error "hi monqy") .: headOf 13:00:54 Defined. 13:00:55 elliott: ive seen "both" in ursala but in haskell it is new to me ! 13:01:02 except in ursala it is just b 13:01:05 "wow succinct" 13:01:18 :t both 13:01:19 Applicative f => (a -> f b) -> (a, a) -> f (b, b) 13:01:31 monqy: but in ursala can you use it to map over both elements 13:01:33 or is it just a getter?? 13:01:43 elliott: Other way around. 13:01:52 you know ursala? 13:01:55 No. 13:01:58 er right I said it wrong 13:02:03 but 13:02:14 monqy: the traversal is actually more powerful! 13:02:23 but ursala 13:02:27 monqy: than just (a -> b) -> (a, a) -> (b, b) 13:02:28 because 13:02:30 > sumOf _2 ("hi","monqy") 13:02:33 "monqy" 13:02:35 can ursala compute the sum of a string 13:02:38 you can do the reverse thing 13:02:39 > (1,2) & partsOf both %~ reverse 13:02:41 (2,1) 13:02:51 (because you get that arbitrary applicative effect) 13:02:53 similarly 13:02:59 > ("a","b") ^. both 13:03:01 "ab" 13:03:04 for mappending them 13:04:07 > (Sum 3, Sum 4) ^. both 13:04:09 Sum {getSum = 7} 13:04:18 > sumOf both (Sum 3, Sum 4) 13:04:20 No instance for (GHC.Num.Num (Data.Monoid.Sum a0)) 13:04:20 arising from a use of... 13:04:21 help 13:04:25 > sumOf both (3, 4) 13:04:27 7 13:04:29 > 7 13:04:31 7 13:04:32 > (1,2) & both %~ Sum & get both 13:04:32 % fun -c -m="~&brlX ((1,2),(3,4))" 13:04:33 ((2,1),4,3) 13:04:34 Could not deduce (Control.Monad.State.Class.MonadState 13:04:34 ... 13:04:36 "but can haskell do this" 13:04:41 > ((1,2) & both %~ Sum) ^. both 13:04:43 mueval-core: NotAllowed "These modules have not been loaded:\nL\n" 13:04:46 > lastOf (backwards traverse) [1..100000000] 13:04:46 what 13:04:48 Just 1 13:04:51 > ((1,2) & both %~ Sum) ^. both 13:04:53 Sum {getSum = 3} 13:04:57 is there a nicer way of doing this 13:05:00 without sumOf 13:05:01 > lastOf (backwards traverse) [1..100000000000000000000000000000000] 13:05:02 Wow, i haven’t seen the NotAllowed error before. 13:05:04 Just 1 13:05:07 > lastOf (backwards traverse) [1..100000000000000000000000000000000000000000000000] 13:05:09 Just 1 13:05:14 like is there a way to capture 13:05:29 elliott: sum toListOf both? 13:05:37 :t sum 13:05:38 Num a => [a] -> a 13:05:45 > sum (toListOf both (1,2)) 13:05:47 that's not really what i maen... 13:05:47 3 13:05:50 i mean a way of capturing 13:06:01 foo l f x = over l f x ^. l 13:06:08 alternatively, how is sumOf defined 13:06:17 Using Sum 13:06:23 yes 13:06:27 this does not shock me 13:06:38 getSum . foldMapOf l Sum 13:06:42 (except not that) 13:06:45 (more unsafeCoerce) 13:06:46 :t foldMapOf 13:06:47 Getting r s t a b -> (a -> r) -> s -> r 13:06:54 eh 13:06:56 ok 13:07:34 :t even 13:07:36 Integral a => a -> Bool 13:07:44 > sumOf (iwhere even) [1..10] 13:07:46 25 13:07:48 mmmm 13:07:52 that's nice 13:08:03 Why isn’t getSum unsafeCoerce in the first place? 13:08:14 ion: It is. 13:08:33 (getSum .), however... 13:08:59 ಠ_ಠ 13:09:08 ? 13:09:19 > sumOf (iwhere even) $ M.fromList [] 13:09:21 Ambiguous type variable `k0' in the constraints: 13:09:21 (GHC.Real.Integral k0) 13:09:21 ... 13:09:24 ion: *You* try to get "over mapped" to compile into fmap 13:10:42 > M.fromList [(0,"abc"), (1,"def"), (2,"qqq")] ^. traverse 13:10:44 "abcdefqqq" 13:10:54 > M.fromList [(0,"abc"), (1,"def"), (2,"qqq")] ^. iwhere even . traverse 13:10:56 No instance for (Data.Monoid.Monoid GHC.Types.Char) 13:10:56 arising from a use o... 13:11:00 hm 13:11:04 :t M.fromList [(0,"abc"), (1,"def"), (2,"qqq")] ^. iwhere even 13:11:05 Ambiguous type variable `k0' in the constraints: 13:11:06 (Integral k0) arising from a use of `even' at :1:56-59 13:11:06 (Num k0) arising from the literal `0' at :1:14 13:11:10 huh? 13:11:43 shachaf: what am I doing wrong 13:12:12 ? 13:12:18 why isn't this working 13:12:25 Works in my ghci 13:12:44 > M.fromList [(0,"abc"), (1,"def"), (2,"qqq")] ^. iwhere (even::Int->Bool) 13:12:46 "abcqqq" 13:13:00 monqy: What's ursala? 13:13:21 Doesn’t work in my ghci. 7.4.2. 13:13:46 7.6: better than 7.4? 13:14:36 no wai 13:15:05 elliott: I'm not liking the iwhere Core. 13:15:09 shachaf: you should learn ursala! 13:15:18 monqy: who's that 13:15:21 monqy: did you ever finish the manual 13:15:25 didn't she write that book 13:15:27 elliott: no i got sidetracked 13:15:36 monqy: im disappointed 13:15:58 elliott: im struggling with the hell that is figuring out how to get rewriting under binders working in coq 13:16:11 while really tired??? i should sleep 13:16:21 monqy: sounds less fun than ursala. you should read the manual some more instead 13:16:35 pure = Mutator 13:16:35 403 13:16:35 + {-# INLINE pure #-} 13:16:40 shachaf: come on, ghc is smart enough for that 13:17:53 elliott: OK, OK 13:17:59 But not for one of the other ones I added. 13:18:11 itraverse or something 13:18:16 elliott: wait wait wait 13:18:17 help 13:18:39 itoListOf ifolded is working 13:18:45 but itoListOf itraverse is not?????? 13:19:35 monqy: Binders full of women? 13:20:40 :t itoListOf ifolded 13:20:41 FoldableWithIndex i f => f b -> [(i, b)] 13:20:42 :t itoListOf itraverse 13:20:43 Couldn't match expected type `IndexedGetting 13:20:44 i0 [(i0, a0)] s0 t0 a0 b0' 13:20:44 with actual type `(i1 -> a1 -> f0 b1) -> t1 a1 -> f0 (t1 b1)' 13:20:51 that sure is a type error 13:23:09 ahh, the hell that is rewriting under binders was working all along but i forgot to declare my stuff as morphisms 13:23:17 im too tired for this 13:23:42 i declare monqqys stuff as morphisms 13:23:48 thank u 13:24:29 elliott: Should indexed be strict? 13:24:36 :t indexed 13:24:37 Indexed Int k => ((a -> Control.Lens.Internal.Indexing f b) -> s -> Control.Lens.Internal.Indexing f t) -> k (a -> f b) (s -> f t) 13:24:45 indexed l = index $ \iafb s -> case runIndexing (l (\a -> Indexing (\i -> (iafb i a, i + 1))) s) 0 of 13:24:48 which is faster 13:24:49 indexed l = index $ \iafb s -> case runIndexing (l (\a -> Indexing (\i -> i `seq` (iafb i a, i + 1))) s) 0 of 13:25:00 elliott: help i dont havae any benchmarks!! 13:25:01 oh 13:25:06 i thought you meant strict as in strict 13:25:11 as in indexed _|_ = _|_ 13:25:12 No, index-strict. 13:25:19 One of them builds a bunch of thunks, though, I assume. 13:25:19 um 13:25:21 probably not 13:25:25 Why not? 13:25:32 what if you have a complex lens type 13:25:40 And? 13:25:41 er 13:25:43 complex index type 13:25:49 @ty indexed 13:25:50 that has a lot of computation 13:25:51 Indexed Int k => ((a -> Control.Lens.Internal.Indexing f b) -> s -> Control.Lens.Internal.Indexing f t) -> k (a -> f b) (s -> f t) 13:25:56 ☝ 13:26:09 ☝☝☝ 13:26:15 what 13:26:16 "oopse" 13:26:18 oh 13:26:19 @ty indexed 13:26:19 the Int part 13:26:20 Indexed Int k => ((a -> Control.Lens.Internal.Indexing f b) -> s -> Control.Lens.Internal.Indexing f t) -> k (a -> f b) (s -> f t) 13:26:22 wel 13:26:23 l 13:26:24 Yes. 13:26:25 I guess it can be strict 13:26:28 it seems semantically wrong though 13:26:35 indexed turns an existing traversal into an Int-indexed traversal 13:26:40 what if you have a structure where it's easy to access in order 13:26:41 Just by the order it Ints by. 13:26:46 but calculating the exact indices is expensive 13:26:51 ? 13:26:54 oh 13:26:57 wait 13:27:01 does it even change semantics to make it strict then 13:27:07 Sort of. 13:27:09 how 13:27:17 Maybe not. 13:27:19 -!- sivoais has joined. 13:27:20 Who cares about semantics? 13:27:25 I asked if it should be strict. 13:27:28 me too 13:27:38 i assumed it was a question about the function's denotation 13:27:40 -!- monqy has quit (Quit: hello). 13:27:46 operationally, do whatever you think will be fastest, probably strict 13:28:43 I thought so. 13:30:50 -!- atriq has joined. 13:33:13 elliott: Yay, saves us from a stack overflow. 13:33:59 elliott: 13:34:00 itoListOf l = ifoldMapOf l (\i a -> [(i,a)]) 13:34:21 Should it be ifoldrOf l (\i a -> ((i,a):))? 13:36:31 what's the difference 13:37:18 right-associative 13:40:15 then i guess yes 13:45:30 elliott: Isn't it annoying how with rank-2 types, to make a type *more* polymorphic you have to make the signature *more* specific? 13:46:22 no 13:46:45 wrong answer 14:03:46 elliott: Oh. 14:03:50 It's itoListOf itraversed 14:12:52 "ph plays df adventure mode: pt 1" 14:13:33 for some reason every single human in the village i was in, including my 3 companions, turned hostile 14:13:47 were you rude 14:14:06 presently i am retreating from a massive crowd of them, a trail of broken bodies in my wake 14:16:43 no, i got sent to kill a spearman by someone in the same village 14:17:11 when i found him in one of the huts, there was a flurry of chaos and everyone started attacking me 14:17:32 they've gashed my foot and my left arm, but so far i'm holding them off pretty handily 14:22:17 Phantom_Hoover, has elliott started the fortress yet? 14:23:08 maybe 14:23:12 you could ask elliott that 14:24:05 I figured asking you would ping both of you 14:24:18 elliott, does Phantom_Hoover think you've started the fortress yet? 14:24:48 does Phantom_Hoover think 14:24:50 burn?? 14:25:08 hey elliott 14:25:09 brun 14:25:15 Indexing is terrible 14:25:16 fix it :'( 14:25:28 @ty indexed 14:25:30 Indexed Int k => ((a -> Control.Lens.Internal.Indexing f b) -> s -> Control.Lens.Internal.Indexing f t) -> k (a -> f b) (s -> f t) 14:25:36 "how hard can it be to write this function" 14:25:43 elliott, if Phantom_Hoover thought you had started the fortress, would he be correct#? 14:25:57 I feel like I'm in a logic puzzle 14:26:51 atriq: from a falsehood, all follows 14:27:01 the falsehood is Phantom_Hoover thinking 14:47:23 -!- variable has joined. 14:48:53 -!- variable has quit (Read error: Connection reset by peer). 14:49:07 oh god there is no way i'm getting out of this 14:49:25 i can't sleep in the town, it's night, and i can't stand before healing 14:49:28 and i can't travel at night 14:49:51 Phantom_Hoover, which game? 14:50:28 dwarf fortress adventure mode 14:50:44 hm, never played that mode, is it any good? 14:51:18 it's... 14:51:22 interesting 14:51:34 hm okay 14:51:56 is it as fun as the fortress mode though? 14:52:07 hell no 14:52:13 ah 14:52:58 bbl 14:52:59 Vorpal: it's a masterpiece 14:57:34 -!- Vorpal has quit (Ping timeout: 250 seconds). 15:04:12 elliott, i thought you weren't a fan 15:04:38 define fan 15:06:34 A thing that moves air around. 15:06:55 Apparently only if it's done by movement of a surface or surfaces. 15:06:56 i am that 15:11:51 -!- variable has joined. 15:18:13 -!- variable has quit (Ping timeout: 246 seconds). 15:53:13 -!- t1 has joined. 16:01:22 -!- oerjan has joined. 16:02:24 @messages 16:02:25 Arc_Koen said 3h 46m 28s ago: my Minks implementation is based on what was written in the minks page + what was said on the talk page; also I did not put any comments in it and the parser is 16:02:25 incredibly badly written; I'm not sure considering that implementation as some sort of "reference implementation" is such a good idea ;) 16:02:25 Arc_Koen said 3h 46m 5s ago: also I'll try to remember why I put it on the talk page in the first place and not in a wiki page of its own 16:04:01 Arc_Koen: well the part about conditions starting True was also in the talk page; the other change was that only conditions before commands count for the loop checking, which your truth machine depends on. feel free to undo it but then you need to change both your implementation and your truth machine. 16:04:16 hm gone 3 hours 16:04:25 @tell Arc_Koen well the part about conditions starting True was also in the talk page; the other change was that only conditions before commands count for the loop checking, which your truth machine depends on. feel free to undo it but then you need to change both your implementation and your truth machine. 16:04:25 Consider it noted. 16:05:52 @tell Arc_Koen that is, the condition x is used as a target in the truth machine, but ignored for the loop check 16:05:53 Consider it noted. 16:06:24 -!- t1 has left. 16:08:57 @tell Arc_Koen also i certainly don't consider your use of bounded integers to be authoritative >:) 16:08:57 Consider it noted. 16:16:45 Well, that code became neater quickly 16:17:13 Rewriting a DCPU interpreter I started and never finished 16:17:25 it's when it starts obfuscating itself you should start worrying 16:18:52 From 3 lines with ridiculous lambdas, record syntax, and the "lens" function to 1 line, with pointless fun 16:19:40 Basically, I've got two UArrays of Word16s in one datatype, with different address types 16:20:08 And I was making a function that took an Either AddressType1 AddressType2 and returned a Simple Lens DCPU Word16 16:20:35 dcpuLens = dcpuRegisters .: ix ||| dcpuRam .: ix 16:24:50 Anyway 16:38:16 -!- oerjan has quit (Quit: leaving). 16:39:57 elliott 16:40:03 you know 16:40:06 what you should be doing 16:45:31 i can't become a duck all by myself Phantom_Hoover 16:45:33 you have to help 16:45:47 step 1, find witch 16:46:01 step 2, anger witch after expressing utmost revulsion for ducks 16:47:15 -!- AnotherTest has joined. 16:47:18 Hello 16:47:49 elliott, you can do step 2 easily by saying "I hate you almost as much as I hate ducks!" 16:48:23 atriq, good thinking! 16:48:39 i'm handing control of this project over to you, you are more likely to know about witches in the hexham area 16:49:21 I can't think of any specific witch off the top of my head, but I'll put out some feelers 16:49:30 atriq: that doesn't work if i like ducks though..... i;td be a compliment 16:49:49 elliott, the witch doesn't have to know you like ducks! 16:50:33 Think of the insinuations of the negative word "hate" 16:50:38 As applied to ducks 16:50:45 ok 16:50:47 The obvious assumption is that the speaker hates ducks 16:50:49 bring a duck with you 16:50:51 kill it 16:51:02 then say 'i hate you almost as much...' etc. 16:51:15 what if that just means i love ducks....... to death 16:51:42 say you love her........... to death too, then try and kill her however you killed the duck 16:51:55 she will turn you into a duck as an ironic lesson on the consequences of your actions 16:52:19 im bested 16:55:06 atriq, any luck on witch location 16:56:35 Not so far 16:59:42 come on surely there are some witches in northumberland who like homestuck! 17:00:48 a) Northumberland is pretty big, and Hexham's right in the south of it 17:01:01 b) most of the Homestucks I know live in Tyne and Wear 17:05:23 Tyne and Wear sound like made-up names. 17:06:12 It's a modern county named after two rivers flowing through it 17:06:21 The Tyne also flows through Hexham 17:06:33 they have a metro 17:06:43 Do the metro trains run on Tyne? 17:06:53 Yeah, and Wear 17:06:55 How cool is that? 17:06:57 -!- copumpkin has quit (Quit: Computer has gone to sleep.). 17:10:54 i'm fairly sure the nick cage appreciation society at this university was made by homestucks, but they seem to be in hiding 17:11:42 Acquire a Homestuck shirt, ideally from your wardrobe. Wander about in it constantly, but not just after updates. 17:12:08 unfortunately i wear a jumper all the time 17:12:15 and i don't think you can get homestuck jumpers 17:12:18 more's the pity 17:12:37 You can get Homestuck hoodies, which are closer to jumpers than t-shirts 17:13:41 too heavy for the purposes i wear a jumper 17:14:33 You can just wear your Homestuck underwear on top of your pants. 17:15:03 hahaha nice try fizzie 17:15:10 i'm not googling 'homestuck underwear' 17:15:33 There's an empty Tumblr with that title. 17:15:55 Which reminds me 17:16:02 I need to pretend to be Phantom_Hoover 17:16:11 There was also something I didn't understand in the results. 17:16:42 i heard someone mentioning something called 'mathfuck' or maybe 'fuckbrath', it sounded awful 17:16:57 i couldn't get any more details out of them but that sounds like a good start 17:25:58 Hmm 17:26:37 My query on Facebook for witch recommendations has received three likes. All by Homestucks, as it happens 17:29:07 -!- carado has joined. 17:29:27 What's this witch thing? 17:29:41 elliott needs a witch so he can become a duck 17:29:57 Ah, I "see". 17:30:35 atriq, why is your facebook picture a drawing of a girl :/ 17:30:39 It's not 17:30:43 It's a drawing of me 17:30:54 I'm just rather devoid of masculinity 17:30:57 All Hexhamites look like girls, is that it? 17:31:06 And in an unusual outfit 17:31:20 eeewwww you watch doctor who????? 17:31:52 ... 17:31:58 I'm fairly sure you watch Doctor Who 17:32:07 You've complained about my taste in doctors before. 17:32:11 yes! 17:32:16 that's why i don't watch it any more! 17:32:31 stop liking things i don't! 17:33:07 Yeah, it's lowering your compatibility percentage. 17:33:26 have to love how my dorfs are happy to have a drink at the edge of a 9-level precipice 17:38:21 atriq, at least you liked the episode with ben browder in it 17:38:28 that's *almost* like liking farscape 17:38:35 Which episode was that? 17:39:01 Oh, that episode 17:39:05 That was a good episode 17:40:12 hmm 17:40:29 maybe i should not starve my mayor to death 17:40:56 farscape was a good episode. i was younger then, and probably happier. 17:41:17 a good episode of what 17:41:53 my life 17:45:02 welp, the mayor died 17:45:15 at least she was surrounded by her friends when she died 17:45:21 probably begging them all for food or water 17:48:39 -!- zzo38 has joined. 17:48:48 now they're showing their respects by leaving her corpse lying on one of the central staircases and making no effort at all to bury her 17:49:28 -!- elliott has quit (Remote host closed the connection). 17:49:41 That is not a very good place to leave the corpse. 17:50:23 oops turns out i didn't have any spare coffins 17:50:55 Even if you don't have any coffins, the stairs is not a good place to leave it. 17:51:04 Throw it outside. 17:51:08 zzo38, dwarf logic 17:51:27 "Hey, there's the old mayor's corpse" 17:51:35 "It should be in a coffin" 17:51:39 "We don't have any coffins" 17:52:05 "Bah, I've got more important things to do, like carry this barrel of mushrooms to the mushroom farm to put a mushroom in it" 17:58:42 -!- Nisstyre-laptop has joined. 18:05:59 hrrrm 18:06:05 a donkey has gone missing 18:06:11 another donkey went missing a while ago too 18:06:22 we may have another, smarter vampire on our hands 18:07:16 vampiiiiiiiires 18:08:46 A vampire donkey 18:08:51 Horsepire. 18:09:08 no, vampires will prey on domesticated animals if they can't find dorfs 18:13:25 both of them have just vanished out of the blue, with no hostiles on the map and no combat logs 18:13:28 it's all very mysterious 18:32:12 oh no 18:32:27 where's elliott 18:32:40 What is a amplitude per second units? 18:33:05 amplitude is not a unit? 18:33:17 dB/s? 18:33:33 dBHz 18:34:08 oh 18:34:11 It is not measured here in dB though, it is measured using linear 18:34:32 I see that DF is trendy again 18:34:44 They are floating point values that would be converted to integer and store in sound files. 18:35:21 probably that amplitude is unitless 18:35:28 it's a fraction of the maximum cone displacement 18:35:40 unless your audio files are normalized to some volume standard 18:36:17 in which case they are a maximum of some specified decibel value at some specified measuring condition 18:36:20 and so still unitless 18:36:43 They are 0 dB at whatever the user specifies in the Csound orchestra file, in the "0dbfs" parameter. 18:37:09 That becomes the maximum value without clipping 18:39:46 what was that command to leave a message for someone using our bot[s]? 18:39:55 It is Csound, and some of the commands I added take the amplitude per second measurements, such as the "slowchange" command. 18:39:58 @tell nooga it's @tell 18:39:58 Consider it noted. 18:40:15 and he didn't told me 18:40:16 nooga: You have 1 new message. '/msg lambdabot @messages' to read it. 18:40:19 oh 18:40:40 Waits until the next time you speak in a channel it's in =P 18:41:26 Although you can check messages even without that, too 18:41:36 @tell elliott http://cl.ly/image/2R2T1L0G0L2e OH LOOK WHAT I'VE GOT :} 18:41:36 Consider it noted. 18:41:50 done, thanks 18:44:23 zzo38: ah you mean samples per second. also known as frequency. it is measured in Hz 18:45:10 quintopia: Well, yes, it is Hz, I guess, although in this case the amplitude is important too 18:45:28 Well, the sampling rate is twice the maximum frequency 18:45:50 but as kmc said, the amplitude is unitless 18:45:57 because it is relative 18:46:08 Amplitude will depend on bits per sample 18:46:32 Well, accuracy 18:46:39 or use dB since apparently you specify a 0dB standard 18:47:36 But what I have is more like a slope I think 18:50:06 oh shit itidus' ghost has possessed my spearmaster 18:50:33 fortunately he's just kind of standing next to a lever doing nothing 18:50:45 That's our itidus! 18:51:58 "i think the reason i can't get her to do anything is that i just can't wrap my brain around possessing people" 18:52:45 "they say possession is nine tenths of the law, but what about the laws of physics? 18:52:46 " 18:53:02 wait 18:53:07 motherfucker trashed my danger room! 18:55:36 what? 18:55:48 -!- Nisstyre-laptop has quit (Quit: Leaving). 18:57:30 -!- Nisstyre-laptop has joined. 18:59:03 nortti, a device for training soldiers very quickly. 18:59:13 ok 19:02:30 Make up the game involving possession nine tenths of the law of physics. 19:13:47 most rts's and social games are like that 19:17:26 Now I programmed the Csound command "aQ, anotQ flipflop aS, aR, aclock, [ithreshold], [klow], [khigh], [init]" 19:44:40 -!- AnotherTest has quit (Quit: Leaving.). 19:44:48 what's Csound? 19:45:02 -!- AnotherTest has joined. 19:47:45 Csound is a program to make music and sound effect. 19:47:58 You can look it up in Wikipedia for information. 19:48:52 It has its own orchestra prorgamming language, and then there is also a score file which tells it what instruments to play, when, and what parameters. 19:50:39 oh 19:50:39 It is not difficult to add new commands by writing plugins in C. You don't need to do anything other than compile the plugin with the correct options (on my computer: gcc -DUSE_DOUBLE -I "$CSOUNDDIR/include" -shared -o csoundextraopcodes.dll -O2 csoundextraopcodes.c -lm); once it is compiled, it will automatically work. 19:50:54 -!- atriq has quit (Quit: Leaving). 19:51:17 btw. I'm writing a roguelike with it's own, runic, esoteric programming language for inscribing items 19:52:03 script your own items, cool, huh? 19:52:32 OK write a description of such programming language in esolang wiki then? 19:53:07 the problem is that it does not exist at the moment 19:53:22 -!- atriq has joined. 19:53:32 i have only vague idea how to tackle it 19:54:53 Write the ideas on a user subpage perhaps. 19:55:15 i figured out how metajousting would work yesterday 19:56:49 I changed S, R, clock, to x-rate instead of a-rate. This "flipflop" command I made up can be used to convert other signals into a square wave one octave lower. 19:56:57 quintopia: How does metajousting work? 19:57:50 the rules about the tape and polarities are the same as for bfjoust 19:58:22 but the "flag" cells are initialized to zero, because the goal is not to tear down the flags on the regular tape 19:58:45 instead, there is a second two-cell three-bit tape, with both initialized to 7 19:59:08 and each player has a pointer to one of these cells on this tape 19:59:26 we reinclude . and , to mean what they do in bf 20:00:07 but, if a player outputs 0, it flips the meta-pointer to the other cell, and if it outputs 1 or -1, it increments or decrements the cell the metapointer is pointing to 20:01:04 and , copies the current value of the pointed cell on the metatape to the regular tape 20:01:14 the goal is to lower the metaflag for two cycles 20:01:30 *the opponent's 20:03:35 -!- AnotherTest has quit (Quit: Leaving.). 20:06:32 Now implement it and/or write a wiki article about it. 20:24:31 -!- atriq has quit (Quit: Leaving). 20:24:33 -!- epicmonkey has quit (Ping timeout: 260 seconds). 20:24:40 -!- Nisstyre-laptop has quit (Ping timeout: 244 seconds). 20:28:26 -!- oerjan has joined. 20:28:47 @messages 20:28:47 You don't have any new messages. 20:29:32 -!- ais523 has joined. 20:31:05 16:48:39: i'm handing control of this project over to you, you are more likely to know about witches in the hexham area 20:31:08 16:49:21: I can't think of any specific witch off the top of my head, but I'll put out some feelers 20:31:20 isn't everyone in hexham a witch? it's sort of in the name... 20:31:47 except i hear "hex" in that sense has only been borrowed into american english... 20:33:30 btw in norwegian fairy tales a "hekseham" is an animal hide used by a witch to turn into that animal 20:34:50 or wait would that be a hide someone uses to turn into a witch... 20:36:58 "dyreham" might be more correct. 20:38:20 -!- atriq has joined. 20:40:18 atriq, check logs 20:40:28 oerjan has revealed critical information 20:41:17 Wow 20:41:28 * Phantom_Hoover googles 'hekse' in an attempt to confirm this, ends up at http://da.wikipedia.org/wiki/Heks 20:41:53 elliott is in luck 20:42:14 -!- Nisstyre-laptop has joined. 20:42:37 http://translate.google.co.uk/#en/da/witch%20home 20:43:41 -!- sivoais has quit (Ping timeout: 255 seconds). 20:47:30 atriq: that would be combined into heksehjem 20:49:30 -!- nooga has quit (Ping timeout: 276 seconds). 20:53:14 -!- atriq has quit (Remote host closed the connection). 20:53:44 -!- sivoais has joined. 20:53:52 -!- atriq has joined. 20:54:40 that minks language has some awkward flow control 20:54:55 More or less awkward than Fueue? 20:55:25 more i should think, although the paradigms are completely different so how to compare... 20:56:03 there are enough registers to do a collatz function similar to the 3-cell bf, but i'm not sure whether it is possible to manipulate conditions in the right way 20:56:46 i don't yet see a way to set a condition only if a register is 0 20:57:40 and you cannot clear conditions at all if both registers are far from 0 21:01:05 however it is easy to set one register if another is set 21:01:19 a inc a dec b 21:01:29 *one condition 21:01:35 zzo38: it would be trivial to implement, but i don't feel like doing that or writing it up 21:05:35 The grad school funding thing that pays for my salary is called "Hecse". There are no hams involved, though. 21:12:42 -!- Vorpal has joined. 21:12:44 Is there any driver to emulate physical damage in a disk image? 21:12:47 hi 21:13:28 zzo38: a screwdriver hth 21:16:00 It is not what I mean. 21:16:09 shocking 21:17:36 -!- NihilistDandy has joined. 21:19:43 -!- NihilistDandy has quit (Quit: leaving). 21:20:02 -!- NihilistDandy has joined. 21:39:48 Linux device-mapper has a "dm-flakey" target. 21:39:59 "This target is the same as the linear target except that it exhibits unreliable behaviour periodically. It's been found useful in simulating failing devices for testing purposes." 21:40:54 -!- atriq has quit (Quit: Leaving). 21:41:02 Well, how else are you supposed to know if your code does the right thing in bad conditions without having bad hardware 21:41:25 -!- atriq has joined. 21:42:07 You give it numbers X and Y, and then it cycles so that it's available for X seconds, then it's broken for Y seconds, and so on. By default when it's broken it's totally broken, but you can also tell it to instead drop all writes but work correctly when reading, or to corrupt every N'th byte of each matching IO request data block. 21:43:01 Can you also tell it what parts of the disk are broken? 21:43:20 -!- variable has joined. 21:43:37 -!- ogrom has quit (Quit: Left). 21:44:13 I don't think it has an option for that, though it probably should be possible to do that too with device-mapper somehow. Possibly with some setup involving dm-delay too. 21:46:26 If nothing else, you should be able to make your "disk" by combining dm-linear's mapping to the non-broken parts and dm-flakeys for the broken ones. Some scripting would undoubtedly be involved. 21:52:55 Hmmmm. 21:53:25 OK so in DF, minecarts going quickly around sharp bends jump the tracks and spill their contents everywhere at high speed. 21:53:31 Minecarts can also carry magma. 21:54:04 Phantom_Hoover, did you do this by accident, or are you planning to do this delibrately 21:54:16 Deliberately. 21:54:44 Obviously, even in DF it'd be pretty ridiculous to accidentally build a magma linear accelerator. 21:55:44 OTOH minecarts are also a much more practical way of transporting magma over long distances than pump stacks, so I was planning to do it anyway. 21:55:45 Maybe you accidentally built your magma forges miles away from lava 21:55:51 Because you sneezed 21:56:01 And thought "let's be dorfy!" 21:56:13 "MAGMA TRAIN!!!" 21:59:54 -!- copumpkin has joined. 22:00:33 -!- monqy has joined. 22:08:04 atriq, that *is* what I'm thinking. 22:18:40 http://ansuz.sooke.bc.ca/entry/254 22:32:18 hello 22:32:19 Arc_Koen: You have 3 new messages. '/msg lambdabot @messages' to read them. 22:32:24 @messages 22:32:24 oerjan said 6h 28m ago: well the part about conditions starting True was also in the talk page; the other change was that only conditions before commands count for the loop checking, which your 22:32:24 truth machine depends on. feel free to undo it but then you need to change both your implementation and your truth machine. 22:32:25 oerjan said 6h 26m 32s ago: that is, the condition x is used as a target in the truth machine, but ignored for the loop check 22:32:25 oerjan said 6h 23m 28s ago: also i certainly don't consider your use of bounded integers to be authoritative >:) 22:32:28 ah thinking of the devil... 22:32:35 -!- copumpkin has quit (Ping timeout: 255 seconds). 22:33:06 -!- copumpkin has joined. 22:33:17 am I the devil to you? :( 22:33:33 ...it's a stock phrase, slightly modified. 22:36:53 i think the impossibility of clearing conditions while both registers are non-zero implies Minks is not TC 22:38:20 I was afraid you might say that 22:47:56 oh hm actually the more serious problem is that there is no way to set one condition based on another _not_ being set. 22:48:56 wait that's an oversimplification too 22:52:39 yeah hmm "there is no way to" doesn't seem like something easy to prove 22:55:16 it's not true when a register is close to 0 :P 22:55:58 the actual argument is somewhat more complicated. 22:57:44 you make a graph where the vertices are conditions, and there is an edge between conditions if there's a dec or DEC instruction causing the one to set the other 23:00:22 when both registers are set, conditions gradually get set to True along the paths of that graph, until there are no more edges to follow. this must happen in a number of loops <= the diameter of the graph. 23:01:12 once this happens, no conditions can change again until one of the registers reaches 0. 23:05:55 so the graph is one way of describing the program? 23:06:15 well one aspect of it 23:09:04 i am having an annoying intuition not to try to explain this 23:09:45 ...maybe there's an error in the argument somewhere, then. 23:11:48 * oerjan is more inclined to think his intuition is just being an asshole. 23:20:31 How can I encode that in Haskell... 23:20:41 AGE_AT_EVENT: = {Size=1:12} 23:20:41 [ < | > | ] 23:20:41 [ YYy MMm DDDd | YYy | MMm | DDDd | 23:20:41 YYy MMm | YYy DDDd | MMm DDDd | 23:20:41 CHILD | INFANT | STILLBORN ] 23:20:42 ] 23:20:47 From the GEDCOM specs 23:21:42 stillborn 23:21:49 is that when you're dead before being born? 23:21:51 Yes 23:22:18 I'm inclined to make the first part an Ordering 23:22:31 can I ask why you're doing this? it sounds depressing 23:22:53 I'm writing a genealogy library in haskell 23:22:59 It's a long term project 23:23:05 I'm not very far 23:24:39 are stillborn that relevant for genealogy purposes? I don't think they get to have much offspring 23:24:48 I don't know 23:24:54 This is a standard that I'm trying to stick to 23:33:21 uhhh 23:33:34 i let the vampire out so i could move her into a strand extraction facility 23:33:49 she's already killed elliott 23:35:18 did you at least give her suncream? 23:38:37 oh she got Vorpal as well 23:38:51 i feel like this is some form of irony 23:39:32 oh for-- 23:39:46 every time she actually goes inside her little prison she immediately leaves and feeds again 23:40:15 on her way to the bedrooms, she has passed the people carrying both elliott and Vorpal's bodies to the tombs 23:41:46 ohshit 23:42:07 those 3 deaths alone were enough to make like 10 dorfs miserable 23:42:26 this could get very messy indeed 23:43:33 time to exercise some exorcism 23:43:47 so three of your people have been killed because they were trying to rescue dead bodies? 23:43:57 and now there are 5 dead bodies and nobody to rescue them? 23:44:03 No. 23:44:15 Vampire kills elliott; body is discovered. 23:44:19 ok 23:44:26 Vampire kills Vorpal, body is discovered. 23:44:32 ok 23:44:50 Bodies moved to tombs. Vampire moves to other section of fortress where I am vainly attempting to trap her. 23:44:59 oook 23:45:40 Tombs are also in this section. Vampire slips the net, moves back to bedrooms to feed again. People carrying Vorpal and elliott's bodies are going the other way and pass her in the corridor. 23:45:55 wait 23:46:08 Vampire kills third dorf, I follow her back and trap her properly this time. 23:46:09 you said "vampire moves to other section" 23:46:28 I was assuming "other than the section the "moving bodies to tomb" action takes place in" 23:49:30 nah, they're the same 23:49:37 also: the tantrums have started 23:49:57 i have a robust justice system and a lot of happiness boosters in place; i hope it's enough 23:50:48 famous last words 23:52:11 a robust system where the captain of the guard is asleep, preventing any crimes being reported 23:57:40 Yeah, this has fortunately mostly blown over.