Skip to content

Instantly share code, notes, and snippets.

@ekmett
Created April 1, 2013 04:30
Show Gist options
  • Star 5 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save ekmett/5283253 to your computer and use it in GitHub Desktop.
Save ekmett/5283253 to your computer and use it in GitHub Desktop.
#haskell-lens log from ekmett_conf
[00:24] fumieval (~fumieval@124x39x126x66.ap124.ftth.ucom.ne.jp) joined the channel.
[00:25] nushio3 (7c277e42@gateway/web/freenode/ip.124.39.126.66) joined the channel.
[00:25] nushio3: hi there!
[00:26] edwardk: hello, hello!
[00:27] hiratara (~hiratara@h223020.dynamic.ppp.asahi-net.or.jp) joined the channel.
[00:27] fumieval: hi
[00:28] carter: hello everyone! Wait, is this the presentation room now?
[00:30] edwardk: Yep
[00:30] carter: enjoy!
[00:30] tanakh_ (~tanakh@124x39x126x66.ap124.ftth.ucom.ne.jp) joined the channel.
[00:31] edwardk: I warn you my japanese is terrible, so I'll mostly be going by whatever is said in english and the slides ;)
[00:39] shinybeast__ (uid1885@gateway/web/irccloud.com/x-scjzvegvofmgojqg) left IRC. (Remote host closed the connection)
[00:42] edwardk: the video quality is quite a bit better than i feared it'd be =)
[00:43] nushio3: Hurray for transpacific cables.
[00:46] edwardk: @faq Is Predicate a Functor?
[00:46] lambdabot: The answer is: Yes! Haskell can do that.
[00:47] nushio3: @fac What is the answer for the life, universe, everything?
[00:47] lambdabot: Maybe you meant: fact fact-cons fact-delete fact-set fact-snoc fact-update faq
[00:47] edwardk: :t contramap
[00:47] nushio3: @faq What is the answer for the life, universe, everything?
[00:47] lambdabot: The answer is: Yes! Haskell can do that.
[00:47] lambdabot: Not in scope: `contramap'
[00:47] edwardk: :t Data.Functor.Contravariant.contramap
[00:47] lambdabot: Data.Functor.Contravariant.Contravariant f => (a -> b) -> f b -> f a
[00:47] nushio3: @faq Can Haskell save the world?
[00:47] lambdabot: The answer is: Yes! Haskell can do that.
[00:48] arkeet: @faq can Haskell write my thesis?
[00:48] lambdabot: The answer is: Yes! Haskell can do that.
[00:48] arkeet: cool.
[00:48] carter: @faq will it do things
[00:48] lambdabot: The answer is: Yes! Haskell can do that.
[00:49] arkeet: I'd be interested in getting in on this edwardk action. I suppose you guys have already started.
[00:49] edwardk: There is a google hangout
[00:49] edwardk: I can see if I can invite you
[00:49] arkeet: ah, where?
[00:49] edwardk: what google account?
[00:49] arkeet: arkeet
[00:50] edwardk: iyang is currently going over profunctors and contravariant
[00:50] edwardk: er liyang
[00:50] arkeet: cool
[00:52] nushio3: Set up an Ustream
[00:52] nushio3: http://ustre.am/2BFY
[00:54] edwardk: Nice. I just tweeted it out.
[00:54] copumpkin: no sound?
[00:54] edwardk: there is sound in the hangout.
[00:55] nushio3: I see...
[00:55] copumpkin: oh the sound came on
[00:55] glguy: Can we participate in the hangout without participating?
[00:55] edwardk: I had sound
[00:55] copumpkin: going to sleep in a minute, no hangout for me :)
[00:55] glguy: so to speak
[00:55] nushio3: I'm glad to hear that! (sound is on on ustream)
[00:56] arkeet: uhh
[00:56] edwardk: I lost sound in there somehow
[00:56] nushio3: Okay!
[00:57] nushio3: So edward, you can't hear from hangout?
[00:57] nushio3: Then I'll see for that.
[00:57] arkeet: the sound was clearer on the hangout while it was working.
[00:57] edwardk: Yeah, sound just died. I think arkeet may have accidentally muted the main machine
[00:57] arkeet: oops
[00:57] edwardk: and it probably just needs someone to push a button on it to turn sound on
[00:58] nushio3: I can year you!
[00:58] copumpkin: I can hear on the ustream
[00:58] arkeet: I didn't know I could do that.
[00:58] glguy: I hear on ustream, at least
[00:58] arkeet: okay, let's not touch anything.
[00:58] nushio3: Thank you!
[00:58] glguy: Are the slides he's presenting from available online?
[00:58] nushio3: slides > https://www.fpcomplete.com/user/liyang/profunctors
[00:58] edwardk: Yeah
[00:59] copumpkin: 見える
[01:00] nushio3: よかった!
[01:04] nushio3: "dinatural transformation"
[01:04] arkeet: di = 2.
[01:05] arkeet: (bi is also 2.)
[01:05] nushio3: aha.
[01:05] nushio3: Carbon Monoxide, Carbon Dioxide ...
[01:05] edwardk: yeah. bimap was taken… by my other library. so dimap ;)
[01:05] cmccann: 二 is also 2!
[01:05] edwardk: Also Dan Piponi used 'dimap' at one point
[01:06] edwardk: so there was a precedent
[01:06] nushio3: 二関手
[01:06] copumpkin: dinap, when you take two naps, back to back
[01:06] cmccann: hm, "二map" is a valid identifier
[01:06] cmccann: in case you need another one
[01:06] arkeet: heh.
[01:07] fumieval: 双map
[01:07] arkeet: 弐map if you need more.
[01:08] nushio3: I'd like to propose haskell to recognize either カタカナ ひらがな as capital letters
[01:08] arkeet: haha
[01:08] nushio3: So that we can name types or modules in Japanese!
[01:08] cmccann: would be the former I assume
[01:08] cmccann: I've seen katakana distinguished in romanized form by ALLCAPS before
[01:08] edwardk: One good way to think about profunctors is to view them as something you can extend in either the input or output direction with a function, but which you can't necessarily compose.
[01:09] copumpkin: 聞こえない
[01:09] arkeet: ustream sound just died.
[01:09] arkeet: it's back.
[01:09] arkeet: 聞こえる
[01:10] nushio3: ustream is running on a Windows 8 Suface and he falls asleep every 5 minutes...
[01:10] arkeet: ah
[01:10] edwardk: Ah
[01:10] midfield (~user@70-36-139-218.dsl.dynamic.sonic.net) joined the channel.
[01:12] edwardk: I also have an old blog post on "Rotten Bananas" which talks about 'exponential functors' which are really just functors from the category of isomorphisms over Hask to Hask.
[01:12] edwardk: that is another way to do the Limits trick
[01:12] edwardk: http://comonad.com/reader/2008/rotten-bananas/
[01:13] edwardk: I don't think I packaged that class up, but there is an invariant functor package
[01:13] edwardk: http://hackage.haskell.org/package/invariant
[01:14] edwardk: :info Indexed
[01:14] edwardk: :t Indexed
[01:14] lambdabot: (i -> a -> b) -> Indexed i a b
[01:15] edwardk: :t \g h (Indexed f) -> Indexed (dimap g h . f)
[01:15] lambdabot: (a -> b1) -> (c -> b) -> Indexed i b1 c -> Indexed i a b
[01:17] nushio3: :t :h :a :n :k :y :o :u
[01:17] lambdabot: parse error on input `:'
[01:17] arkeet: 88888
[01:18] nushio3: The next will be the 5-minute japanese translation.
[01:18] nushio3: of Profunctor,
[01:21] copumpkin: nan desu ka? http://farm8.staticflickr.com/7056/6877360762_9863cf4684_b.jpg
[01:21] copumpkin: nan desu yo
[01:21] copumpkin: sorry guys
[01:22] copumpkin: I'll retire now
[01:22] edwardk: copumpkin: =)
[01:22] edwardk: g'night man =)
[01:22] nushio3: ナン・・・だと・・・
[01:22] arkeet: copumpkin: you are terrible. =)
[01:22] arkeet: almost shachaf tier.
[01:23] nushio3: Next comes lens
[01:23] edwardk: nushio3: it was a bad pun http://en.wikipedia.org/wiki/Naan
[01:23] nushio3: This is the main dish of today!
[01:24] nushio3: sorry for the pun...
[01:24] edwardk: =)
[01:25] nushio3: No screenshar for this, sorry. Hope Google Hangout works out.
[01:26] edwardk: I am having no problem viewing the slides actually
[01:26] edwardk: This is working way better than I anticipated
[01:26] nushio3: Great.
[01:26] nushio3: :info Lens
[01:27] edwardk: type Lens s t a b = forall f. Functor f => (a -> f b) -> s -> f t
[01:27] nushio3: edwardkbot!
[01:27] edwardk: =)
[01:27] edwardk: 3.9 is out now =)
[01:27] glguy: yay
[01:29] midfield (~user@70-36-139-218.dsl.dynamic.sonic.net) left IRC. (Ping timeout: 255 seconds)
[01:29] copumpkin: edwardk: you gonna support bitemporal data in analytics?
[01:29] edwardk: it has no real problem with k-temporal stuff even
[01:29] edwardk: the indexing is working out surprisingly well
[01:29] copumpkin: cool
[01:30] edwardk: > (1,2,3,(1,2,3,5)) &_4._2 .~ 999
[01:30] lambdabot: (1,2,3,(1,999,3,5))
[01:30] carter: whats k temporal?
[01:30] edwardk: just that i don't care how many dimensions you have in particular about time
[01:31] edwardk: usually you have something like a time series database that can have one time dimension
[01:31] carter: ok
[01:31] carter: oh
[01:31] carter: yeah
[01:31] carter: thats lame
[01:31] carter: what would be a natural 2 dims of time thing?
[01:31] edwardk: some data sources start needing time 'point in time data' which gives you 2 dimensions of time.
[01:31] copumpkin: store what you thought the 1-dimensional time data was at time X
[01:31] copumpkin: across time
[01:31] copumpkin: k+1-temporal is storing what you thought k was over time
[01:31] carter: oh, so CDFs ish
[01:32] carter: i'm too tired to fully undestand
[01:32] carter: but got it
[01:32] copumpkin: well, that's one use of it anyway
[01:32] carter: night all
[01:32] copumpkin: ciao
[01:32] carter (~textual@cpe-66-108-200-5.nyc.res.rr.com) left IRC. (Quit: Textual IRC Client: http://www.textualapp.com/)
[01:33] yasushi (~user@EM1-112-118-137.pool.e-mobile.ne.jp) joined the channel.
[01:34] nushio3: I leaned that top-level $() is no more needed for template haskell
[01:34] edwardk: yep. they did away with it around 7.4 i think
[01:36] khibino (~hibi@124x39x126x66.ap124.ftth.ucom.ne.jp) joined the channel.
[01:36] yasushi (~user@EM1-112-118-137.pool.e-mobile.ne.jp) left IRC. (Client Quit)
[01:39] nushio3: (over _1) (show) (1,2)
[01:39] arkeet: > (over _1) (show) (1,2)
[01:39] lambdabot: ("1",2)
[01:40] edwardk: > over _1 show (1,2)
[01:40] lambdabot: ("1",2)
[01:42] edwardk: This is 'its_out_of_tune' ?
[01:43] tomberek (78583167@gateway/web/freenode/ip.120.88.49.103) joined the channel.
[01:43] edwardk: He's doing a great job getting through a lot of material
[01:43] arkeet: ustream went quiet again.
[01:43] ikeg (~ikeg@64.119.30.125.dy.iij4u.or.jp) joined the channel.
[01:43] edwardk: afk for just a minute
[01:44] nushio3: Yes! the name of the presenter is its_out_of_tune
[01:44] arkeet: ok, it's back.
[01:44] nushio3: okay!
[01:44] nushio3: Tell us whenever the ustream is aslep
[01:45] ikeg: now the talk for lens is end, and the speaker asks questions.
[01:47] arkeet: nushio3: ustream died again.
[01:47] arkeet: or not.
[01:48] djahandarie (darius@unaffiliated/djahandarie) joined the channel.
[01:48] ikeg: she dozed off.
[01:48] nushio3: is she awake now?
[01:49] edwardk: Actions are mostly interesting because they can be mixed with pure getters and folds
[01:49] ikeg: nushio3: it seems ok.
[01:49] edwardk: > (("Foo","Bar"),"Buz")^!_1.act (const Nothing)._2
[01:49] lambdabot: Ambiguous type variables `b0', `a0' in the constraint:
[01:49] lambdabot: (Control.Lens.Tup...
[01:49] edwardk: :t (("Foo","Bar"),"Buz")^!_1.act (const Nothing)._2
[01:49] lambdabot: Field2 a1 a1 a b => Maybe a
[01:50] edwardk: :t (("Foo","Bar"),"Buz")^!_1.act (const Nothing)
[01:50] lambdabot: Maybe b
[01:50] edwardk: > (("Foo","Bar"),"Buz")^!_1.act (const Nothing)
[01:50] lambdabot: Nothing
[01:50] arkeet changed the topic to http://ustre.am/2BFY edwardk library workshop stream (Japanese) | lens 3.9 released | cabal install lens | unsafeCoerces: 124 | doctests: 563 | operators: 121 | modules: 79 | NYC Talk: http://youtu.be/cefnmjtAolY?hd=1 | http://comonad.com/haskell/Lenses-Folds-and-Traversals-NYC.pdf | http://lens.github.com/ | ಠ_ರೃ first-class data access | http://felixge.de/2013/03/11/the-pull-requ
[01:50] arkeet: uh oh, end of the topic got eaten.
[01:50] edwardk: I can fix it later
[01:51] ikeg: the speaker "its_out_of_tune" concludes the talk, and further reading
[01:51] copumpkin: the topic just got ate
[01:51] copumpkin: damn irc, you scary
[01:52] nushio3: Question: is there any access overhead for lens? performance?
[01:52] edwardk: Great talk
[01:52] ikeg: the last slide shows "lens is docile"
[01:52] edwardk: nushio3: there used to be. now we're pretty competitive with hand written code, and in fact in some cases faster than what you can write with the base library
[01:53] nushio3: Why is that?!
[01:53] nushio3: Maybe some fusion going on?
[01:53] arkeet: magic of unsafeCoerce?
[01:53] edwardk: Back when I gave the NYC Haskell talk, we were about 10x slower than bytestring for some stuff, now we have hand tuned bytestring traversals that give us a hierarchical walk of the bytes
[01:53] edwardk: We also use about 100+ unsafeCoerces to avoid accumulating eta-expansion wrappers
[01:53] edwardk: which is basically an optimization that is unique to us
[01:53] djahandarie: Wow.
[01:54] nushio3: unsafeCoerces: 124
[01:54] nushio3: I see!
[01:54] arkeet: ustream went quiet again.
[01:54] edwardk: Yeah I'm not very proud of some of those, but they do avoid the fact that Identity . f is not as efficient as 'f'
[01:55] djahandarie: edwardk, I assume that means you put in the unsafeCoerce version for ala that you were trying to make me put in newtype? :P
[01:55] edwardk: this is why profunctors has a Data.Profunctor.Unsafe module that exports (#.) and (.#) for composing with a newtype
[01:55] edwardk: djahandarie: worse
[01:55] maoe (~Adium@124x39x126x66.ap124.ftth.ucom.ne.jp) joined the channel.
[01:55] arkeet: fumieval is talking about free monads next?
[01:55] nushio3: next comes free by @fumieval
[01:55] edwardk: actually we never expose an unsafeCoerce to a user
[01:56] edwardk: at least without them explicitly importing an UNSAFE module.
[01:57] arkeet: lazy K :)
[01:57] ikeg: the next talk is about "free"
[01:58] ikeg: free 3.4.1
[01:58] fumieval_ (~fumieval@124x39x126x66.ap124.ftth.ucom.ne.jp) joined the channel.
[01:58] edwardk: @tell twanvl your free applicative just came up in the slides
[01:58] lambdabot: Consider it noted.
[01:59] fumieval (~fumieval@124x39x126x66.ap124.ftth.ucom.ne.jp) left IRC. (Ping timeout: 260 seconds)
[01:59] djahandarie: Does free have the Codensity version of Free monads too?
[02:00] edwardk: it just has a church-encoded one that i showed was smaller
[02:00] edwardk: Codensity in kan-extensions uses 'free' to provide the MonadFree instance and improve though.
[02:00] edwardk: so you can import that if you want the other.
[02:00] glguy (~textual@unaffiliated/glguy) left IRC. (Quit: Computer has gone to sleep.)
[02:03] ikeg: the speaker introduces his work, which is called "freegame"
[02:03] nushio3: http://hackage.haskell.org/package/free-game
[02:04] ikeg: DEMO: the lambda icon follows the cursor.
[02:04] ikeg: few lines
[02:05] edwardk: Now I just need to get him to switch to my 'linear' library ;)
[02:06] ikeg: NEXT DEMO: Monaris
[02:06] ikeg: like the tetris
[02:06] edwardk: Nice demo
[02:06] ikeg: only 290 lines
[02:06] djahandarie: fumieval needs to practice his tetris skills though
[02:07] edwardk: =)
[02:07] arkeet: https://github.com/fumieval/Monaris
[02:07] edwardk: I'm definitely feeling the need to relearn Japanese. I can make out about one word in 10
[02:08] nushio3: 10% is already great...
[02:08] nushio3: ぺろぺろ
[02:11] nushio3: multiple lens = telescope
[02:11] nushio3: now I understand the pun
[02:11] edwardk: Back in 1994-1996 I used to run an online anime import business named otakuland.com as an homage to Otaku no Video. Started it by talking to a guy I met on an anime channel on EFnet. He drop-shipped to my customers and I set up a website with forums, etc. I'd call him and we'd work out orders in my bad Japanese and his bad English. Sadly I haven't had any use for it other than watching anime/reading manga ever since, so its
[02:11] edwardk: pretty much wasted away.
[02:13] edwardk: nushio3: sadly there is also a notion of a 'telescope' that arises in dependent types which is completely unrelated to the pun i used in cofree.
[02:13] ikeg: the speaker has a question. (I'm try to be translated it to english. help me)
[02:13] arkeet: ustream went quiet again.
[02:13] edwardk: I'm happy answer as soon as someone can translate =)
[02:13] ikeg: question is for freemonad ... and ustream stops
[02:13] ikeg: agh
[02:14] djahandarie: 傘がきた
[02:15] ikeg: sorry that i missed the speaker's question
[02:15] weie_ (~eie@softbank221078042071.bbtec.net) joined the channel.
[02:15] edwardk: No problem. If someone can translate it later, or if he can just pop on IRC after (since he seems to be logged in) I'll answer then.
[02:16] jfischoff (~jfischoff@66-140-190-154.lightspeed.sntcca.sbcglobal.net) left IRC. (Quit: jfischoff)
[02:17] ikeg: then the speaker asks questions
[02:17] ikeg: nushio3: ustream is recorded?
[02:18] nushio3: Q: performance? A: Church encoded one is faster
[02:18] nushio3: Yes, ustream is recorded.
[02:18] ikeg: great
[02:18] djahandarie: It's kind of interesting that free monads are often what you want when you have something that's a subset of IO, or acts like IO in some way.
[02:18] edwardk: The church monad is faster so long as you only inspect the constructed result once.
[02:18] nushio3: A: tl:dr; use the Church version
[02:18] ikeg: Q: memory leaks?
[02:18] edwardk: If you inspect the result multiple times or with multiple interpreters you want to use the free monad version
[02:19] djahandarie: Though I guess this might because IO itself is a free monad.
[02:19] edwardk: or just use the 'improve' combinator to convert
[02:19] ikeg: Comment: Yoneda's CPS translator.
[02:20] nushio3: Q: what if free-game was not written in free-monad?
[02:20] nushio3: A: not much change in length of the code, but much worse maintainability.
[02:20] edwardk: Codensity is a real CPS translator. Yoneda is kind of a bad cps-translation, but here it just happens to be just enough.
[02:21] nushio3: A: because making and maintaining ADT is much easier than maintaining a Monad
[02:21] edwardk: Technically the operational monad transformer might be a better fit for the game machinery. I should add a more 'operational' transformer to the 'free' package too. That way you don't have to be able to implement 'Functor' for your Functor, because we'll apply the yoneda lemma to it first.
[02:22] nushio3: What do you mean by 'operational' transformers?
[02:22] ikeg: is the log of IRC chat here logged?
[02:23] tomberek: nushio3: http://hackage.haskell.org/package/operational
[02:23] edwardk: Heinrich Apfelmus wrote a package called 'operational' which is technically the free monad of "Coyoneda" of an arbitrary GADT
[02:23] arkeet: ikeg: I'm logging it, at least.
[02:23] djahandarie: peroperomorphismはあるのかな
[02:23] edwardk: that is a little bit more flexible than free.
[02:24] edwardk: Notification under freenode guidelines, I'm considering the channel logged until the end of the presentations. Don't say anything you don't want to make public. ;)
[02:24] edwardk: Thanks for the presentation. I'll need to check out free-game.
[02:24] arkeet: ustream went quiet again.
[02:25] ikeg: arkeet: thanks. i am eager to see the log of chat.
[02:25] arkeet: oh, it's not just the sound.
[02:26] ikeg: seems off air
[02:26] ikeg: maybe tea break?
[02:26] edwardk: switched speakers
[02:26] edwardk: the presentation is proceeding in google hangout
[02:26] edwardk: if you have a google user name i can invite you
[02:27] nushio3: From U.C. Berkley.
[02:27] fumieval (~fumieval@124x39x126x66.ap124.ftth.ucom.ne.jp) joined the channel.
[02:27] ikeg: next talk from U.S. begins
[02:27] nushio3: AD by @nebutalab
[02:28] nushio3: Do you hear the voice?
[02:28] edwardk: Yep
[02:28] nushio3: Great.
[02:28] ikeg: edwardk: could you check the number of members at google hangout?
[02:28] edwardk: We have 5 in there now
[02:28] edwardk: Not sure how many we can have by default
[02:28] nushio3: I see four of them
[02:28] ikeg: just 10.
[02:29] fumieval_ (~fumieval@124x39x126x66.ap124.ftth.ucom.ne.jp) left IRC. (Ping timeout: 252 seconds)
[02:29] nushio3: ikeg: Thanks!
[02:29] ikeg: therefore 5 seats are free at google hangout
[02:29] thoughtpolice: oh look, it'd edwardk on video inside a video
[02:29] arkeet: slides available here http://www.slideshare.net/nebuta/haskell-ad34
[02:30] edwardk: Myself, Darius Jahandarie, Hideyuki Tanaka, Hiroyuki Tai, and Tom Bereknyei
[02:31] edwardk: > diff cos x
[02:31] lambdabot: Ambiguous occurrence `x'
[02:31] lambdabot: It could refer to either `L.x', defined at <local...
[02:31] edwardk: > diff cos y
[02:31] lambdabot: negate (sin y) * 1
[02:31] edwardk: > diff sin a
[02:31] lambdabot: cos a * 1
[02:31] arkeet: ustream went quiet again.
[02:31] ikeg: ustream is stopped, and i decide to join Google hangouts.
[02:32] ikeg: edwardk: please invite me: ikegami.da
[02:32] edwardk: Symbolic differentiation builds up a big syntax tree and then defines the translation. Automatic differentiation on the other hand composes jacobians
[02:33] otters: :i diff
[02:33] otters: :t diff
[02:33] lambdabot: Num a => (forall (s :: * -> *). Numeric.AD.Types.Mode s => AD s a -> AD s a) -> a -> a
[02:34] edwardk: @hackage ad
[02:34] lambdabot: http://hackage.haskell.org/package/ad
[02:34] edwardk: its from there
[02:34] edwardk: The reason for the annoying rank-2 type with the explicit forall in there is technical.
[02:34] edwardk: It arises because we want to avoid a condition called perturbation confusion (or sensitivity confusion) depending on if we're in forward or reverse mode.
[02:35] edwardk: They arise in practice when you take the automatic derivative of a function that takes derivatives
[02:35] arkeet: ustream died again
[02:35] arkeet: :p
[02:36] edwardk: We're currently cleaning it up to make it so the type signatures for AD are somewhat less terrifying in 4.0
[02:37] otters: a likely story
[02:37] edwardk: otters: =) i did hedge with 'somewhat' =)
[02:37] arkeet: nushio3: did something happen?
[02:38] arkeet: I'll be back in a bit.
[02:38] edwardk: ikeg: did my invite go through?
[02:38] edwardk: arkeet: i can reinvite you if need be
[02:38] ikeg: edwardk: yes, thanks. now i need to install the plug-in and restarts...
[02:39] djahandarie: 面白い写真ですね
[02:40] edwardk: it is
[02:40] edwardk: Lifted is going away in 4.0, we'll either be able to use Num directly or it'll be very very different
[02:40] edwardk: lift1, etc. will still work like that though
[02:40] nushio3: glad to hear that it'll be simpler in 4.0
[02:40] nushio3: Great!!
[02:41] nushio3: I was always sad that
[02:41] fumieval: Is church-encoded free monad really church-encoded? I'm confusing with Boehm-Berarducci encoding
[02:41] nushio3: the type is (AD s a -> AD s a) -> (a -> a)
[02:41] nushio3: so it was very hard to diff things twice
[02:41] edwardk: alang has been spending a lot of time churning on cleaning up the implementation, doing a lot of stuff that i'd just been too busy to get back around to
[02:41] edwardk: We're already about 30-40% faster.
[02:42] edwardk: you can diff twice, use auto to lift. you need to put the auto's in the right place
[02:42] edwardk: if you don't, the type checker is telling you you aren't writing the function you think you are
[02:42] edwardk: also there is an internal ComposeMode mode that is used when i do hessians, etc. that gives you a single ad 'mode' that is the composition of two modes.
[02:43] edwardk: the higher order taylor expansion is actually already optimized by all the symmetries
[02:43] edwardk: re the summary slide that is up there
[02:43] nushio3: http://hackage.haskell.org/packages/archive/ad/3.4/doc/html/Numeric-AD-Types.html#v:auto
[02:43] nushio3: aha there it is
[02:46] arkeet: I'm back.
[02:46] djahandarie: The package is "traced"
[02:47] djahandarie: http://hackage.haskell.org/package/traced-2009.7.20
[02:48] ikeg: @hackage traced
[02:48] lambdabot: http://hackage.haskell.org/package/traced
[02:50] arkeet: ustream died again
[02:51] Apocalisp (~textual@c-174-62-237-65.hsd1.ma.comcast.net) left IRC. (Quit: Computer has gone to sleep.)
[02:52] ikeg: the talk goes to the end
[02:52] djahandarie: 88888
[02:53] ikeg: nushio3: how are many talks left?
[02:53] arkeet: machines next.
[02:53] arkeet: and that's halfway.
[02:53] nushio3: next machine, then cofee break.
[02:53] nushio3: now coffe break!
[02:53] fumieval: cofree break
[02:53] edwardk: If you guys have some time left at the end I could do a short talk on my lca library.
[02:53] arkeet: question break!
[02:54] ikeg: how long?
[02:54] edwardk: I could fit it in 20-25 minutes
[02:54] nushio3: profunctor > lens > free > ad > (here) > machines > trifecta > tables > speculation > reflection > bounded
[02:54] arkeet: @localtime edwardk
[02:54] -CTCP- TIME from lambdabot
[02:54] edwardk: Really its a short trick for improving the known asymptotics of online lowest common ancestor search
[02:54] lambdabot: Local time for edwardk is Sunday, March 31, 2013 2:54:35 AM Eastern Daylight Time
[02:54] nushio3: we may skip the latter one or two.
[02:54] djahandarie: arkeet, don't worry, edwardk will be up all night
[02:55] nushio3: 10 minutes of cofeebreak or so.
[02:55] djahandarie knows
[02:55] edwardk: I'm not worried about when I get to sleep ;)
[02:55] nushio3: Yep!
[02:55] nushio3: And let me just make sure we don't constrain anyone
[02:55] edwardk: Sure
[02:55] nushio3: ed, and anyone , please go asleep anytime
[02:55] nushio3: I'll go W.C. too
[02:56] edwardk: I feel like a head in a box, being carried around
[02:56] djahandarie: ikeg, by the way, did you used to tweet under the handle @ikegami__ ?
[02:57] ikeg: djahandarie: definitely
[02:57] edwardk: brb
[02:57] edwardk: getting caffeine of my own ;)
[02:58] djahandarie: ikeg, ahh, then 久しぶりですね…
[02:59] djahandarie: I was wondering what happened when you suddenly disappeared
[02:59] ikeg: because i'm sick
[02:59] djahandarie: Ah, that's unfortunate to hear. :(
[03:00] nushio3: You're back!
[03:01] ikeg: nushio3: it is better that you will look up the word トイレ in English later
[03:01] arkeet: I'm interested to hear about machines.
[03:02] djahandarie: "WC" is still pretty common in Britain
[03:03] arkeet: you won't hear it in north america though.
[03:04] ikeg: i guess WC means West Central at UK
[03:04] edwardk: figured water closet
[03:05] edwardk: i wonder if someone could slide the computer back a little
[03:05] edwardk: i can't quite see the slides
[03:05] nushio3: Actually that's why battle tank is called tank in British.
[03:05] edwardk: nushio3: hah
[03:06] nushio3: The camera is under setup, please wait.
[03:06] edwardk: no problem
[03:06] nushio3: The "Tank" was first codenamed "Water Carrier," but then the project would have been "Project W.C."
[03:07] nushio3: which was not good in British.
[03:07] djahandarie: Ah well, it's getting late for me... time to sleep. 私はこれで失礼します。東京のみんなさん、面白いプレゼンをありがとうございますm(._.)m
[03:07] nushio3: Therefore the new codename "tank."
[03:07] ikeg: djahandarie: see you soon
[03:07] arkeet: djahandarie: bye
[03:07] edwardk: I had a toy library for stream processing a couple of years ago that I never released. I showed it to runar. He and pchiusano went off and lobotomized it in many ways, but the result was way more usable than mine.
[03:07] arkeet: I hear something on ustream.
[03:08] arkeet: but I can't see anything.
[03:08] edwardk: Like with 'ad', machines is currently also being massively simplified.
[03:09] edwardk: 0.3 takes Machine down to 2 arguments, an 'input language' and an output, and thats it.
[03:10] edwardk: so the m and k parameters become one parameter
[03:11] nushio3: Is google hangout working well?
[03:11] ikeg: nushio3: no problem.
[03:11] edwardk: So far. For this talk we're having some framing problems with the screen otherwise its worked great.
[03:11] nushio3: Thank you!
[03:11] edwardk: Can't see the left side or top of the slides
[03:12] edwardk: Beautiful
[03:12] edwardk: In 3, we replace Is with just using (->) again
[03:12] edwardk: er in 0.3
[03:15] edwardk: arkeet: gave up on the stream?
[03:15] arkeet: it's down, yeah
[03:15] arkeet: oh wait.
[03:15] arkeet: oh, now it's back.
[03:15] nushio3: Sorry for the inconvenience.
[03:16] nushio3: We've been trying to merge the Ustream machine to GoogleHangout machine,
[03:16] edwardk: As an aside to tie this back to the earlier talks. The Mealy and Moore machines that are provided by 'machines' are profunctors. =)
[03:16] nushio3: but they won't share the Video drivers.
[03:16] arkeet: the hangout shows more of the frame, but ustream has better sound, so I'll just use both :p
[03:16] nushio3: So Ustream is back to the sleepy surface.
[03:17] edwardk: 0.3 was also able to simplify Tee and Wye
[03:17] arkeet: the surface can't be forced to stay on?
[03:18] nushio3: unfortunately no..
[03:18] arkeet: oh well.
[03:18] nushio3: We forgot the power cable...
[03:19] nushio3: ...the cameraman sais.
[03:19] edwardk: woops
[03:21] ikeg: the talk is end and now he asks questions
[03:22] ikeg: Q why does Machine forms a monad?
[03:22] edwardk: In 0.2 Machine only forms an Applicative. Plan forms a Monad.
[03:22] ikeg: oh does not
[03:22] edwardk: in 0.3 Machine forms a Monad.
[03:22] edwardk: In 0.2 it forms a ZipList-like Applicative
[03:22] edwardk: in 0.3 it forms a list like Monad
[03:22] nushio3: why do you need both Machines and Plans?
[03:23] edwardk: A Plan provides one form of composition, where you can sequence instructions to execute, and can emit results kind of as a side-effect
[03:23] edwardk: Machines provide you a more 'categorical' composition, where you can connect the output of one machine to the input of another.
[03:24] edwardk: the pipes library unifies these, but to do so Tekmo has to pay a price. he uses the free package to provide all of his interpretation, but 'free' can be very expensive if you build up a big structure in a left-associated (>>=) and then right associate it
[03:25] edwardk: This is the issue he tried to address in the latest release of pipes by adding a Codensity pipes transformer.
[03:25] ikeg: the current slide seems a code in Scala
[03:26] edwardk: But with machines what I do is I provide you with a Plan that is CPS transformed, which gets compiled into a non-CPS'd machine. giving me ease and speed of interpretation (in Machine) and speed of binding (in Plan) both
[03:26] nushio3: Ah, I see. I was also wanting to know the difference between Pipes and Machines, now I know some.
[03:26] edwardk: ikeg: we first wrote machines in scala, then i translated it to haskell
[03:26] edwardk: and then we ported the improvements back
[03:26] edwardk: basically if you use the monad in plan, you're able to hold onto any sort of intermediate state you want and decide what to do next.
[03:27] edwardk: in a machine on the other hand, the parameter is the output type of the machine, not your intermediate state
[03:27] edwardk: these are two forms of composition
[03:27] edwardk: pipes offers both, but it makes one ridiculously expensive
[03:27] edwardk: machines offers both, but stratified in such a way that you can't do the super-expensive thing
[03:28] edwardk: machines in scala has more in common with the pipes approach
[03:28] fumieval (~fumieval@124x39x126x66.ap124.ftth.ucom.ne.jp) left IRC. (Quit: Leaving...)
[03:28] edwardk: Can someone send me a link to the website he is showing?
[03:29] ikeg: he shows a gentle introduction blog to Machine and Pipes
[03:29] ikeg: in Japanese
[03:29] ikeg: i missed the author of the blog
[03:30] ikeg: http://krdlab.hatenablog.com/entry/2013/03/16/204039
[03:30] ikeg: here
[03:30] edwardk: Thanks
[03:30] nushio3: http://krdlab.hatenablog.com/entry/2013/03/16/204039
[03:30] edwardk: I'll pass it along to paul at the office.
[03:30] nushio3: oh kekkon--
[03:31] edwardk: For what its worth Paul Chiusano gave a nice talk at NEScala on the same library that should be recorded and available online.
[03:31] nushio3: Next Trifecta by @tanakh
[03:31] edwardk: His was on improvements to the scala side that are currently going into the haskell version in 0.3
[03:32] nushio3: (the other slides was runarorama's machines)
[03:32] edwardk: Its all the same machines. Runar used to work with me
[03:34] ikeg: edwardk: if you need translated resources in English from Japanese, please do not hesitate to ask us
[03:34] ikeg: though it takes a bit
[03:34] edwardk: I'm mostly following the gist.
[03:34] edwardk: Fortunately, I'm very familiar with the source material ;)
[03:35] edwardk: I need to go back and spend more time integrating the original 'trifecta' machinery into trifecta.
[03:36] edwardk: Haven't been able to keep up with the humor though.
[03:37] edwardk: That signature is less terrifying if you break it apart and pretend it isn't CPSd
[03:37] nushio3: "as is usual with the ekmett product, the Type signatures are pretty."
[03:37] ikeg: it is not easy to tell you why audiences lough
[03:37] edwardk: sure
[03:38] nushio3: "as is usual with the ekmett product, there's all instances needed"
[03:38] dibblego (~nobody@220-245-107-64.static.tpgi.com.au) joined the channel.
[03:40] edwardk: Technically 'It' isn't quite an iteratee, it doesn't contain the machinery to use up part of its input. Hence the abbreviated name =)
[03:41] edwardk: its very iteratee-like though
[03:41] nebuta (~nebuta@dhcp-128-32-125-51.LIPS.Berkeley.EDU) joined the channel.
[03:41] ikeg: Tanaka-san, please talk more clearly
[03:42] arkeet: ustream died again
[03:42] nushio3: woke up
[03:43] nushio3: Demo: trifecta is more nicely colored than parsec
[03:43] edwardk: =)
[03:43] ikeg: the speaker shows the difference between trifecta and parsec
[03:45] fumieval (~fumieval@124x39x126x66.ap124.ftth.ucom.ne.jp) joined the channel.
[03:45] nushio3: and `paresers` supports the both!
[03:45] nushio3: now livecoding starts
[03:46] nushio3: "I will write JSON parser in 2 minutes"
[03:46] edwardk: ambitious =)
[03:46] shachaf: Y'all talked a lot while I was gone.
[03:46] edwardk: nice
[03:46] shachaf: What is this?!
[03:46] ikeg: now he checks the official page JSON
[03:46] edwardk: shachaf: sent you an invite into the google hangout
[03:46] ikeg: and then translated the specification to Haskell
[03:46] edwardk: You can practice your japanese
[03:48] shachaf: What's going on there?
[03:48] edwardk: he's writing a json parser using trifecta
[03:49] edwardk: earlier speakers went through profunctors, lenses, ad, machines, etc.
[03:50] edwardk: Can someone press the unmute button on the google hangout?
[03:50] ikeg: the speaker emphasizes useful utilities in trifecta
[03:50] edwardk: Perfect
[03:50] edwardk: thanks
[03:51] nushio3: Okay
[03:51] shachaf: Is the screen supposed to be completely blurry or is that just my bad connection?
[03:51] nushio3: naturalOrDouble ...
[03:51] ikeg: dows he forget '>' after '... True <$ !!!!!! symbol .... ?
[03:51] edwardk: bad connection. i can read all the code he's writing. the dark purple identifiers are a bit hard to read, but thats it
[03:52] ikeg: anyway ghc may give an error
[03:52] edwardk: True <$ symbol "true" is correct
[03:52] edwardk: he's parsing symbol "true" and then discarding the result, replacing it with True
[03:52] ikeg: i see
[03:52] edwardk: :t (<$)
[03:52] lambdabot: Functor f => a -> f b -> f a
[03:52] edwardk: technically it shouldn't be symbol, and should use 'string' or a token parser but i'm being pedantic ;)
[03:53] edwardk: and it only affects him if you try to parse an identifier like "falselike" where "false" is a prefix.
[03:53] ikeg: it seems to work correct
[03:53] arkeet: ustream went out again
[03:54] nushio3: woke up
[03:54] nushio3: Q: performance? A: 1/10 of atttoparsec
[03:54] nushio3: (as @tanakh tried)
[03:54] edwardk: We're working on performance. It'll be up to 1/8th of attoparsec soon! =)
[03:55] nushio3: @tanakh: I'm glad, but faster please.
[03:55] lambdabot: Unknown command, try @list
[03:55] edwardk: We're also adding another paring mode, which should be comparatively quite fast but without all the features. more like an attoparsec-lite
[03:55] EvilMachine (~evi1m4chi@dslb-188-100-234-173.pools.arcor-ip.net) joined the channel.
[03:55] edwardk: tanakh: Great talk =)
[03:56] EvilMachine (~evi1m4chi@dslb-188-100-234-173.pools.arcor-ip.net) left IRC. (Remote host closed the connection)
[03:56] ikeg: next talk: tables
[03:57] shachaf: So a bunch of people are talking about all of edwardk's packages in Japanese?
[03:57] shachaf: sounds good to me
[03:57] edwardk: shachaf: yep
[03:57] edwardk: shachaf: looks like a 5 hour marathon ;)
[03:58] edwardk: liyang's talk was in english with a quick japanese summary at the end
[03:58] nushio3: the silde: https://gist.github.com/yuga/5279313
[03:58] edwardk: That helps a lot. Thanks!
[04:00] edwardk: you can fuse some of the examples together: test1 ^. with PDbmSignal (>=) (-90) ^@.. group PMacAddr can become test1 ^@.. with PDbmSignal (>=) (-90) . group PMacAddr
[04:01] edwardk: Similarly: Data.Foldable.foldl' cnt 0 $ pt ^. with PDbmSignal (>=) (-90) ^. with PSource (==) "tp" ^@.. group PMacAddr can become Data.Foldable.foldl' cnt 0 $ pt ^@.. with PDbmSignal (>=) (-90) . with PSource (==) "tp" . group PMacAddr
[04:01] ikeg: the speaker afraids that a memory leak when using many indexes (i miss what he said
[04:01] shachaf: nebuta: By the way if you're in Berkeley and you don't know about bahaskell, you should know about it.
[04:01] nushio3: do you see the prompts?
[04:01] edwardk: which can go further and become pt ^@.. with PDbmSignal (>=) (-90) . with PSource (==) "tp" . group PMacAddr . to count
[04:02] arkeet: it's hard to read.
[04:02] edwardk: nushio3: this screen is basically illegible
[04:02] nushio3: zooming
[04:02] arkeet: the lighting makes it difficult.
[04:02] edwardk: much better
[04:02] arkeet: :)
[04:02] nushio3: have adjusted the lighting.
[04:03] edwardk: Thanks. That helps quite a bit too
[04:03] edwardk: In general you should only wind up needing to use one operator with ^ in it in a sequence
[04:04] nebuta: shachaf: Thanks, I'll check it out. This semester I tried to take some functional programming course in campus, but there was only Scheme course, and I was the only student.
[04:04] shachaf: I,I (^~)
[04:04] edwardk: shachaf: =P
[04:04] arkeet: (^~^)
[04:05] shachaf: I don't think I'm in a state to follow this.
[04:06] shachaf: Perhaps next time.
[04:06] ikeg: hmm
[04:06] arkeet: shachaf: perhaps I shouldn't move to california, then.
[04:06] shachaf: arkeet: See? You don't even need me anymore!
[04:06] edwardk: test1^@..with PDbmSignal (>=) (-90).group PMacAddr
[04:07] ikeg: edwardk: your comment is accepted. please wait
[04:07] arkeet: and there are the various xxxOf forms :p
[04:07] nebuta: I also heard MIT stopped using SICP.
[04:08] nebuta: But it's not about Haskell, just Scheme ...
[04:08] ikeg: i guess that the speaker seems to show us an example, which prints the network TCP packets with tables
[04:08] arkeet: I think they switched to Python for intro CS, yeah.
[04:08] edwardk: You can do the rest of that without stepping outside lens as well
[04:09] edwardk: map fst $ filter ((2 <=) . (count.snd)) $ pt ^. with PDbmSignal (>=) (-70) ^@.. group PMacAddr
[04:10] edwardk: pt^@..with PDbmSignal (>=) (-70).group PMacAddr.to count.filtered (2 <=).asIndex
[04:10] nushio3: Q: how to perform "projection" or "join" as in RDB?
[04:10] edwardk: projections are easy, joins are why i started github.com/analytics ;)
[04:10] nushio3: Ed, do you want the speaker to try those queries?
[04:10] nushio3: Then I'll thell the speaker to do so
[04:10] edwardk: i mostly just figured i'd mention them here
[04:11] ikeg: admirable
[04:11] edwardk: i've been trying to keep up a running commentary of where folks might find extra material
[04:12] ikeg: could you change the size of characters?
[04:12] ikeg: learger, please
[04:12] edwardk: 'tables' could definitely use some support for explicit inner/outer joins, etc.
[04:12] nushio3: We're wondering how the data is stored.
[04:12] nushio3: In which data structure, exactly.
[04:12] edwardk: Basically you give me the data structure I store it in.
[04:12] arkeet: ustream died.
[04:13] edwardk: That is what the Tabular instance is for.
[04:13] edwardk: You tell me what you want indexed, and I use your data type to store it
[04:13] edwardk: So for the Primary index it winds up in a Map, but candidate, supplemental and inverted indices are in their own maps.
[04:13] edwardk: and they can be intmaps or hashmaps as well (the primary currently has to be a normal Map, but that is just because i was lazy)
[04:14] ikeg: bigger, one more please
[04:14] nushio3: Thank you, ed!
[04:15] edwardk: the only tricky one are the inverted indices where you can store things like keywords for posts, etc. and have multiple entries for each row.
[04:15] edwardk: they let you use withAny and withAll for searching by keywords/tags
[04:16] arkeet: Q: when to use tables vs a database?
[04:16] edwardk: tables is a small in memory store. You can back it with acid-state but its not intrinsically a database
[04:16] edwardk: github.com/analytics will be a real database
[04:16] edwardk: that just happens to be accessible from haskell
[04:17] nushio3: Lots of people here are interested in analytics
[04:17] edwardk: I started tables because it was 4 am and I was bored with the project I was supposed to be working on =)
[04:17] arkeet: haha
[04:18] nushio3: Maybe you can be the 11th speaker :)
[04:18] edwardk: I need to get some slides put together for talking about analytics, once I know what it wants to be when it grows up =)
[04:18] ikeg: next slides: https://t.co/htRYJ29RfN
[04:18] nushio3: definetely we'd like to hold the 2nd ekmett meetup.
[04:19] edwardk: I'd be happy to attend
[04:19] nushio3: Thanks!!
[04:19] nushio3: https://gist.github.com/pasberth/5279960 trifecta user^+1
[04:19] shachaf: I should hope so. It would be off-topic for anybody else to be there.
[04:20] edwardk: nushio3: =)
[04:20] edwardk: shachaf: =P
[04:20] shachaf ought to figure out trifecta one of these days.
[04:20] edwardk: So should I
[04:23] nebuta (~nebuta@dhcp-128-32-125-51.LIPS.Berkeley.EDU) left IRC. (Remote host closed the connection)
[04:29] edwardk: The reason the STM version is more complicated is I can't move the STM calculation off to another thread, so I have to count sparks and either run it or not, but it has to be run in the foreground thread.
[04:30] nushio3: https://gist.github.com/tanakh/d7a089341a011118a1cd trifecta slide :)
[04:31] ikeg: it's previous slides.
[04:31] edwardk: MonadSpec is useful for any Cont-like monad.
[04:31] arkeet: I'm kind of scared to load that and type :t json
[04:33] ikeg: exciting idea!
[04:34] edwardk: ikeg: this is exactly the class of parser this was written for =)
[04:34] edwardk: i'd be somewhat worried the parser is simple enough that you may have a hard time getting good parallelism out of it
[04:35] nushio3: Live Coding 2
[04:35] nushio3: no, just a demo
[04:35] ikeg: then he is going to show the implementation
[04:36] nushio3: fontsize ok?
[04:36] arkeet: yes
[04:36] edwardk: Yeah this is great =)
[04:38] edwardk: nushio3: for what its worth reflection and bound are probably more valuable than my little piece on lca
[04:38] edwardk: Not my best performance result ;)
[04:39] arkeet: hehe
[04:39] maoe: https://gist.github.com/maoe/5279239
[04:39] maoe: how can I get better paformance with the above gist?
[04:39] edwardk: Good question.
[04:40] edwardk: I'd be somewhat worried the parallel tasks you are asking it to perform are too small
[04:40] maoe: I coudn't investigate eventlog because threadscope doesn't fit my laptop.
[04:40] edwardk: I'm happy to take a longer look at it and see if we can't get you competitive with your other code though.
[04:40] edwardk: Probably not in front of a live studio audience ;)
[04:40] maoe: okay. that would be great.
[04:41] edwardk: Hop on #haskell-lens some time and remind me =)
[04:41] ikeg: he translates edwardk's advice in Japanese
[04:42] ikeg: any question?
[04:42] edwardk: i think k is much too small for the overhead
[04:42] ikeg: topic: Simulated Annealing
[04:42] arkeet: a few orders of magnitude too small?
[04:43] edwardk: that and/or the foldl is being applied directly to the leaf level elements rather than to longer runs
[04:43] edwardk: baically the task granularity is probably the thing that is n orders of magnitude smaller than it could be
[04:44] edwardk: thats a guess though
[04:45] edwardk: i think we can definitely improve that =)
[04:45] edwardk: can you send me the foo.html file you're benchmarking with?
[04:46] nushio3: OK, he'll do that soon > foo.html
[04:46] nushio3: Unfortunately, the next speaker is co-using maoe's PC.
[04:46] edwardk: no worries
[04:46] arkeet: reflection time.
[04:46] edwardk: basically given the code there the results are about what i expect =)
[04:47] edwardk: if nothing else i expect a minimum of 9x slowdown there
[04:47] nushio3: edwardk: most possibly we'll close the meetup with "reflection" and then "bounded." no worry for you to prepare your slides!
[04:47] edwardk: and then you have communication overhead
[04:48] edwardk: nushio3: no problem. i'm happy to dig them up at some point in the future if you want or just point folks to the slide-deck on slideshare ;)
[04:48] nushio3: ekmett: Please do either so!
[04:53] arkeet: unsafeCoerce to make your own dictionaries. that's just evil
[04:53] edwardk: it works incredibly well
[04:53] edwardk: 3 orders of magnitude faster than the principled way
[04:53] arkeet: sure, but :P
[04:53] shachaf: It makes more sense to me than the principled way.
[04:53] shachaf: In many ways it seems more principled.
[04:54] arkeet: sure.
[04:54] arkeet: it would be nice if we could have a safer way of supplying our own dictionaries.
[04:54] arkeet: I suppose that's what reflection does.
[04:54] shachaf: In a way reflection is meant to be that -- yes.
[04:54] shachaf: Possibly reflection should be built into the language. Or possibly not.
[04:54] ikeg: edwardk: do you have a simple example with reflection?
[04:55] edwardk: reify :: a -> (forall s. Reifies s a => Proxy s -> r) -> r becomes reify a f = f (const a) with trickery
[04:55] ikeg: could you show URL?
[04:55] edwardk: sure
[04:55] shachaf: ikeg: https://github.com/ekmett/reflection/tree/master/examples
[04:55] shachaf: For instance https://github.com/ekmett/reflection/blob/master/examples/Monoid.hs
[04:56] Taneb (~nathan@host-92-23-117-149.as13285.net) joined the channel.
[04:56] ikeg: thanks
[04:56] edwardk: the one shachaf gave is the one i was thinking of, reverse mode in AD is another good example, https://github.com/analytics/analytics/blob/master/src/Data/Analytics/Approximate/HyperLogLog/Config.hs#L130 uses it to reify a number into a type.
[04:56] edwardk: My unreleased rounded uses it to reify a precision as a type.
[04:56] ikeg: many questions appeared at the talk
[04:57] edwardk: we're going to add a few combinators in lens 3.10 or 4.0 that give you the ability to locally make up a monoid and get foldMap to fold with it with sharing
[04:57] Taneb: edwardk, I can't see any way of making an instance of Cons an Action
[04:57] Taneb: Acting is easy, Action is hard
[04:58] edwardk: Taneb: interesting.
[04:58] edwardk: can't get the full generality in there?
[04:59] arkeet: edwardk: excellent!
[04:59] shachaf: "we" is edwardkese for "arkeet"
[04:59] edwardk: a good example of where i absolutely need reflection is when i take something like a regular expression and generate a monoid for the tabulations of _that_ regular expression so i can parse a regular expression in parallel
[05:00] edwardk: its edwardkese for "shachaf and elliott" usually.
[05:00] aristid: shachaf would like to put out propaganda that it means something else
[05:01] shachaf: What did you say? "elliott and arkeet and edwardk"?
[05:01] ikeg: it takes more to overcome my comprehension about Monoid.hs, especially magical function 'asProxyOf a _ = a'
[05:02] shachaf: ikeg: asProxyOf is simple -- it's asTypeOf for a proxy.
[05:02] edwardk: the monoid example is a bit tricky
[05:02] shachaf: Do you understand asTypeOf and Proxy?
[05:02] edwardk: but it does make up a monoid out of a function and a value you have lying around.
[05:03] ikeg: shachaf: to be honest, no.
[05:03] edwardk: note: the scala bound port is hard to use because of the lack of inference where monad transformers come into play
[05:03] arkeet: ustream suddenly went offline.
[05:03] Taneb: edwardk, I'm wrong, but it needs UndecidableInstances
[05:03] edwardk: Taneb: that doesn't surprise me
[05:03] ikeg: anyway i'm confused. i should keep the presentation now
[05:04] arkeet: nushio3: did something happen?
[05:05] Taneb: instance Effective IO r f => Cons (->) f (Chan a) (Chan b) a b where _Cons f c = effective $ readChan c >>= ineffective . f . flip (,) c
[05:05] Taneb: That needs MultiParamInstances (duh), FlexibleContexts, and UndecidableInstances
[05:06] nushio3: Ustream machine out of battery ;(
[05:06] edwardk: f is unguarded in the body, so of course it needs UndecidableInstances
[05:06] arkeet: ah.
[05:06] edwardk: nushio3: Oh well. It fought the good fight at least. =)
[05:06] Taneb: I can never remember when you need UndecidableInstances
[05:06] arkeet: I put it in when ghc tells me to.
[05:06] edwardk: Almost made it through the whole thing.
[05:07] Taneb: :/
[05:08] nushio3: Yeah.
[05:08] darinmorrison (~dwm@unaffiliated/darinmorrison) joined the channel.
[05:09] nushio3: The cameraman (tanakh) had limited bag capacity so he had to make a hard compromise ... not to bring the cable.
[05:11] edwardk: I'm not one to talk. I regularly forget to bring the camera to Boston Haskell. ;)
[05:12] hiratara (~hiratara@h223020.dynamic.ppp.asahi-net.or.jp) left IRC. (Ping timeout: 256 seconds)
[05:18] edwardk: I recently replicated this trick in a few other packages
[05:18] edwardk: syb-extras, hashable-extras, and bytes all use a variant on the prelude-extras trick
[05:18] hiratara (~hiratara@h222106.dynamic.ppp.asahi-net.or.jp) joined the channel.
[05:19] ikeg: the speaker confess that he does not understand the future works
[05:19] edwardk: Let me hpaste a link to the Remote EDSL
[05:19] ikeg: then going to summarize
[05:19] Philonous (~Philonous@dslb-178-000-134-003.pools.arcor-ip.net) joined the channel.
[05:21] hpaste: edwardk pasted “Remote DSL for the workshop” at http://hpaste.org/84908
[05:21] edwardk: I can provide an explanation of the future work section in english perhaps that might be useful
[05:31] darinmorrison (~dwm@unaffiliated/darinmorrison) left IRC.
[05:38] ikeg: edwardk: a short comment. please give #haskell-lens IRC channel to them
[05:39] ikeg: i realize #haskell, but not #haskell-lens
[05:40] arkeet changed the topic to lens 3.9 released | cabal install lens | unsafeCoerces: 124 | doctests: 563 | operators: 121 | modules: 79 | NYC Talk: http://youtu.be/cefnmjtAolY?hd=1 | http://comonad.com/haskell/Lenses-Folds-and-Traversals-NYC.pdf | http://lens.github.com/ | ಠ_ರೃ first-class data access | http://felixge.de/2013/03/11/the-pull-request-hack.html
[05:43] arkeet: that's Bazaar
[05:43] arkeet: not Bizarre ;)
[05:49] arkeet: I sometimes wonder if edwardk sleeps at all.
[05:49] ikeg: :-)
[05:49] Taneb: arkeet, he tried to a few hours ago
[05:49] inarenvi (~quassel@90.173.207.125) joined the channel.
[05:49] Taneb: And failed
[05:54] arkeet: edwardk should go to tokyo. :-)
[05:54] maoe (~Adium@124x39x126x66.ap124.ftth.ucom.ne.jp) left IRC. (Quit: Leaving.)
[05:54] edwardk: Clearly
[05:54] ikeg: welcome
[05:55] ikeg: i enjoyed talks much
[05:55] edwardk: I had a great time.
[05:55] edwardk: I have to admit some of those projects were things I hadn't expected that many people to take notice of. =)
[05:56] edwardk: Speculation for instance is a library that I often feel that I don't spend enough time advertising
[05:56] khibino (~hibi@124x39x126x66.ap124.ftth.ucom.ne.jp) left IRC. (Ping timeout: 245 seconds)
[05:59] nushio3 (7c277e42@gateway/web/freenode/ip.124.39.126.66) left IRC. (Ping timeout: 245 seconds)
[05:59] ikeg: edwardk: please take a break. you have done great work
[05:59] fumieval (~fumieval@124x39x126x66.ap124.ftth.ucom.ne.jp) left IRC. (Ping timeout: 255 seconds)
[05:59] tanakh_ (~tanakh@124x39x126x66.ap124.ftth.ucom.ne.jp) left IRC. (Ping timeout: 256 seconds)
[05:59] edwardk: Hrmm. it seems the audio on the ustream recording is rather crackly compared to the google hangout, oh well.
[06:00] edwardk isn't very good at stopping. I'll tell my wife that though, perhaps she'll make me take some time off ;)
[06:00] ikeg: :)
[06:02] edwardk: now i just need to spend some time figuring out why maoe's code was so slow =)
[06:02] Nisstyre-laptop (~yours@oftn/member/Nisstyre) left IRC. (Ping timeout: 246 seconds)
[06:02] arkeet: edwardk: it was at times, but it was mostly ok.
[06:15] shinybeast__ (uid1885@gateway/web/irccloud.com/x-binfuuykgsgbjehf) joined the channel.
[06:15] edwardk: How do I translate "そろそろ続けるならお店の予約時間を変更するので、どうしますか?"
[06:16] edwardk can't make out what that sentence means
[06:17] inarenvi (~quassel@90.173.207.125) left IRC. (Ping timeout: 256 seconds)
[06:17] edwardk: I've been able to muddle through or google translate most of the twitter chatter
[06:18] edwardk: its times like this i wish koninkje had his categorical japanese-english translator done =P
[06:18] ikeg: well
[06:19] ikeg: after the meeting, they p
[06:19] ikeg: ah
[06:19] ikeg: they have a plan to take a dinner.
[06:19] shinybeast__ (uid1885@gateway/web/irccloud.com/x-binfuuykgsgbjehf) left IRC. (Remote host closed the connection)
[06:19] edwardk: ah
[06:19] edwardk: that makes a lot more sense in that context =)
[06:19] ikeg: staff reserved 19:00 for the dinner, but, attendee continue discussion
[06:20] ikeg: then "we can change the time if you need discussion"
[06:21] ikeg: "any comment? = どうしますか"
[06:21] ikeg: that
[06:21] ikeg: that's all
[06:23] edwardk: thanks
[06:23] edwardk: for some reason i just couldn't get enough context to muddle through it
[06:24] ikeg: you can just ask a Japanese to translate resources.
[06:25] edwardk: Usually I can get _some_ sense of it, but really my Japanese is pretty terrible. =)
[06:25] ikeg: "ambiguity in the japanese language" is famous
[06:26] ikeg: they do not have any type.
[06:37] arkeet: either that or we need a better type system. ;)
[06:39] copumpkin (~copumpkin@unaffiliated/copumpkin) left IRC. (Ping timeout: 260 seconds)
[06:39] copumpkin (~copumpkin@unaffiliated/copumpkin) joined the channel.
[06:40] quchen (~david@p54AA49D4.dip.t-dialin.net) joined the channel.
[06:40] ikeg: I notice that Proxy and dictionary can apply to represent hidden contexts, for the implementation of type system
[06:41] edwardk: well a proxy contains no information, it just tells the system figure out where to plumb type info
[06:41] edwardk: but yes, together you can use them to do all sorts of tricky things
[06:42] edwardk: I was a bit rambly by the end there from lack of sleep =)
[06:42] arkeet: when do you actually sleep? ;)
[06:43] edwardk: When I look up and 3 hours have passed
[06:43] arkeet: haha
[06:43] edwardk: And usually there is a new library staring me in the face that I don't remember writing..
[06:45] quchen (~david@p54AA49D4.dip.t-dialin.net) left IRC. (Ping timeout: 272 seconds)
[06:46] inarenvi (~quassel@92.59.136.175) joined the channel.
[06:46] quchen (~david@p54AA1C92.dip.t-dialin.net) joined the channel.
[06:47] tomberek (78583167@gateway/web/freenode/ip.120.88.49.103) left IRC. (Quit: Page closed)
[06:51] twanvl (~Twan@dhcp-077-250-086-217.chello.nl) joined the channel.
[06:58] aristid: edwardk: does the naming "ekmett_conf" appeal to your vanity? :>
[06:58] edwardk: thats what they decided to hashtag it
[07:00] aristid: yeah i saw your retweets, and i couldn't help but laugh :P
[07:00] aristid: rebase [japanese text] Datalog [japanese text] #ekmett_conf
[07:01] edwardk: =)
[07:01] twanvl_ (~Twan@dhcp-077-250-086-217.chello.nl) joined the channel.
[07:01] aristid: hmm i still haven't read your differential datalog paper
[07:02] Taneb (~nathan@host-92-23-117-149.as13285.net) left IRC. (Ping timeout: 245 seconds)
[07:04] copumpkin (~copumpkin@unaffiliated/copumpkin) left IRC. (Ping timeout: 245 seconds)
[07:04] twanvl (~Twan@dhcp-077-250-086-217.chello.nl) left IRC. (Ping timeout: 245 seconds)
[07:04] copumpkin (~copumpkin@unaffiliated/copumpkin) joined the channel.
[07:19] arkeet: elliott: shachaf: I forget whether you guys are ops in #haskell.
[07:24] Taneb (~nathan@host-92-23-117-149.as13285.net) joined the channel.
[07:36] edwardk (~edwardk@pdpc/supporter/professional/edwardk) left IRC. (Quit: Computer has gone to sleep.)
[12:51] edwardk (~edwardk@pdpc/supporter/professional/edwardk) joined the channel.
[12:51] Topic is lens 3.9 released | cabal install lens | unsafeCoerces: 124 | doctests: 563 | operators: 121 | modules: 79 | NYC Talk: http://youtu.be/cefnmjtAolY?hd=1 | http://comonad.com/haskell/Lenses-Folds-and-Traversals-NYC.pdf | http://lens.github.com/ | ಠ_ರೃ first-class data access | http://felixge.de/2013/03/11/the-pull-request-hack.html
[12:51] Set by arkeet on March 31, 2013 5:40:48 AM EDT
[12:51] Website is http://lens.github.com/
[12:55] mizu_no_oto (~textual@c-76-24-19-222.hsd1.ma.comcast.net) joined the channel.
[13:00] Apocalisp (~textual@c-174-62-237-65.hsd1.ma.comcast.net) left IRC. (Ping timeout: 272 seconds)
[13:00] Apocalisp (~textual@c-174-62-237-65.hsd1.ma.comcast.net) joined the channel.
[13:01] acfoltzer (Adam@2600:3c01::f03c:91ff:fedf:682e) left IRC. (Quit: :3)
[13:03] acfoltzer (Adam@2600:3c01::f03c:91ff:fedf:682e) joined the channel.
[13:10] Nisstyre-laptop (~yours@oftn/member/Nisstyre) joined the channel.
[13:15] amindfv (~textual@pool-173-69-2-167.prvdri.fios.verizon.net) joined the channel.
[13:24] twanvl_ (~Twan@dhcp-077-250-086-217.chello.nl) joined the channel.
[13:27] twanvl (~Twan@dhcp-077-250-086-217.chello.nl) left IRC. (Ping timeout: 258 seconds)
[13:42] twomashi (~Adium@cpc2-dals19-2-0-cust71.hari.cable.virginmedia.com) left IRC. (Quit: Leaving.)
[13:44] luite: has anyone tried compiling lens with HEAD, or have patches already?
[13:45] edwardk: not recently. guessing lots of Typeable trouble?
[13:46] luite: those are usually easily fixable, but i'm not sure about handlerIO / handlerCatchIO
[13:46] edwardk: hrmm. what happened there?
[13:47] luite: oh it does have to do with Typeable
[13:48] luite: oh there's anoter thing where Proxy from Typeable clashes with Data.Proxy, but that's also easily fixed
[13:50] mizu_no_oto (~textual@c-76-24-19-222.hsd1.ma.comcast.net) left IRC. (Quit: Computer has gone to sleep.)
[13:51] twomashi (~Adium@cpc2-dals19-2-0-cust71.hari.cable.virginmedia.com) joined the channel.
[13:52] elliott: (why is that still there?)
[13:53] edwardk: that should be fixed currently
[13:53] edwardk: in current tagged it should be using the Proxy from Typeable
[13:53] edwardk: and just giving it instances
[13:54] luite: oh ok, i'm using 3.9.0.2
[13:54] edwardk: check your tagged version
[13:55] twomashi (~Adium@cpc2-dals19-2-0-cust71.hari.cable.virginmedia.com) left IRC. (Client Quit)
[13:55] luite: oh i think that's my fault, i messed up the version when patching it to build, and now i have the wrong one
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment