Logs on 2022-04-01 (liberachat/#haskell)
| 00:01:51 | → | chenqisu1 joins (~chenqisu1@183.217.200.168) |
| 00:02:26 | × | pretty_dumm_guy quits (trottel@gateway/vpn/protonvpn/prettydummguy/x-88029655) (Quit: WeeChat 3.5) |
| 00:07:15 | × | littlebobeep quits (~alMalsamo@gateway/tor-sasl/almalsamo) (Ping timeout: 240 seconds) |
| 00:09:09 | × | Topsi quits (~Tobias@dyndsl-095-033-092-148.ewe-ip-backbone.de) (Read error: Connection reset by peer) |
| 00:09:36 | → | raehik joins (~raehik@cpc95906-rdng25-2-0-cust156.15-3.cable.virginm.net) |
| 00:14:55 | × | wroathe quits (~wroathe@user/wroathe) (Ping timeout: 246 seconds) |
| 00:17:15 | × | jpds quits (~jpds@gateway/tor-sasl/jpds) (Ping timeout: 240 seconds) |
| 00:20:53 | → | jpds joins (~jpds@gateway/tor-sasl/jpds) |
| 00:20:54 | × | immae quits (~immae@2a01:4f8:141:53e7::) (Quit: WeeChat 3.3) |
| 00:21:16 | × | geranim0 quits (~geranim0@modemcable242.171-178-173.mc.videotron.ca) (Remote host closed the connection) |
| 00:21:19 | → | immae joins (~immae@2a01:4f8:141:53e7::) |
| 00:21:28 | × | xff0x quits (~xff0x@i121-117-52-147.s41.a013.ap.plala.or.jp) (Ping timeout: 260 seconds) |
| 00:24:39 | × | immae quits (~immae@2a01:4f8:141:53e7::) (Client Quit) |
| 00:25:09 | → | immae joins (~immae@2a01:4f8:141:53e7::) |
| 00:25:35 | × | gurkenglas quits (~gurkengla@dslb-178-012-018-212.178.012.pools.vodafone-ip.de) (Ping timeout: 260 seconds) |
| 00:26:44 | → | yauhsien joins (~yauhsien@61-231-60-85.dynamic-ip.hinet.net) |
| 00:31:01 | × | mixfix41 quits (~homefame@user/mixfix41) (Ping timeout: 246 seconds) |
| 00:31:20 | × | immae quits (~immae@2a01:4f8:141:53e7::) (Quit: WeeChat 3.3) |
| 00:31:23 | × | yauhsien quits (~yauhsien@61-231-60-85.dynamic-ip.hinet.net) (Ping timeout: 260 seconds) |
| 00:32:01 | → | immae joins (~immae@2a01:4f8:141:53e7::) |
| 00:38:28 | <zebrag> | "λx.K(λk.1 + (if x = 0 then k2 else 3)) + 8", "Name k is bound to the continuation which adds 8". I've never seen anything like that before. I'm wondering how you manage to give it the argument "x". But otherwise, it is awesome. ("Minimal classical logic and control operators") |
| 00:39:49 | <Axman6> | I can't parse that |
| 00:40:12 | → | merijn joins (~merijn@c-001-001-001.client.esciencecenter.eduvpn.nl) |
| 00:42:00 | <abastro[m]> | What is K in `\x. K(..)` |
| 00:42:37 | <ProfSimm> | Is there a very precise guide to how HAskell parses whitespace |
| 00:42:38 | <Axman6> | yeah, and what's k2? |
| 00:43:17 | <zebrag> | abastro[m]: apparently it's an operator that will catch the context, so here it would be the adding of 8 |
| 00:43:26 | <abastro[m]> | Perhaps `k 2`, because `k` is sth you could apply an argument |
| 00:43:47 | <abastro[m]> | Oh, operator catching contexr |
| 00:44:58 | <abastro[m]> | Idk why it adds 8 tho, like, this looks like delimited continuation on the surface |
| 00:45:14 | <abastro[m]> | Where `k 2` replace the K(..) term with 2 when called |
| 00:45:23 | × | merijn quits (~merijn@c-001-001-001.client.esciencecenter.eduvpn.nl) (Ping timeout: 260 seconds) |
| 00:45:54 | <zebrag> | well they say it's delimited continuation, but I'm not crystal with delimited continuations, so I couldn't say |
| 00:46:43 | <abastro[m]> | Me too, tbh |
| 00:49:55 | → | [itchyjunk] joins (~itchyjunk@user/itchyjunk/x-7353470) |
| 00:51:08 | → | yauhsien joins (~yauhsien@61-231-60-85.dynamic-ip.hinet.net) |
| 00:51:13 | → | littlebobeep joins (~alMalsamo@gateway/tor-sasl/almalsamo) |
| 01:00:09 | × | raehik quits (~raehik@cpc95906-rdng25-2-0-cust156.15-3.cable.virginm.net) (Ping timeout: 250 seconds) |
| 01:00:26 | → | xff0x joins (~xff0x@125x102x200x106.ap125.ftth.ucom.ne.jp) |
| 01:01:33 | × | nosewings quits (~ngpc@2603-8081-3e05-e2d0-96c1-0fad-58de-6f58.res6.spectrum.com) (Remote host closed the connection) |
| 01:09:24 | → | vysn joins (~vysn@user/vysn) |
| 01:10:33 | × | albet70 quits (~xxx@2400:8902::f03c:92ff:fe60:98d8) (Remote host closed the connection) |
| 01:10:58 | × | ProfSimm quits (~ProfSimm@87.227.196.109) (Remote host closed the connection) |
| 01:15:14 | × | anon61924576 quits (~anon61924@85.210.203.240) (Remote host closed the connection) |
| 01:15:31 | → | anon61924576 joins (~anon61924@85.210.203.240) |
| 01:16:39 | → | albet70 joins (~xxx@2400:8902::f03c:92ff:fe60:98d8) |
| 01:16:56 | → | Akiva joins (~Akiva@user/Akiva) |
| 01:19:24 | → | neurocyte8614 joins (~neurocyte@IP-094016090045.dynamic.medianet-world.de) |
| 01:19:24 | × | neurocyte8614 quits (~neurocyte@IP-094016090045.dynamic.medianet-world.de) (Changing host) |
| 01:19:24 | → | neurocyte8614 joins (~neurocyte@user/neurocyte) |
| 01:21:32 | × | neurocyte861 quits (~neurocyte@user/neurocyte) (Ping timeout: 260 seconds) |
| 01:21:33 | neurocyte8614 | is now known as neurocyte861 |
| 01:24:17 | <zebrag> | I've read a couple of lines of https://en.wikipedia.org/wiki/Delimited_continuation, so I think, I almost know everything there is to know. |
| 01:24:51 | → | lainon joins (~lainon@2601:7c0:c500:4d20::6dc6) |
| 01:26:00 | <zebrag> | I've read that line to be specific: `(* 2 (reset (+ 1 (shift k (k 5)))))` |
| 01:31:39 | ← | jakalx parts (~jakalx@base.jakalx.net) (Error from remote client) |
| 01:36:02 | × | anon61924576 quits (~anon61924@85.210.203.240) (Remote host closed the connection) |
| 01:36:39 | → | jakalx joins (~jakalx@base.jakalx.net) |
| 01:43:14 | <zebrag> | "Partial continuations are control operators in functional programming such that a function-like object is abstracted from a part of the rest of computation, rather than the whole rest of computation." (https://doi.org/10.1007/3-540-44929-9_34 A Type-Theoretic Study on Partial Continuations) |
| 01:44:05 | → | abastro joins (~abab9579@220.75.216.63) |
| 01:46:44 | <abastro[m]> | So the behavior differs in interesting way when continuation is called multiple times |
| 01:46:57 | <abastro[m]> | Otherwise, effectively just replacing the shifting code with 5 |
| 01:47:27 | → | lavaman joins (~lavaman@c-174-63-118-52.hsd1.ma.comcast.net) |
| 01:48:12 | <dolio> | They differ in multiple ways, unless you use pretty specific examples. |
| 01:49:23 | × | yauhsien quits (~yauhsien@61-231-60-85.dynamic-ip.hinet.net) (Ping timeout: 252 seconds) |
| 01:49:42 | <dolio> | Doing nothing but calling the continuation once immediately is one such example, though. |
| 01:51:02 | <abastro> | I mean by calling continuation at most once, it is equivalent with replacing the code in `shift` with the value supplied |
| 01:51:07 | <janus> | can ghc for the m1 automatically compile for x86_64 such that it is backwards compatible? |
| 01:51:17 | <janus> | does stack support this? |
| 01:51:34 | <janus> | asking because of this comment: https://stackoverflow.com/questions/69143043/how-to-create-native-arm-executables-on-macos-using-ghc-stack/71670541?noredirect=1#comment126696956_71670541 |
| 01:52:27 | <dolio> | abastro: No, it's not that simple. For instance, you don't need to call the continuation inside the lexical scope of `shift`, and then the behavior is going to be very different. |
| 01:53:04 | <abastro> | Wait, no need to call continuation inside `shift`? |
| 01:54:16 | <dolio> | Although in the case of the undelimited analogue of shift, it's unclear how that would even happen, because you'd basically just be ending the computation. |
| 01:56:06 | <abastro> | Wait, soo |
| 01:56:44 | <abastro> | How do you even refer to the continuation out of the lexical scope of shift |
| 01:56:54 | <dolio> | You can return it from shift. |
| 01:57:01 | <dolio> | (shift k k) |
| 01:57:16 | × | lavaman quits (~lavaman@c-174-63-118-52.hsd1.ma.comcast.net) (Remote host closed the connection) |
| 01:57:29 | → | lavaman joins (~lavaman@c-174-63-118-52.hsd1.ma.comcast.net) |
| 01:57:38 | <dolio> | That yields the continuation to whichever reset is enclosing it. |
| 01:58:57 | <abastro> | Oh. Tho tbh that is not 'calling' it |
| 01:59:15 | × | Benzi-Junior quits (~BenziJuni@88-149-64-179.du.xdsl.is) (Remote host closed the connection) |
| 01:59:39 | <dolio> | That doesn't mean it's never called, just that it isn't called inside the lexical scope of shift. |
| 02:00:34 | × | califax quits (~califax@user/califx) (Remote host closed the connection) |
| 02:00:46 | → | califax joins (~califax@user/califx) |
| 02:00:53 | <dolio> | let k = reset (8 + shift (\k -> k)) in 3 + k 5 |
| 02:01:13 | <zebrag> | I don't know how the "λx.K(λk.1 + (if x = 0 then k2 else 3)) + 8", can be simulated by shift and reset: the `lambda x.K(...)` is really something. |
| 02:01:20 | <zebrag> | hum |
| 02:01:51 | <dolio> | That is 16, because `k` is the function that adds 8 in both cases. |
| 02:01:54 | × | jao quits (~jao@cpc103048-sgyl39-2-0-cust502.18-2.cable.virginm.net) (Ping timeout: 272 seconds) |
| 02:02:35 | <zebrag> | okay, I get it |
| 02:02:41 | <abastro> | Yep, I should have said like, called at most once inside the lexical scope and never escapes |
| 02:04:10 | <abastro> | Uhm isn't `2 + 8 = 10`? |
| 02:05:32 | <zebrag> | k is adding 8 |
| 02:05:47 | <zebrag> | 3 + 8 + 5 |
| 02:05:56 | <monochrom> | I don't use (or trust) wordy verbal "intuitive" descriptions. I use algebra-like operational rules. Here: |
| 02:06:05 | <monochrom> | outerstuff reset (innerstuff (shift k body) innerstuff) outerstuff |
| 02:06:12 | <monochrom> | -> let k = \x -> reset (innerstuff x innerstuff) in outerstuff body outerstuff |
| 02:07:01 | <abastro> | Meh I was looking at `λx.K(λk.1 + (if x = 0 then k2 else 3)) + 8` |
| 02:07:23 | <zebrag> | hum, this one |
| 02:07:45 | <abastro> | 2 'outerstuff's |
| 02:07:48 | <abastro> | I am confused |
| 02:07:51 | × | euandreh quits (~euandreh@191.181.59.160) (Ping timeout: 256 seconds) |
| 02:07:59 | <monochrom> | The word "delimited continuation" refers to "reset (innerstuff [.] interstuff)" which is the scoped continuation (context) of the shift command there. |
| 02:08:31 | <monochrom> | What would you like me to call them? dot dot dot? Then I would have four "dot dot dot"s. |
| 02:08:47 | <abastro> | Btw I thought binding k cannot escape the scope of `body`, while its body could |
| 02:09:07 | <monochrom> | Ah OK, my bad for this one. |
| 02:09:22 | <monochrom> | outerstuff (let k = \x -> ... in body) outerstuff |
| 02:10:26 | <dolio> | The 'replacing the code in shift' is also mistaken, and responsible for this example. |
| 02:10:47 | <dolio> | reset (8 + shift (\k -> 1 + k 5)) = 1 + (8 + 5) |
| 02:11:07 | <dolio> | k acts like a function. |
| 02:11:40 | <abastro> | (reset (i1 (shift k body) i2) = (let_in k (\ x (i1 x i2)) body) |
| 02:11:45 | <dolio> | With undelimited continuations, the example acts differently. |
| 02:12:09 | <abastro> | Okay I just confused undelimited continuation with delimited continuation. Meh |
| 02:12:51 | <monochrom> | shift becomes undelimited if you don't have reset :) |
| 02:13:10 | <monochrom> | call/cc becomes delimited if you recall that there is a global RTS reset. |
| 02:13:32 | <zebrag> | what about `reset (8 + shift (\k -> 1 + k 5)) = 8 + 5` only? |
| 02:13:33 | <monochrom> | At least that's how Racket thinks of it. |
| 02:15:02 | <abastro> | I hate continuation now |
| 02:16:14 | <monochrom> | My http://www.vex.net/~trebla/haskell/cont.xhtml uses "Cont (\k -> ...)" for "shift k ...", "runCont p id" for "reset p". This is my favourite way of using the Cont monad now. I no longer care about callCC. |
| 02:16:58 | <monochrom> | Indeed a lot of Scheme/Racket people ditch call/cc as well. |
| 02:17:07 | × | Codaraxis__ quits (~Codaraxis@user/codaraxis) (Ping timeout: 272 seconds) |
| 02:17:32 | → | bitdex joins (~bitdex@gateway/tor-sasl/bitdex) |
| 02:18:10 | <abastro> | I did not know that `Cont (\k -> ...) was shift` |
| 02:18:12 | → | yauhsien joins (~yauhsien@61-231-60-85.dynamic-ip.hinet.net) |
| 02:18:22 | <abastro> | Now I can somewhat use mtl style continuation then |
| 02:18:36 | <abastro> | Uhm wait, ContT tho |
| 02:18:52 | <sm> | Hecate: flora: not only postgres, I even installed nix again (on mac). FYI I was stopped by https://discourse.nixos.org/t/derivations-failing-on-macos-due-to-libattr/5703 (of which a 2020 person said "I don’t think the attr library will ever build on mac, so the correct solution would be modifying the package to remove the attr library on mac") |
| 02:18:53 | <monochrom> | The observation is that the way people use call/cc is that they store continuations in mutable variables to emulate delimited continuations. When that happens, you know it's the end of an era and the dawn of a new one. |
| 02:20:18 | <zebrag> | Is there an equivalent of `reset` with `Cont (\k -> ...)`? or is it undelimited only? |
| 02:20:35 | <dolio> | reset is runCont. |
| 02:20:42 | <zebrag> | tx |
| 02:20:57 | × | lainon quits (~lainon@2601:7c0:c500:4d20::6dc6) (Quit: lainon) |
| 02:21:01 | <dolio> | With id. |
| 02:21:24 | <abastro> | Continuation is too hard, and so monad is somewhat hard as well :( |
| 02:22:22 | <zebrag> | monads are quite straightforward, no? |
| 02:22:41 | × | yauhsien quits (~yauhsien@61-231-60-85.dynamic-ip.hinet.net) (Ping timeout: 246 seconds) |
| 02:22:46 | <zebrag> | applicatives are straightforward |
| 02:22:47 | <monochrom> | s/continuation/callback/ and suddenly it's easy :) |
| 02:22:49 | <abastro> | Well my understanding of monads go through continuation, soo.. |
| 02:23:04 | <abastro> | I don't find callbacks that easy tho |
| 02:23:13 | <abastro> | Like, when it is used like continuation |
| 02:23:48 | <monochrom> | getLine >>= \s -> putStrLn ("hello " ++ s) --- That lambda is the continuation^W callback. |
| 02:24:12 | <abastro> | Yep, and that makes monad quite hard for many ppl I think |
| 02:25:05 | <monochrom> | Callback-based programming has been around for 20 years. |
| 02:25:11 | <zebrag> | callbacks can't drop a part of the code; callbacks are always easy to type |
| 02:25:52 | <zebrag> | in "λx.K(λk.1 + (if x = 0 then k2 else 3)) + 8", k does not behave like a function |
| 02:26:00 | <monochrom> | No one dare to say it's hard. It's best practice in many sectors. |
| 02:26:12 | <abastro> | `k` does behave like function, no? |
| 02:26:18 | <zebrag> | no |
| 02:26:21 | <zebrag> | not there |
| 02:26:32 | <abastro> | I thought `k` is just captured continuation there |
| 02:27:12 | <zebrag> | because if x=0, the result is supposed to be 10, not 11 |
| 02:27:13 | <abastro> | Wait now I am confused |
| 02:27:16 | <monochrom> | If the framework decides to not call your callback, that's observationally equivalent to dropping code. |
| 02:27:35 | <abastro> | Yep, this one is not delimited continuation I guess |
| 02:27:44 | <zebrag> | but it would be the other way around here |
| 02:28:02 | <zebrag> | if you call the k, then it drops the `+ 1` |
| 02:28:15 | <abastro> | Yep, inner code decides what to do |
| 02:28:50 | <abastro> | Tho this looks like not-delimited continuation |
| 02:29:02 | <monochrom> | That's just known as "goto" to 60yos. :) |
| 02:29:08 | <zebrag> | it doesn't return like a function and then obediently add the 1 |
| 02:30:05 | <monochrom> | or setjmp/longjmp. |
| 02:31:06 | <abastro> | & ppl dislike `goto` with passion :$ |
| 02:31:23 | <monochrom> | Dislike, shame, but not "it's hard". |
| 02:32:46 | <abastro> | Because it is hard to follow the control-flow |
| 02:33:37 | <abastro> | + look at me, I am extremely confused btwn delimited continuation and normal continuation |
| 02:34:13 | <abastro> | Finally I see that the two are extremely different |
| 02:36:15 | × | zyklotomic quits (~ethan@res388d-128-61-91-237.res.gatech.edu) (Ping timeout: 260 seconds) |
| 02:37:48 | × | xkuru quits (~xkuru@user/xkuru) (Read error: Connection reset by peer) |
| 02:38:14 | → | zyklotomic joins (~ethan@res380d-128-61-86-82.res.gatech.edu) |
| 02:39:34 | → | c209e6dc-4d76-47 joins (~aditya@2601:249:4300:1296:195:dac6:592c:a55a) |
| 02:40:25 | → | euandreh joins (~euandreh@2804:14c:33:9fe5:ac31:7ac1:bab2:710d) |
| 02:43:23 | × | terrorjack quits (~terrorjac@2a01:4f8:1c1e:509a::1) (Quit: The Lounge - https://thelounge.chat) |
| 02:44:38 | → | terrorjack joins (~terrorjac@2a01:4f8:1c1e:509a::1) |
| 02:46:33 | × | lavaman quits (~lavaman@c-174-63-118-52.hsd1.ma.comcast.net) (Remote host closed the connection) |
| 02:48:14 | × | waleee quits (~waleee@2001:9b0:213:7200:cc36:a556:b1e8:b340) (Ping timeout: 252 seconds) |
| 02:50:49 | → | rawley joins (~rawley@216-197-141-102.nbfr.hsdb.sasknet.sk.ca) |
| 02:52:10 | → | yauhsien joins (~yauhsien@61-231-60-85.dynamic-ip.hinet.net) |
| 02:54:24 | × | c209e6dc-4d76-47 quits (~aditya@2601:249:4300:1296:195:dac6:592c:a55a) (Quit: Konversation terminated!) |
| 02:57:12 | × | yauhsien quits (~yauhsien@61-231-60-85.dynamic-ip.hinet.net) (Ping timeout: 260 seconds) |
| 02:59:14 | <zebrag> | yes, like: no application should be without its continuation, never `(lambda x.u)v` but always `(lambda k x.u)kv`, and no function call ever return. |
| 03:00:00 | <zebrag> | so you need some side effects otherwise you'll be unaware of what is possibly happening, because it never returns |
| 03:00:16 | × | Macbethwin quits (~chargen@D964062A.static.ziggozakelijk.nl) (Remote host closed the connection) |
| 03:00:37 | → | Macbethwin joins (~chargen@D964062A.static.ziggozakelijk.nl) |
| 03:01:22 | <zebrag> | `1 + 2` is okay because 1 and 2 are constant and `+` is a function symbol |
| 03:01:51 | <zebrag> | for every thing else you would need an additional continuation |
| 03:02:16 | → | frost joins (~frost@user/frost) |
| 03:04:25 | <sm> | Hecate, FYI got a bit further by commenting out ghcid and iputils in shell.nix, and running make soufflé build -> https://termbin.com/0yuk |
| 03:05:09 | → | mixfix41 joins (~homefame@user/mixfix41) |
| 03:05:56 | <sm> | (cc is https://termbin.com/92vk) |
| 03:15:36 | × | lbseale quits (~ep1ctetus@user/ep1ctetus) (Read error: Connection reset by peer) |
| 03:15:51 | × | zebrag quits (~chris@user/zebrag) (Quit: Konversation terminated!) |
| 03:16:55 | × | jpds quits (~jpds@gateway/tor-sasl/jpds) (Ping timeout: 240 seconds) |
| 03:18:03 | → | yauhsien joins (~yauhsien@61-231-60-85.dynamic-ip.hinet.net) |
| 03:18:58 | → | jpds joins (~jpds@gateway/tor-sasl/jpds) |
| 03:21:03 | × | abastro quits (~abab9579@220.75.216.63) (Ping timeout: 260 seconds) |
| 03:24:04 | × | yauhsien quits (~yauhsien@61-231-60-85.dynamic-ip.hinet.net) (Remote host closed the connection) |
| 03:24:18 | → | mbuf joins (~Shakthi@122.162.64.255) |
| 03:26:36 | → | yauhsien joins (~yauhsien@61-231-60-85.dynamic-ip.hinet.net) |
| 03:31:38 | × | yauhsien quits (~yauhsien@61-231-60-85.dynamic-ip.hinet.net) (Ping timeout: 260 seconds) |
| 03:34:07 | × | rawley quits (~rawley@216-197-141-102.nbfr.hsdb.sasknet.sk.ca) (Remote host closed the connection) |
| 03:51:19 | → | lavaman joins (~lavaman@c-174-63-118-52.hsd1.ma.comcast.net) |
| 03:58:42 | → | cdman joins (~dcm@user/dmc/x-4369397) |
| 04:06:55 | <albet70> | if I git clone a haskell project which used cabal, how I can use cabal install that and expose its module to ghc? |
| 04:07:59 | <albet70> | for example, xlsx project on github, cabal v2-build, cabal v2-install --lib, now only cabal repl can use this module xlsx, ghci still not found |
| 04:08:24 | <abastro[m]> | Or just `cabal build` and always use cabal repl |
| 04:12:21 | × | jinsun__ quits (~jinsun@user/jinsun) () |
| 04:14:29 | → | Codaraxis joins (~Codaraxis@user/codaraxis) |
| 04:15:48 | → | c209e6dc-4d76-47 joins (~aditya@2601:249:4300:1296:195:dac6:592c:a55a) |
| 04:23:56 | × | c209e6dc-4d76-47 quits (~aditya@2601:249:4300:1296:195:dac6:592c:a55a) (Quit: Konversation terminated!) |
| 04:26:44 | × | Unicorn_Princess quits (~Unicorn_P@93-103-228-248.dynamic.t-2.net) (Quit: Leaving) |
| 04:27:03 | → | wardrunal joins (~goose@167.179.114.36) |
| 04:36:49 | → | abastro joins (~abab9579@220.75.216.63) |
| 04:37:43 | → | Codaraxis_ joins (~Codaraxis@user/codaraxis) |
| 04:37:49 | × | mvk quits (~mvk@2607:fea8:5ce3:8500::3800) (Ping timeout: 240 seconds) |
| 04:41:10 | × | shriekingnoise quits (~shrieking@201.231.16.156) (Quit: Quit) |
| 04:41:37 | × | Codaraxis quits (~Codaraxis@user/codaraxis) (Ping timeout: 246 seconds) |
| 04:50:14 | → | bahamas joins (~lucian@86.121.135.166) |
| 04:52:05 | <sclv> | add it to your cabal.project file as an extra package |
| 04:54:24 | → | jinsun joins (~jinsun@user/jinsun) |
| 04:55:08 | → | yauhsien joins (~yauhsien@61-231-60-85.dynamic-ip.hinet.net) |
| 04:59:02 | × | lavaman quits (~lavaman@c-174-63-118-52.hsd1.ma.comcast.net) (Remote host closed the connection) |
| 04:59:15 | → | lavaman joins (~lavaman@c-174-63-118-52.hsd1.ma.comcast.net) |
| 04:59:31 | × | zyklotomic quits (~ethan@res380d-128-61-86-82.res.gatech.edu) (Ping timeout: 260 seconds) |
| 04:59:59 | × | bahamas quits (~lucian@86.121.135.166) (Ping timeout: 260 seconds) |
| 05:00:18 | × | yauhsien quits (~yauhsien@61-231-60-85.dynamic-ip.hinet.net) (Ping timeout: 260 seconds) |
| 05:01:34 | → | zyklotomic joins (~ethan@r4-128-61-95-82.res.gatech.edu) |
| 05:07:08 | → | takuan joins (~takuan@178-116-218-225.access.telenet.be) |
| 05:17:23 | <jneira[m]> | hmm but `cabal install --lib` should make it available to ghci 🤔 |
| 05:18:42 | → | yauhsien joins (~yauhsien@61-231-60-85.dynamic-ip.hinet.net) |
| 05:20:46 | × | mjrosenb quits (~mjrosenb@pool-108-54-97-96.nycmny.fios.verizon.net) (Ping timeout: 272 seconds) |
| 05:20:53 | → | mjrosenb joins (~mjrosenb@pool-108-54-97-96.nycmny.fios.verizon.net) |
| 05:21:18 | × | sayola quits (~vekto@dslb-002-201-085-116.002.201.pools.vodafone-ip.de) (Ping timeout: 260 seconds) |
| 05:23:16 | × | InstX1 quits (~Liam@2601:6c4:4080:3f80:85fa:fa6d:a3c9:394a) (Ping timeout: 245 seconds) |
| 05:28:36 | → | Inst joins (~Liam@2601:6c4:4080:3f80:8562:905a:59dc:27e9) |
| 05:28:54 | → | mikoto-chan joins (~mikoto-ch@213.177.151.239) |
| 05:30:21 | → | dschrempf joins (~dominik@mobiledyn-62-240-134-186.mrsn.at) |
| 05:52:35 | → | chomwitt joins (~chomwitt@2a02:587:dc0e:a100:8d19:188:687f:a348) |
| 05:53:54 | → | jinsun__ joins (~jinsun@user/jinsun) |
| 05:55:22 | → | jinsun___ joins (~jinsun@user/jinsun) |
| 05:57:24 | × | jinsun quits (~jinsun@user/jinsun) (Ping timeout: 240 seconds) |
| 05:58:03 | jinsun___ | is now known as jinsun |
| 05:58:12 | → | coot joins (~coot@213.134.190.95) |
| 05:58:43 | × | jinsun__ quits (~jinsun@user/jinsun) (Ping timeout: 256 seconds) |
| 06:03:20 | <albet70> | "jneira[m] :hmm but `cabal install --lib` should make it available to ghci 🤔", still no |
| 06:03:50 | <Axman6> | this kind of global install of packages is generally not how we do things any more as far as I understand it |
| 06:03:58 | <albet70> | but I'd like to use runghc |
| 06:04:22 | × | MasseR46 quits (~MasseR@51.15.143.128) (Quit: The Lounge - https://thelounge.chat) |
| 06:04:23 | <albet70> | load Main.hs in cabal repl to run seems not good... |
| 06:05:04 | → | MasseR46 joins (~MasseR@51.15.143.128) |
| 06:05:38 | <Axman6> | is https://cabal.readthedocs.io/en/3.6/cabal-commands.html?highlight=run#cabal-v2-run helpful? |
| 06:10:14 | × | [itchyjunk] quits (~itchyjunk@user/itchyjunk/x-7353470) (Remote host closed the connection) |
| 06:10:36 | <abastro> | Oh, runghc.. |
| 06:10:40 | <albet70> | "Axman6 :is https://cabal.readthedocs.io/en/3.6/cabal-commands.html?highlight=run#cabal-v2-run helpful?", but v2-run script.hs which is not a normal a.hs |
| 06:10:54 | <abastro> | So you want to use it for script? |
| 06:11:10 | <Axman6> | it is, everything that makes it scriptable is in comments |
| 06:11:19 | <albet70> | I'd like to run it easy like runghc a.hs |
| 06:11:20 | <Axman6> | IIRC including the shebang at the top |
| 06:11:37 | <abastro> | Yep, tho I guess it is not as easy with cabal |
| 06:11:54 | × | azimut_ quits (~azimut@gateway/tor-sasl/azimut) (Remote host closed the connection) |
| 06:12:10 | → | azimut joins (~azimut@gateway/tor-sasl/azimut) |
| 06:12:33 | <albet70> | but v2-run script.hs need build-depends? |
| 06:12:59 | <Axman6> | isn't that what you'rte trying to do? depend on another library? |
| 06:13:07 | <albet70> | why cabal can't not like pip to install package and expose its all module |
| 06:13:35 | <albet70> | in python, pip could install package, and you can in python repl to it |
| 06:13:44 | <Axman6> | We've literally spent the last 15 years trying to get away from all the problems that doing that introduces |
| 06:14:19 | × | jinsun quits (~jinsun@user/jinsun) () |
| 06:15:40 | → | jinsun joins (~jinsun@user/jinsun) |
| 06:18:41 | × | slim quits (uid300876@id-300876.lymington.irccloud.com) (Quit: Connection closed for inactivity) |
| 06:18:46 | <abastro> | I mean, for scripting you don't want to have .cabal file |
| 06:19:17 | <abastro> | `cabal v1-install` was basically what pip was doing, but it ended up being problematic |
| 06:19:22 | <Axman6> | exactly, which is why cabal v2-run specifically lets you embed the necessary parts of one into your .hs file |
| 06:19:33 | <abastro> | Oh, so you can embed in .hs? |
| 06:19:42 | <Axman6> | yes, that's why I linked to it |
| 06:19:46 | <abastro> | Well tell us how |
| 06:19:48 | <abastro> | Oh? |
| 06:19:56 | × | Macbethwin quits (~chargen@D964062A.static.ziggozakelijk.nl) (Remote host closed the connection) |
| 06:20:18 | → | Macbethwin joins (~chargen@D964062A.static.ziggozakelijk.nl) |
| 06:20:20 | <Axman6> | "is https://cabal.readthedocs.io/en/3.6/cabal-commands.html?highlight=run#cabal-v2-run helpful?" 15 minutes ago |
| 06:20:41 | <abastro> | `#!/usr/bin/env cabal |
| 06:20:43 | <abastro> | {- cabal: |
| 06:20:44 | <abastro> | build-depends: base ^>= 4.11 |
| 06:20:44 | <abastro> | , shelly ^>= 1.8.1 |
| 06:20:45 | <abastro> | -} |
| 06:20:45 | <abastro> | main :: IO () |
| 06:20:46 | <abastro> | main = do |
| 06:20:47 | <abastro> | ...` |
| 06:20:50 | <abastro> | So that is it |
| 06:21:21 | × | Macbethwin quits (~chargen@D964062A.static.ziggozakelijk.nl) (Remote host closed the connection) |
| 06:23:42 | × | xff0x quits (~xff0x@125x102x200x106.ap125.ftth.ucom.ne.jp) (Ping timeout: 260 seconds) |
| 06:24:04 | → | odnes joins (~odnes@5-203-245-187.pat.nym.cosmote.net) |
| 06:24:58 | × | dschrempf quits (~dominik@mobiledyn-62-240-134-186.mrsn.at) (Quit: WeeChat 3.4.1) |
| 06:25:46 | → | xff0x joins (~xff0x@125x102x200x106.ap125.ftth.ucom.ne.jp) |
| 06:29:31 | <albet70> | I found the way, just cabal v2-install --lib xlsx, now ghci can directly use it... |
| 06:30:42 | → | mattil joins (~mattil@d5z9ccdfmyl1jmjj16z-4.rev.dnainternet.fi) |
| 06:30:47 | → | gehmehgeh joins (~user@user/gehmehgeh) |
| 06:32:18 | <albet70> | cabal v2-install --lib lens, now runghc can use it directly |
| 06:32:49 | → | michalz joins (~michalz@185.246.204.61) |
| 06:33:11 | → | jgeerds joins (~jgeerds@d5364b87.access.ecotel.net) |
| 06:33:42 | × | yauhsien quits (~yauhsien@61-231-60-85.dynamic-ip.hinet.net) (Remote host closed the connection) |
| 06:34:15 | → | yauhsien joins (~yauhsien@61-231-60-85.dynamic-ip.hinet.net) |
| 06:38:16 | → | mncheck joins (~mncheck@193.224.205.254) |
| 06:38:33 | → | acidjnk joins (~acidjnk@p200300d0c7049f94683de86d14f3245b.dip0.t-ipconnect.de) |
| 06:39:14 | × | yauhsien quits (~yauhsien@61-231-60-85.dynamic-ip.hinet.net) (Ping timeout: 246 seconds) |
| 06:40:16 | × | phma quits (~phma@host-67-44-208-132.hnremote.net) (Read error: Connection reset by peer) |
| 06:41:29 | → | phma joins (phma@2001:5b0:211c:8dc8:4016:a5c0:9e05:5df9) |
| 06:41:45 | <abastro> | Wait, that's def strange |
| 06:41:53 | <abastro> | Didn't you use `cabal install --lib` before? |
| 06:45:48 | <albet70> | "abastro :Didn't you use `cabal install --lib` before?", no, so I can just use cabal install --lib to do the same? |
| 06:48:21 | × | mattil quits (~mattil@d5z9ccdfmyl1jmjj16z-4.rev.dnainternet.fi) (Remote host closed the connection) |
| 06:49:23 | → | machinedgod joins (~machinedg@24.105.81.50) |
| 06:50:45 | → | yauhsien joins (~yauhsien@61-231-60-85.dynamic-ip.hinet.net) |
| 06:52:00 | <abastro> | Yep, it's the same |
| 06:52:08 | × | yauhsien quits (~yauhsien@61-231-60-85.dynamic-ip.hinet.net) (Remote host closed the connection) |
| 06:52:13 | <abastro> | `v2-install == install` for newest versions of cabal |
| 06:52:43 | <albet70> | ok |
| 06:52:53 | <abastro> | I heard that `cabal install --lib` is supposed to be only used for experienced ppl though. |
| 06:53:19 | <albet70> | cabal v1-install is available? |
| 06:53:36 | → | yauhsien joins (~yauhsien@61-231-60-85.dynamic-ip.hinet.net) |
| 06:54:45 | <tomsmeding> | yes, but use is discouraged -- if there is something you really can only do through the v1- commands, you should open an issue on the cabal repo and describe your use case |
| 06:58:43 | × | yauhsien quits (~yauhsien@61-231-60-85.dynamic-ip.hinet.net) (Ping timeout: 260 seconds) |
| 07:00:36 | → | lortabac joins (~lortabac@2a01:e0a:541:b8f0:3685:42fa:d9de:143d) |
| 07:00:54 | → | ph88 joins (~ph88@2a02:8109:9e00:71d0:8958:bc94:e84c:ec28) |
| 07:02:14 | → | cfricke joins (~cfricke@user/cfricke) |
| 07:02:19 | → | alp joins (~alp@user/alp) |
| 07:03:17 | → | briandaed joins (~root@109.95.142.93.r.toneticgroup.pl) |
| 07:03:18 | <abastro> | I recall massively being confused by `v1-build` `v1-install` etc. tbh |
| 07:04:38 | → | gurkenglas joins (~gurkengla@dslb-178-012-018-212.178.012.pools.vodafone-ip.de) |
| 07:09:32 | → | mc47 joins (~mc47@xmonad/TheMC47) |
| 07:11:03 | → | ProfSimm joins (~ProfSimm@87.227.196.109) |
| 07:11:26 | × | mikoto-chan quits (~mikoto-ch@213.177.151.239) (Ping timeout: 246 seconds) |
| 07:12:43 | × | Akiva quits (~Akiva@user/Akiva) (Ping timeout: 256 seconds) |
| 07:15:28 | → | mikoto-chan joins (~mikoto-ch@213.177.151.239) |
| 07:15:29 | × | Vajb quits (~Vajb@hag-jnsbng11-58c3a8-176.dhcp.inet.fi) (Read error: Connection reset by peer) |
| 07:15:45 | → | Vajb joins (~Vajb@hag-jnsbng11-58c3a8-176.dhcp.inet.fi) |
| 07:15:54 | × | mc47 quits (~mc47@xmonad/TheMC47) (Remote host closed the connection) |
| 07:19:39 | × | Inst quits (~Liam@2601:6c4:4080:3f80:8562:905a:59dc:27e9) (Quit: Leaving) |
| 07:28:10 | × | mcglk quits (~mcglk@131.191.49.120) (Read error: Connection reset by peer) |
| 07:29:09 | → | mcglk joins (~mcglk@131.191.49.120) |
| 07:30:13 | × | xff0x quits (~xff0x@125x102x200x106.ap125.ftth.ucom.ne.jp) (Ping timeout: 260 seconds) |
| 07:31:50 | → | mikoto-c1 joins (~mikoto-ch@213.177.151.239) |
| 07:31:52 | × | mikoto-chan quits (~mikoto-ch@213.177.151.239) (Ping timeout: 272 seconds) |
| 07:34:12 | → | vpan joins (~0@212.117.1.172) |
| 07:34:16 | → | merijn joins (~merijn@c-001-002-001.client.esciencecenter.eduvpn.nl) |
| 07:34:33 | → | xff0x joins (~xff0x@125x102x200x106.ap125.ftth.ucom.ne.jp) |
| 07:34:39 | <jackdk> | Question: Given a finite type `t` (easy mode: Bounded and Enum instances; hard mode: Finite instance), is there a library which maps it to a representable functor `f` such that `Rep f ~ t`? |
| 07:39:07 | × | merijn quits (~merijn@c-001-002-001.client.esciencecenter.eduvpn.nl) (Ping timeout: 260 seconds) |
| 07:42:23 | × | Sgeo quits (~Sgeo@user/sgeo) (Read error: Connection reset by peer) |
| 07:42:23 | × | mikoto-c1 quits (~mikoto-ch@213.177.151.239) (Read error: Connection reset by peer) |
| 07:45:11 | × | acidjnk quits (~acidjnk@p200300d0c7049f94683de86d14f3245b.dip0.t-ipconnect.de) (Ping timeout: 260 seconds) |
| 07:45:44 | → | merijn joins (~merijn@c-001-002-001.client.esciencecenter.eduvpn.nl) |
| 07:48:07 | → | mikoto-c1 joins (~mikoto-ch@213.177.151.239) |
| 07:49:01 | × | ph88 quits (~ph88@2a02:8109:9e00:71d0:8958:bc94:e84c:ec28) (Ping timeout: 240 seconds) |
| 07:54:32 | → | jinsun__ joins (~jinsun@user/jinsun) |
| 07:54:32 | jinsun | is now known as Guest3467 |
| 07:54:33 | jinsun__ | is now known as jinsun |
| 07:54:52 | × | eggplantade quits (~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net) (Remote host closed the connection) |
| 07:58:28 | × | Guest3467 quits (~jinsun@user/jinsun) (Ping timeout: 272 seconds) |
| 08:02:14 | → | dsrt^ joins (~dsrt@c-24-99-107-170.hsd1.ga.comcast.net) |
| 08:08:58 | → | Digit joins (~user@user/digit) |
| 08:09:09 | × | Unhammer quits (~Unhammer@user/unhammer) (Read error: Connection reset by peer) |
| 08:14:06 | × | megaTherion quits (~therion@unix.io) (Ping timeout: 245 seconds) |
| 08:14:20 | → | ccntrq joins (~Thunderbi@2a01:c22:88e7:1b00:3fae:5eb6:677d:a5b) |
| 08:16:35 | × | chenqisu1 quits (~chenqisu1@183.217.200.168) (Quit: Leaving) |
| 08:18:14 | × | coot quits (~coot@213.134.190.95) (Quit: coot) |
| 08:19:18 | → | ph88 joins (~ph88@213.23.78.154) |
| 08:19:28 | × | ProfSimm quits (~ProfSimm@87.227.196.109) (Remote host closed the connection) |
| 08:25:37 | × | ix quits (~ix@2a02:8010:674f:0:d65d:64ff:fe52:5efe) (Remote host closed the connection) |
| 08:25:46 | → | ix joins (~ix@2a02:8010:674f:0:d65d:64ff:fe52:5efe) |
| 08:26:11 | → | Unhammer joins (~Unhammer@user/unhammer) |
| 08:27:23 | × | mixfix41 quits (~homefame@user/mixfix41) (Ping timeout: 260 seconds) |
| 08:28:46 | <tomsmeding> | jackdk: are you talking about adjunctions:Data.Functor.Rep.Representable? |
| 08:29:50 | → | ProfSimm joins (~ProfSimm@87.227.196.109) |
| 08:30:50 | → | mc47 joins (~mc47@xmonad/TheMC47) |
| 08:31:30 | → | yauhsien joins (~yauhsien@61-231-60-85.dynamic-ip.hinet.net) |
| 08:32:42 | → | Pickchea joins (~private@user/pickchea) |
| 08:36:38 | × | yauhsien quits (~yauhsien@61-231-60-85.dynamic-ip.hinet.net) (Ping timeout: 260 seconds) |
| 08:37:01 | → | raehik joins (~raehik@cpc95906-rdng25-2-0-cust156.15-3.cable.virginm.net) |
| 08:38:48 | × | belphegor666 quits (~satan@user/belphegor666) (Quit: WeeChat 3.4) |
| 08:39:08 | → | belphegor666 joins (~satan@ip-046-223-003-068.um13.pools.vodafone-ip.de) |
| 08:40:09 | × | Neuromancer quits (~Neuromanc@user/neuromancer) (Ping timeout: 250 seconds) |
| 08:41:32 | × | jinsun quits (~jinsun@user/jinsun) (Ping timeout: 272 seconds) |
| 08:42:07 | × | abastro quits (~abab9579@220.75.216.63) (Ping timeout: 260 seconds) |
| 08:45:14 | × | kaph quits (~kaph@net-93-67-57-97.cust.vodafonedsl.it) (Read error: Connection reset by peer) |
| 08:45:40 | × | belphegor666 quits (~satan@ip-046-223-003-068.um13.pools.vodafone-ip.de) (Changing host) |
| 08:45:40 | → | belphegor666 joins (~satan@user/belphegor666) |
| 08:50:59 | → | dhouthoo joins (~dhouthoo@178-117-36-167.access.telenet.be) |
| 08:55:59 | → | eggplantade joins (~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net) |
| 08:56:46 | × | tzh quits (~tzh@c-24-21-73-154.hsd1.or.comcast.net) (Quit: zzz) |
| 08:57:30 | × | lispy quits (~lispy@82.212.115.165) (Quit: Client closed) |
| 09:00:05 | → | MajorBiscuit joins (~MajorBisc@2a02:a461:129d:1:193d:75d8:745d:e91e) |
| 09:00:32 | × | Typedfern quits (~Typedfern@73.red-83-57-140.dynamicip.rima-tde.net) (Ping timeout: 272 seconds) |
| 09:00:38 | × | eggplantade quits (~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net) (Ping timeout: 260 seconds) |
| 09:10:26 | → | coot joins (~coot@213.134.190.95) |
| 09:13:33 | → | Typedfern joins (~Typedfern@13.red-88-16-189.dynamicip.rima-tde.net) |
| 09:22:45 | → | deadmarshal_ joins (~deadmarsh@95.38.118.110) |
| 09:24:30 | → | mcgroin joins (~mcgroin@roc37-h01-176-170-197-243.dsl.sta.abo.bbox.fr) |
| 09:28:41 | → | megaTherion joins (~therion@unix.io) |
| 09:28:47 | × | mikoto-c1 quits (~mikoto-ch@213.177.151.239) (Ping timeout: 260 seconds) |
| 09:31:05 | × | deadmarshal_ quits (~deadmarsh@95.38.118.110) (Ping timeout: 246 seconds) |
| 09:32:02 | → | deadmarshal_ joins (~deadmarsh@95.38.119.22) |
| 09:32:56 | × | ProfSimm quits (~ProfSimm@87.227.196.109) (Remote host closed the connection) |
| 09:36:11 | → | mikoto-c1 joins (~mikoto-ch@213.177.151.239) |
| 09:42:33 | × | jgeerds quits (~jgeerds@d5364b87.access.ecotel.net) (Ping timeout: 256 seconds) |
| 09:44:15 | × | azimut quits (~azimut@gateway/tor-sasl/azimut) (Ping timeout: 240 seconds) |
| 09:47:59 | → | azimut joins (~azimut@gateway/tor-sasl/azimut) |
| 09:49:14 | → | acidjnk joins (~acidjnk@p200300d0c7049f94699c2b11d21dc0a3.dip0.t-ipconnect.de) |
| 09:52:13 | × | econo quits (uid147250@user/econo) (Quit: Connection closed for inactivity) |
| 09:52:19 | × | mc47 quits (~mc47@xmonad/TheMC47) (Remote host closed the connection) |
| 09:52:45 | <tomsmeding> | jackdk: apparently you can! https://paste.tomsmeding.com/WQYUUcfP |
| 09:52:50 | <tomsmeding> | this was actually pretty fun |
| 09:55:29 | → | whatsupdoc joins (uid509081@id-509081.hampstead.irccloud.com) |
| 09:57:41 | → | yauhsien joins (~yauhsien@61-231-60-85.dynamic-ip.hinet.net) |
| 09:58:50 | × | mikoto-c1 quits (~mikoto-ch@213.177.151.239) (Quit: mikoto-c1) |
| 09:59:03 | → | mikoto-chan joins (~mikoto-ch@213.177.151.239) |
| 10:02:14 | × | raehik quits (~raehik@cpc95906-rdng25-2-0-cust156.15-3.cable.virginm.net) (Ping timeout: 246 seconds) |
| 10:06:56 | → | madjestic joins (~madjestic@88-159-247-120.fixed.kpn.net) |
| 10:07:50 | × | xff0x quits (~xff0x@125x102x200x106.ap125.ftth.ucom.ne.jp) (Ping timeout: 246 seconds) |
| 10:09:48 | → | Unicorn_Princess joins (~Unicorn_P@93-103-228-248.dynamic.t-2.net) |
| 10:09:52 | → | xff0x joins (~xff0x@125x102x200x106.ap125.ftth.ucom.ne.jp) |
| 10:10:09 | → | raehik joins (~raehik@cpc95906-rdng25-2-0-cust156.15-3.cable.virginm.net) |
| 10:11:28 | → | kuribas joins (~user@ptr-25vy0i9ukrx95drquaj.18120a2.ip6.access.telenet.be) |
| 10:12:13 | → | ProfSimm joins (~ProfSimm@87.227.196.109) |
| 10:13:00 | → | cosimone joins (~user@93-47-230-184.ip115.fastwebnet.it) |
| 10:15:54 | → | kjak joins (~kjak@pool-108-45-56-21.washdc.fios.verizon.net) |
| 10:16:16 | × | yauhsien quits (~yauhsien@61-231-60-85.dynamic-ip.hinet.net) (Remote host closed the connection) |
| 10:16:49 | → | yauhsien joins (~yauhsien@61-231-60-85.dynamic-ip.hinet.net) |
| 10:18:13 | × | xff0x quits (~xff0x@125x102x200x106.ap125.ftth.ucom.ne.jp) (Ping timeout: 260 seconds) |
| 10:23:23 | × | yauhsien quits (~yauhsien@61-231-60-85.dynamic-ip.hinet.net) (Ping timeout: 260 seconds) |
| 10:28:12 | <jackdk> | tomsmeding: yeah Representable. Cool trick. I wish https://hackage.haskell.org/package/universe-1.2.2/docs/Data-Universe.html#t:Finite had a type family so you can get its cardinality at the type level =/ |
| 10:32:22 | × | Pickchea quits (~private@user/pickchea) (Ping timeout: 272 seconds) |
| 10:34:59 | → | yauhsien joins (~yauhsien@61-231-60-85.dynamic-ip.hinet.net) |
| 10:35:36 | <tomsmeding> | jackdk: ah, that Finite. Yeah, my code should be easily adaptable to use Finite instead of Enum+Bounded |
| 10:36:56 | <jackdk> | Even using representable would be a bit much for my colleagues, let alone that pastebin. But it's very cool that you can do that. |
| 10:36:59 | <tomsmeding> | perhaps Finite doesn't include the cardinality on the type level because that grows super quickly sometimes? I needed to raise type checker reduction limits to get it to typecheck my 256-element type, so what about Set (Set Int) ? |
| 10:37:12 | <tomsmeding> | heh |
| 10:38:13 | × | rembo10 quits (~rembo10@main.remulis.com) (Quit: ZNC 1.8.2 - https://znc.in) |
| 10:38:23 | <jackdk> | I don't know what back GHC's Nat or whether you could cook something up without needing induction |
| 10:39:06 | → | rembo10 joins (~rembo10@main.remulis.com) |
| 10:39:33 | × | ProfSimm quits (~ProfSimm@87.227.196.109) (Remote host closed the connection) |
| 10:41:31 | <tomsmeding> | jackdk: I can't even write the Distributive (NProduct (n + 1)) instance with GHC Nats because that instance head itself doesn't even typecheck |
| 10:41:39 | <tomsmeding> | "Illegal type synonym family application ‘n + 1’ in instance:" |
| 10:41:44 | <jackdk> | lame |
| 10:42:12 | × | mikoto-chan quits (~mikoto-ch@213.177.151.239) (Read error: No route to host) |
| 10:42:37 | <tomsmeding> | I really don't understand why the ghc nats are like this, what are you even supposed to do with type-level naturals if you can't do induction on them |
| 10:42:47 | <tomsmeding> | everything you do on the type level is based on induction |
| 10:43:08 | <c_wraith> | what GHC's type-level nats have is fast computation. relatively. |
| 10:43:12 | <c_wraith> | they lack everything else |
| 10:43:15 | <tomsmeding> | right |
| 10:43:22 | <tomsmeding> | as in, constant-time computation? |
| 10:43:41 | <c_wraith> | I suppose so, as they're fixed size. |
| 10:43:49 | <c_wraith> | they're just Int internally |
| 10:43:58 | <tomsmeding> | this is fixed size as well https://github.com/AccelerateHS/accelerate/blob/master/src/Data/Array/Accelerate/AST/Idx.hs#L75-L92 |
| 10:44:17 | <tomsmeding> | though fair, these are not type-level nats |
| 10:44:26 | × | MajorBiscuit quits (~MajorBisc@2a02:a461:129d:1:193d:75d8:745d:e91e) (Quit: WeeChat 3.4) |
| 10:44:28 | <tomsmeding> | but I wonder whether an analogous trick would be possible |
| 10:44:53 | <c_wraith> | but it's worth note that there are ghc plugins that connect up an SMT solver to calculations on Nat |
| 10:45:18 | <c_wraith> | and that's a thing that makes sense to not be part of mainline GHC |
| 10:45:38 | <tomsmeding> | c_wraith: how would I then write this? instance Distributive (NProduct n) => Distributive (NProduct ('S n)) where |
| 10:45:41 | <tomsmeding> | right |
| 10:45:51 | <tomsmeding> | use (n - 1) in the context? |
| 10:46:16 | <abastro[m]> | Create peano number datatype? |
| 10:46:21 | <tomsmeding> | abastro[m]: I did lol |
| 10:46:27 | <c_wraith> | that use of 'S looks like a peano number already |
| 10:46:36 | <tomsmeding> | c_wraith: it is, it is line 101 of https://paste.tomsmeding.com/WQYUUcfP |
| 10:46:42 | <Hecate> | < janus> Hecate: when i search for 'test' on hackage, i get lots of stuff, but on flora i get nothing // yes, it's a dev instance, only ~40 packages are imported |
| 10:46:58 | <Hecate> | < Axman6> Hecate: is flora supposed to link to module documentation? I'm not seeing anything? // nope, that's one of the UI elements that's not finished yet |
| 10:46:59 | <tomsmeding> | point is that I had to write my own peano numbers and couldn't use ghc nats, because one can't do induction over ghc nats |
| 10:47:07 | <Hecate> | < Axman6> Hecate: I find it a bit odd that the search field disappears on some page // yes it is |
| 10:47:53 | <tomsmeding> | c_wraith: (um, line 96, but you figured that out already) |
| 10:47:56 | <Hecate> | < sm> well I did install postgres just to try out a random FOSS project. // I think some paths are hardcoded in the generated cpp, that's why I stopped vendoring it. Which OS do you use? |
| 10:48:11 | <c_wraith> | tomsmeding: no I didn't! I've been awake too many hours in a row. :) |
| 10:48:19 | <tomsmeding> | :p |
| 10:49:28 | ← | jakalx parts (~jakalx@base.jakalx.net) (Error from remote client) |
| 10:50:22 | <c_wraith> | yeah, if you had a solver working on it, you'd just say that the instance for (n-1) exists |
| 10:50:34 | <tomsmeding> | right |
| 10:51:16 | <tomsmeding> | I also do induction over the type-level nats on the value level (using a manual singleton here), e.g. on lines 104--113 |
| 10:51:27 | × | perrierjouet quits (~perrier-j@modemcable012.251-130-66.mc.videotron.ca) (Quit: WeeChat 3.4.1) |
| 10:51:41 | <c_wraith> | yeah.. I didn't read the code, but that's the only reason to define SNat |
| 10:51:45 | <tomsmeding> | I find it hard to see how an SMT-based type checker plugin would provide something like that |
| 10:51:48 | <tomsmeding> | yeah |
| 10:51:54 | → | perrierjouet joins (~perrier-j@modemcable012.251-130-66.mc.videotron.ca) |
| 10:52:00 | <tomsmeding> | but you can't define SNat usefully with ghc nats!!!! |
| 10:52:12 | → | jakalx joins (~jakalx@base.jakalx.net) |
| 10:52:17 | <tomsmeding> | but maybe I'm missing some of the magic possible with type checker plugins |
| 10:52:22 | → | mikoto-chan joins (~mikoto-ch@213.177.151.239) |
| 10:53:05 | <abastro[m]> | Well you can convert typelevel Nat to your peano type using typefamily :P |
| 10:54:04 | <tomsmeding> | right, and the sensibility of that type family would then be checked by the tc plugin presumably (because you currently can't define such a type family) |
| 10:54:13 | <c_wraith> | I think the type plugin can just synthesize a KnownNat instance wherever it can calculate one. |
| 10:54:29 | <c_wraith> | So you just do your calculations at the type level then reflect down to the value level |
| 10:54:44 | <c_wraith> | it all turns into passing Int values around after compilation |
| 10:54:46 | <tomsmeding> | type family Conv (n :: TypeNats.Nat) :: Nat where Conv 0 = 'Z ; Conv n = 'S (Conv (n - 1)) |
| 10:55:24 | <tomsmeding> | maybe I should try playing with ghc nats again with that plugin |
| 10:56:23 | → | jgeerds joins (~jgeerds@d5364b87.access.ecotel.net) |
| 10:57:15 | × | lavaman quits (~lavaman@c-174-63-118-52.hsd1.ma.comcast.net) (Remote host closed the connection) |
| 10:58:52 | → | __monty__ joins (~toonn@user/toonn) |
| 11:02:06 | → | comerijn joins (~merijn@c-001-001-001.client.esciencecenter.eduvpn.nl) |
| 11:03:31 | × | merijn quits (~merijn@c-001-002-001.client.esciencecenter.eduvpn.nl) (Ping timeout: 260 seconds) |
| 11:04:06 | <abastro[m]> | I thought you could indeed define such type family.. |
| 11:04:29 | → | Benzi-Junior joins (~BenziJuni@dsl-149-64-179.hive.is) |
| 11:04:41 | <abastro[m]> | Requires UndecidableInstances but it worked iirc |
| 11:06:20 | × | phma quits (phma@2001:5b0:211c:8dc8:4016:a5c0:9e05:5df9) (Read error: Connection reset by peer) |
| 11:06:38 | × | comerijn quits (~merijn@c-001-001-001.client.esciencecenter.eduvpn.nl) (Ping timeout: 246 seconds) |
| 11:07:13 | → | Guest|68 joins (~Guest|68@88.223.202.146) |
| 11:07:29 | → | phma joins (phma@2001:5b0:211f:57f8:a451:bb44:e55e:abda) |
| 11:08:06 | × | Guest|68 quits (~Guest|68@88.223.202.146) (Client Quit) |
| 11:09:25 | <tomsmeding> | right, you can define the type family, but you can't use it |
| 11:09:29 | <tomsmeding> | or, usefully use it |
| 11:09:42 | <tomsmeding> | but perhaps that is indeed solved by some magic KnownNat dicts being generated |
| 11:14:16 | <abastro[m]> | You cannot hsefully use it? Hmm |
| 11:17:42 | × | ChaiTRex quits (~ChaiTRex@user/chaitrex) (Remote host closed the connection) |
| 11:18:07 | → | ChaiTRex joins (~ChaiTRex@user/chaitrex) |
| 11:21:35 | <Hecate> | 2 |
| 11:21:37 | <Hecate> | (woops) |
| 11:35:11 | → | dcoutts joins (~duncan@host213-122-143-81.range213-122.btcentralplus.com) |
| 11:37:33 | × | dcoutts__ quits (~duncan@host109-149-1-229.range109-149.btcentralplus.com) (Ping timeout: 260 seconds) |
| 11:39:14 | → | xff0x joins (~xff0x@i121-117-52-147.s41.a013.ap.plala.or.jp) |
| 11:40:03 | ← | jakalx parts (~jakalx@base.jakalx.net) (Error from remote client) |
| 11:40:35 | × | mikoto-chan quits (~mikoto-ch@213.177.151.239) (Ping timeout: 246 seconds) |
| 11:41:47 | × | mcgroin quits (~mcgroin@roc37-h01-176-170-197-243.dsl.sta.abo.bbox.fr) (Ping timeout: 260 seconds) |
| 11:42:57 | × | pavonia quits (~user@user/siracusa) (Quit: Bye!) |
| 11:46:04 | → | jakalx joins (~jakalx@base.jakalx.net) |
| 11:49:39 | → | ProfSimm joins (~ProfSimm@87.227.196.109) |
| 11:53:32 | × | yauhsien quits (~yauhsien@61-231-60-85.dynamic-ip.hinet.net) (Remote host closed the connection) |
| 11:53:35 | × | ProfSimm quits (~ProfSimm@87.227.196.109) (Remote host closed the connection) |
| 11:54:04 | × | raehik quits (~raehik@cpc95906-rdng25-2-0-cust156.15-3.cable.virginm.net) (Ping timeout: 272 seconds) |
| 11:55:07 | <tomsmeding> | > join (.) (ap (.)) (const id) (+1) 0 |
| 11:55:10 | <lambdabot> | 2 |
| 11:58:19 | → | eggplantade joins (~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net) |
| 11:58:48 | <maerwald[m]> | tomsmeding: did you calculate that in your head? |
| 11:59:13 | → | yauhsien joins (~yauhsien@61-231-60-85.dynamic-ip.hinet.net) |
| 11:59:27 | × | alp quits (~alp@user/alp) (Remote host closed the connection) |
| 11:59:38 | × | frost quits (~frost@user/frost) (Quit: Client closed) |
| 11:59:48 | → | alp joins (~alp@user/alp) |
| 12:00:06 | → | frost joins (~frost@user/frost) |
| 12:02:04 | → | lavaman joins (~lavaman@c-174-63-118-52.hsd1.ma.comcast.net) |
| 12:02:42 | <tomsmeding> | no lol, made good use of pointfree.io |
| 12:02:47 | × | eggplantade quits (~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net) (Ping timeout: 260 seconds) |
| 12:03:13 | <boxscape> | @unpl join (.) (ap (.)) (const id) |
| 12:03:13 | <lambdabot> | (\ b0 x -> b0 (b0 x)) (\ m2 b0 -> (m2 >>= \ x2 -> return (\ x -> b0 (x2 x))) b0) (\ _ x -> x) |
| 12:03:14 | <tomsmeding> | 'const id' is church encoded zero, 'ap (.)' is church encoded one, 'join (.)' applies twice |
| 12:03:18 | <tomsmeding> | useful! |
| 12:03:36 | <tomsmeding> | :t ap (.) |
| 12:03:37 | <lambdabot> | ((b -> c) -> a -> b) -> (b -> c) -> a -> c |
| 12:04:12 | × | mon_aaraj quits (~MonAaraj@user/mon-aaraj/x-4416475) (Read error: Connection reset by peer) |
| 12:04:16 | <int-e> | W B (S B) (K I) <-- hmm, that doesn't help as much as I thought it would. |
| 12:04:23 | <tomsmeding> | @pl \f s z -> s (f s z) |
| 12:04:23 | <lambdabot> | ap (.) |
| 12:04:27 | × | elkcl quits (~elkcl@broadband-37-110-156-162.ip.moscow.rt.ru) (Ping timeout: 250 seconds) |
| 12:04:49 | <maerwald[m]> | tomsmeding: there should be a "swear jar" for this. Please pay up ;) |
| 12:05:57 | <tomsmeding> | what, because fsz sfsz sounds like a slavic swearword? |
| 12:06:45 | <maerwald[m]> | tomsmeding: no, for aggressive obfuscation :p |
| 12:07:32 | → | mon_aaraj joins (~MonAaraj@user/mon-aaraj/x-4416475) |
| 12:07:42 | <maerwald[m]> | My guess is that's why perl died out. People just went broke |
| 12:08:08 | → | abastro joins (~abab9579@220.75.216.63) |
| 12:08:10 | × | yauhsien quits (~yauhsien@61-231-60-85.dynamic-ip.hinet.net) (Read error: Connection reset by peer) |
| 12:08:10 | <int-e> | :t const id |
| 12:08:11 | <lambdabot> | b -> a -> a |
| 12:08:35 | <tomsmeding> | :t flip const |
| 12:08:36 | <lambdabot> | b -> c -> c |
| 12:08:49 | <int-e> | :t ap (.) :: ((a -> a) -> a -> a) -> (a -> a) -> a -> a |
| 12:08:50 | <lambdabot> | ((a -> a) -> a -> a) -> (a -> a) -> a -> a |
| 12:08:53 | → | yauhsien joins (~yauhsien@61-231-60-85.dynamic-ip.hinet.net) |
| 12:09:31 | <int-e> | > let zero' = const id; succ' = ap (.) in map (\n -> n succ 0) (iterate succ zero) |
| 12:09:32 | <lambdabot> | error: |
| 12:09:32 | <lambdabot> | • Variable not in scope: zero :: (a0 -> a0) -> t0 -> b |
| 12:09:32 | <lambdabot> | • Perhaps you meant one of these: |
| 12:09:39 | <int-e> | > let zero' = const id; succ' = ap (.) in map (\n -> n succ 0) (iterate succ' zero') |
| 12:09:40 | <lambdabot> | [0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,2... |
| 12:10:04 | <maerwald[m]> | See what you did... |
| 12:10:27 | <int-e> | it's a Church thing |
| 12:10:55 | <geekosaur> | did that middle succ want to be succ' ? |
| 12:11:08 | → | ProfSimm joins (~ProfSimm@87.227.196.109) |
| 12:11:27 | <tomsmeding> | > map (flip uncurry (succ, 0)) (iterate (ap (.)) (const id)) |
| 12:11:28 | <lambdabot> | [0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,2... |
| 12:11:47 | <int-e> | geekosaur: no, \n -> n succ 0 evaluates a Church numeral to a number |
| 12:11:49 | × | tabemann quits (~travisb@2600:1700:7990:24e0:3f89:422:8b05:c533) (Remote host closed the connection) |
| 12:11:55 | × | acidjnk quits (~acidjnk@p200300d0c7049f94699c2b11d21dc0a3.dip0.t-ipconnect.de) (Ping timeout: 256 seconds) |
| 12:12:08 | → | tabemann joins (~travisb@2600:1700:7990:24e0:77bc:a0c0:b3f2:8f7c) |
| 12:13:15 | <int-e> | I also went off exploring on myself so I missed tomsmeding's explanation (it's the successor function though, not 1) |
| 12:13:50 | × | yauhsien quits (~yauhsien@61-231-60-85.dynamic-ip.hinet.net) (Ping timeout: 246 seconds) |
| 12:13:53 | <tomsmeding> | oh hah yes |
| 12:13:57 | <int-e> | *on my own |
| 12:14:12 | <tomsmeding> | in my defence, if I didn't know that, I wouldn't have succeeded in writing the obfuscated form |
| 12:14:33 | <int-e> | tomsmeding: sure. I'm familiar with errors introduced between brain and keyboard :) |
| 12:18:37 | <tomsmeding> | > map (flip uncurry (intersperse 'o', "cl")) (iterate (ap (.)) (const id)) |
| 12:18:39 | <lambdabot> | ["cl","col","coool","coooooool","coooooooooooooool","coooooooooooooooooooooo... |
| 12:21:28 | → | merijn joins (~merijn@c-001-001-001.client.esciencecenter.eduvpn.nl) |
| 12:23:25 | × | ProfSimm quits (~ProfSimm@87.227.196.109) (Remote host closed the connection) |
| 12:26:03 | × | ph88 quits (~ph88@213.23.78.154) (Quit: Leaving) |
| 12:31:07 | → | fef joins (~thedawn@user/thedawn) |
| 12:34:31 | × | dcoutts quits (~duncan@host213-122-143-81.range213-122.btcentralplus.com) (Ping timeout: 260 seconds) |
| 12:39:22 | → | raehik joins (~raehik@cpc95906-rdng25-2-0-cust156.15-3.cable.virginm.net) |
| 12:43:06 | × | mncheck quits (~mncheck@193.224.205.254) (Remote host closed the connection) |
| 12:43:20 | → | mikoto-chan joins (~mikoto-ch@213.177.151.239) |
| 12:44:13 | × | ccntrq quits (~Thunderbi@2a01:c22:88e7:1b00:3fae:5eb6:677d:a5b) (Remote host closed the connection) |
| 12:44:31 | → | ccntrq joins (~Thunderbi@2a01:c22:88e7:1b00:3fae:5eb6:677d:a5b) |
| 12:48:43 | × | mikoto-chan quits (~mikoto-ch@213.177.151.239) (Ping timeout: 260 seconds) |
| 12:49:38 | → | mcgroin joins (~mcgroin@roc37-h01-176-170-197-243.dsl.sta.abo.bbox.fr) |
| 12:51:15 | → | ProfSimm joins (~ProfSimm@87.227.196.109) |
| 12:53:00 | → | MajorBiscuit joins (~MajorBisc@86-88-79-148.fixed.kpn.net) |
| 12:53:10 | → | mncheck joins (~mncheck@193.224.205.254) |
| 12:59:23 | → | acidjnk joins (~acidjnk@p200300d0c7049f9465be138fb2fd31f4.dip0.t-ipconnect.de) |
| 13:03:23 | × | vysn quits (~vysn@user/vysn) (Remote host closed the connection) |
| 13:06:50 | × | frost quits (~frost@user/frost) (Ping timeout: 250 seconds) |
| 13:07:35 | × | littlebobeep quits (~alMalsamo@gateway/tor-sasl/almalsamo) (Ping timeout: 240 seconds) |
| 13:08:08 | × | Andrew quits (Andrew@user/AndrewYu) (Quit: Leaving) |
| 13:08:39 | → | jao joins (~jao@cpc103048-sgyl39-2-0-cust502.18-2.cable.virginm.net) |
| 13:09:28 | → | Andrew joins (~andrew@user/AndrewYu) |
| 13:10:28 | <albet70> | what's Nat? |
| 13:11:02 | <albet70> | also Void and Const type |
| 13:11:40 | <geekosaur> | Nat is type level natural (that is, non-negative) numbers |
| 13:11:54 | <geekosaur> | Void is the empty type (has no values) |
| 13:11:55 | → | mikoto-chan joins (~mikoto-ch@213.177.151.239) |
| 13:12:27 | <geekosaur> | Const is const lifted to type level: the type of (Const Foo Bar) is Bar |
| 13:13:34 | → | xkuru joins (~xkuru@user/xkuru) |
| 13:15:09 | × | mon_aaraj quits (~MonAaraj@user/mon-aaraj/x-4416475) (Ping timeout: 272 seconds) |
| 13:16:57 | → | mon_aaraj joins (~MonAaraj@user/mon-aaraj/x-4416475) |
| 13:17:05 | <albet70> | no value has Void type, what's its purpose |
| 13:17:30 | <tdammers> | the purpose of Void is to indicate that no value of that type can ever exist |
| 13:17:42 | <albet70> | Const A B is B, is redundant? |
| 13:17:58 | <tdammers> | for example, [Void] implies that it has to be an empty list, because there are no values that you could put into such a list |
| 13:18:12 | <tdammers> | well, or a list that remains thunked forever |
| 13:18:47 | <maerwald> | that's a tough fate |
| 13:19:00 | <tdammers> | poor lits |
| 13:19:02 | <tdammers> | list* |
| 13:19:05 | × | dsrt^ quits (~dsrt@c-24-99-107-170.hsd1.ga.comcast.net) (Remote host closed the connection) |
| 13:20:03 | × | wardrunal quits (~goose@167.179.114.36) (Quit: Leaving) |
| 13:20:50 | × | MajorBiscuit quits (~MajorBisc@86-88-79-148.fixed.kpn.net) (Ping timeout: 272 seconds) |
| 13:22:51 | <albet70> | and Constant type? |
| 13:24:12 | <tdammers> | basically "glue" - just like value-level const allows you to ignore an argument, and thus use a function b -> c in a context where a -> b -> c is demanded, Const allows you to ignore a type argument, and use a type of kind * -> * where one of kind * -> * -> * is demanded. |
| 13:26:40 | <abastro> | Const is useful for composition and phantom tricks, iirc |
| 13:27:15 | × | mon_aaraj quits (~MonAaraj@user/mon-aaraj/x-4416475) (Ping timeout: 260 seconds) |
| 13:29:16 | → | mon_aaraj joins (~MonAaraj@user/mon-aaraj/x-4416475) |
| 13:30:19 | × | briandaed quits (~root@109.95.142.93.r.toneticgroup.pl) (Remote host closed the connection) |
| 13:31:19 | → | littlebobeep joins (~alMalsamo@gateway/tor-sasl/almalsamo) |
| 13:31:41 | × | odnes quits (~odnes@5-203-245-187.pat.nym.cosmote.net) (Quit: Leaving) |
| 13:32:02 | → | MajorBiscuit joins (~MajorBisc@2a02:a461:129d:1:6d4c:38a4:18b7:4b48) |
| 13:32:28 | × | mikoto-chan quits (~mikoto-ch@213.177.151.239) (Ping timeout: 260 seconds) |
| 13:34:07 | → | mikoto-chan joins (~mikoto-ch@213.177.151.239) |
| 13:37:56 | × | mon_aaraj quits (~MonAaraj@user/mon-aaraj/x-4416475) (Ping timeout: 272 seconds) |
| 13:39:39 | → | mon_aaraj joins (~MonAaraj@user/mon-aaraj/x-4416475) |
| 13:40:03 | × | ProfSimm quits (~ProfSimm@87.227.196.109) (Remote host closed the connection) |
| 13:40:17 | → | ProfSimm joins (~ProfSimm@87.227.196.109) |
| 13:41:21 | → | wroathe joins (~wroathe@206-55-188-8.fttp.usinternet.com) |
| 13:41:21 | × | wroathe quits (~wroathe@206-55-188-8.fttp.usinternet.com) (Changing host) |
| 13:41:21 | → | wroathe joins (~wroathe@user/wroathe) |
| 13:41:55 | × | hololeap quits (~hololeap@user/hololeap) (Quit: Bye) |
| 13:42:22 | → | elkcl joins (~elkcl@broadband-37-110-156-162.ip.moscow.rt.ru) |
| 13:43:22 | → | shriekingnoise joins (~shrieking@201.231.16.156) |
| 13:47:23 | × | MajorBiscuit quits (~MajorBisc@2a02:a461:129d:1:6d4c:38a4:18b7:4b48) (Ping timeout: 250 seconds) |
| 13:50:32 | → | Pickchea joins (~private@user/pickchea) |
| 13:51:21 | × | Hash quits (~Hash@hey.howstoned.ru) (Quit: ZNC - https://znc.in) |
| 13:53:28 | × | mcgroin quits (~mcgroin@roc37-h01-176-170-197-243.dsl.sta.abo.bbox.fr) (Ping timeout: 260 seconds) |
| 13:53:51 | × | alp quits (~alp@user/alp) (Ping timeout: 260 seconds) |
| 13:55:10 | → | Hash joins (~Hash@hey.howstoned.ru) |
| 13:55:15 | × | vicfred quits (~vicfred@user/vicfred) (Quit: Leaving) |
| 13:55:39 | × | geekosaur quits (~geekosaur@xmonad/geekosaur) (Quit: Leaving) |
| 13:56:11 | × | APic quits (apic@apic.name) (Quit: [TLS] Client upgrade) |
| 13:56:24 | → | APic joins (apic@apic.name) |
| 13:56:42 | <napping> | If you are using a GADT to define a subset type, like a (Term hasVars) with a constructor Var :: .. -> Term Open and everything else returns a Term hasVars so you know a Term Closed has no Var, is there a way to weaken Term Closed to Term Open without traversing the data, besides unsafeCoerce? |
| 13:56:53 | → | geekosaur joins (~geekosaur@xmonad/geekosaur) |
| 13:57:40 | × | codedmart quits (~codedmart@li335-49.members.linode.com) (Quit: ZNC 1.7.5+deb4 - https://znc.in) |
| 13:58:13 | × | acidjnk quits (~acidjnk@p200300d0c7049f9465be138fb2fd31f4.dip0.t-ipconnect.de) (Ping timeout: 250 seconds) |
| 13:58:31 | <merijn> | :t absurd |
| 13:58:32 | <lambdabot> | Void -> a |
| 13:58:39 | <merijn> | Some form of fmap + absurd? |
| 13:59:28 | → | kaph joins (~kaph@net-93-67-57-97.cust.vodafonedsl.it) |
| 14:00:10 | → | codedmart joins (codedmart@2600:3c01::f03c:92ff:fefe:8511) |
| 14:00:25 | <napping> | But fmap walks the term, no? |
| 14:00:28 | <int-e> | Probably not, because Haskell's type system doesn't track variance of type arguments, so the compiler can't be convinced that coercing is safe. |
| 14:02:49 | → | briandaed joins (~root@109.95.142.93.r.toneticgroup.pl) |
| 14:05:29 | × | wroathe quits (~wroathe@user/wroathe) (Ping timeout: 256 seconds) |
| 14:05:35 | × | littlebobeep quits (~alMalsamo@gateway/tor-sasl/almalsamo) (Ping timeout: 240 seconds) |
| 14:05:49 | <int-e> | For this GADT you can easily break it by adding an extra constructor (producing a Term Closed), again something that isn't tracked in the type system. |
| 14:12:54 | → | cosimone` joins (~user@93-47-230-184.ip115.fastwebnet.it) |
| 14:14:38 | × | lortabac quits (~lortabac@2a01:e0a:541:b8f0:3685:42fa:d9de:143d) (Quit: WeeChat 2.8) |
| 14:14:51 | × | cosimone quits (~user@93-47-230-184.ip115.fastwebnet.it) (Ping timeout: 260 seconds) |
| 14:15:28 | <napping> | I guess I'll just have to check how much it gets in the way of optimizations |
| 14:17:26 | → | Akiva joins (~Akiva@user/Akiva) |
| 14:17:57 | × | Hash quits (~Hash@hey.howstoned.ru) (Quit: ZNC - https://znc.in) |
| 14:18:37 | × | raehik quits (~raehik@cpc95906-rdng25-2-0-cust156.15-3.cable.virginm.net) (Ping timeout: 240 seconds) |
| 14:20:44 | → | raehik joins (~raehik@cpc95906-rdng25-2-0-cust156.15-3.cable.virginm.net) |
| 14:21:42 | → | MajorBiscuit joins (~MajorBisc@2a02:a461:129d:1:6d4c:38a4:18b7:4b48) |
| 14:21:50 | → | dcoutts joins (~duncan@host213-122-143-81.range213-122.btcentralplus.com) |
| 14:23:19 | × | ProfSimm quits (~ProfSimm@87.227.196.109) (Remote host closed the connection) |
| 14:29:58 | → | tiferrei2000 joins (~tiferrei@user/tiferrei) |
| 14:30:55 | × | tiferrei quits (~tiferrei@user/tiferrei) (Ping timeout: 240 seconds) |
| 14:31:58 | × | vpan quits (~0@212.117.1.172) (Quit: Leaving.) |
| 14:33:42 | → | [itchyjunk] joins (~itchyjunk@user/itchyjunk/x-7353470) |
| 14:36:26 | → | Hash joins (~Hash@hey.howstoned.ru) |
| 14:36:27 | → | fizbin joins (~fizbin@c-73-33-197-160.hsd1.nj.comcast.net) |
| 14:36:38 | × | Pickchea quits (~private@user/pickchea) (Ping timeout: 252 seconds) |
| 14:43:18 | → | yauhsien joins (~yauhsien@61-231-60-85.dynamic-ip.hinet.net) |
| 14:43:47 | × | Hash quits (~Hash@hey.howstoned.ru) (Ping timeout: 260 seconds) |
| 14:45:03 | → | zebrag joins (~chris@user/zebrag) |
| 14:47:35 | <kuribas> | albet70: Void is used for example by the generics-eot library. Since it corresponds to zero, it is the identity element of sum types (Either). |
| 14:47:50 | × | cosimone` quits (~user@93-47-230-184.ip115.fastwebnet.it) (Ping timeout: 246 seconds) |
| 14:47:59 | × | yauhsien quits (~yauhsien@61-231-60-85.dynamic-ip.hinet.net) (Ping timeout: 260 seconds) |
| 14:48:48 | × | lyxia quits (~lyxia@poisson.chat) (Quit: WeeChat 3.3) |
| 14:49:05 | <kuribas> | albet70: x + 0 = x "Either x Void" is isomorphic to x" |
| 14:49:52 | × | APic quits (apic@apic.name) (Remote host closed the connection) |
| 14:51:30 | × | cdman quits (~dcm@user/dmc/x-4369397) (Quit: Leaving) |
| 14:51:38 | × | codedmart quits (codedmart@2600:3c01::f03c:92ff:fefe:8511) (Quit: ZNC 1.7.5+deb4 - https://znc.in) |
| 14:51:38 | <kuribas> | likewise, unit () is the identity element of product types, since (x, ()) ~= x |
| 14:51:49 | <kuribas> | unit corresponds to 1, 1 * x = x |
| 14:51:59 | → | codedmart joins (codedmart@2600:3c01::f03c:92ff:fefe:8511) |
| 14:54:59 | × | MajorBiscuit quits (~MajorBisc@2a02:a461:129d:1:6d4c:38a4:18b7:4b48) (Ping timeout: 260 seconds) |
| 14:56:41 | × | ccntrq quits (~Thunderbi@2a01:c22:88e7:1b00:3fae:5eb6:677d:a5b) (Remote host closed the connection) |
| 14:56:46 | × | Andrew quits (~andrew@user/AndrewYu) (Quit: identd is broken) |
| 14:57:36 | × | cfricke quits (~cfricke@user/cfricke) (Quit: WeeChat 3.4.1) |
| 14:57:38 | → | Andrew joins (Andrew@user/AndrewYu) |
| 15:00:18 | → | acidjnk joins (~acidjnk@p200300d0c7049f9465be138fb2fd31f4.dip0.t-ipconnect.de) |
| 15:00:40 | → | Hash joins (~Hash@hey.howstoned.ru) |
| 15:00:45 | → | eggplantade joins (~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net) |
| 15:01:34 | → | cfricke joins (~cfricke@user/cfricke) |
| 15:02:53 | × | raehik quits (~raehik@cpc95906-rdng25-2-0-cust156.15-3.cable.virginm.net) (Ping timeout: 246 seconds) |
| 15:03:04 | × | Hash quits (~Hash@hey.howstoned.ru) (Max SendQ exceeded) |
| 15:03:40 | × | zaquest quits (~notzaques@5.130.79.72) (Remote host closed the connection) |
| 15:04:29 | <kuribas> | albet70: so you can think of sum types as a (type level) fold over a list of types, using Either and Void. |
| 15:04:42 | <kuribas> | albet70: and product types over (,) and () |
| 15:04:54 | → | cosimone` joins (~user@2001:b07:ae5:db26:c24a:d20:4d91:1e20) |
| 15:05:08 | → | Hash joins (~Hash@hey.howstoned.ru) |
| 15:05:20 | × | eggplantade quits (~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net) (Ping timeout: 272 seconds) |
| 15:05:57 | → | lyxia joins (~lyxia@poisson.chat) |
| 15:06:31 | <kuribas> | albet70: for example, in idris: |
| 15:06:37 | <kuribas> | (foldr Either Void (the (List Type) [Int, String])) => Either Int (Either String Void) |
| 15:07:00 | → | Sgeo joins (~Sgeo@user/sgeo) |
| 15:07:06 | <kuribas> | (foldr (,) () (the (List Type) [Int, String])) => (Int, (String, ())) |
| 15:07:52 | → | justsomeguy joins (~justsomeg@user/justsomeguy) |
| 15:08:33 | × | Hash quits (~Hash@hey.howstoned.ru) (Max SendQ exceeded) |
| 15:09:54 | → | o-90 joins (~o-90@gateway/tor-sasl/o-90) |
| 15:10:18 | <abastro> | Utilizing haskell to memorize manifold analysis: https://paste.tomsmeding.com/NtB6x6VI |
| 15:10:38 | <abastro> | (Wait, does this ping tomsmed) |
| 15:11:17 | → | Hash joins (~Hash@hey.howstoned.ru) |
| 15:12:28 | × | o-90 quits (~o-90@gateway/tor-sasl/o-90) (Remote host closed the connection) |
| 15:12:35 | <geekosaur> | his client does regex matching, so I wrote him a custom matching regex that ignores paste urls |
| 15:12:48 | × | cosimone` quits (~user@2001:b07:ae5:db26:c24a:d20:4d91:1e20) (Ping timeout: 260 seconds) |
| 15:13:12 | × | cfricke quits (~cfricke@user/cfricke) (Quit: WeeChat 3.4.1) |
| 15:14:22 | × | Hash quits (~Hash@hey.howstoned.ru) (Max SendQ exceeded) |
| 15:16:28 | → | Hash joins (~Hash@hey.howstoned.ru) |
| 15:17:29 | × | fryguybob quits (~fryguybob@cpe-74-67-169-145.rochester.res.rr.com) (Quit: leaving) |
| 15:19:09 | × | coot quits (~coot@213.134.190.95) (Quit: coot) |
| 15:19:26 | → | yauhsien joins (~yauhsien@61-231-60-85.dynamic-ip.hinet.net) |
| 15:20:34 | <abastro> | Oh, that's relieving |
| 15:20:51 | → | MajorBiscuit joins (~MajorBisc@86-88-79-148.fixed.kpn.net) |
| 15:21:03 | × | MajorBiscuit quits (~MajorBisc@86-88-79-148.fixed.kpn.net) (Client Quit) |
| 15:22:20 | <geekosaur> | (and will ignore play when that comes online) |
| 15:23:12 | × | Hash quits (~Hash@hey.howstoned.ru) (Max SendQ exceeded) |
| 15:24:31 | → | Hash joins (~Hash@hey.howstoned.ru) |
| 15:24:36 | → | alp joins (~alp@user/alp) |
| 15:26:14 | × | abastro quits (~abab9579@220.75.216.63) (Ping timeout: 272 seconds) |
| 15:28:38 | × | Hash quits (~Hash@hey.howstoned.ru) (Remote host closed the connection) |
| 15:29:04 | → | fizbin_ joins (~fizbin@c-73-33-197-160.hsd1.nj.comcast.net) |
| 15:29:42 | → | Hash joins (~Hash@hey.howstoned.ru) |
| 15:30:50 | → | APic joins (apic@apic.name) |
| 15:31:03 | × | merijn quits (~merijn@c-001-001-001.client.esciencecenter.eduvpn.nl) (Ping timeout: 256 seconds) |
| 15:31:23 | × | deadmarshal_ quits (~deadmarsh@95.38.119.22) (Ping timeout: 260 seconds) |
| 15:32:13 | × | jgeerds quits (~jgeerds@d5364b87.access.ecotel.net) (Ping timeout: 240 seconds) |
| 15:32:38 | × | fizbin quits (~fizbin@c-73-33-197-160.hsd1.nj.comcast.net) (Ping timeout: 246 seconds) |
| 15:35:10 | × | Hash quits (~Hash@hey.howstoned.ru) (Max SendQ exceeded) |
| 15:35:44 | → | Hash joins (~Hash@hey.howstoned.ru) |
| 15:37:38 | × | doyougnu quits (~doyougnu@cpe-67-249-83-190.twcny.res.rr.com) (Ping timeout: 272 seconds) |
| 15:37:51 | × | dispater quits (~dispater@user/brprice) (Quit: ZNC 1.8.2 - https://znc.in) |
| 15:37:51 | × | orcus quits (~orcus@user/brprice) (Quit: ZNC 1.8.2 - https://znc.in) |
| 15:40:59 | × | Hash quits (~Hash@hey.howstoned.ru) (Ping timeout: 252 seconds) |
| 15:41:26 | × | lambdabot quits (~lambdabot@haskell/bot/lambdabot) (Ping timeout: 272 seconds) |
| 15:42:33 | × | acidjnk quits (~acidjnk@p200300d0c7049f9465be138fb2fd31f4.dip0.t-ipconnect.de) (Ping timeout: 260 seconds) |
| 15:42:53 | → | eggplantade joins (~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net) |
| 15:45:14 | × | mniip quits (mniip@libera/staff/mniip) (Ping timeout: 604 seconds) |
| 15:45:15 | → | Hash joins (~Hash@hey.howstoned.ru) |
| 15:48:03 | × | yauhsien quits (~yauhsien@61-231-60-85.dynamic-ip.hinet.net) (Remote host closed the connection) |
| 15:49:39 | → | yauhsien joins (~yauhsien@61-231-60-85.dynamic-ip.hinet.net) |
| 15:50:42 | → | lambdabot joins (~lambdabot@silicon.int-e.eu) |
| 15:50:42 | × | lambdabot quits (~lambdabot@silicon.int-e.eu) (Changing host) |
| 15:50:42 | → | lambdabot joins (~lambdabot@haskell/bot/lambdabot) |
| 15:52:04 | → | dispater joins (~dispater@user/brprice) |
| 15:52:36 | → | orcus joins (~orcus@user/brprice) |
| 15:54:15 | × | dcoutts quits (~duncan@host213-122-143-81.range213-122.btcentralplus.com) (Ping timeout: 260 seconds) |
| 15:54:32 | × | eggplantade quits (~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net) (Remote host closed the connection) |
| 15:56:36 | → | zeenk joins (~zeenk@2a02:2f04:a313:d600:8d26:ec9f:3ff6:fc94) |
| 15:57:39 | × | Vajb quits (~Vajb@hag-jnsbng11-58c3a8-176.dhcp.inet.fi) (Read error: Connection reset by peer) |
| 15:57:50 | → | Vajb joins (~Vajb@85-76-32-79-nat.elisa-mobile.fi) |
| 15:57:56 | <sm> | Hecate: mac |
| 15:58:37 | → | Pickchea joins (~private@user/pickchea) |
| 15:58:38 | × | Vajb quits (~Vajb@85-76-32-79-nat.elisa-mobile.fi) (Read error: Connection reset by peer) |
| 15:58:41 | → | eggplantade joins (~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net) |
| 16:02:03 | → | Vajb joins (~Vajb@hag-jnsbng11-58c3a8-176.dhcp.inet.fi) |
| 16:02:44 | → | Guest|66 joins (~Guest|66@199.27.253.178) |
| 16:02:51 | → | lbseale joins (~ep1ctetus@user/ep1ctetus) |
| 16:04:05 | → | econo joins (uid147250@user/econo) |
| 16:04:46 | × | Vajb quits (~Vajb@hag-jnsbng11-58c3a8-176.dhcp.inet.fi) (Read error: Connection reset by peer) |
| 16:04:52 | × | fizbin_ quits (~fizbin@c-73-33-197-160.hsd1.nj.comcast.net) (Remote host closed the connection) |
| 16:04:56 | → | MajorBiscuit joins (~MajorBisc@2a02:a461:129d:1:6d4c:38a4:18b7:4b48) |
| 16:05:39 | → | mniip joins (mniip@libera/staff/mniip) |
| 16:05:58 | → | merijn joins (~merijn@c-001-001-001.client.esciencecenter.eduvpn.nl) |
| 16:06:35 | → | tzh joins (~tzh@c-24-21-73-154.hsd1.or.comcast.net) |
| 16:07:23 | → | Vajb joins (~Vajb@2001:999:62:aa00:7f5a:4f10:c894:3813) |
| 16:08:35 | → | ec joins (~ec@gateway/tor-sasl/ec) |
| 16:09:14 | × | eggplantade quits (~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net) (Remote host closed the connection) |
| 16:10:36 | × | merijn quits (~merijn@c-001-001-001.client.esciencecenter.eduvpn.nl) (Ping timeout: 240 seconds) |
| 16:12:54 | → | jgeerds joins (~jgeerds@d5364b87.access.ecotel.net) |
| 16:13:06 | × | mon_aaraj quits (~MonAaraj@user/mon-aaraj/x-4416475) (Ping timeout: 272 seconds) |
| 16:14:39 | → | mon_aaraj joins (~MonAaraj@user/mon-aaraj/x-4416475) |
| 16:20:06 | → | zaquest joins (~notzaques@5.130.79.72) |
| 16:22:37 | → | dextaa_ joins (~dextaa@user/dextaa) |
| 16:23:02 | × | zmt00 quits (~zmt00@user/zmt00) (Read error: Connection reset by peer) |
| 16:24:55 | → | zmt00 joins (~zmt00@user/zmt00) |
| 16:31:46 | × | zeenk quits (~zeenk@2a02:2f04:a313:d600:8d26:ec9f:3ff6:fc94) (Quit: Konversation terminated!) |
| 16:32:37 | → | waleee joins (~waleee@2001:9b0:213:7200:cc36:a556:b1e8:b340) |
| 16:33:50 | → | eggplantade joins (~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net) |
| 16:35:48 | → | lackboardNB joins (~nathan@2601:602:9e00:365:6c3f:7fdf:c12d:a105) |
| 16:36:11 | × | lackboardNB quits (~nathan@2601:602:9e00:365:6c3f:7fdf:c12d:a105) (Client Quit) |
| 16:37:01 | × | jgeerds quits (~jgeerds@d5364b87.access.ecotel.net) (Ping timeout: 245 seconds) |
| 16:39:31 | → | cosimone joins (~user@93-47-230-184.ip115.fastwebnet.it) |
| 16:41:00 | × | Pickchea quits (~private@user/pickchea) (Ping timeout: 240 seconds) |
| 16:41:23 | × | mon_aaraj quits (~MonAaraj@user/mon-aaraj/x-4416475) (Ping timeout: 260 seconds) |
| 16:43:20 | → | mon_aaraj joins (~MonAaraj@user/mon-aaraj/x-4416475) |
| 16:43:34 | → | slack1256 joins (~slack1256@186.11.56.117) |
| 16:43:34 | → | lackboardNB joins (~nathan@2601:602:9e00:365:6c3f:7fdf:c12d:a105) |
| 16:43:55 | × | lackboardNB quits (~nathan@2601:602:9e00:365:6c3f:7fdf:c12d:a105) (Remote host closed the connection) |
| 16:44:32 | → | lackboardNB joins (~nathan@2601:602:9e00:365:6c3f:7fdf:c12d:a105) |
| 16:45:52 | × | lackboardNB quits (~nathan@2601:602:9e00:365:6c3f:7fdf:c12d:a105) (Remote host closed the connection) |
| 16:46:27 | → | arjun joins (~arjun@user/arjun) |
| 16:47:24 | → | lackboardNB joins (~nathan@2601:602:9e00:365:6c3f:7fdf:c12d:a105) |
| 16:47:33 | <arjun> | hi, can someone tell me whats the deal with the 'forall' stuff goin here -> https://pastebin.com/iNiaTqKt |
| 16:48:00 | <arjun> | how does that imply that we cannot do anything with it and just pass it around? |
| 16:50:57 | × | yauhsien quits (~yauhsien@61-231-60-85.dynamic-ip.hinet.net) (Remote host closed the connection) |
| 16:51:39 | → | yauhsien joins (~yauhsien@61-231-60-85.dynamic-ip.hinet.net) |
| 16:52:22 | × | justsomeguy quits (~justsomeg@user/justsomeguy) (Ping timeout: 272 seconds) |
| 16:52:34 | <geekosaur> | because `x` is under an inner forall, all you can do is something that will work for any type. but the only things that work for any type are passing it around and throwing an exception |
| 16:53:36 | → | justsomeguy joins (~justsomeg@user/justsomeguy) |
| 16:54:02 | → | deadmarshal_ joins (~deadmarsh@95.38.119.22) |
| 16:54:06 | × | lackboardNB quits (~nathan@2601:602:9e00:365:6c3f:7fdf:c12d:a105) (Ping timeout: 245 seconds) |
| 16:55:55 | <arjun> | :ded: |
| 16:56:26 | × | mon_aaraj quits (~MonAaraj@user/mon-aaraj/x-4416475) (Ping timeout: 260 seconds) |
| 16:56:35 | <arjun> | and removing this inner forall would make a difference? since we have implicit foralls, or are those just for "outer" levels? |
| 16:56:38 | × | yauhsien quits (~yauhsien@61-231-60-85.dynamic-ip.hinet.net) (Ping timeout: 260 seconds) |
| 16:57:13 | → | bahamas joins (~lucian@84.232.140.158) |
| 16:57:17 | <geekosaur> | just for outer, yes |
| 16:57:37 | <arjun> | also, what kind of a signature is f a -> g a ? :x or am i just too used to seeing a -> b |
| 16:58:05 | <arjun> | i mean, what would f here even be ? |
| 16:58:07 | <geekosaur> | f might be something like Maybe or [] |
| 16:58:20 | → | mon_aaraj joins (~MonAaraj@user/mon-aaraj/x-4416475) |
| 16:58:22 | <arjun> | a * -> * ? since it's a functor? |
| 16:58:23 | × | deadmarshal_ quits (~deadmarsh@95.38.119.22) (Ping timeout: 246 seconds) |
| 16:58:26 | <geekosaur> | (and [] Int is the same as [Int]) |
| 16:58:34 | <geekosaur> | yes |
| 16:58:36 | <arjun> | i see |
| 16:58:40 | <arjun> | that helped |
| 16:58:42 | <arjun> | thanks man |
| 16:59:26 | → | benin joins (~benin@183.82.204.110) |
| 16:59:32 | × | benin quits (~benin@183.82.204.110) (Client Quit) |
| 16:59:57 | <arjun> | so, without the implicit forall a function [a] -> [a] would not see the 'a' on LHS is same as the 'a' on RHS ? |
| 17:00:18 | <geekosaur> | no, we know they are the same since they're the type variable |
| 17:00:35 | <geekosaur> | the question is whether you (i.e. the function) can know what that type is or not |
| 17:00:38 | → | BlackboardN joins (~nathan@2601:602:9e00:365:6c3f:7fdf:c12d:a105) |
| 17:00:49 | × | BlackboardN quits (~nathan@2601:602:9e00:365:6c3f:7fdf:c12d:a105) (Changing host) |
| 17:00:49 | → | BlackboardN joins (~nathan@user/BlackboardN) |
| 17:00:52 | <arjun> | should it even care? |
| 17:01:06 | <geekosaur> | in this case, no. that's kinda the point |
| 17:01:32 | <arjun> | gotch'a |
| 17:01:48 | <geekosaur> | if you knew, you could do something illegal (in this case, changing the structure of the Stream) |
| 17:01:56 | → | kor1 joins (~kor1@201.17.127.170) |
| 17:02:11 | <arjun> | how trusting |
| 17:03:06 | <arjun> | but that's an interesting, could you brief it a little more? |
| 17:03:41 | <geekosaur> | well, the whole point of having a strong type system is enforcing rather than trusting :) |
| 17:04:02 | × | kor1 quits (~kor1@201.17.127.170) (Client Quit) |
| 17:04:13 | → | kor1 joins (~kor1@user/kor1) |
| 17:04:26 | <arjun> | like, how does me knowing the type, would allow me to change the structure of the stream? |
| 17:04:35 | × | justsomeguy quits (~justsomeg@user/justsomeguy) (Quit: WeeChat 3.4) |
| 17:04:54 | <arjun> | an [Int] -> [Int] would not change it much |
| 17:05:12 | <arjun> | Maybe Int porbably could because of Nothing |
| 17:05:19 | <geekosaur> | if you know the type you can use alternative values. (I admit to being puzzled as to how this changes the *structure* as opposed to the *content*, but I don't know anyting about the Stream type beyond your paste) |
| 17:05:40 | <kuribas> | arjun: you know haskell is hiding a forall whenever there is a free type variable? |
| 17:05:52 | <kuribas> | geekosaur: could be using type families? |
| 17:06:09 | <geekosaur> | context: https://pastebin.com/iNiaTqKt |
| 17:06:15 | <arjun> | kuribas, i have a vague idea, yes |
| 17:06:26 | <kuribas> | arjun: so, "id :: a -> a" is a bit of a lie, it actually means "id :: forall a. a -> a" |
| 17:06:26 | × | Vajb quits (~Vajb@2001:999:62:aa00:7f5a:4f10:c894:3813) (Read error: Connection reset by peer) |
| 17:06:34 | <arjun> | sure |
| 17:06:34 | → | Vajb joins (~Vajb@hag-jnsbng11-58c3a8-176.dhcp.inet.fi) |
| 17:06:52 | × | kor1 quits (~kor1@user/kor1) (Client Quit) |
| 17:07:19 | → | kor1 joins (~kor1@user/kor1) |
| 17:07:23 | <kuribas> | arjun: if you take curry/howard, then the forall is just another argument. But one that takes a type. |
| 17:08:30 | <arjun> | i am not familiar with curry/howard but please continue, i'll read up on that later today |
| 17:08:37 | × | mon_aaraj quits (~MonAaraj@user/mon-aaraj/x-4416475) (Ping timeout: 240 seconds) |
| 17:08:40 | <kuribas> | arjun: each time you call the function with a forall, you are passing a type to it. |
| 17:08:51 | <kuribas> | arjun: in haskell, it is done implicitly by the type inference engine. |
| 17:09:26 | <kuribas> | with RankN, it means you can use the same function with different types. |
| 17:09:47 | → | fizbin joins (~fizbin@c-73-33-197-160.hsd1.nj.comcast.net) |
| 17:09:54 | <kuribas> | like (forall a.a -> a) -> (Int, String) -> (Int, String) |
| 17:10:10 | → | benin joins (~benin@183.82.204.110) |
| 17:10:16 | <kuribas> | now, the first function can be called on an Int as well as on a String. |
| 17:10:27 | <arjun> | sure, thus the type variable |
| 17:10:42 | <arjun> | which probably solidifies when we call it |
| 17:10:46 | → | mon_aaraj joins (~MonAaraj@user/mon-aaraj/x-4416475) |
| 17:10:54 | <kuribas> | arjun: but if you write (a -> a) -> (Int, String) -> (Int, String), the "a" can be only one thing. |
| 17:11:37 | <arjun> | i SEE |
| 17:11:49 | × | kor1 quits (~kor1@user/kor1) (Ping timeout: 240 seconds) |
| 17:12:06 | <arjun> | not much of a type-variable then is it? |
| 17:12:06 | <kuribas> | With RankN, the called function has the choice to use it with another type. |
| 17:12:16 | <geekosaur> | and while it might be Int or String, you don't know the type. with the forall, the caller must pass something that will work with any type (as, without the forall, you would have to be ready to deal with any type. both modified by constraints of course) |
| 17:12:34 | → | kor1 joins (~kor1@user/kor1) |
| 17:12:41 | <kuribas> | yes |
| 17:13:18 | <kuribas> | arjun: yes, still a type variable, but the moment when it is "filled" or "passed", is different. |
| 17:14:16 | <arjun> | srry, i think i miss-understood, "but if you write (a -> a) -> (Int, String) -> (Int, String), the "a" can be only one thing" |
| 17:14:30 | <arjun> | i thought a could only be 1 type |
| 17:14:36 | <kuribas> | arjun: it can always only be one thing. |
| 17:15:03 | <arjun> | but i think you were saying, since we have a pair, the function can be one, that works on either type |
| 17:15:17 | <kuribas> | type variable always have to be applied somewhere. |
| 17:15:30 | <kuribas> | hmm gtg. |
| 17:15:39 | <kuribas> | I leave it to the other people here :) |
| 17:15:52 | <arjun> | alright, thanks for help, i'll read it back again |
| 17:16:52 | × | kor1 quits (~kor1@user/kor1) (Client Quit) |
| 17:16:53 | <geekosaur> | so the `a` always has to be one type, the question is who knows that type |
| 17:17:05 | <geekosaur> | (I admit I'm starting to skate on thin ice here) |
| 17:17:18 | → | kor1 joins (~kor1@user/kor1) |
| 17:17:20 | × | kuribas quits (~user@ptr-25vy0i9ukrx95drquaj.18120a2.ip6.access.telenet.be) (Quit: ERC (IRC client for Emacs 26.3)) |
| 17:17:55 | <geekosaur> | actually I think I'll withdraw too, I'm confusing myself :( |
| 17:18:05 | <arjun> | i think i did too : P |
| 17:18:21 | <arjun> | thanks for engaging : ) |
| 17:18:23 | <geekosaur> | I know in practice what's going on, describing it sanely is another question… |
| 17:18:43 | × | slack1256 quits (~slack1256@186.11.56.117) (Ping timeout: 256 seconds) |
| 17:20:30 | → | yauhsien joins (~yauhsien@61-231-60-85.dynamic-ip.hinet.net) |
| 17:23:16 | × | kor1 quits (~kor1@user/kor1) (Ping timeout: 245 seconds) |
| 17:23:57 | × | mbuf quits (~Shakthi@122.162.64.255) (Quit: Leaving) |
| 17:24:20 | → | kor1 joins (~kor1@user/kor1) |
| 17:26:07 | → | neverfindme joins (~hayden@158.123.160.43) |
| 17:28:13 | × | neverfindme quits (~hayden@158.123.160.43) (Remote host closed the connection) |
| 17:28:21 | → | _ht joins (~quassel@231-169-21-31.ftth.glasoperator.nl) |
| 17:28:50 | × | kor1 quits (~kor1@user/kor1) (Ping timeout: 246 seconds) |
| 17:30:07 | × | stewpot quits (~stewpot@2a02:c7e:34de:4500:c0b2:5560:8807:6081) (Remote host closed the connection) |
| 17:31:14 | × | Guest|66 quits (~Guest|66@199.27.253.178) (Quit: Connection closed) |
| 17:31:57 | → | ProfSimm joins (~ProfSimm@87.227.196.109) |
| 17:34:12 | × | MajorBiscuit quits (~MajorBisc@2a02:a461:129d:1:6d4c:38a4:18b7:4b48) (Ping timeout: 240 seconds) |
| 17:41:35 | → | MajorBiscuit joins (~MajorBisc@86-88-79-148.fixed.kpn.net) |
| 17:41:45 | × | cheater quits (~Username@user/cheater) (Quit: (BitchX) Eat, drink and be merry...for tomorrow we die) |
| 17:44:11 | × | lagash quits (lagash@lagash.shelltalk.net) (Ping timeout: 252 seconds) |
| 17:46:36 | × | ec quits (~ec@gateway/tor-sasl/ec) (Quit: ec) |
| 17:47:04 | <maerwald> | arjun: hey |
| 17:47:42 | → | doyougnu joins (~doyougnu@cpe-67-249-83-190.twcny.res.rr.com) |
| 17:48:38 | → | cheater joins (~Username@user/cheater) |
| 17:48:54 | <arjun> | hey maerwald |
| 17:49:02 | <maerwald> | we need someone with css knowledge |
| 17:49:20 | <arjun> | *maerwald has 2 wishes left* |
| 17:49:36 | <maerwald> | arjun: http://play-haskell.tomsmeding.com:8123/play |
| 17:49:50 | × | fef quits (~thedawn@user/thedawn) (Quit: Leaving) |
| 17:49:56 | → | raehik joins (~raehik@cpc95906-rdng25-2-0-cust156.15-3.cable.virginm.net) |
| 17:50:12 | → | coot joins (~coot@213.134.190.95) |
| 17:50:22 | <arjun> | that doesn't look too bad |
| 17:50:49 | <arjun> | whattya need done with it? |
| 17:51:50 | <maerwald> | https://github.com/tomsmeding/pastebin-haskell/blob/play/play.mustache |
| 17:51:54 | <maerwald> | I dunno, make it better :D |
| 17:52:08 | <sm> | my suggestion was add a ui kit such as tailwindcss |
| 17:52:28 | <maerwald> | arjun: can't even resize the sections |
| 17:52:43 | <maerwald> | like here https://play.rust-lang.org/ |
| 17:53:30 | <arjun> | sm depends what you want to do with it tbh |
| 17:53:50 | <sm> | maerwald just said, he wants to "make it pretty" |
| 17:53:51 | × | mniip quits (mniip@libera/staff/mniip) (Ping timeout: 606 seconds) |
| 17:54:01 | <sm> | pretty/consistent/more usable |
| 17:54:17 | → | mniip joins (mniip@libera/staff/mniip) |
| 17:54:18 | <arjun> | maerwald, i'll look into it. i don't suppose we'd have a design or anything at hand? |
| 17:54:32 | <arjun> | you don't need it urgent right? |
| 17:54:40 | <maerwald> | no, just people who design html pages as if it was the 80s |
| 17:56:07 | × | MajorBiscuit quits (~MajorBisc@86-88-79-148.fixed.kpn.net) (Quit: WeeChat 3.4) |
| 17:56:36 | × | mncheck quits (~mncheck@193.224.205.254) (Ping timeout: 240 seconds) |
| 18:00:46 | → | lagash joins (lagash@lagash.shelltalk.net) |
| 18:05:54 | × | coot quits (~coot@213.134.190.95) (Quit: coot) |
| 18:06:01 | → | coot joins (~coot@2a02:a310:e241:1b00:ec1a:e9df:79ac:66ba) |
| 18:06:58 | → | segfaultfizzbuzz joins (~segfaultf@2602:306:cd3c:9350:4091:e9b1:bc9f:dc79) |
| 18:09:12 | <segfaultfizzbuzz> | so this might be a lame question: in consideration of laziness versus strictness and performance, laziness presents an advantage when the computation begins thinking that computing something is necessary and then later discovers that it is not. isn't this fairly equivalent to the underlying algorithm simply being bad? |
| 18:09:16 | × | califax quits (~califax@user/califx) (Remote host closed the connection) |
| 18:09:40 | <geekosaur> | just being different |
| 18:09:42 | <segfaultfizzbuzz> | if more than say 50% of computations or more than 90% or some other sensible threshold are cancelled |
| 18:10:15 | <geekosaur> | often the most natural description of a computation is wasteful if taken strictly |
| 18:10:19 | → | califax joins (~califax@user/califx) |
| 18:10:24 | × | gehmehgeh quits (~user@user/gehmehgeh) (Remote host closed the connection) |
| 18:10:41 | <segfaultfizzbuzz> | geekosaur: is there a good specific example of this? |
| 18:11:04 | → | gehmehgeh joins (~user@user/gehmehgeh) |
| 18:11:54 | <geekosaur> | mm, mostof the ones I know off the topof my head are frippery like fibonacci |
| 18:12:27 | <maerwald> | segfaultfizzbuzz: if you're just looking at one record of a product types and the others you don't look at are expensive to compute |
| 18:12:51 | <geekosaur> | but even little things like using zip (or zipWith) against [0..] are doing something that makes sense in a lazy environment and are obviously suicide in a strict one |
| 18:12:56 | × | mon_aaraj quits (~MonAaraj@user/mon-aaraj/x-4416475) (Ping timeout: 246 seconds) |
| 18:13:13 | <geekosaur> | such as labeling a list with its indices `zip xs [0..]` |
| 18:13:20 | <maerwald> | but I don't think that's a particularly useful property |
| 18:13:25 | × | BlackboardN quits (~nathan@user/BlackboardN) (Ping timeout: 240 seconds) |
| 18:13:31 | <maerwald> | I'd argue if you rely on that, you already have bad architecture |
| 18:13:35 | <segfaultfizzbuzz> | fibonacci is a computation for kids who don't know math. you can directly compute the nth fibonacci term |
| 18:13:52 | <segfaultfizzbuzz> | in O(1) or whatever if you don't care about the arbitrary precision arithmetic part of the computation |
| 18:13:53 | <geekosaur> | thzat's what I meant by frippery |
| 18:14:05 | × | Vajb quits (~Vajb@hag-jnsbng11-58c3a8-176.dhcp.inet.fi) (Read error: Connection reset by peer) |
| 18:14:17 | → | Vajb joins (~Vajb@hag-jnsbng11-58c3a8-176.dhcp.inet.fi) |
| 18:15:01 | → | mon_aaraj joins (~MonAaraj@user/mon-aaraj/x-4416475) |
| 18:15:13 | <segfaultfizzbuzz> | zip isn't really an algorithm or computation worth mentioning |
| 18:15:23 | <maerwald> | laziness is more interesting for optimization tricks of the compiler than for the end user |
| 18:15:33 | <geekosaur> | notealso that marewald has decided that laziness is evil so he's the wrong one to ask about laziness |
| 18:16:08 | × | coot quits (~coot@2a02:a310:e241:1b00:ec1a:e9df:79ac:66ba) (Quit: coot) |
| 18:16:10 | <monochrom> | Haha but I have decided that eagerness is evil, so... :) |
| 18:16:15 | <monochrom> | I mean >:) |
| 18:17:36 | <monochrom> | In an eager language I hand-optimize my algorithm under eagerness. In a lazy language I hand-optimize my algorithm under laziness. The two algorithms will have very different structure. And oh I don't code up unnecessary computations either way. |
| 18:18:11 | <monochrom> | But what happens is I like the structure of the designed-for-laziness version. |
| 18:18:40 | <monochrom> | It tends to be higher level, for example. |
| 18:19:18 | <segfaultfizzbuzz> | monochrom: and a computer will outsmart you eventually at both of your hand optimizations |
| 18:19:48 | <segfaultfizzbuzz> | ok. i should probably just shut up and write some code lol |
| 18:19:54 | → | jgeerds joins (~jgeerds@d5364b87.access.ecotel.net) |
| 18:20:49 | <geekosaur> | a computer already has outsmarted monochrom :) |
| 18:21:02 | <monochrom> | And looking at how Python for example goes out of its way to invent yield-generator as a builtin, I don't regret joining the lazy list bandwagon on which the extra invention is unnecessary and the whole thing is user-definable. |
| 18:21:10 | <maerwald> | eagerness by default is just more chore at times, laziness is more debugging and "wth is going on" moments |
| 18:21:20 | <geekosaur> | [30 23:48:31] <monochrom> hpc: I once compiled in C "int i = 1; while (i > 0) i *= 2;" with gcc -O2. The generated code was "label: jmp label". That is a perfect realization of your preference. >:) |
| 18:21:38 | <monochrom> | :) |
| 18:22:07 | <monochrom> | My "hand-optimze" means I don't write a quadratic-time algorithm when there is a linear-time algorithm. |
| 18:22:23 | × | doyougnu quits (~doyougnu@cpe-67-249-83-190.twcny.res.rr.com) (Ping timeout: 260 seconds) |
| 18:22:59 | <monochrom> | I'm talking about the big-Theta not "twice as fast because I replace (`mod` 3) by (* magic_number)". |
| 18:23:20 | × | mtjm quits (~mutantmel@2604:a880:2:d0::208b:d001) (Remote host closed the connection) |
| 18:23:29 | <Franciman> | this manichean separation between laziness and eagerness is so old! |
| 18:23:37 | <Franciman> | polarisation gentle people |
| 18:23:42 | <Franciman> | polarisation and continuations |
| 18:23:46 | <Franciman> | duality |
| 18:23:59 | <Franciman> | if your language is too weak to express duality, you end up in manichean distinctions |
| 18:24:24 | <maerwald> | in that case, probably only Idris can express duality |
| 18:24:39 | → | mtjm joins (~mutantmel@2604:a880:2:d0::208b:d001) |
| 18:24:41 | <maerwald> | in Haskell it's annotations and hoping it actually is lazy or strict |
| 18:24:51 | <segfaultfizzbuzz> | hoping haha |
| 18:25:08 | <monochrom> | Then computing is stuck in manichean distinctions by definition. Recall that constructive logics have to lose de Morgan duality. |
| 18:26:09 | <Franciman> | ehm |
| 18:26:13 | <Franciman> | yes |
| 18:26:21 | <Franciman> | but why restrict to constructive logics, when you have continuations? |
| 18:26:34 | → | gehmehgeh_ joins (~user@user/gehmehgeh) |
| 18:26:37 | <monochrom> | Continuations don't exceed computability. |
| 18:26:49 | <monochrom> | Continuations don't solve the halting problem. |
| 18:26:59 | <Franciman> | yet allow you to have de morgan duality |
| 18:27:05 | <monochrom> | The halting problem itself is also a loss of duality right there. |
| 18:27:15 | × | gehmehgeh quits (~user@user/gehmehgeh) (Ping timeout: 240 seconds) |
| 18:27:19 | <monochrom> | Emulation doesn't count. |
| 18:27:29 | <Franciman> | moving target i reckon |
| 18:27:30 | <Franciman> | ok |
| 18:28:16 | <segfaultfizzbuzz> | whoa that sounds deep, halting problem is loss of duality |
| 18:28:26 | <Franciman> | also, what about having a total language with coinductive types? |
| 18:28:47 | × | glguy quits (x@libera/staff/glguy) (Quit: Quit) |
| 18:28:48 | <Franciman> | is it more amenable? |
| 18:30:05 | → | glguy joins (x@libera/staff/glguy) |
| 18:30:07 | → | wroathe joins (~wroathe@206-55-188-8.fttp.usinternet.com) |
| 18:30:07 | × | wroathe quits (~wroathe@206-55-188-8.fttp.usinternet.com) (Changing host) |
| 18:30:07 | → | wroathe joins (~wroathe@user/wroathe) |
| 18:30:33 | × | mon_aaraj quits (~MonAaraj@user/mon-aaraj/x-4416475) (Ping timeout: 260 seconds) |
| 18:30:51 | <segfaultfizzbuzz> | manichean distinction, coinductive types, lol this went way above my head quickly ;-) |
| 18:31:10 | <Franciman> | manichean distinction simply means: it's either black or white |
| 18:31:13 | <Franciman> | you're either bad or good |
| 18:31:26 | <Franciman> | an all time favourite of the new world |
| 18:31:40 | <Franciman> | and of the whole history of humanity really |
| 18:32:03 | <segfaultfizzbuzz> | makes reasoning simple, right? ;-) |
| 18:32:25 | → | mon_aaraj joins (~MonAaraj@user/mon-aaraj/x-4416475) |
| 18:32:58 | <Franciman> | yes sure |
| 18:33:25 | <Franciman> | and thinking you can't mix good and evil because python can't |
| 18:33:30 | <Franciman> | in a sensible way |
| 18:37:28 | <maerwald> | Franciman: I reject that as a principle. Choice implies expressivity. Expressivity is never for free and can introduce complexity. It depends. |
| 18:37:33 | × | mon_aaraj quits (~MonAaraj@user/mon-aaraj/x-4416475) (Ping timeout: 260 seconds) |
| 18:38:46 | → | mon_aaraj joins (~MonAaraj@user/mon-aaraj/x-4416475) |
| 18:39:23 | → | Tuplanolla joins (~Tuplanoll@91-159-69-98.elisa-laajakaista.fi) |
| 18:45:11 | × | chomwitt quits (~chomwitt@2a02:587:dc0e:a100:8d19:188:687f:a348) (Ping timeout: 256 seconds) |
| 18:46:18 | → | BlackboardN joins (~nathan@user/BlackboardN) |
| 18:46:22 | × | wroathe quits (~wroathe@user/wroathe) (Ping timeout: 272 seconds) |
| 18:50:27 | × | yauhsien quits (~yauhsien@61-231-60-85.dynamic-ip.hinet.net) (Remote host closed the connection) |
| 18:51:27 | → | yauhsien joins (~yauhsien@61-231-60-85.dynamic-ip.hinet.net) |
| 18:55:14 | × | mon_aaraj quits (~MonAaraj@user/mon-aaraj/x-4416475) (Ping timeout: 272 seconds) |
| 18:56:20 | × | yauhsien quits (~yauhsien@61-231-60-85.dynamic-ip.hinet.net) (Ping timeout: 246 seconds) |
| 18:57:08 | → | mon_aaraj joins (~MonAaraj@user/mon-aaraj/x-4416475) |
| 18:58:04 | → | ec joins (~ec@gateway/tor-sasl/ec) |
| 19:02:52 | × | alp quits (~alp@user/alp) (Remote host closed the connection) |
| 19:03:16 | → | alp joins (~alp@user/alp) |
| 19:05:00 | × | segfaultfizzbuzz quits (~segfaultf@2602:306:cd3c:9350:4091:e9b1:bc9f:dc79) (Ping timeout: 240 seconds) |
| 19:07:01 | <monochrom> | System F is a total language. Wadler outlines adding existential types to System F, gaining coinductive types. That is still a total language. https://homepages.inf.ed.ac.uk/wadler/papers/free-rectypes/free-rectypes.txt |
| 19:08:28 | → | vicfred joins (~vicfred@user/vicfred) |
| 19:08:38 | <monochrom> | Technically, I was lying, System F already allows you to encode exists by higher-rank forall. You don't have to add exists, except for convenience (important too). |
| 19:09:43 | <monochrom> | Anyway System F is a total language and you can do both inductive and coinductive types in it. |
| 19:10:38 | → | chomwitt joins (~chomwitt@ppp-94-67-69-112.home.otenet.gr) |
| 19:13:09 | → | mcgroin joins (~mcgroin@roc37-h01-176-170-197-243.dsl.sta.abo.bbox.fr) |
| 19:16:59 | × | bahamas quits (~lucian@84.232.140.158) (Ping timeout: 246 seconds) |
| 19:17:47 | × | zer0bitz quits (~zer0bitz@2001:2003:f750:a200:c06:c5f:5435:411f) (Ping timeout: 250 seconds) |
| 19:18:17 | × | eggplantade quits (~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net) (Remote host closed the connection) |
| 19:18:45 | → | sayola joins (~vekto@dslb-088-078-152-238.088.078.pools.vodafone-ip.de) |
| 19:20:59 | → | zer0bitz joins (~zer0bitz@2001:2003:f750:a200:f81b:729b:7ef0:993) |
| 19:22:09 | × | califax quits (~califax@user/califx) (Remote host closed the connection) |
| 19:22:31 | <maerwald> | is there a way in generics to deep-match `Rec0 type`, so you can match a specific sub-AST, instead of passing onto the next instance resolution? |
| 19:23:09 | → | califax joins (~califax@user/califx) |
| 19:23:23 | → | kenran joins (~kenran@200116b82bd9b000bb30ac8fe29496f8.dip.versatel-1u1.de) |
| 19:24:43 | × | mon_aaraj quits (~MonAaraj@user/mon-aaraj/x-4416475) (Ping timeout: 260 seconds) |
| 19:26:32 | → | mon_aaraj joins (~MonAaraj@user/mon-aaraj/x-4416475) |
| 19:29:02 | <monochrom> | I think no, you can only ask for the next instance resolution on `type`. |
| 19:29:36 | <maerwald> | so that means I need a dirty utility function in my class to keep track of the context |
| 19:29:47 | → | Guest19 joins (~Guest19@ip-86-49-182-248.zrnko.net) |
| 19:30:09 | <monochrom> | But I lied, of course you can always use evil dictionary-reification tricks to institute "local instance declaration". |
| 19:30:57 | <c_wraith> | if you're going to do that, use the reflection package though. Rely on someone else to get the fiddly bits right, so all you have to worry about is incoherent logic. :) |
| 19:32:10 | <maerwald> | I was kind of expecting someone to have solved this use case... seems rather common if you have a deep ast and want to match on a specific sub-AST? |
| 19:32:28 | <maerwald> | or maybe that use case is not that common after all |
| 19:34:44 | <monochrom> | I think it is not common. (I have no data though.) |
| 19:35:20 | <maerwald> | then you could do something like "for every (int + int), replace it with whatever" |
| 19:37:13 | → | segfaultfizzbuzz joins (~segfaultf@2602:306:cd3c:9350:4091:e9b1:bc9f:dc79) |
| 19:37:28 | <monochrom> | I think it is more common (again no data though, just impressions) to require, for example, every instance of MyClass to have consistent and compatible behaviour. Therefore the fact that some instance uses "deriving Generic" and going through "GMyClass" is an implementation detail that GMyClass itself doesn't care about. |
| 19:38:27 | <Guest19> | Hello, I would like to ask about traverse and the Writer monad. I want to create a function `test :: (Traversable t, Real a) => (a -> a) -> t a -> (a, t a)` which goes through a traversable, applies the function (a -> a) to each element (but only if it would increase it, otherwise identity) and returns a tuple (<sum of increases over all elements>, |
| 19:38:28 | <Guest19> | <the modified Traversable object>): e.g. test (*2) [1, 5, -3] ~>* (6, [2, 10, -3]), because only the first 2 elements would increase and 6 = 1 + 5 + 0 |
| 19:39:10 | <Guest19> | Of course, I can do it using basic Haskell, but I was told, it was possible to do it using Writer monad and traverse. But I am stuck on this for two days and I just can't see what to do. |
| 19:40:28 | <maerwald> | monochrom: the idea was that pattern matching on the actual data types is *extremely* verbose... so with generics I was hoping to skip right to the interesting location and only match there, then let the rest be recursive instance jumping |
| 19:41:03 | <c_wraith> | Guest19: the first step is that Writer is required to work over a Monoid. Do you know what Monoid instance would be appropriate for this case? |
| 19:42:49 | <Guest19> | I know there is a monoid needed to create the Writer monad, but honestly, I don't know much about it:( I know what a monoid is from theoretical point of view (algebra) |
| 19:43:14 | × | mcgroin quits (~mcgroin@roc37-h01-176-170-197-243.dsl.sta.abo.bbox.fr) (Ping timeout: 246 seconds) |
| 19:44:02 | <Guest19> | I guess I need to work on tuples (sum so far, [elements so far]) |
| 19:44:31 | <c_wraith> | Yes, that's correct. Writer is just a newtype around a tuple with convenient Applicative/Monad instances |
| 19:44:43 | <monochrom> | Numbers under addition and 0 form a monoid. |
| 19:46:11 | × | zmt00 quits (~zmt00@user/zmt00) (Ping timeout: 250 seconds) |
| 19:46:29 | → | mcgroin joins (~mcgroin@roc37-h01-176-170-197-243.dsl.sta.abo.bbox.fr) |
| 19:46:32 | × | mon_aaraj quits (~MonAaraj@user/mon-aaraj/x-4416475) (Ping timeout: 272 seconds) |
| 19:46:36 | <segfaultfizzbuzz> | okay so i am failing at self-directing my haskell curriculum. i keep reading theory and definitions and they mostly go in one ear and out the other and i don't learn how to write according to whatever the haskell philosophy is, if there is such a thing |
| 19:46:52 | <Guest19> | Ok, say Real a => (a, t a) would be the type of my monoid, what can I do with it? sorry for being so stupid :( |
| 19:46:56 | <segfaultfizzbuzz> | the best book i have come across is real world haskell |
| 19:47:13 | <c_wraith> | Guest19: oh, you don't need to stuff the data structure into the monoid too. Just the sum |
| 19:47:20 | <monochrom> | But Real a => (a, t a) will not be the type of your monoid. A number type is. |
| 19:47:24 | <c_wraith> | Guest19: traverse takes care of preserving the data structure |
| 19:47:30 | <segfaultfizzbuzz> | i started trying to write a chess engine as an exercise but got stuck on the simple problem of representing the game state and representing where a queen can go |
| 19:47:41 | <c_wraith> | > runWriter $ tell (Sum 2) >> tell 3 >> return "hello" -- Guest19 |
| 19:47:42 | <lambdabot> | ("hello",Sum {getSum = 5}) |
| 19:47:52 | <maerwald> | segfaultfizzbuzz: there's a haskell game dev channel I think |
| 19:47:54 | → | mon_aaraj joins (~MonAaraj@user/mon-aaraj/x-4416475) |
| 19:48:21 | <segfaultfizzbuzz> | it's not that i want to do gamedev, it's that i am trying to learn the language |
| 19:48:54 | <monochrom> | Choose a much simpler game, for example Nim. |
| 19:48:54 | <segfaultfizzbuzz> | there are a lot of low quality and/or impractical haskell guides out there... what is the best stuff |
| 19:48:54 | <maerwald> | segfaultfizzbuzz: yes and you can ask people in that channel about design ideas wrt game state? |
| 19:49:23 | <monochrom> | And don't be perfectionist about "what is the absolutely most optimized way to store three integers". |
| 19:49:27 | → | acidjnk joins (~acidjnk@p200300d0c7049f94e8cdd499a79a3878.dip0.t-ipconnect.de) |
| 19:49:32 | → | zmt00 joins (~zmt00@user/zmt00) |
| 19:49:47 | <monochrom> | Perfectionism is why people never learn. |
| 19:49:49 | <Guest19> | ok, so first you specify u use the Sum monoid and then u add into it using tell - this is what traverse would do for me (using good enough function), wight? |
| 19:49:56 | <monochrom> | You would think that they have already learned. |
| 19:50:30 | <Guest19> | but how do I say in traverse I want it to traverse on `Sum` monoid? |
| 19:51:10 | <c_wraith> | Guest19: traverse doesn't care. the only thing traverse cares about is the data structure being traversed and that you have an Applicative instance |
| 19:51:48 | <c_wraith> | Guest19: that's what makes traverse so cool. It completely separates the concerns of rewriting a data structure and doing just about anything else at the same time. |
| 19:51:56 | × | BlackboardN quits (~nathan@user/BlackboardN) (Remote host closed the connection) |
| 19:53:34 | <Guest19> | well, i would like to write something like runWriter $ traverse (*2) [1,2,3], wouldn't I? Provided that the given function from Real to Real is *2 of course and ignoring the fact I might sometimes not want to apply it for simplicity |
| 19:53:40 | <c_wraith> | Guest19: try starting with a function of type Real a => (a -> a) -> a -> Writer (Sum a) a |
| 19:54:02 | <monochrom> | Aim for "t a -> Writer (Sum a) (t a)". This can be done with the help of traverse and a helper function you write. It is trivial to go "Writer (Sum a) (t a) -> (a, t a)". |
| 19:54:06 | <c_wraith> | Guest19: forget about traversing over the entire data structure. Just write the pointwise logic |
| 19:54:11 | <Guest19> | but this way traverse can never guess what I want to do with the numbers (sum them? multiply them?) |
| 19:54:23 | <c_wraith> | Guest19: traverse doesn't *care* what you do with them. |
| 19:54:33 | × | raehik quits (~raehik@cpc95906-rdng25-2-0-cust156.15-3.cable.virginm.net) (Ping timeout: 256 seconds) |
| 19:54:40 | <Guest19> | ok, i will try to start with the suggested function |
| 19:54:44 | <c_wraith> | its logic is entirely independent of what actual transformation you're doing |
| 19:54:55 | <monochrom> | Yes obviously you are supposed to replace (* 2) by something smarter, something you code up. |
| 19:55:41 | <monochrom> | Not to mention that (* 2) doesn't type-check there. |
| 19:55:56 | <monochrom> | This is not your garden variety map (* 2) xs. |
| 19:58:38 | × | zer0bitz quits (~zer0bitz@2001:2003:f750:a200:f81b:729b:7ef0:993) (Ping timeout: 260 seconds) |
| 19:59:30 | <Guest19> | `testfun f x = if f x > x then pure (f x) else pure x` would this be the correct implementation you wanted from me?:D i am sorry if it is completely idiotic |
| 19:59:48 | × | ProfSimm quits (~ProfSimm@87.227.196.109) (Remote host closed the connection) |
| 20:00:19 | → | earthy joins (~arthurvl@2001:984:275b:1:ba27:ebff:fea0:40b0) |
| 20:00:37 | <c_wraith> | well, I'd share the value instead of calculating (f x) twice. But also, I'd include a tell of the amount of increase in the increase case. |
| 20:01:15 | → | raehik joins (~raehik@cpc95906-rdng25-2-0-cust156.15-3.cable.virginm.net) |
| 20:01:24 | <c_wraith> | that tell is the key part of doing what you want |
| 20:01:38 | → | dcoutts joins (~duncan@host213-122-143-81.range213-122.btcentralplus.com) |
| 20:02:00 | × | _ht quits (~quassel@231-169-21-31.ftth.glasoperator.nl) (Remote host closed the connection) |
| 20:02:42 | <Guest19> | ok, i am starting to get it a bit more now, I was confused where it would figure it out what I actually want to sum up |
| 20:03:13 | <c_wraith> | and you can test your function in ghc, making sure it produces Writer values that look right |
| 20:03:27 | × | Kaiepi quits (~Kaiepi@156.34.47.253) (Ping timeout: 260 seconds) |
| 20:03:39 | → | ubert joins (~Thunderbi@p200300ecdf15888f6cb689ccf87fbbb5.dip0.t-ipconnect.de) |
| 20:03:41 | → | pavonia joins (~user@user/siracusa) |
| 20:03:42 | <Guest19> | so I would use pure (f x) >> tell $ (f x) - x? i.e. just put `>> tell` after `pure` |
| 20:04:01 | × | cosimone quits (~user@93-47-230-184.ip115.fastwebnet.it) (Remote host closed the connection) |
| 20:04:11 | × | mon_aaraj quits (~MonAaraj@user/mon-aaraj/x-4416475) (Ping timeout: 256 seconds) |
| 20:04:33 | <Guest19> | well, I am completely lost in the syntax:( ghci won't compile half of my code (for a very good reason obviously), that's why I have to beg you for help |
| 20:04:36 | × | segfaultfizzbuzz quits (~segfaultf@2602:306:cd3c:9350:4091:e9b1:bc9f:dc79) (Ping timeout: 240 seconds) |
| 20:04:49 | <c_wraith> | nah, the type of >> means that the pure should be after it, not before it |
| 20:04:52 | <c_wraith> | :t (>>) |
| 20:04:53 | <lambdabot> | Monad m => m a -> m b -> m b |
| 20:05:07 | <Guest19> | and i am aware of the duplicate f x, I just wanted to keep it simple for now |
| 20:06:17 | → | mon_aaraj joins (~MonAaraj@user/mon-aaraj/x-4416475) |
| 20:06:19 | <c_wraith> | You might want to just go full multiline and use do blocks. It's perfectly fine to write that way if it keeps things clearer |
| 20:06:37 | × | kenran quits (~kenran@200116b82bd9b000bb30ac8fe29496f8.dip.versatel-1u1.de) (Ping timeout: 240 seconds) |
| 20:06:47 | → | segfaultfizzbuzz joins (~segfaultf@2602:306:cd3c:9350:4091:e9b1:bc9f:dc79) |
| 20:07:47 | → | kenran joins (~kenran@200116b82bd9b00070509ad7c63ceb6b.dip.versatel-1u1.de) |
| 20:08:40 | <Guest19> | :do notation is super confusing to me right now, I am only able to rewrite it once I get the "verbose" notation right |
| 20:09:52 | <c_wraith> | In that case, you might find it clearer to use a multiline definition with a where block, so you can parenthesize a lot fewer expressions. Make the structure easier to see |
| 20:09:57 | <Guest19> | however, it still has some issues with rewriting it the other way round:( `testfun f x = if f x > x then tell ((f x) - x) >> pure (f x) else tell 0 >> pure x` something about infinite type |
| 20:10:59 | <Guest19> | i know what an infinite type is, but I just can't spot it here |
| 20:12:03 | → | ProfSimm joins (~ProfSimm@87.227.196.109) |
| 20:12:07 | <c_wraith> | You don't need tell 0, fwiw. The whole point of the Monoid requirement is that the neutral element just exists. |
| 20:12:38 | → | BlackboardN joins (~nathan@user/BlackboardN) |
| 20:12:52 | <c_wraith> | but that's not an infinite type |
| 20:14:40 | <c_wraith> | I'd really recommend replacing the if with a guard or something. Reduce the complexity per line |
| 20:15:05 | <Guest19> | `testfun f x = if diff > 0 then tell diff >> pure (f x) else pure x |
| 20:15:05 | <Guest19> | where diff = f x - x` rewritten for clarity |
| 20:15:46 | → | yauhsien joins (~yauhsien@61-231-60-85.dynamic-ip.hinet.net) |
| 20:15:47 | × | Lord_of_Life quits (~Lord@user/lord-of-life/x-2819915) (Ping timeout: 246 seconds) |
| 20:15:47 | <Guest19> | still, sadly won't compile: |
| 20:15:47 | <Guest19> | ``` |
| 20:15:48 | <Guest19> | Occurs check: cannot construct the infinite type: a ~ Sum a arising from a functional dependency between: constraint ‘MonadWriter |
| 20:15:48 | <Guest19> | a (WriterT (Sum a) Data.Functor.Identity.Identity)’ arising from a use of ‘tell’ instance ‘MonadWriter w (WriterT w m)’ at <no location info> |
| 20:15:49 | <Guest19> | • In the first argument of ‘(>>)’, namely ‘tell diff’ In the expression: tell diff >> pure (f x) In the expression: |
| 20:15:49 | <Guest19> | if diff > 0 then tell diff >> pure (f x) else pure x • Relevant bindings include diff :: a (bound at mini6.hs:6:39) |
| 20:15:50 | <Guest19> | x :: a (bound at mini6.hs:5:11) f :: a -> a (bound at mini6.hs:5:9) testfun :: (a -> a) -> a -> Writer (Sum a) a |
| 20:15:50 | <Guest19> | ``` |
| 20:15:58 | → | Lord_of_Life_ joins (~Lord@user/lord-of-life/x-2819915) |
| 20:16:07 | <c_wraith> | probably should pastebin multiline stuff :) |
| 20:16:25 | <c_wraith> | Oh, I see. |
| 20:16:46 | <c_wraith> | you need to add an explicit Sum constructor to the value you're passing to tell |
| 20:16:59 | <c_wraith> | I was able to avoid that when using literals, because literals are polymorphic |
| 20:17:03 | <Guest19> | yup, probably can't add screenshots here :( |
| 20:17:13 | Lord_of_Life_ | is now known as Lord_of_Life |
| 20:18:28 | <c_wraith> | But you're passing values of the same type to tell and pure, which only works if both of Writer's type arguments are the same. Since one of them is (Sum a) and the other is a, attempting to unify those gives you an infinite type |
| 20:18:52 | × | briandaed quits (~root@109.95.142.93.r.toneticgroup.pl) (Remote host closed the connection) |
| 20:19:17 | → | eggplantade joins (~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net) |
| 20:19:21 | <c_wraith> | So you need to throw in an explicit Sum constructor in the tell |
| 20:21:02 | × | yauhsien quits (~yauhsien@61-231-60-85.dynamic-ip.hinet.net) (Ping timeout: 246 seconds) |
| 20:21:21 | <Guest19> | is there a better way that using pure? to me it is confusing, because I never know which pure it is |
| 20:21:48 | <Guest19> | like in this case it apparently accepts Sum as well, but for Writer it seems to crash |
| 20:21:56 | <c_wraith> | There's a different way, but it's definitely not *better* |
| 20:22:24 | <c_wraith> | pure is really important. |
| 20:22:51 | <c_wraith> | It lets you ignore everything except what value you want to produce |
| 20:23:54 | × | eggplantade quits (~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net) (Ping timeout: 272 seconds) |
| 20:24:21 | <Guest19> | i understand it is comfortable to just use pure because i need to somehow magically turn this value into another this particular function needs, but i find it very hard to read :D |
| 20:24:33 | <Guest19> | but maybe thats just cause im too new at this |
| 20:24:55 | <c_wraith> | I think it's a matter of comfort in letting go. |
| 20:26:17 | × | mikoto-chan quits (~mikoto-ch@213.177.151.239) (Ping timeout: 246 seconds) |
| 20:26:27 | → | alMalsamo joins (~alMalsamo@gateway/tor-sasl/almalsamo) |
| 20:27:06 | alMalsamo | is now known as littlebobeep |
| 20:29:08 | <Guest19> | anyway, thank you for your help, i think i just needed to finish one exercise of this type (not even by myself) so that i can use it to solve the others and understand it in detail in the process |
| 20:30:03 | <c_wraith> | I kind of think the main philosophy of haskell is trusting the compiler to keep track of the fiddly things. The challenge is learning that you can program without focusing on them most of the time. |
| 20:30:15 | × | neurocyte861 quits (~neurocyte@user/neurocyte) (Ping timeout: 256 seconds) |
| 20:30:23 | → | zer0bitz joins (~zer0bitz@2001:2003:f750:a200:18ec:9063:4133:b132) |
| 20:30:57 | → | neurocyte8614 joins (~neurocyte@IP-094016090045.dynamic.medianet-world.de) |
| 20:30:58 | × | neurocyte8614 quits (~neurocyte@IP-094016090045.dynamic.medianet-world.de) (Changing host) |
| 20:30:58 | → | neurocyte8614 joins (~neurocyte@user/neurocyte) |
| 20:32:26 | → | merijn joins (~merijn@c-001-001-001.client.esciencecenter.eduvpn.nl) |
| 20:33:38 | × | alp quits (~alp@user/alp) (Ping timeout: 260 seconds) |
| 20:40:32 | → | coot joins (~coot@213.134.190.95) |
| 20:44:41 | × | motherfsck quits (~motherfsc@user/motherfsck) (Quit: quit) |
| 20:45:25 | → | ub joins (~Thunderbi@p548c8d44.dip0.t-ipconnect.de) |
| 20:45:55 | × | ubert quits (~Thunderbi@p200300ecdf15888f6cb689ccf87fbbb5.dip0.t-ipconnect.de) (Ping timeout: 260 seconds) |
| 20:45:56 | ub | is now known as ubert |
| 20:45:57 | × | fizbin quits (~fizbin@c-73-33-197-160.hsd1.nj.comcast.net) (Remote host closed the connection) |
| 20:50:06 | → | yauhsien joins (~yauhsien@61-231-60-85.dynamic-ip.hinet.net) |
| 20:51:08 | × | mcgroin quits (~mcgroin@roc37-h01-176-170-197-243.dsl.sta.abo.bbox.fr) (Ping timeout: 272 seconds) |
| 20:54:17 | × | yauhsien quits (~yauhsien@61-231-60-85.dynamic-ip.hinet.net) (Ping timeout: 246 seconds) |
| 20:54:59 | × | BlackboardN quits (~nathan@user/BlackboardN) (Ping timeout: 246 seconds) |
| 20:57:07 | × | mon_aaraj quits (~MonAaraj@user/mon-aaraj/x-4416475) (Ping timeout: 260 seconds) |
| 20:57:15 | → | bitmapper joins (uid464869@id-464869.lymington.irccloud.com) |
| 20:58:43 | × | arjun quits (~arjun@user/arjun) (Ping timeout: 260 seconds) |
| 20:58:53 | → | mon_aaraj joins (~MonAaraj@user/mon-aaraj/x-4416475) |
| 20:59:29 | × | Midjak quits (~Midjak@82.66.147.146) (Quit: This computer has gone to sleep) |
| 21:03:57 | × | madjestic quits (~madjestic@88-159-247-120.fixed.kpn.net) (Ping timeout: 260 seconds) |
| 21:06:27 | × | merijn quits (~merijn@c-001-001-001.client.esciencecenter.eduvpn.nl) (Ping timeout: 260 seconds) |
| 21:07:19 | × | kenran quits (~kenran@200116b82bd9b00070509ad7c63ceb6b.dip.versatel-1u1.de) (Quit: WeeChat info:version) |
| 21:10:41 | → | mvk joins (~mvk@2607:fea8:5ce3:8500::3800) |
| 21:13:56 | → | zeenk joins (~zeenk@2a02:2f04:a313:d600:8d26:ec9f:3ff6:fc94) |
| 21:14:52 | → | motherfsck joins (~motherfsc@user/motherfsck) |
| 21:15:10 | × | gehmehgeh_ quits (~user@user/gehmehgeh) (Remote host closed the connection) |
| 21:15:52 | → | gehmehgeh_ joins (~user@user/gehmehgeh) |
| 21:17:21 | × | coot quits (~coot@213.134.190.95) (Quit: coot) |
| 21:19:45 | → | eggplantade joins (~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net) |
| 21:20:51 | × | Guest19 quits (~Guest19@ip-86-49-182-248.zrnko.net) (Quit: Client closed) |
| 21:21:15 | × | gurkenglas quits (~gurkengla@dslb-178-012-018-212.178.012.pools.vodafone-ip.de) (Read error: Connection reset by peer) |
| 21:23:10 | → | gurkenglas joins (~gurkengla@dslb-178-012-018-212.178.012.pools.vodafone-ip.de) |
| 21:33:18 | → | Kaiepi joins (~Kaiepi@156.34.47.253) |
| 21:36:14 | → | cosimone joins (~user@2001:b07:ae5:db26:c24a:d20:4d91:1e20) |
| 21:38:22 | <segfaultfizzbuzz> | so people argue about whether umap is a useful analytic technique. i saw the author of umap say something which i am curious to ask about, which is that he said that for all practical purposes any topology you are interested in can be formed by specifying nodes and edges discretely and then reasoning about that |
| 21:38:44 | <segfaultfizzbuzz> | so is there anything useful we can say about the fact that "everything can be discrete" |
| 21:40:04 | <geekosaur> | not really. it's more or less how we get away with writing programs that do useful things, since digital computers deal in discrete values |
| 21:40:23 | <geekosaur> | (as distinct from analog or quantum computers) |
| 21:40:40 | <segfaultfizzbuzz> | like in linear algebra some approaches to it are very careful to not deal with the finite dimensional representation of things |
| 21:41:36 | <segfaultfizzbuzz> | but... i've never come across a situation whether the finite or non-finite distinction is meaningful |
| 21:42:02 | <segfaultfizzbuzz> | at the end of the day you have to be able to make a graph on paper or draw symbols, and that will always involve some kind of discrete representation,... |
| 21:42:16 | × | lavaman quits (~lavaman@c-174-63-118-52.hsd1.ma.comcast.net) (Remote host closed the connection) |
| 21:42:28 | → | lavaman joins (~lavaman@c-174-63-118-52.hsd1.ma.comcast.net) |
| 21:42:40 | × | cosimone quits (~user@2001:b07:ae5:db26:c24a:d20:4d91:1e20) (Quit: ERC (IRC client for Emacs 27.1)) |
| 21:43:09 | <geekosaur> | right, but you may only have that at the end. |
| 21:43:35 | × | wyrd quits (~wyrd@gateway/tor-sasl/wyrd) (Ping timeout: 240 seconds) |
| 21:44:07 | <monochrom> | Pretty sure it is the niche theoretical physicists working on the fundamentals of quantum physics who are really interested in "topologies that matter can be formed from discrete nodes and edges". |
| 21:44:34 | <geekosaur> | analog computers still do many things better than digital computers do, since an operation like integration is fundamental. you may have a discrete value at the end, but getting to that end can involve nasty things like multiple integrals that can only be simulated (and that often only when simplified) on a digital computer |
| 21:45:36 | → | wyrd joins (~wyrd@gateway/tor-sasl/wyrd) |
| 21:45:47 | <segfaultfizzbuzz> | "nearly all" integrals can be trivially discretized. the only examples i can think of which don't fall into this category are integrals of stochastic functions, which can still be discretized but simply require some more compute |
| 21:46:03 | <geekosaur> | "simply" |
| 21:46:10 | <hpc> | some people like to call analog computers "experiments" :P |
| 21:46:31 | <segfaultfizzbuzz> | put another way, from my perspective discretizing an integral is trivial... i suppose at some point the dimensionality of the integral grows to the point that you are studying light transport and need more of an mcmc kind of approach to integrate,... |
| 21:47:07 | <geekosaur> | even figuring water flow can be very difficult to compute… yet the water flows anyway |
| 21:47:46 | <geekosaur> | most accurate way to model it? duplicate the flow in question. which is an analog computer although we don't call it that |
| 21:48:02 | × | zer0bitz quits (~zer0bitz@2001:2003:f750:a200:18ec:9063:4133:b132) (Read error: Connection reset by peer) |
| 21:48:11 | <segfaultfizzbuzz> | well hold on there, you have how the water itself moves and then how to compute a theory of that motion. and that theory can always be discretized and calculated is my view (unless i'm wrong here...) |
| 21:49:39 | <geekosaur> | oh, it can always be done. the problem is that that calculation can take much, much longer than just observing the bloody system |
| 21:50:06 | <geekosaur> | ot to mention that you have to come up with that theory, which is rarely trivial |
| 21:50:09 | <hpc> | and what if you don't know the formulas anyway |
| 21:50:24 | <hpc> | you're trying to answer "how accurate is this model?" |
| 21:50:34 | <geekosaur> | there are still *many* open questions in fields that rely on that |
| 21:50:37 | <hpc> | and no amount of testing the model against itself at higher resolution is going to help you there |
| 21:50:54 | <segfaultfizzbuzz> | so what i am saying is that if i open any math book or any i don't know civil engineering book or what have you |
| 21:51:00 | <geekosaur> | and reformulation of relevant theorues |
| 21:51:12 | <abastro[m]> | You: I gotta calculate this fluid movement |
| 21:51:12 | <abastro[m]> | Chaos: I am going to ruin this person's career |
| 21:51:24 | <geekosaur> | civil engineering is filled with known to be inaccurate but "usually good enough" approximations |
| 21:51:53 | <segfaultfizzbuzz> | and i look at any question i can ask about whatever is being discussed, even if the topic looks like it is a very non-discrete thing, you can always find a discretization and work towards computing the answer |
| 21:51:59 | <hpc> | a lot of civil engineering is arranging things so you never hit where those approximations aren't good enough anymore |
| 21:52:07 | <geekosaur> | that too |
| 21:52:12 | <hpc> | also usually the approximations break down at the same time the building does |
| 21:52:26 | <geekosaur> | see also the tacoma narrows bridge |
| 21:52:52 | <geekosaur> | or recent essentially-repeats involving walking bridges |
| 21:53:08 | <monochrom> | Chaos, Crash, Burn, and "mess with the best, die like the rest" etc :) |
| 21:53:38 | × | gehmehgeh_ quits (~user@user/gehmehgeh) (Quit: Leaving) |
| 21:54:29 | <geekosaur> | also just looking at the formulas doesn't show you any of the "I know it says this but this is what we really do because it comes crashing down if we don't" |
| 21:54:39 | <monochrom> | But why are we discussing discreteness in #haskell ? |
| 21:54:58 | <segfaultfizzbuzz> | i think it ties a bit into thinking about laziness, |
| 21:55:01 | <maerwald> | be water, my friend |
| 21:55:14 | <monochrom> | May I remind that #haskell-offtopic exists. |
| 21:55:20 | <segfaultfizzbuzz> | haha ok :-) |
| 21:56:24 | <monochrom> | But my conclusion is maybe we should ban walking on bridges >:) |
| 21:56:44 | <shapr> | there's also #haskell-in-depth for long conversations |
| 21:57:03 | × | takuan quits (~takuan@178-116-218-225.access.telenet.be) (Ping timeout: 260 seconds) |
| 21:57:15 | × | shapr quits (~user@pool-173-73-44-186.washdc.fios.verizon.net) (Quit: rebooting emacs) |
| 21:58:56 | × | dhouthoo quits (~dhouthoo@178-117-36-167.access.telenet.be) (Quit: WeeChat 3.4.1) |
| 22:01:04 | → | shapr joins (~user@pool-173-73-44-186.washdc.fios.verizon.net) |
| 22:10:19 | → | mcgroin joins (~mcgroin@roc37-h01-176-170-197-243.dsl.sta.abo.bbox.fr) |
| 22:10:56 | × | __monty__ quits (~toonn@user/toonn) (Quit: leaving) |
| 22:17:28 | × | mvk quits (~mvk@2607:fea8:5ce3:8500::3800) (Ping timeout: 260 seconds) |
| 22:21:28 | × | whatsupdoc quits (uid509081@id-509081.hampstead.irccloud.com) (Quit: Connection closed for inactivity) |
| 22:21:35 | × | bitdex quits (~bitdex@gateway/tor-sasl/bitdex) (Ping timeout: 240 seconds) |
| 22:22:40 | <abastro[m]> | Hm how can I access #haskell-in-depth |
| 22:22:45 | <abastro[m]> | From matrix |
| 22:23:01 | → | fizbin joins (~fizbin@c-73-33-197-160.hsd1.nj.comcast.net) |
| 22:24:29 | → | bitdex joins (~bitdex@gateway/tor-sasl/bitdex) |
| 22:24:53 | <geekosaur> | #haskell-in-depth:libera.chat I think |
| 22:26:47 | <abastro[m]> | Thank you!!! |
| 22:27:33 | × | fizbin quits (~fizbin@c-73-33-197-160.hsd1.nj.comcast.net) (Ping timeout: 256 seconds) |
| 22:28:44 | → | MajorBiscuit joins (~MajorBisc@2a02:a461:129d:1:6d4c:38a4:18b7:4b48) |
| 22:34:54 | × | ProfSimm quits (~ProfSimm@87.227.196.109) (Remote host closed the connection) |
| 22:36:17 | × | lavaman quits (~lavaman@c-174-63-118-52.hsd1.ma.comcast.net) (Remote host closed the connection) |
| 22:38:13 | × | acidjnk quits (~acidjnk@p200300d0c7049f94e8cdd499a79a3878.dip0.t-ipconnect.de) (Ping timeout: 240 seconds) |
| 22:40:15 | × | ec quits (~ec@gateway/tor-sasl/ec) (Ping timeout: 240 seconds) |
| 22:42:08 | × | qwedfg quits (~qwedfg@user/qwedfg) (Read error: Connection reset by peer) |
| 22:44:22 | × | MajorBiscuit quits (~MajorBisc@2a02:a461:129d:1:6d4c:38a4:18b7:4b48) (Quit: WeeChat 3.4) |
| 22:45:31 | → | yauhsien joins (~yauhsien@61-231-37-33.dynamic-ip.hinet.net) |
| 22:46:08 | → | qwedfg joins (~qwedfg@user/qwedfg) |
| 22:48:26 | → | madjestic joins (~madjestic@88-159-247-120.fixed.kpn.net) |
| 22:50:08 | × | yauhsien quits (~yauhsien@61-231-37-33.dynamic-ip.hinet.net) (Ping timeout: 246 seconds) |
| 23:00:03 | × | jgeerds quits (~jgeerds@d5364b87.access.ecotel.net) (Ping timeout: 260 seconds) |
| 23:00:40 | → | lavaman joins (~lavaman@c-174-63-118-52.hsd1.ma.comcast.net) |
| 23:01:55 | × | lavaman quits (~lavaman@c-174-63-118-52.hsd1.ma.comcast.net) (Remote host closed the connection) |
| 23:04:48 | × | Tuplanolla quits (~Tuplanoll@91-159-69-98.elisa-laajakaista.fi) (Quit: Leaving.) |
| 23:05:00 | → | natechan joins (~nate@98.45.152.91) |
| 23:05:11 | × | zyklotomic quits (~ethan@r4-128-61-95-82.res.gatech.edu) (Ping timeout: 246 seconds) |
| 23:07:10 | → | zyklotomic joins (~ethan@res380d-128-61-87-11.res.gatech.edu) |
| 23:07:19 | × | chomwitt quits (~chomwitt@ppp-94-67-69-112.home.otenet.gr) (Ping timeout: 260 seconds) |
| 23:12:00 | → | Guest40 joins (~Guest40@189.101.232.157) |
| 23:12:13 | × | Guest40 quits (~Guest40@189.101.232.157) (Client Quit) |
| 23:14:38 | × | mcgroin quits (~mcgroin@roc37-h01-176-170-197-243.dsl.sta.abo.bbox.fr) (Ping timeout: 246 seconds) |
| 23:21:51 | → | yauhsien joins (~yauhsien@61-231-37-33.dynamic-ip.hinet.net) |
| 23:26:27 | × | yauhsien quits (~yauhsien@61-231-37-33.dynamic-ip.hinet.net) (Ping timeout: 260 seconds) |
| 23:32:28 | → | lavaman joins (~lavaman@c-174-63-118-52.hsd1.ma.comcast.net) |
| 23:37:19 | → | rawley joins (~rawley@216-197-141-102.nbfr.hsdb.sasknet.sk.ca) |
| 23:45:08 | × | vicfred quits (~vicfred@user/vicfred) (Quit: Leaving) |
| 23:49:50 | → | deadmarshal_ joins (~deadmarsh@95.38.116.113) |
| 23:49:57 | → | lainon joins (~lainon@45-18-156-230.lightspeed.knvltn.sbcglobal.net) |
| 23:54:18 | × | deadmarshal_ quits (~deadmarsh@95.38.116.113) (Ping timeout: 260 seconds) |
| 23:58:29 | → | yauhsien joins (~yauhsien@61-231-37-33.dynamic-ip.hinet.net) |
| 23:59:13 | × | geekosaur quits (~geekosaur@xmonad/geekosaur) (Remote host closed the connection) |
All times are in UTC on 2022-04-01.