2022-08-29 00:00:06 +0200 | <mrianbloom> | I feel like I may done that initially but there were downstream consequences I couldn't satisfy... |
2022-08-29 00:01:39 +0200 | <mrianbloom> | I guess the use of the newtype TrieRepDefault helps with that. |
2022-08-29 00:02:03 +0200 | <pareto-optimal-d> | I'm writing a blog post about "Why use Nix+Cabal over Cabal" and was curious if others found this point compelling: I can get a ghci repl with lens in 3s versus 3m with just cabal-install. |
2022-08-29 00:02:38 +0200 | <glguy> | pareto-optimal-d: after the first time cabal repl without nix is also very fast, so it's not saving 3m every time, just the first time |
2022-08-29 00:02:44 +0200 | <glguy> | so not particularly compelling for me, at least |
2022-08-29 00:02:56 +0200 | pretty_dumm_guy | (trottel@gateway/vpn/protonvpn/prettydummguy/x-88029655) (Ping timeout: 268 seconds) |
2022-08-29 00:02:57 +0200 | <qrpnxz> | if anything i'm using uses lens, i already have lens installed. It's a one time cost no? |
2022-08-29 00:03:09 +0200 | <glguy> | I lose much more time trying to make nix work in all the other cases, so the time savings dries up |
2022-08-29 00:04:04 +0200 | <glguy> | the compelling thing for nix is that it's easier for people who aren't you to just reproduce something you've done |
2022-08-29 00:04:11 +0200 | <pareto-optimal-d> | Thank you. I agree with that. The place I can think of it mattering is if you want to try a new GHC version, that's the time when the cache helps the most I think. Also for things like Gloss or gl which have native deps. |
2022-08-29 00:04:22 +0200 | <glguy> | but for the nix user it's just more work |
2022-08-29 00:04:36 +0200 | <qrpnxz> | i don't find nix particularly more reproducible than an RPM |
2022-08-29 00:04:52 +0200 | <qrpnxz> | or probably even a dpkg |
2022-08-29 00:05:09 +0200 | <qrpnxz> | but nix script might be easier to run? |
2022-08-29 00:05:18 +0200 | <pareto-optimal-d> | Another point I'm making you may find compelling is reproducible and fast rebasing. Like rebasing two commits over 6 months between two commit hashes. I don't often need that... but when I do it's very useful to be able to kick that off in the background while I explore other things. |
2022-08-29 00:06:54 +0200 | <pareto-optimal-d> | I can personally say that I had a lot of breakages around ubuntu upgrades and have very few with nix upgrades qrpnxz. I know that debian has it's reproducibility project, but not sure if RPM does. I guess you are talking about subjective reproducibility rather than objective reproducibility since that's most relevant to your experience developing Haskell? |
2022-08-29 00:07:03 +0200 | zeenk | (~zeenk@2a02:2f04:a311:2d00:6865:d863:4c93:799f) (Quit: Konversation terminated!) |
2022-08-29 00:07:36 +0200 | <qrpnxz> | i've never had an issue in debian, basically ever that i can recal. On fedora i have some software stability issues, but just because the software is so new, not even a packaging problem. |
2022-08-29 00:09:13 +0200 | <qrpnxz> | idk what you mean about subjective reproducible |
2022-08-29 00:11:12 +0200 | <qrpnxz> | i can't speak for ubuntu, because i don't really ever use it. Not a trustworthy company. I don't feel they really add anything worthwhile to debian either |
2022-08-29 00:11:34 +0200 | mikoto-chan | (~mikoto-ch@164.5.249.78) (Ping timeout: 268 seconds) |
2022-08-29 00:11:36 +0200 | <qrpnxz> | I do like their design, at least in the past, i don't even know what ubuntu look like now |
2022-08-29 00:12:27 +0200 | <qrpnxz> | i think about 5 year i used ubuntu, it worked okay, but got bloated, and their upgrades are inferior to Debian, so when i had to upgrade, i upgraded to debian lol |
2022-08-29 00:14:03 +0200 | <qrpnxz> | debian was pretty much the only system up until recently (now Fedora too, kind of) that officially supported in place major version update of the system. There's reports of people that have the same Debian install since like version 3. Reliable af. |
2022-08-29 00:14:26 +0200 | <qrpnxz> | every other OS is like dark ages wipe the drive and reinstall |
2022-08-29 00:14:54 +0200 | <qrpnxz> | actually mind blowing. Not surprising rolling release got so popular. That's the stupidest model ever |
2022-08-29 00:16:23 +0200 | segfaultfizzbuzz | (~segfaultf@23-93-74-212.fiber.dynamic.sonic.net) |
2022-08-29 00:17:10 +0200 | <pareto-optimal-d> | I used to use Debian around squeeze. |
2022-08-29 00:17:40 +0200 | kannon | (~NK@76.243.126.210) |
2022-08-29 00:18:20 +0200 | kannon | (~NK@76.243.126.210) (Read error: Connection reset by peer) |
2022-08-29 00:18:28 +0200 | merijn | (~merijn@c-001-001-007.client.esciencecenter.eduvpn.nl) |
2022-08-29 00:18:35 +0200 | <ten_finger_typis> | can TypeAnnotations be used with operators? something like: a < @Int b |
2022-08-29 00:18:54 +0200 | <glguy> | ten_finger_typis: I'd try using: (<) @Int |
2022-08-29 00:18:58 +0200 | <glguy> | but I don't remember |
2022-08-29 00:19:26 +0200 | <pareto-optimal-d> | By subjective reproducibility I mean the parts that are part of your anectdotal but important experience. |
2022-08-29 00:19:26 +0200 | <pareto-optimal-d> | As opposed to objective as in docker images are composed of timestamps which are a source of entropy making it less reproducible qrpnxz |
2022-08-29 00:19:59 +0200 | bilegeek | (~bilegeek@2600:1008:b044:1225:6505:fd25:5d3:3087) |
2022-08-29 00:20:03 +0200 | <qrpnxz> | "docker images are composed of timestamps" ?!?! |
2022-08-29 00:20:26 +0200 | zer0bitz | (~zer0bitz@2001:2003:f748:2000:4dbc:af65:e687:45de) |
2022-08-29 00:21:30 +0200 | <pareto-optimal-d> | https://mobile.twitter.com/lorenc_dan/status/1343921457143934977 |
2022-08-29 00:22:42 +0200 | kannon | (~NK@76.243.126.210) |
2022-08-29 00:23:44 +0200 | <qrpnxz> | ah, well yes timestamps can make it annoying to easily see that a build is the same |
2022-08-29 00:23:58 +0200 | ten_finger_typis | (~ten_finge@adsl-84-226-91-51.adslplus.ch) (Quit: Client closed) |
2022-08-29 00:24:10 +0200 | <qrpnxz> | docker images have timestamps, i wouldn't say "are composed of timestamps" |
2022-08-29 00:24:56 +0200 | <pareto-optimal-d> | Well you can't guarantee things don't depend on those timestamps, which make it not reproducible right? |
2022-08-29 00:25:49 +0200 | <glguy> | these tools all run into the same problems t hat they're only as reproducible as the tools they use can guarantee |
2022-08-29 00:26:15 +0200 | chexum | (~quassel@gateway/tor-sasl/chexum) (Remote host closed the connection) |
2022-08-29 00:26:25 +0200 | <qrpnxz> | seems kind of insane to in any way depend on those timestamps, but hypothetically, sure. Would your rather your build reproducibly accidentally work? Or actually see that something utterly insane is happening? |
2022-08-29 00:26:47 +0200 | chexum | (~quassel@gateway/tor-sasl/chexum) |
2022-08-29 00:26:55 +0200 | <pareto-optimal-d> | Actually qrpnxz I first learned about timestamp issues from debian working towards reproducible builds: |
2022-08-29 00:26:55 +0200 | <pareto-optimal-d> | https://lwn.net/Articles/757118/ |
2022-08-29 00:28:35 +0200 | <qrpnxz> | yes, that was a good effort |
2022-08-29 00:28:44 +0200 | <qrpnxz> | lol they got a wobsite: https://isdebianreproducibleyet.com/ |
2022-08-29 00:28:54 +0200 | justsomeguy | (~justsomeg@user/justsomeguy) (Ping timeout: 244 seconds) |
2022-08-29 00:30:15 +0200 | <pareto-optimal-d> | The nixos minimal iso is 100% 😊 |
2022-08-29 00:30:15 +0200 | <pareto-optimal-d> | https://discourse.nixos.org/t/nixos-unstable-s-iso-minimal-x86-64-linux-is-100-reproducible/13723 |
2022-08-29 00:30:41 +0200 | <pareto-optimal-d> | Oh wait 99.37 now https://r13y.com/ |
2022-08-29 00:30:52 +0200 | segfaultfizzbuzz | (~segfaultf@23-93-74-212.fiber.dynamic.sonic.net) (Ping timeout: 260 seconds) |
2022-08-29 00:31:14 +0200 | <pareto-optimal-d> | s/37/77/ |
2022-08-29 00:31:36 +0200 | <qrpnxz> | that's nice |
2022-08-29 00:31:52 +0200 | [itchyjunk] | (~itchyjunk@user/itchyjunk/x-7353470) |
2022-08-29 00:32:14 +0200 | <pareto-optimal-d> | So importance of that for me is being able to rule out the whole ugly class of build issues |
2022-08-29 00:33:05 +0200 | tv | (~tv@user/tv) (Quit: derp) |
2022-08-29 00:33:25 +0200 | tv | (~tv@user/tv) |
2022-08-29 00:33:36 +0200 | mikoto-chan | (~mikoto-ch@164.5.249.78) |
2022-08-29 00:34:50 +0200 | <pareto-optimal-d> | Or if I absolutely have to do that busy work, I can take solace in the fact that no one else will have to in the entire community. |
2022-08-29 00:36:28 +0200 | [itchyjunk] | (~itchyjunk@user/itchyjunk/x-7353470) (Remote host closed the connection) |
2022-08-29 00:36:45 +0200 | [itchyjunk] | (~itchyjunk@user/itchyjunk/x-7353470) |
2022-08-29 00:50:48 +0200 | segfaultfizzbuzz | (~segfaultf@23-93-74-212.fiber.dynamic.sonic.net) |
2022-08-29 00:51:28 +0200 | MoC | (~moc@user/moc) (Quit: Konversation terminated!) |
2022-08-29 00:52:54 +0200 | merijn | (~merijn@c-001-001-007.client.esciencecenter.eduvpn.nl) (Ping timeout: 268 seconds) |
2022-08-29 00:55:20 +0200 | phma | (phma@2001:5b0:210d:2468:ee36:3a6:50fd:1e95) (Read error: Connection reset by peer) |
2022-08-29 00:55:41 +0200 | szkl | (uid110435@id-110435.uxbridge.irccloud.com) |
2022-08-29 01:00:25 +0200 | kannon | (~NK@76.243.126.210) (Ping timeout: 244 seconds) |
2022-08-29 01:02:23 +0200 | <alexfmpe[m]> | can you have let/where bindings inside of a class instance? I'd like to be able to share big chunks of implementation between two methods but only on a few specific instances, so factoring it out into a new method doesn't make sense. |
2022-08-29 01:02:23 +0200 | <alexfmpe[m]> | The alternative would be having silly named utils at the module scope for the benefit of their respective instances |
2022-08-29 01:03:32 +0200 | <geekosaur> | no |
2022-08-29 01:04:05 +0200 | merijn | (~merijn@c-001-001-007.client.esciencecenter.eduvpn.nl) |
2022-08-29 01:07:04 +0200 | mjs2600_ | (~mjs2600@c-24-91-3-49.hsd1.vt.comcast.net) (Ping timeout: 268 seconds) |
2022-08-29 01:08:19 +0200 | wonko | (~wjc@2a0e:1c80:2::130) (Ping timeout: 248 seconds) |
2022-08-29 01:09:32 +0200 | merijn | (~merijn@c-001-001-007.client.esciencecenter.eduvpn.nl) (Ping timeout: 268 seconds) |
2022-08-29 01:09:42 +0200 | aeka | (~aeka@2606:6080:2001:6:e14e:c3f3:8562:6916) (Ping timeout: 244 seconds) |
2022-08-29 01:13:23 +0200 | Guest4172 | (~chenqisu1@183.217.200.212) |
2022-08-29 01:16:31 +0200 | matthewmosior | (~matthewmo@173.170.253.91) (Ping timeout: 255 seconds) |
2022-08-29 01:18:08 +0200 | phma | (~phma@host-67-44-208-66.hnremote.net) |
2022-08-29 01:21:01 +0200 | eikke | (~NicolasT@user/NicolasT) (Ping timeout: 255 seconds) |
2022-08-29 01:21:04 +0200 | Tuplanolla | (~Tuplanoll@91-159-69-12.elisa-laajakaista.fi) (Quit: Leaving.) |
2022-08-29 01:22:09 +0200 | jmorris | (uid537181@id-537181.uxbridge.irccloud.com) |
2022-08-29 01:25:09 +0200 | aeka | (~aeka@user/hiruji) |
2022-08-29 01:30:36 +0200 | matthewmosior | (~matthewmo@173.170.253.91) |
2022-08-29 01:34:50 +0200 | eggplantade | (~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net) (Remote host closed the connection) |
2022-08-29 01:37:56 +0200 | shapr | (~user@76.73.156.98) |
2022-08-29 01:43:11 +0200 | euandreh | (~euandreh@179.214.113.107) (Ping timeout: 260 seconds) |
2022-08-29 01:44:52 +0200 | euandreh | (~euandreh@179.214.113.107) |
2022-08-29 01:47:37 +0200 | themc47 | (~mc47@xmonad/TheMC47) (Remote host closed the connection) |
2022-08-29 01:47:55 +0200 | geekosaur | (~geekosaur@xmonad/geekosaur) (Quit: Leaving) |
2022-08-29 01:48:06 +0200 | eggplantade | (~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net) |
2022-08-29 01:48:30 +0200 | asd1123 | (~asd112345@2001:999:250:841b:41b5:1bba:4b73:1c6a) |
2022-08-29 01:49:57 +0200 | asd1123 | (~asd112345@2001:999:250:841b:41b5:1bba:4b73:1c6a) (Quit: Leaving) |
2022-08-29 01:50:46 +0200 | segfaultfizzbuzz | (~segfaultf@23-93-74-212.fiber.dynamic.sonic.net) (Ping timeout: 260 seconds) |
2022-08-29 01:51:22 +0200 | justsomeguy | (~justsomeg@user/justsomeguy) |
2022-08-29 01:52:00 +0200 | jero98772 | (~jero98772@2800:484:1d80:d8ce:efcc:cbb3:7f2a:6dff) |
2022-08-29 01:54:10 +0200 | segfaultfizzbuzz | (~segfaultf@23-93-74-212.fiber.dynamic.sonic.net) |
2022-08-29 01:58:19 +0200 | talismanick | (~talismani@c-67-174-251-163.hsd1.ca.comcast.net) |
2022-08-29 02:01:00 +0200 | geekosaur | (~geekosaur@xmonad/geekosaur) |
2022-08-29 02:05:10 +0200 | merijn | (~merijn@c-001-001-007.client.esciencecenter.eduvpn.nl) |
2022-08-29 02:11:11 +0200 | bontaq` | (~user@ool-45779fe5.dyn.optonline.net) (Ping timeout: 260 seconds) |
2022-08-29 02:11:59 +0200 | nate4 | (~nate@98.45.169.16) (Ping timeout: 252 seconds) |
2022-08-29 02:12:41 +0200 | nate4 | (~nate@98.45.169.16) |
2022-08-29 02:15:55 +0200 | kannon | (~NK@135-180-47-54.fiber.dynamic.sonic.net) |
2022-08-29 02:16:39 +0200 | Polo | (~Gambino@user/polo) |
2022-08-29 02:20:26 +0200 | kannon | (~NK@135-180-47-54.fiber.dynamic.sonic.net) (Ping timeout: 255 seconds) |
2022-08-29 02:27:48 +0200 | waleee | (~waleee@2001:9b0:213:7200:cc36:a556:b1e8:b340) (Quit: WeeChat 3.6) |
2022-08-29 02:28:24 +0200 | waleee | (~waleee@2001:9b0:213:7200:cc36:a556:b1e8:b340) |
2022-08-29 02:32:18 +0200 | Polo | (~Gambino@user/polo) (Ping timeout: 240 seconds) |
2022-08-29 02:33:56 +0200 | matthewmosior | (~matthewmo@173.170.253.91) (Ping timeout: 260 seconds) |
2022-08-29 02:35:09 +0200 | lottaquestions_ | (~nick@2607:fa49:503e:7100:8f8a:99be:1f79:fe99) (Remote host closed the connection) |
2022-08-29 02:36:02 +0200 | nilradical | (~nilradica@user/naso) |
2022-08-29 02:44:28 +0200 | mvk | (~mvk@2607:fea8:5ce3:8500::a1ec) |
2022-08-29 02:45:44 +0200 | segfaultfizzbuzz | (~segfaultf@23-93-74-212.fiber.dynamic.sonic.net) (Ping timeout: 268 seconds) |
2022-08-29 02:46:13 +0200 | Furor | Colere |
2022-08-29 02:46:32 +0200 | matthewmosior | (~matthewmo@173.170.253.91) |
2022-08-29 02:47:52 +0200 | Colere | (~colere@about/linux/staff/sauvin) (Remote host closed the connection) |
2022-08-29 02:47:52 +0200 | justsomeguy | (~justsomeg@user/justsomeguy) (Ping timeout: 244 seconds) |
2022-08-29 02:49:23 +0200 | gurkenglas | (~gurkengla@p548ac72e.dip0.t-ipconnect.de) (Ping timeout: 252 seconds) |
2022-08-29 02:50:31 +0200 | kannon | (~NK@135-180-47-54.fiber.dynamic.sonic.net) |
2022-08-29 02:50:34 +0200 | segfaultfizzbuzz | (~segfaultf@23-93-74-212.fiber.dynamic.sonic.net) |
2022-08-29 02:55:06 +0200 | kannon | (~NK@135-180-47-54.fiber.dynamic.sonic.net) (Ping timeout: 244 seconds) |
2022-08-29 02:58:55 +0200 | mikoto-chan | (~mikoto-ch@164.5.249.78) (Ping timeout: 252 seconds) |
2022-08-29 02:58:57 +0200 | zxx7529 | (~Thunderbi@user/zxx7529) |
2022-08-29 03:02:48 +0200 | nilradical | (~nilradica@user/naso) (Remote host closed the connection) |
2022-08-29 03:03:37 +0200 | nilradical | (~nilradica@user/naso) |
2022-08-29 03:06:15 +0200 | beteigeuze | (~Thunderbi@bl11-28-222.dsl.telepac.pt) (Ping timeout: 252 seconds) |
2022-08-29 03:07:57 +0200 | kannon | (~NK@135-180-47-54.fiber.dynamic.sonic.net) |
2022-08-29 03:08:20 +0200 | bilegeek_ | (~bilegeek@105.sub-174-209-45.myvzw.com) |
2022-08-29 03:10:37 +0200 | bilegeek | (~bilegeek@2600:1008:b044:1225:6505:fd25:5d3:3087) (Ping timeout: 244 seconds) |
2022-08-29 03:10:43 +0200 | albet70 | (~xxx@2400:8902::f03c:92ff:fe60:98d8) (Remote host closed the connection) |
2022-08-29 03:12:26 +0200 | kannon | (~NK@135-180-47-54.fiber.dynamic.sonic.net) (Ping timeout: 260 seconds) |
2022-08-29 03:13:15 +0200 | kannon | (~NK@135-180-47-54.fiber.dynamic.sonic.net) |
2022-08-29 03:16:51 +0200 | albet70 | (~xxx@2400:8902::f03c:92ff:fe60:98d8) |
2022-08-29 03:17:35 +0200 | kannon | (~NK@135-180-47-54.fiber.dynamic.sonic.net) (Ping timeout: 255 seconds) |
2022-08-29 03:22:05 +0200 | waleee | (~waleee@2001:9b0:213:7200:cc36:a556:b1e8:b340) (Ping timeout: 255 seconds) |
2022-08-29 03:23:58 +0200 | notzmv | (~zmv@user/notzmv) (Ping timeout: 268 seconds) |
2022-08-29 03:25:17 +0200 | <segfaultfizzbuzz> | are exceptions a design decision in haskell or are they "intrinsic to CPUs" or "intrinsic to real CPUs" or some similiar thing? |
2022-08-29 03:25:49 +0200 | xff0x | (~xff0x@ai071162.d.east.v6connect.net) (Ping timeout: 268 seconds) |
2022-08-29 03:25:58 +0200 | segfaultfizzbuzz | (~segfaultf@23-93-74-212.fiber.dynamic.sonic.net) (Quit: segfaultfizzbuzz) |
2022-08-29 03:26:12 +0200 | segfaultfizzbuzz | (~segfaultf@23-93-74-212.fiber.dynamic.sonic.net) |
2022-08-29 03:30:33 +0200 | <geekosaur> | design decision |
2022-08-29 03:31:03 +0200 | <geekosaur> | I still wish they'd used something more like Either for synchronous exceptions |
2022-08-29 03:31:30 +0200 | <segfaultfizzbuzz> | and am i neurotic for thinking Left and Right is also a design error? |
2022-08-29 03:33:30 +0200 | <geekosaur> | Either itself has no preferences, so there's no good naming convention for it. there are alternatives such as ExceptT which are "right-biased" |
2022-08-29 03:34:20 +0200 | <geekosaur> | (granting that ExceptT is still Either underneath, but this is mostly hidden) |
2022-08-29 03:35:11 +0200 | mikoto-chan | (~mikoto-ch@164.5.249.78) |
2022-08-29 03:35:12 +0200 | <geekosaur> | go try and work out sensible naming for a type which supports two possible alternative values but doesn't prefer one over the other |
2022-08-29 03:36:31 +0200 | matthewmosior | (~matthewmo@173.170.253.91) (Remote host closed the connection) |
2022-08-29 03:36:38 +0200 | matthewmosior | (~matthewmo@173.170.253.91) |
2022-08-29 03:38:11 +0200 | <geekosaur> | you're reduced to Left/Right (Either), This/That (These), etc. |
2022-08-29 03:41:27 +0200 | merijn | (~merijn@c-001-001-007.client.esciencecenter.eduvpn.nl) (Ping timeout: 252 seconds) |
2022-08-29 03:42:01 +0200 | matthewmosior | (~matthewmo@173.170.253.91) (Remote host closed the connection) |
2022-08-29 03:42:55 +0200 | segfaultfizzbuzz | (~segfaultf@23-93-74-212.fiber.dynamic.sonic.net) (Ping timeout: 252 seconds) |
2022-08-29 03:45:07 +0200 | raehik | (~raehik@cpc95906-rdng25-2-0-cust156.15-3.cable.virginm.net) (Ping timeout: 252 seconds) |
2022-08-29 03:46:09 +0200 | segfaultfizzbuzz | (~segfaultf@23-93-74-212.fiber.dynamic.sonic.net) |
2022-08-29 03:47:06 +0200 | matthewmosior | (~matthewmo@173.170.253.91) |
2022-08-29 03:47:30 +0200 | frost | (~frost@user/frost) |
2022-08-29 03:49:17 +0200 | kannon | (~NK@135-180-47-54.fiber.dynamic.sonic.net) |
2022-08-29 03:51:06 +0200 | segfaultfizzbuzz | (~segfaultf@23-93-74-212.fiber.dynamic.sonic.net) (Ping timeout: 268 seconds) |
2022-08-29 03:51:25 +0200 | matthewmosior | (~matthewmo@173.170.253.91) (Ping timeout: 244 seconds) |
2022-08-29 03:53:43 +0200 | matthewmosior | (~matthewmo@173.170.253.91) |
2022-08-29 03:53:51 +0200 | kannon | (~NK@135-180-47-54.fiber.dynamic.sonic.net) (Ping timeout: 260 seconds) |
2022-08-29 03:54:10 +0200 | nate4 | (~nate@98.45.169.16) (Ping timeout: 268 seconds) |
2022-08-29 03:54:49 +0200 | merijn | (~merijn@c-001-001-007.client.esciencecenter.eduvpn.nl) |
2022-08-29 03:58:08 +0200 | matthewmosior | (~matthewmo@173.170.253.91) (Ping timeout: 244 seconds) |
2022-08-29 03:59:06 +0200 | segfaultfizzbuzz | (~segfaultf@23-93-74-212.fiber.dynamic.sonic.net) |
2022-08-29 04:01:30 +0200 | matthewmosior | (~matthewmo@173.170.253.91) |
2022-08-29 04:02:58 +0200 | lemonsnicks | (~lemonsnic@cpc159519-perr18-2-0-cust114.19-1.cable.virginm.net) (Quit: ZNC 1.8.2 - https://znc.in) |
2022-08-29 04:03:42 +0200 | mjs2600 | (~mjs2600@c-24-91-3-49.hsd1.vt.comcast.net) |
2022-08-29 04:06:30 +0200 | <Axman6> | segfaultfizzbuzz: what should they be called instead? |
2022-08-29 04:07:43 +0200 | xff0x | (~xff0x@125x103x176x34.ap125.ftth.ucom.ne.jp) |
2022-08-29 04:08:25 +0200 | eggplantade | (~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net) (Remote host closed the connection) |
2022-08-29 04:09:29 +0200 | Colere | (~colere@about/linux/staff/sauvin) |
2022-08-29 04:11:21 +0200 | td_ | (~td@94.134.91.78) (Ping timeout: 260 seconds) |
2022-08-29 04:13:08 +0200 | td_ | (~td@94.134.91.130) |
2022-08-29 04:17:01 +0200 | segfaultfizzbuzz | (~segfaultf@23-93-74-212.fiber.dynamic.sonic.net) (Ping timeout: 252 seconds) |
2022-08-29 04:18:26 +0200 | kannon | (~NK@135-180-47-54.fiber.dynamic.sonic.net) |
2022-08-29 04:19:09 +0200 | jmorris | (uid537181@id-537181.uxbridge.irccloud.com) (Quit: Connection closed for inactivity) |
2022-08-29 04:19:47 +0200 | nate4 | (~nate@98.45.169.16) |
2022-08-29 04:20:51 +0200 | lemonsnicks | (~lemonsnic@cpc159519-perr18-2-0-cust114.19-1.cable.virginm.net) |
2022-08-29 04:22:56 +0200 | kannon | (~NK@135-180-47-54.fiber.dynamic.sonic.net) (Ping timeout: 244 seconds) |
2022-08-29 04:23:37 +0200 | segfaultfizzbuzz | (~segfaultf@23-93-74-212.fiber.dynamic.sonic.net) |
2022-08-29 04:25:36 +0200 | <monochrom> | data Hand a b = Sinister a | Dexter b >:) |
2022-08-29 04:26:33 +0200 | kimjetwav | (~user@2607:fea8:235e:b600:2558:8d7b:38b4:84a) |
2022-08-29 04:26:51 +0200 | jmorris | (uid537181@id-537181.uxbridge.irccloud.com) |
2022-08-29 04:28:51 +0200 | notzmv | (~zmv@user/notzmv) |
2022-08-29 04:29:26 +0200 | merijn | (~merijn@c-001-001-007.client.esciencecenter.eduvpn.nl) (Ping timeout: 260 seconds) |
2022-08-29 04:30:16 +0200 | slaydr | (~slaydr@173.239.197.75) (Remote host closed the connection) |
2022-08-29 04:30:34 +0200 | nate4 | (~nate@98.45.169.16) (Ping timeout: 268 seconds) |
2022-08-29 04:36:22 +0200 | frost | (~frost@user/frost) (Quit: Client closed) |
2022-08-29 04:38:13 +0200 | eggplantade | (~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net) |
2022-08-29 04:39:12 +0200 | notzmv | (~zmv@user/notzmv) (Ping timeout: 268 seconds) |
2022-08-29 04:43:12 +0200 | terrorjack | (~terrorjac@2a01:4f8:1c1e:509a::1) (Quit: The Lounge - https://thelounge.chat) |
2022-08-29 04:43:33 +0200 | kimjetwav | (~user@2607:fea8:235e:b600:2558:8d7b:38b4:84a) (Remote host closed the connection) |
2022-08-29 04:43:51 +0200 | kimjetwav | (~user@2607:fea8:235e:b600:bb37:18ea:2f8c:d5ac) |
2022-08-29 04:44:11 +0200 | terrorjack | (~terrorjac@2a01:4f8:1c1e:509a::1) |
2022-08-29 04:46:36 +0200 | segfaultfizzbuzz | (~segfaultf@23-93-74-212.fiber.dynamic.sonic.net) (Ping timeout: 268 seconds) |
2022-08-29 04:48:25 +0200 | kannon | (~NK@135-180-47-54.fiber.dynamic.sonic.net) |
2022-08-29 04:50:07 +0200 | notzmv | (~zmv@user/notzmv) |
2022-08-29 04:52:54 +0200 | kannon | (~NK@135-180-47-54.fiber.dynamic.sonic.net) (Ping timeout: 244 seconds) |
2022-08-29 04:57:16 +0200 | FinnElija | (~finn_elij@user/finn-elija/x-0085643) (Killed (NickServ (Forcing logout FinnElija -> finn_elija))) |
2022-08-29 04:57:16 +0200 | finn_elija | (~finn_elij@user/finn-elija/x-0085643) |
2022-08-29 04:57:16 +0200 | finn_elija | FinnElija |
2022-08-29 05:00:50 +0200 | bitdex | (~bitdex@gateway/tor-sasl/bitdex) (Ping timeout: 268 seconds) |
2022-08-29 05:01:32 +0200 | stiell | (~stiell@gateway/tor-sasl/stiell) (Remote host closed the connection) |
2022-08-29 05:02:07 +0200 | stiell | (~stiell@gateway/tor-sasl/stiell) |
2022-08-29 05:02:25 +0200 | <qrpnxz> | (Up | Down) (Yin | Yang) (Democrat | Republican) |
2022-08-29 05:02:44 +0200 | <qrpnxz> | (Mom | Dad) |
2022-08-29 05:02:51 +0200 | shapr | (~user@76.73.156.98) (Ping timeout: 252 seconds) |
2022-08-29 05:02:58 +0200 | <qrpnxz> | Salt | Pepper |
2022-08-29 05:03:23 +0200 | <qrpnxz> | so many choices |
2022-08-29 05:03:27 +0200 | <qrpnxz> | I like Left and Right |
2022-08-29 05:04:02 +0200 | noteness | (~noteness@user/noteness) |
2022-08-29 05:04:36 +0200 | <qrpnxz> | But just because a type is iso to (,) or Either doesn't mean we should be using those. Rust has a Result with Err and Ok, there's absolutely zero ambiguouity there about what means what |
2022-08-29 05:04:56 +0200 | <qrpnxz> | *ambiguity |
2022-08-29 05:04:58 +0200 | <Clinton[m]> | When using GHC, if I've got `-Werror` on the command line, how do I add just one warning to the end of the command line that doesn't get converted to an error? (I still want all previously defined warnings to be errors) |
2022-08-29 05:06:06 +0200 | <qrpnxz> | "To reverse -Werror and stop treating any warnings as errors use -Wwarn, or use -Wwarn=<wflag> to stop treating specific warnings as errors." |
2022-08-29 05:06:11 +0200 | <qrpnxz> | https://ghc.gitlab.haskell.org/ghc/doc/users_guide/using-warnings.html |
2022-08-29 05:06:13 +0200 | <qrpnxz> | Clinton[m]: |
2022-08-29 05:09:31 +0200 | <qrpnxz> | My number one feature request for GHC at the moment is to be able to define local data types. Types are so important, in haskell arguably more so, and i can't just create them whenever. Imagine every function had to be top-level. BAD |
2022-08-29 05:09:50 +0200 | bitdex | (~bitdex@gateway/tor-sasl/bitdex) |
2022-08-29 05:14:04 +0200 | segfaultfizzbuzz | (~segfaultf@23-93-74-212.fiber.dynamic.sonic.net) |
2022-08-29 05:17:03 +0200 | instantaphex | (~jb@c-73-171-252-84.hsd1.fl.comcast.net) |
2022-08-29 05:20:42 +0200 | kannon | (~NK@135-180-47-54.fiber.dynamic.sonic.net) |
2022-08-29 05:21:21 +0200 | segfaultfizzbuzz | (~segfaultf@23-93-74-212.fiber.dynamic.sonic.net) (Ping timeout: 260 seconds) |
2022-08-29 05:22:04 +0200 | segfaultfizzbuzz | (~segfaultf@23-93-74-212.fiber.dynamic.sonic.net) |
2022-08-29 05:25:23 +0200 | kannon | (~NK@135-180-47-54.fiber.dynamic.sonic.net) (Ping timeout: 255 seconds) |
2022-08-29 05:25:29 +0200 | merijn | (~merijn@c-001-001-007.client.esciencecenter.eduvpn.nl) |
2022-08-29 05:26:28 +0200 | jero98772 | (~jero98772@2800:484:1d80:d8ce:efcc:cbb3:7f2a:6dff) (Remote host closed the connection) |
2022-08-29 05:28:21 +0200 | [itchyjunk] | (~itchyjunk@user/itchyjunk/x-7353470) (Remote host closed the connection) |
2022-08-29 05:29:53 +0200 | <jackdk> | the right-bias of Either is forced by an interaction with the kind system. If you swapped the type variables around, the functor/applicative/monad instances would operate on the error and behave more like catchError |
2022-08-29 05:29:59 +0200 | jakalx | (~jakalx@base.jakalx.net) (Error from remote client) |
2022-08-29 05:32:26 +0200 | sympt | (~sympt@user/sympt) (Ping timeout: 260 seconds) |
2022-08-29 05:35:49 +0200 | jakalx | (~jakalx@base.jakalx.net) |
2022-08-29 05:37:41 +0200 | instantaphex | (~jb@c-73-171-252-84.hsd1.fl.comcast.net) (Ping timeout: 252 seconds) |
2022-08-29 05:40:41 +0200 | <monochrom> | qrpnxz: I like Salt | Pepper. BTW why is it not Pepper | Salt? >:) Also Coffee | Tea |
2022-08-29 05:41:25 +0200 | <dsal> | monochrom: I agree that Coffee < Tea |
2022-08-29 05:41:26 +0200 | <qrpnxz> | that's one of the top 10 questions science can't answer, unfortunately |
2022-08-29 05:47:55 +0200 | kimjetwav | (~user@2607:fea8:235e:b600:bb37:18ea:2f8c:d5ac) (Read error: Connection reset by peer) |
2022-08-29 05:48:15 +0200 | kimjetwav | (~user@2607:fea8:235e:b600:bb37:18ea:2f8c:d5ac) |
2022-08-29 05:48:25 +0200 | kannon | (~NK@135-180-47-54.fiber.dynamic.sonic.net) |
2022-08-29 05:57:29 +0200 | kenran | (~kenran@200116b82b0e3000ec071ac97606b242.dip.versatel-1u1.de) |
2022-08-29 05:58:12 +0200 | kenran | (~kenran@200116b82b0e3000ec071ac97606b242.dip.versatel-1u1.de) (Client Quit) |
2022-08-29 05:59:57 +0200 | merijn | (~merijn@c-001-001-007.client.esciencecenter.eduvpn.nl) (Ping timeout: 268 seconds) |
2022-08-29 06:01:08 +0200 | jmdaemon | (~jmdaemon@user/jmdaemon) |
2022-08-29 06:02:28 +0200 | jmdaemon | (~jmdaemon@user/jmdaemon) (Remote host closed the connection) |
2022-08-29 06:04:18 +0200 | ddellacosta | (~ddellacos@143.244.47.77) (Ping timeout: 268 seconds) |
2022-08-29 06:08:57 +0200 | nilradical | (~nilradica@user/naso) () |
2022-08-29 06:10:17 +0200 | FinnElija | (~finn_elij@user/finn-elija/x-0085643) (Remote host closed the connection) |
2022-08-29 06:10:44 +0200 | FinnElija | (~finn_elij@user/finn-elija/x-0085643) |
2022-08-29 06:12:11 +0200 | FinnElija | (~finn_elij@user/finn-elija/x-0085643) (*.net *.split) |
2022-08-29 06:12:11 +0200 | bitdex | (~bitdex@gateway/tor-sasl/bitdex) (*.net *.split) |
2022-08-29 06:12:11 +0200 | stiell | (~stiell@gateway/tor-sasl/stiell) (*.net *.split) |
2022-08-29 06:12:11 +0200 | chexum | (~quassel@gateway/tor-sasl/chexum) (*.net *.split) |
2022-08-29 06:12:11 +0200 | azimut | (~azimut@gateway/tor-sasl/azimut) (*.net *.split) |
2022-08-29 06:12:11 +0200 | ChaiTRex | (~ChaiTRex@user/chaitrex) (*.net *.split) |
2022-08-29 06:12:11 +0200 | califax | (~califax@user/califx) (*.net *.split) |
2022-08-29 06:12:11 +0200 | jpds | (~jpds@gateway/tor-sasl/jpds) (*.net *.split) |
2022-08-29 06:12:11 +0200 | adanwan | (~adanwan@gateway/tor-sasl/adanwan) (*.net *.split) |
2022-08-29 06:13:51 +0200 | jpds | (~jpds@gateway/tor-sasl/jpds) |
2022-08-29 06:13:59 +0200 | adanwan | (~adanwan@gateway/tor-sasl/adanwan) |
2022-08-29 06:14:31 +0200 | bitdex | (~bitdex@gateway/tor-sasl/bitdex) |
2022-08-29 06:14:42 +0200 | stiell | (~stiell@gateway/tor-sasl/stiell) |
2022-08-29 06:14:54 +0200 | ChaiTRex | (~ChaiTRex@user/chaitrex) |
2022-08-29 06:15:04 +0200 | azimut | (~azimut@gateway/tor-sasl/azimut) |
2022-08-29 06:15:15 +0200 | FinnElija | (~finn_elij@user/finn-elija/x-0085643) |
2022-08-29 06:15:27 +0200 | califax | (~califax@user/califx) |
2022-08-29 06:16:27 +0200 | jmdaemon | (~jmdaemon@user/jmdaemon) |
2022-08-29 06:16:33 +0200 | ystael | (~ystael@user/ystael) (Ping timeout: 252 seconds) |
2022-08-29 06:16:36 +0200 | machinedgod | (~machinedg@d198-53-218-113.abhsia.telus.net) (Ping timeout: 268 seconds) |
2022-08-29 06:16:47 +0200 | chexum | (~quassel@gateway/tor-sasl/chexum) |
2022-08-29 06:17:58 +0200 | adanwan | (~adanwan@gateway/tor-sasl/adanwan) (Remote host closed the connection) |
2022-08-29 06:18:12 +0200 | adanwan | (~adanwan@gateway/tor-sasl/adanwan) |
2022-08-29 06:18:19 +0200 | king_gs | (~Thunderbi@2806:103e:29:da7a:1f74:531c:dec2:7aec) |
2022-08-29 06:21:26 +0200 | takuan | (~takuan@178-116-218-225.access.telenet.be) |
2022-08-29 06:27:02 +0200 | nate4 | (~nate@98.45.169.16) |
2022-08-29 06:27:51 +0200 | matthewmosior | (~matthewmo@173.170.253.91) (Ping timeout: 260 seconds) |
2022-08-29 06:30:07 +0200 | mbuf | (~Shakthi@122.165.55.71) |
2022-08-29 06:31:51 +0200 | azimut | (~azimut@gateway/tor-sasl/azimut) (Ping timeout: 258 seconds) |
2022-08-29 06:32:01 +0200 | nate4 | (~nate@98.45.169.16) (Ping timeout: 268 seconds) |
2022-08-29 06:33:39 +0200 | azimut | (~azimut@gateway/tor-sasl/azimut) |
2022-08-29 06:36:36 +0200 | zxx7529 | (~Thunderbi@user/zxx7529) (Remote host closed the connection) |
2022-08-29 06:36:49 +0200 | zxx7529 | (~Thunderbi@user/zxx7529) |
2022-08-29 06:46:08 +0200 | hays | (~rootveget@fsf/member/hays) (Remote host closed the connection) |
2022-08-29 06:47:38 +0200 | matthewmosior | (~matthewmo@173.170.253.91) |
2022-08-29 06:48:11 +0200 | kimjetwav | (~user@2607:fea8:235e:b600:bb37:18ea:2f8c:d5ac) (Ping timeout: 255 seconds) |
2022-08-29 06:48:54 +0200 | merijn | (~merijn@c-001-001-007.client.esciencecenter.eduvpn.nl) |
2022-08-29 06:49:08 +0200 | hays | (rootvegeta@fsf/member/hays) |
2022-08-29 06:51:44 +0200 | matthewmosior | (~matthewmo@173.170.253.91) (Ping timeout: 244 seconds) |
2022-08-29 06:53:00 +0200 | titibandit | (~titibandi@xdsl-87-78-66-58.nc.de) |
2022-08-29 06:54:06 +0200 | merijn | (~merijn@c-001-001-007.client.esciencecenter.eduvpn.nl) (Ping timeout: 260 seconds) |
2022-08-29 06:54:15 +0200 | jao | (~jao@cpc103048-sgyl39-2-0-cust502.18-2.cable.virginm.net) (Ping timeout: 268 seconds) |
2022-08-29 07:05:43 +0200 | matthewmosior | (~matthewmo@173.170.253.91) |
2022-08-29 07:06:35 +0200 | mmarusea1ph2 | (~mihai@198.199.98.239) (Quit: So long and thanks for all the lambdas) |
2022-08-29 07:06:51 +0200 | mmaruseacph2 | (~mihai@198.199.98.239) |
2022-08-29 07:07:33 +0200 | merijn | (~merijn@c-001-001-007.client.esciencecenter.eduvpn.nl) |
2022-08-29 07:08:14 +0200 | king_gs | (~Thunderbi@2806:103e:29:da7a:1f74:531c:dec2:7aec) (Remote host closed the connection) |
2022-08-29 07:08:32 +0200 | king_gs | (~Thunderbi@2806:103e:29:da7a:1f74:531c:dec2:7aec) |
2022-08-29 07:11:43 +0200 | bitdex | (~bitdex@gateway/tor-sasl/bitdex) (Ping timeout: 258 seconds) |
2022-08-29 07:12:52 +0200 | adanwan | (~adanwan@gateway/tor-sasl/adanwan) (Ping timeout: 258 seconds) |
2022-08-29 07:13:59 +0200 | adanwan | (~adanwan@gateway/tor-sasl/adanwan) |
2022-08-29 07:14:01 +0200 | FinnElija | (~finn_elij@user/finn-elija/x-0085643) (Ping timeout: 258 seconds) |
2022-08-29 07:14:24 +0200 | chexum | (~quassel@gateway/tor-sasl/chexum) (Ping timeout: 258 seconds) |
2022-08-29 07:15:07 +0200 | FinnElija | (~finn_elij@user/finn-elija/x-0085643) |
2022-08-29 07:15:37 +0200 | chexum | (~quassel@gateway/tor-sasl/chexum) |
2022-08-29 07:16:42 +0200 | bitdex | (~bitdex@gateway/tor-sasl/bitdex) |
2022-08-29 07:18:18 +0200 | Guest4172 | (~chenqisu1@183.217.200.212) (Ping timeout: 268 seconds) |
2022-08-29 07:31:21 +0200 | segfaultfizzbuzz | (~segfaultf@23-93-74-212.fiber.dynamic.sonic.net) (Ping timeout: 252 seconds) |
2022-08-29 07:35:25 +0200 | zeenk | (~zeenk@2a02:2f04:a311:2d00:6865:d863:4c93:799f) |
2022-08-29 07:40:46 +0200 | merijn | (~merijn@c-001-001-007.client.esciencecenter.eduvpn.nl) (Ping timeout: 260 seconds) |
2022-08-29 07:42:21 +0200 | mikoto-chan | (~mikoto-ch@164.5.249.78) (Ping timeout: 252 seconds) |
2022-08-29 07:49:47 +0200 | segfaultfizzbuzz | (~segfaultf@23-93-74-212.fiber.dynamic.sonic.net) |
2022-08-29 07:53:00 +0200 | shriekingnoise | (~shrieking@186.137.167.202) (Quit: Quit) |
2022-08-29 07:57:01 +0200 | zxx7529 | (~Thunderbi@user/zxx7529) (Ping timeout: 252 seconds) |
2022-08-29 08:06:08 +0200 | kannon | (~NK@135-180-47-54.fiber.dynamic.sonic.net) (Ping timeout: 244 seconds) |
2022-08-29 08:08:55 +0200 | michalz | (~michalz@185.246.204.93) |
2022-08-29 08:10:05 +0200 | nilradical | (~nilradica@user/naso) |
2022-08-29 08:14:30 +0200 | <tdammers> | . o O ( True|False|FileNotFound ) |
2022-08-29 08:16:09 +0200 | <tdammers> | and, yeah, Either's right-biasedness is due to the fact that the type variable for the Right constructor's argument comes last |
2022-08-29 08:16:53 +0200 | king_gs | (~Thunderbi@2806:103e:29:da7a:1f74:531c:dec2:7aec) (Ping timeout: 268 seconds) |
2022-08-29 08:28:23 +0200 | paolino | (~paolo@5.157.115.53) |
2022-08-29 08:28:27 +0200 | king_gs | (~Thunderbi@187.201.216.244) |
2022-08-29 08:30:28 +0200 | zxx7529 | (~Thunderbi@user/zxx7529) |
2022-08-29 08:32:34 +0200 | <sm> | 🐱 | 🐶 |
2022-08-29 08:32:37 +0200 | bilegeek_ | (~bilegeek@105.sub-174-209-45.myvzw.com) (Quit: Leaving) |
2022-08-29 08:33:51 +0200 | dcoutts_ | (~duncan@host86-151-9-109.range86-151.btcentralplus.com) (Ping timeout: 260 seconds) |
2022-08-29 08:35:22 +0200 | coot | (~coot@213.134.176.158) |
2022-08-29 08:37:31 +0200 | merijn | (~merijn@c-001-001-007.client.esciencecenter.eduvpn.nl) |
2022-08-29 08:39:06 +0200 | jargon | (~jargon@184.101.185.66) (Remote host closed the connection) |
2022-08-29 08:39:38 +0200 | alternateved | (~user@staticline-31-183-146-203.toya.net.pl) |
2022-08-29 08:39:49 +0200 | paolino | (~paolo@5.157.115.53) (Quit: Leaving) |
2022-08-29 08:40:11 +0200 | Sgeo | (~Sgeo@user/sgeo) (Read error: Connection reset by peer) |
2022-08-29 08:43:38 +0200 | ccapndave | (~ccapndave@xcpe-194-230-18-108.cgn.res.adslplus.ch) |
2022-08-29 08:44:32 +0200 | ccapndave | (~ccapndave@xcpe-194-230-18-108.cgn.res.adslplus.ch) (Client Quit) |
2022-08-29 08:46:46 +0200 | raym | (~raym@user/raym) |
2022-08-29 08:47:43 +0200 | nate4 | (~nate@98.45.169.16) |
2022-08-29 08:48:20 +0200 | raym_ | (~raym@user/raym) (Ping timeout: 268 seconds) |
2022-08-29 08:51:25 +0200 | segfaultfizzbuzz | (~segfaultf@23-93-74-212.fiber.dynamic.sonic.net) (Ping timeout: 268 seconds) |
2022-08-29 08:51:37 +0200 | titibandit | (~titibandi@xdsl-87-78-66-58.nc.de) (Remote host closed the connection) |
2022-08-29 08:52:31 +0200 | nate4 | (~nate@98.45.169.16) (Ping timeout: 260 seconds) |
2022-08-29 08:53:34 +0200 | lortabac | (~lortabac@2a01:e0a:541:b8f0:e726:4d7c:52f8:911e) |
2022-08-29 08:55:05 +0200 | nilradical | (~nilradica@user/naso) (Remote host closed the connection) |
2022-08-29 08:55:16 +0200 | jargon | (~jargon@184.101.185.66) |
2022-08-29 08:55:51 +0200 | nilradical | (~nilradica@user/naso) |
2022-08-29 08:56:59 +0200 | nilradical | (~nilradica@user/naso) (Remote host closed the connection) |
2022-08-29 08:58:11 +0200 | nilradical | (~nilradica@user/naso) |
2022-08-29 08:58:28 +0200 | chele | (~chele@user/chele) |
2022-08-29 09:00:26 +0200 | Pickchea | (~private@user/pickchea) |
2022-08-29 09:03:01 +0200 | nilradical | (~nilradica@user/naso) (Ping timeout: 252 seconds) |
2022-08-29 09:08:51 +0200 | kadobanana | (~mud@user/kadoban) (Ping timeout: 260 seconds) |
2022-08-29 09:12:23 +0200 | merijn | (~merijn@c-001-001-007.client.esciencecenter.eduvpn.nl) (Ping timeout: 268 seconds) |
2022-08-29 09:13:54 +0200 | kadobanana | (~mud@user/kadoban) |
2022-08-29 09:16:40 +0200 | king_gs1 | (~Thunderbi@2806:103e:29:da7a:1f74:531c:dec2:7aec) |
2022-08-29 09:17:01 +0200 | king_gs | (~Thunderbi@187.201.216.244) (Read error: Connection reset by peer) |
2022-08-29 09:17:01 +0200 | king_gs1 | king_gs |
2022-08-29 09:17:45 +0200 | ccapndave | (~ccapndave@xcpe-194-230-18-108.cgn.res.adslplus.ch) |
2022-08-29 09:22:36 +0200 | segfaultfizzbuzz | (~segfaultf@23-93-74-212.fiber.dynamic.sonic.net) |
2022-08-29 09:25:57 +0200 | yvan-sraka | (~yvan-srak@2a02:2788:224:71c:a4a5:6c05:6213:1707) |
2022-08-29 09:26:14 +0200 | ccapndave | (~ccapndave@xcpe-194-230-18-108.cgn.res.adslplus.ch) (Quit: Textual IRC Client: www.textualapp.com) |
2022-08-29 09:32:51 +0200 | PiDelport | (uid25146@id-25146.lymington.irccloud.com) |
2022-08-29 09:33:10 +0200 | bitdex | (~bitdex@gateway/tor-sasl/bitdex) (Ping timeout: 258 seconds) |
2022-08-29 09:33:54 +0200 | merijn | (~merijn@c-001-001-007.client.esciencecenter.eduvpn.nl) |
2022-08-29 09:33:54 +0200 | bitdex | (~bitdex@gateway/tor-sasl/bitdex) |
2022-08-29 09:34:04 +0200 | <Clinton[m]> | Lens/template Haskell question. Given:... (full message at https://libera.ems.host/_matrix/media/r0/download/libera.chat/89ebd76a2c8003dea899a8a236ccaae0f004…) |
2022-08-29 09:38:13 +0200 | yvan-sraka | (~yvan-srak@2a02:2788:224:71c:a4a5:6c05:6213:1707) (Remote host closed the connection) |
2022-08-29 09:38:32 +0200 | yvan-sraka | (~yvan-srak@2a02:2788:224:71c:53e3:703a:d1b3:d4c8) |
2022-08-29 09:42:19 +0200 | ccntrq | (~Thunderbi@172.209.94.92.rev.sfr.net) |
2022-08-29 09:43:37 +0200 | <jackdk> | Clinton[m]: Either: 1. turn on `-XConstraintKinds`, and `type AsC a = (AsA a, AsB a)`; or 2. `class (AsA a, AsB a) => AsC a; instance (AsA a, AsB a) => AsC a`. I think the first one has type inference issues sometimes but I forget the details |
2022-08-29 09:44:16 +0200 | jmdaemon | (~jmdaemon@user/jmdaemon) (Quit: ZNC 1.8.2 - https://znc.in) |
2022-08-29 09:48:02 +0200 | yvan-sraka | (~yvan-srak@2a02:2788:224:71c:53e3:703a:d1b3:d4c8) (Remote host closed the connection) |
2022-08-29 09:48:14 +0200 | kuribas | (~user@ptr-17d51epjyeoyuptwhep.18120a2.ip6.access.telenet.be) |
2022-08-29 09:48:20 +0200 | yvan-sraka | (~yvan-srak@2a02:2788:224:71c:dd72:669f:e21b:366) |
2022-08-29 09:49:13 +0200 | jmdaemon | (~jmdaemon@user/jmdaemon) |
2022-08-29 09:52:55 +0200 | jmdaemon | (~jmdaemon@user/jmdaemon) (Client Quit) |
2022-08-29 09:55:12 +0200 | jmdaemon | (~jmdaemon@user/jmdaemon) |
2022-08-29 09:56:17 +0200 | tzh | (~tzh@c-24-21-73-154.hsd1.or.comcast.net) (Quit: zzz) |
2022-08-29 09:57:27 +0200 | machinedgod | (~machinedg@d198-53-218-113.abhsia.telus.net) |
2022-08-29 09:57:38 +0200 | <Axman6> | Clinton[m]: or do you mean that you want to make C an instance of AsA and AsB? |
2022-08-29 09:58:14 +0200 | tromp | (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl) |
2022-08-29 09:58:32 +0200 | yvan-sraka | (~yvan-srak@2a02:2788:224:71c:dd72:669f:e21b:366) (Remote host closed the connection) |
2022-08-29 09:58:51 +0200 | yvan-sraka | (~yvan-srak@2a02:2788:224:71c:5fb1:bb64:a2bf:5534) |
2022-08-29 10:07:35 +0200 | jargon | (~jargon@184.101.185.66) (Remote host closed the connection) |
2022-08-29 10:10:36 +0200 | yvan-sraka | (~yvan-srak@2a02:2788:224:71c:5fb1:bb64:a2bf:5534) (Remote host closed the connection) |
2022-08-29 10:10:54 +0200 | yvan-sraka | (~yvan-srak@2a02:2788:224:71c:9fa:958a:9fe4:dc8e) |
2022-08-29 10:15:38 +0200 | __monty__ | (~toonn@user/toonn) |
2022-08-29 10:16:54 +0200 | king_gs | (~Thunderbi@2806:103e:29:da7a:1f74:531c:dec2:7aec) (Quit: king_gs) |
2022-08-29 10:19:28 +0200 | zaquest | (~notzaques@5.130.79.72) (Remote host closed the connection) |
2022-08-29 10:20:01 +0200 | matthewmosior | (~matthewmo@173.170.253.91) (Ping timeout: 260 seconds) |
2022-08-29 10:25:10 +0200 | coot | (~coot@213.134.176.158) (Quit: coot) |
2022-08-29 10:27:21 +0200 | segfaultfizzbuzz | (~segfaultf@23-93-74-212.fiber.dynamic.sonic.net) (Ping timeout: 252 seconds) |
2022-08-29 10:27:58 +0200 | Guest|65 | (~Guest|65@178.173.97.240) |
2022-08-29 10:29:17 +0200 | Guest|65 | (~Guest|65@178.173.97.240) (Client Quit) |
2022-08-29 10:29:48 +0200 | zaquest | (~notzaques@5.130.79.72) |
2022-08-29 10:29:58 +0200 | yvan-sraka | (~yvan-srak@2a02:2788:224:71c:9fa:958a:9fe4:dc8e) (Remote host closed the connection) |
2022-08-29 10:30:17 +0200 | yvan-sraka | (~yvan-srak@2a02:2788:224:71c:9fa:958a:9fe4:dc8e) |
2022-08-29 10:30:53 +0200 | benin0 | (~benin@183.82.205.66) |
2022-08-29 10:33:13 +0200 | matthewmosior | (~matthewmo@173.170.253.91) |
2022-08-29 10:40:56 +0200 | yvan-sraka | (~yvan-srak@2a02:2788:224:71c:9fa:958a:9fe4:dc8e) (Remote host closed the connection) |
2022-08-29 10:41:14 +0200 | yvan-sraka | (~yvan-srak@2a02:2788:224:71c:d850:9e35:a08d:9c6a) |
2022-08-29 10:47:32 +0200 | frost | (~frost@user/frost) |
2022-08-29 10:49:09 +0200 | jmorris | (uid537181@id-537181.uxbridge.irccloud.com) (Quit: Connection closed for inactivity) |
2022-08-29 10:49:56 +0200 | dcoutts | (~duncan@host86-175-248-103.range86-175.btcentralplus.com) |
2022-08-29 10:51:09 +0200 | jmdaemon | (~jmdaemon@user/jmdaemon) (Quit: ZNC 1.8.2 - https://znc.in) |
2022-08-29 10:51:11 +0200 | talismanick | (~talismani@c-67-174-251-163.hsd1.ca.comcast.net) (Ping timeout: 252 seconds) |
2022-08-29 10:55:10 +0200 | wonko | (~wjc@2a0e:1c80:2::130) |
2022-08-29 10:56:12 +0200 | coot | (~coot@213.134.176.158) |
2022-08-29 10:57:08 +0200 | Pickchea | (~private@user/pickchea) (Quit: Leaving) |
2022-08-29 10:58:19 +0200 | azimut | (~azimut@gateway/tor-sasl/azimut) (Remote host closed the connection) |
2022-08-29 10:58:47 +0200 | azimut | (~azimut@gateway/tor-sasl/azimut) |
2022-08-29 10:59:39 +0200 | segfaultfizzbuzz | (~segfaultf@23-93-74-212.fiber.dynamic.sonic.net) |
2022-08-29 11:05:16 +0200 | gurkenglas | (~gurkengla@p548ac72e.dip0.t-ipconnect.de) |
2022-08-29 11:09:42 +0200 | luffy | (~chenqisu1@183.217.200.212) |
2022-08-29 11:11:46 +0200 | coot | (~coot@213.134.176.158) (Remote host closed the connection) |
2022-08-29 11:12:10 +0200 | coot | (~coot@2a02:a310:e241:1b00:ec1a:e9df:79ac:66ba) |
2022-08-29 11:12:27 +0200 | yvan-sraka | (~yvan-srak@2a02:2788:224:71c:d850:9e35:a08d:9c6a) (Remote host closed the connection) |
2022-08-29 11:12:46 +0200 | yvan-sraka | (~yvan-srak@2a02:2788:224:71c:4f47:fa29:b160:ee6d) |
2022-08-29 11:21:17 +0200 | eggplantade | (~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net) (Remote host closed the connection) |
2022-08-29 11:24:21 +0200 | gurkenglas | (~gurkengla@p548ac72e.dip0.t-ipconnect.de) (Ping timeout: 268 seconds) |
2022-08-29 11:25:56 +0200 | <kuribas> | People claim no downtime with haskell, but do they never have database connection issues, network problems, slow queries, etc... ? |
2022-08-29 11:27:32 +0200 | <lortabac> | I guess it means no downtime due to application bugs |
2022-08-29 11:28:23 +0200 | nilradical | (~nilradica@user/naso) |
2022-08-29 11:28:48 +0200 | <lortabac> | also, you can have "degraded modes" for your application, where it still runs but it lacks some features if some external components are down |
2022-08-29 11:29:40 +0200 | <kuribas> | Even with a fancy typed SQL library, you cannot garantee the queries will be performant. |
2022-08-29 11:30:06 +0200 | yvan-sraka | (~yvan-srak@2a02:2788:224:71c:4f47:fa29:b160:ee6d) (Ping timeout: 252 seconds) |
2022-08-29 11:30:34 +0200 | <kuribas> | I had a "hand-optimized" query that took like 2 minutes to execute. So I refactored it into three separate dumb queries, and it only took 2 second now :) |
2022-08-29 11:30:58 +0200 | <sm> | I don't think anybody claims "no downtime" |
2022-08-29 11:31:35 +0200 | acidjnk | (~acidjnk@p200300d6e7137a4628adea4619d717ec.dip0.t-ipconnect.de) |
2022-08-29 11:32:22 +0200 | <Hecate> | even the Erlang folks only claim a certain number of nines in terms of uptime |
2022-08-29 11:32:49 +0200 | <kuribas> | https://www.reddit.com/r/haskell/comments/wzi4sv/comment/im32sbe/?utm_source=share&utm_medium=ios_… |
2022-08-29 11:33:00 +0200 | <kuribas> | "They are so good, that we never have production outages! We never have any problems, because they are such good programmers." |
2022-08-29 11:33:31 +0200 | <sm> | I'm happy for that person. They have had good luck so far :) |
2022-08-29 11:34:06 +0200 | <merijn> | pfft |
2022-08-29 11:34:13 +0200 | <merijn> | maybe they just have terrible monitoring :p |
2022-08-29 11:34:17 +0200 | <Hecate> | > now debugging arcane Polysemy messages for hours while getting very little actual work done |
2022-08-29 11:34:19 +0200 | <lambdabot> | error: |
2022-08-29 11:34:19 +0200 | <lambdabot> | • Variable not in scope: |
2022-08-29 11:34:19 +0200 | <lambdabot> | now |
2022-08-29 11:34:25 +0200 | <Hecate> | hahahahaha |
2022-08-29 11:34:25 +0200 | <Hecate> | wew |
2022-08-29 11:34:44 +0200 | <Hecate> | Polysemy might not have been the wise choice here |
2022-08-29 11:35:17 +0200 | <sm> | observability/debuggability is an underappreciated feature.. |
2022-08-29 11:35:29 +0200 | <merijn> | Hot take: none of those fancy effects libraries are the right choice, unless you have fetish for jerking yourself off to type errors :D |
2022-08-29 11:36:03 +0200 | <dminuoso> | Hecate: Wisom for the future. If it mentions "simple", "free(r)", or "low-boilerplate" in its description, it's likely anything but. |
2022-08-29 11:36:34 +0200 | <Hecate> | shit, let me see if I did that mistake in my own libraries |
2022-08-29 11:37:07 +0200 | <Hecate> | okay great :D |
2022-08-29 11:37:25 +0200 | <Hecate> | merijn: you're absolutely right, this is why I use the no-nonsense alternatives |
2022-08-29 11:37:31 +0200 | <Hecate> | like Effectful™©® |
2022-08-29 11:37:44 +0200 | <dminuoso> | Though for what its worth, I think polysemy did one thing right: GHC plugin to help with diagnotics rather than bolting tyfams and magical type classes to sneak error messages in via type inference. |
2022-08-29 11:37:53 +0200 | <Hecate> | sm: I cry every night thinking of what I lost when I switched from Erlang to Haskell |
2022-08-29 11:37:54 +0200 | <dminuoso> | Wish more libraries would do this. |
2022-08-29 11:38:33 +0200 | <Hecate> | dminuoso: it's just sad that without the GHC plugin the performance are so degraded |
2022-08-29 11:38:38 +0200 | <merijn> | Hecate: So let' |
2022-08-29 11:38:42 +0200 | <maerwald[m]> | dminuoso: check the effects stuff in cardano plutus. It took me a whole day to dig through the effects boilerplate to find the actual code that actually does something useful |
2022-08-29 11:38:46 +0200 | <merijn> | So let's build those things for Haskell! ;) |
2022-08-29 11:39:05 +0200 | <merijn> | I really kinda wanna overhaul the threading stuff in Haskell to suck less |
2022-08-29 11:40:14 +0200 | <Hecate> | merijn: Here is your starting point: https://gitlab.haskell.org/ghc/ghc/-/issues/21578 |
2022-08-29 11:40:38 +0200 | <merijn> | Hecate: Naah, there's a more crucial one before that one even makes sense to think about |
2022-08-29 11:40:39 +0200 | <maerwald[m]> | Effect layer over effect layer over effect reinterpreter, deferring to three layers of indirection |
2022-08-29 11:40:48 +0200 | <merijn> | Need to sort the damn signal handling in GHC |
2022-08-29 11:41:44 +0200 | <merijn> | Hecate: also, realistically most of my work on this is "thinking about the design in the shower, until I find a job that pays me to fuck around with GHC at least part of my time" :p |
2022-08-29 11:41:47 +0200 | <maerwald[m]> | merijn: yet you have been silent on https://github.com/haskell/unix/issues/196 |
2022-08-29 11:43:16 +0200 | <Hecate> | merijn: personally I found it easier to get a full-time job and then ask your manager to give you your friday (or friday afternoon) for GHC development |
2022-08-29 11:43:26 +0200 | <merijn> | maerwald[m]: Almost as if my job doesn't pay me to write Haskell :) |
2022-08-29 11:46:06 +0200 | <merijn> | I'd like to improve the situation wrt unix. But I don't actually care enough to spend my free time on doing so |
2022-08-29 11:48:08 +0200 | <maerwald[m]> | merijn: don't succumb to capitalism |
2022-08-29 11:48:36 +0200 | <merijn> | I'm not succumbing to capitalism, I'm succumbing to the opposite of capitalist exploitation :p |
2022-08-29 11:48:57 +0200 | <dminuoso> | To be fair, compensation for work is not necessarily capitalism. |
2022-08-29 11:49:03 +0200 | <merijn> | Because "ensuring forked processes don't randomly corrupt important business processes" sounds very much like the kinda shit some big company cares more about than me |
2022-08-29 11:49:19 +0200 | <merijn> | So some big company can bloody well pay for it if they want it :p |
2022-08-29 11:49:46 +0200 | <merijn> | Because it sounds to boring and unfun to do in my spare time when I could be doing stuff that's, you know, fun :p |
2022-08-29 11:54:01 +0200 | toeffel | (~toeffel@user/toeffel) |
2022-08-29 12:02:11 +0200 | kannon | (~NK@135-180-47-54.fiber.dynamic.sonic.net) |
2022-08-29 12:02:41 +0200 | segfaultfizzbuzz | (~segfaultf@23-93-74-212.fiber.dynamic.sonic.net) (Ping timeout: 260 seconds) |
2022-08-29 12:03:17 +0200 | eikke | (~NicolasT@user/NicolasT) |
2022-08-29 12:04:11 +0200 | nilradical | (~nilradica@user/naso) (Remote host closed the connection) |
2022-08-29 12:04:31 +0200 | zxx7529 | (~Thunderbi@user/zxx7529) (Ping timeout: 252 seconds) |
2022-08-29 12:04:58 +0200 | chexum | (~quassel@gateway/tor-sasl/chexum) (Ping timeout: 258 seconds) |
2022-08-29 12:04:58 +0200 | ChaiTRex | (~ChaiTRex@user/chaitrex) (Ping timeout: 258 seconds) |
2022-08-29 12:04:59 +0200 | nilradical | (~nilradica@user/naso) |
2022-08-29 12:06:11 +0200 | chexum | (~quassel@gateway/tor-sasl/chexum) |
2022-08-29 12:06:23 +0200 | kannon | (~NK@135-180-47-54.fiber.dynamic.sonic.net) (Ping timeout: 244 seconds) |
2022-08-29 12:07:09 +0200 | ChaiTRex | (~ChaiTRex@user/chaitrex) |
2022-08-29 12:08:43 +0200 | CiaoSen | (~Jura@p200300c95738a5002a3a4dfffe84dbd5.dip0.t-ipconnect.de) |
2022-08-29 12:09:41 +0200 | cheater | (~Username@user/cheater) (Ping timeout: 260 seconds) |
2022-08-29 12:09:56 +0200 | nilradical | (~nilradica@user/naso) (Ping timeout: 255 seconds) |
2022-08-29 12:11:07 +0200 | luffy | (~chenqisu1@183.217.200.212) (Ping timeout: 252 seconds) |
2022-08-29 12:11:13 +0200 | xff0x | (~xff0x@125x103x176x34.ap125.ftth.ucom.ne.jp) (Ping timeout: 268 seconds) |
2022-08-29 12:11:49 +0200 | eggplantade | (~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net) |
2022-08-29 12:13:27 +0200 | mikoto-chan | (~mikoto-ch@164.5.249.78) |
2022-08-29 12:15:08 +0200 | FinnElija | (~finn_elij@user/finn-elija/x-0085643) (Remote host closed the connection) |
2022-08-29 12:15:41 +0200 | FinnElija | (~finn_elij@user/finn-elija/x-0085643) |
2022-08-29 12:16:21 +0200 | cheater | (~Username@user/cheater) |
2022-08-29 12:16:44 +0200 | eggplantade | (~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net) (Ping timeout: 268 seconds) |
2022-08-29 12:22:09 +0200 | luffy | (~chenqisu1@183.217.201.192) |
2022-08-29 12:32:52 +0200 | segfaultfizzbuzz | (~segfaultf@23-93-74-212.fiber.dynamic.sonic.net) |
2022-08-29 12:34:35 +0200 | mikoto-chan | (~mikoto-ch@164.5.249.78) (Ping timeout: 252 seconds) |
2022-08-29 12:37:44 +0200 | segfaultfizzbuzz | (~segfaultf@23-93-74-212.fiber.dynamic.sonic.net) (Ping timeout: 268 seconds) |
2022-08-29 12:38:38 +0200 | beteigeuze | (~Thunderbi@bl11-28-222.dsl.telepac.pt) |
2022-08-29 12:38:59 +0200 | cheater | (~Username@user/cheater) (Ping timeout: 252 seconds) |
2022-08-29 12:39:15 +0200 | cheater | (~Username@user/cheater) |
2022-08-29 12:39:39 +0200 | beteigeuze | (~Thunderbi@bl11-28-222.dsl.telepac.pt) (Client Quit) |
2022-08-29 12:42:11 +0200 | CiaoSen | (~Jura@p200300c95738a5002a3a4dfffe84dbd5.dip0.t-ipconnect.de) (Ping timeout: 248 seconds) |
2022-08-29 12:43:02 +0200 | jonathanx | (~jonathan@h-178-174-176-109.A357.priv.bahnhof.se) |
2022-08-29 12:46:30 +0200 | <kuribas> | merijn: no fancy type system => so "Env -> IO a" then? |
2022-08-29 12:47:35 +0200 | zxx7529 | (~Thunderbi@user/zxx7529) |
2022-08-29 12:49:15 +0200 | nate4 | (~nate@98.45.169.16) |
2022-08-29 12:50:07 +0200 | jakalx | (~jakalx@base.jakalx.net) (Error from remote client) |
2022-08-29 12:50:59 +0200 | segfaultfizzbuzz | (~segfaultf@23-93-74-212.fiber.dynamic.sonic.net) |
2022-08-29 12:51:25 +0200 | jakalx | (~jakalx@base.jakalx.net) |
2022-08-29 12:51:27 +0200 | cheater | (~Username@user/cheater) (Ping timeout: 252 seconds) |
2022-08-29 12:51:48 +0200 | cheater | (~Username@user/cheater) |
2022-08-29 12:54:01 +0200 | kilolympus | (~kilolympu@90.203.82.22) (Ping timeout: 260 seconds) |
2022-08-29 12:54:21 +0200 | nate4 | (~nate@98.45.169.16) (Ping timeout: 268 seconds) |
2022-08-29 12:56:28 +0200 | Putonlalla | (~Putonlall@it-cyan.it.jyu.fi) |
2022-08-29 12:56:28 +0200 | vglfr | (~vglfr@145.224.94.75) (Read error: Connection reset by peer) |
2022-08-29 12:56:38 +0200 | vglfr | (~vglfr@145.224.94.75) |
2022-08-29 12:56:58 +0200 | <maerwald[m]> | merijn: no they don't |
2022-08-29 12:58:35 +0200 | <maerwald[m]> | They will employ a team of people cleaning up the mess those processes leave behind |
2022-08-29 13:03:07 +0200 | mikoto-chan | (~mikoto-ch@164.5.249.78) |
2022-08-29 13:05:06 +0200 | azimut | (~azimut@gateway/tor-sasl/azimut) (Quit: ZNC - https://znc.in) |
2022-08-29 13:05:34 +0200 | azimut | (~azimut@gateway/tor-sasl/azimut) |
2022-08-29 13:06:26 +0200 | nilradical | (~nilradica@user/naso) |
2022-08-29 13:07:21 +0200 | L29Ah | (~L29Ah@wikipedia/L29Ah) () |
2022-08-29 13:10:07 +0200 | raym | (~raym@user/raym) (Quit: kernel update, rebooting...) |
2022-08-29 13:10:59 +0200 | eikke | (~NicolasT@user/NicolasT) (Ping timeout: 248 seconds) |
2022-08-29 13:12:34 +0200 | eggplantade | (~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net) |
2022-08-29 13:13:41 +0200 | raym | (~raym@user/raym) |
2022-08-29 13:14:42 +0200 | xff0x | (~xff0x@2405:6580:b080:900:9d05:41cc:615d:5546) |
2022-08-29 13:16:59 +0200 | eggplantade | (~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net) (Ping timeout: 255 seconds) |
2022-08-29 13:17:03 +0200 | nilradical | (~nilradica@user/naso) (Remote host closed the connection) |
2022-08-29 13:18:15 +0200 | nilradical | (~nilradica@user/naso) |
2022-08-29 13:20:31 +0200 | <kritzefitz> | maerwald[m]: It's still their problem then. :p |
2022-08-29 13:23:20 +0200 | nilradical | (~nilradica@user/naso) (Ping timeout: 268 seconds) |
2022-08-29 13:25:55 +0200 | econo | (uid147250@user/econo) (Quit: Connection closed for inactivity) |
2022-08-29 13:27:42 +0200 | CiaoSen | (~Jura@p200300c95738a5002a3a4dfffe84dbd5.dip0.t-ipconnect.de) |
2022-08-29 13:28:10 +0200 | lisbeths | (uid135845@id-135845.lymington.irccloud.com) |
2022-08-29 13:30:56 +0200 | zxx7529 | (~Thunderbi@user/zxx7529) (Remote host closed the connection) |
2022-08-29 13:31:08 +0200 | zxx7529 | (~Thunderbi@user/zxx7529) |
2022-08-29 13:31:23 +0200 | mikoto-chan | (~mikoto-ch@164.5.249.78) (Ping timeout: 255 seconds) |
2022-08-29 13:34:24 +0200 | nilradical | (~nilradica@user/naso) |
2022-08-29 13:34:38 +0200 | <maerwald[m]> | kritzefitz: yes and merijn will still complain that no one pays him for his open source work |
2022-08-29 13:35:42 +0200 | bitdex | (~bitdex@gateway/tor-sasl/bitdex) (Quit: = "") |
2022-08-29 13:39:32 +0200 | L29Ah | (~L29Ah@wikipedia/L29Ah) |
2022-08-29 13:44:57 +0200 | xff0x | (~xff0x@2405:6580:b080:900:9d05:41cc:615d:5546) (Ping timeout: 268 seconds) |
2022-08-29 13:45:20 +0200 | xff0x | (~xff0x@ai071162.d.east.v6connect.net) |
2022-08-29 13:47:23 +0200 | causal | (~user@50.35.83.177) (Quit: WeeChat 3.6) |
2022-08-29 13:53:35 +0200 | segfaultfizzbuzz | (~segfaultf@23-93-74-212.fiber.dynamic.sonic.net) (Ping timeout: 268 seconds) |
2022-08-29 13:56:21 +0200 | raym | (~raym@user/raym) (Ping timeout: 252 seconds) |
2022-08-29 13:58:11 +0200 | raym | (~raym@user/raym) |
2022-08-29 13:58:28 +0200 | <dminuoso> | kuribas: Honestly, this type of problem is somewhat omnipresent in most languages. Even popular languages like Java or Python do it this way! |
2022-08-29 13:59:54 +0200 | <dminuoso> | It's just that, for some ergonomic reasons, the first argument is usually denoted to the left-hand side (i.e. foo.bar(quux), rather than bar(foo, quux)), though amusingly enough in function definitions there's an abstraction leak in python. |
2022-08-29 14:00:33 +0200 | <dminuoso> | At any rate, ReaderT is not about being an effect system really. |
2022-08-29 14:01:15 +0200 | <dminuoso> | Especially because it can be both MonadIO and MonadUnliftIO, it's definitely a special case. |
2022-08-29 14:05:04 +0200 | <kuribas> | dminuoso: well, I think "env" is usually a global variable. |
2022-08-29 14:05:20 +0200 | <kuribas> | it's not really passed to the functions. |
2022-08-29 14:05:37 +0200 | <dminuoso> | Well, if you want a properly global variable, maintaining a global `IORef Env` is certainly possible. |
2022-08-29 14:07:17 +0200 | Robert72 | (~Robert@ext-1-122.eduroam.chalmers.se) |
2022-08-29 14:08:05 +0200 | eikke | (~NicolasT@user/NicolasT) |
2022-08-29 14:09:19 +0200 | Robert72 | (~Robert@ext-1-122.eduroam.chalmers.se) (Client Quit) |
2022-08-29 14:10:25 +0200 | [itchyjunk] | (~itchyjunk@user/itchyjunk/x-7353470) |
2022-08-29 14:12:16 +0200 | <merijn> | maerwald[m]: Technically, I do get paid for open source work, just not the work I'd like to do :p |
2022-08-29 14:12:57 +0200 | <merijn> | Also, technically, I don't complain about the open source work I don't get paid either, but that work is just what I feel like doing, not necessarily what *needs* doing |
2022-08-29 14:14:48 +0200 | eggplantade | (~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net) |
2022-08-29 14:15:08 +0200 | <merijn> | And also also, generally more of a jokey way of clarifying I'm not gonna do it anytime soon. |
2022-08-29 14:19:05 +0200 | eggplantade | (~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net) (Ping timeout: 252 seconds) |
2022-08-29 14:22:32 +0200 | segfaultfizzbuzz | (~segfaultf@23-93-74-212.fiber.dynamic.sonic.net) |
2022-08-29 14:26:47 +0200 | segfaultfizzbuzz | (~segfaultf@23-93-74-212.fiber.dynamic.sonic.net) (Ping timeout: 252 seconds) |
2022-08-29 14:28:05 +0200 | ccntrq | (~Thunderbi@172.209.94.92.rev.sfr.net) (Ping timeout: 268 seconds) |
2022-08-29 14:30:17 +0200 | ccntrq | (~Thunderbi@172.209.94.92.rev.sfr.net) |
2022-08-29 14:31:39 +0200 | merijn | (~merijn@c-001-001-007.client.esciencecenter.eduvpn.nl) (Read error: Connection reset by peer) |
2022-08-29 14:32:52 +0200 | merijn | (~merijn@c-001-001-007.client.esciencecenter.eduvpn.nl) |
2022-08-29 14:33:33 +0200 | ystael | (~ystael@user/ystael) |
2022-08-29 14:35:17 +0200 | <kuribas> | dminuoso: I certainly don't :) |
2022-08-29 14:35:31 +0200 | <kuribas> | dminuoso: but that's how applications in most languages are built. |
2022-08-29 14:35:59 +0200 | drdo5 | drdo |
2022-08-29 14:37:05 +0200 | <dminuoso> | kuribas: No, that's not how they are built. |
2022-08-29 14:37:12 +0200 | <dminuoso> | It's just what people in those languages happen to do. |
2022-08-29 14:37:29 +0200 | <dminuoso> | Nothing ever prevents them from fiddling an environment through, and in most serious programs you dont find global variables as much. |
2022-08-29 14:39:50 +0200 | ystael | (~ystael@user/ystael) (Ping timeout: 268 seconds) |
2022-08-29 14:41:25 +0200 | segfaultfizzbuzz | (~segfaultf@23-93-74-212.fiber.dynamic.sonic.net) |
2022-08-29 14:48:20 +0200 | raehik | (~raehik@cpc95906-rdng25-2-0-cust156.15-3.cable.virginm.net) |
2022-08-29 14:48:33 +0200 | ccntrq | (~Thunderbi@172.209.94.92.rev.sfr.net) (Quit: ccntrq) |
2022-08-29 14:48:42 +0200 | jao | (~jao@cpc103048-sgyl39-2-0-cust502.18-2.cable.virginm.net) |
2022-08-29 14:48:54 +0200 | ccntrq | (~Thunderbi@172.209.94.92.rev.sfr.net) |
2022-08-29 14:51:27 +0200 | <maerwald[m]> | merijn: i just want to shame you into writing a patch 😁 |
2022-08-29 14:53:11 +0200 | luffy | (~chenqisu1@183.217.201.192) (Ping timeout: 252 seconds) |
2022-08-29 14:55:33 +0200 | <merijn> | See, to feel shame I'd have to remember tasks long enough for that to kick in |
2022-08-29 14:55:57 +0200 | <merijn> | My attention-deficit ass will have forgotten about shit before I feel any shame :D |
2022-08-29 14:59:46 +0200 | tromp | (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl) (Quit: My iMac has gone to sleep. ZZZzzz…) |
2022-08-29 15:15:13 +0200 | jao | (~jao@cpc103048-sgyl39-2-0-cust502.18-2.cable.virginm.net) (Remote host closed the connection) |
2022-08-29 15:16:06 +0200 | ystael | (~ystael@user/ystael) |
2022-08-29 15:16:31 +0200 | matthewmosior | (~matthewmo@173.170.253.91) (Ping timeout: 244 seconds) |
2022-08-29 15:17:18 +0200 | eggplantade | (~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net) |
2022-08-29 15:19:29 +0200 | jao | (~jao@cpc103048-sgyl39-2-0-cust502.18-2.cable.virginm.net) |
2022-08-29 15:20:04 +0200 | tromp | (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl) |
2022-08-29 15:21:39 +0200 | eggplantade | (~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net) (Ping timeout: 248 seconds) |
2022-08-29 15:21:43 +0200 | mikoto-chan | (~mikoto-ch@164.5.249.78) |
2022-08-29 15:24:35 +0200 | szkl | (uid110435@id-110435.uxbridge.irccloud.com) () |
2022-08-29 15:25:02 +0200 | szkl | (uid110435@id-110435.uxbridge.irccloud.com) |
2022-08-29 15:26:40 +0200 | mima | (mmh@gateway/vpn/airvpn/mima) (Ping timeout: 268 seconds) |
2022-08-29 15:28:54 +0200 | azimut | (~azimut@gateway/tor-sasl/azimut) (Ping timeout: 258 seconds) |
2022-08-29 15:29:40 +0200 | ChaiTRex | (~ChaiTRex@user/chaitrex) (Ping timeout: 258 seconds) |
2022-08-29 15:30:47 +0200 | matthewmosior | (~matthewmo@173.170.253.91) |
2022-08-29 15:32:38 +0200 | chexum | (~quassel@gateway/tor-sasl/chexum) (Remote host closed the connection) |
2022-08-29 15:32:52 +0200 | chexum | (~quassel@gateway/tor-sasl/chexum) |
2022-08-29 15:33:00 +0200 | azimut | (~azimut@gateway/tor-sasl/azimut) |
2022-08-29 15:33:08 +0200 | ChaiTRex | (~ChaiTRex@user/chaitrex) |
2022-08-29 15:41:30 +0200 | matthewmosior | (~matthewmo@173.170.253.91) (Remote host closed the connection) |
2022-08-29 15:42:28 +0200 | matthewmosior | (~matthewmo@173.170.253.91) |
2022-08-29 15:43:25 +0200 | segfaultfizzbuzz | (~segfaultf@23-93-74-212.fiber.dynamic.sonic.net) (Ping timeout: 252 seconds) |
2022-08-29 15:47:00 +0200 | matthewmosior | (~matthewmo@173.170.253.91) (Ping timeout: 244 seconds) |
2022-08-29 15:48:51 +0200 | motherfsck | (~motherfsc@user/motherfsck) (Ping timeout: 248 seconds) |
2022-08-29 15:49:29 +0200 | matthewmosior | (~matthewmo@173.170.253.91) |
2022-08-29 15:50:22 +0200 | <dminuoso> | maerwald[m]: you were working on a kind of monad-logger fork, right? |
2022-08-29 15:50:30 +0200 | matthewmosior | (~matthewmo@173.170.253.91) (Remote host closed the connection) |
2022-08-29 15:51:09 +0200 | matthewmosior | (~matthewmo@173.170.253.91) |
2022-08-29 15:54:27 +0200 | hippoid | (~idris@c-98-220-13-8.hsd1.il.comcast.net) (Ping timeout: 268 seconds) |
2022-08-29 16:01:39 +0200 | motherfsck | (~motherfsc@user/motherfsck) |
2022-08-29 16:02:43 +0200 | kannon | (~NK@135-180-47-54.fiber.dynamic.sonic.net) |
2022-08-29 16:07:09 +0200 | kannon | (~NK@135-180-47-54.fiber.dynamic.sonic.net) (Ping timeout: 244 seconds) |
2022-08-29 16:11:45 +0200 | segfaultfizzbuzz | (~segfaultf@23-93-74-212.fiber.dynamic.sonic.net) |
2022-08-29 16:12:04 +0200 | frost | (~frost@user/frost) (Ping timeout: 252 seconds) |
2022-08-29 16:12:18 +0200 | lortabac | (~lortabac@2a01:e0a:541:b8f0:e726:4d7c:52f8:911e) (Quit: WeeChat 2.8) |
2022-08-29 16:13:14 +0200 | lisbeths | (uid135845@id-135845.lymington.irccloud.com) (Quit: Connection closed for inactivity) |
2022-08-29 16:14:11 +0200 | shriekingnoise | (~shrieking@186.137.167.202) |
2022-08-29 16:15:54 +0200 | yvan-sraka | (~yvan-srak@2a02:2788:11e4:16b:4118:3220:160b:6a4e) |
2022-08-29 16:16:26 +0200 | segfaultfizzbuzz | (~segfaultf@23-93-74-212.fiber.dynamic.sonic.net) (Ping timeout: 260 seconds) |
2022-08-29 16:19:38 +0200 | eggplantade | (~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net) |
2022-08-29 16:20:58 +0200 | wonko | (~wjc@2a0e:1c80:2::130) (Ping timeout: 268 seconds) |
2022-08-29 16:24:07 +0200 | eggplantade | (~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net) (Ping timeout: 252 seconds) |
2022-08-29 16:25:14 +0200 | hippoid | (~idris@c-98-220-13-8.hsd1.il.comcast.net) |
2022-08-29 16:26:24 +0200 | azimut | (~azimut@gateway/tor-sasl/azimut) (Ping timeout: 258 seconds) |
2022-08-29 16:31:52 +0200 | segfaultfizzbuzz | (~segfaultf@23-93-74-212.fiber.dynamic.sonic.net) |
2022-08-29 16:32:20 +0200 | <maerwald[m]> | dminuoso: that's inlined in ghcup |
2022-08-29 16:33:02 +0200 | <maerwald[m]> | Not really sophisticated if you require async writes to terminal and whatnot |
2022-08-29 16:33:39 +0200 | mima | (~mmh@dhcp-138-246-3-174.dynamic.eduroam.mwn.de) |
2022-08-29 16:33:56 +0200 | acidjnk | (~acidjnk@p200300d6e7137a4628adea4619d717ec.dip0.t-ipconnect.de) (Ping timeout: 260 seconds) |
2022-08-29 16:35:08 +0200 | <maerwald[m]> | https://gitlab.haskell.org/haskell/ghcup-hs/-/blob/master/lib/GHCup/Prelude/Logger/Internal.hs |
2022-08-29 16:35:51 +0200 | <maerwald[m]> | The label optics are here https://gitlab.haskell.org/haskell/ghcup-hs/-/blob/master/lib/GHCup/Types/Optics.hs |
2022-08-29 16:36:16 +0200 | segfaultfizzbuzz | (~segfaultf@23-93-74-212.fiber.dynamic.sonic.net) (Ping timeout: 260 seconds) |
2022-08-29 16:39:44 +0200 | yvan-sraka | (~yvan-srak@2a02:2788:11e4:16b:4118:3220:160b:6a4e) (Remote host closed the connection) |
2022-08-29 16:40:03 +0200 | yvan-sraka | (~yvan-srak@2a02:2788:11e4:16b:49a6:cc29:c028:f4b9) |
2022-08-29 16:43:04 +0200 | <nilradical> | anyone have problems with parse error on certain field names with RecordDotSyntax |
2022-08-29 16:44:09 +0200 | <nilradical> | e.g. i have a field called `family` and if i do `x.family` i get parse error... renaming the field to `famil` and no error with `x.famil` |
2022-08-29 16:44:45 +0200 | <nilradical> | i've had the same error with other field names before but forgot what they were |
2022-08-29 16:45:02 +0200 | <geekosaur> | family is a keyword, I think ("type family") |
2022-08-29 16:47:07 +0200 | <geekosaur> | hm, although I can use it in a let |
2022-08-29 16:48:35 +0200 | <nilradical> | yeah if it was a keyword why can i even define it as a field |
2022-08-29 16:50:47 +0200 | nate4 | (~nate@98.45.169.16) |
2022-08-29 16:51:42 +0200 | tromp | (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl) (Quit: My iMac has gone to sleep. ZZZzzz…) |
2022-08-29 16:54:13 +0200 | yvan-sraka | (~yvan-srak@2a02:2788:11e4:16b:49a6:cc29:c028:f4b9) (Remote host closed the connection) |
2022-08-29 16:55:31 +0200 | nate4 | (~nate@98.45.169.16) (Ping timeout: 248 seconds) |
2022-08-29 16:57:51 +0200 | cheater | (~Username@user/cheater) (Ping timeout: 252 seconds) |
2022-08-29 16:58:40 +0200 | cheater | (~Username@user/cheater) |
2022-08-29 16:58:40 +0200 | gentauro | (~gentauro@user/gentauro) (Read error: Connection reset by peer) |
2022-08-29 16:59:30 +0200 | segfaultfizzbuzz | (~segfaultf@23-93-74-212.fiber.dynamic.sonic.net) |
2022-08-29 16:59:53 +0200 | tromp | (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl) |
2022-08-29 17:02:26 +0200 | matthewmosior | (~matthewmo@173.170.253.91) (Remote host closed the connection) |
2022-08-29 17:04:15 +0200 | gentauro | (~gentauro@user/gentauro) |
2022-08-29 17:06:03 +0200 | yvan-sraka | (~yvan-srak@2a02:2788:11e4:16b:19b9:c902:b61c:ca7e) |
2022-08-29 17:07:13 +0200 | yvan-sraka | (~yvan-srak@2a02:2788:11e4:16b:19b9:c902:b61c:ca7e) (Remote host closed the connection) |
2022-08-29 17:07:32 +0200 | yvan-sraka | (~yvan-srak@2a02:2788:11e4:16b:6d7e:2100:38ba:17a9) |
2022-08-29 17:11:48 +0200 | ec | (~ec@gateway/tor-sasl/ec) |
2022-08-29 17:12:46 +0200 | eikke | (~NicolasT@user/NicolasT) (Ping timeout: 244 seconds) |
2022-08-29 17:13:03 +0200 | yvan-sraka | (~yvan-srak@2a02:2788:11e4:16b:6d7e:2100:38ba:17a9) (Remote host closed the connection) |
2022-08-29 17:13:22 +0200 | yvan-sraka | (~yvan-srak@2a02:2788:11e4:16b:1ee1:e1d4:c138:83fa) |
2022-08-29 17:14:15 +0200 | alternateved | (~user@staticline-31-183-146-203.toya.net.pl) (Remote host closed the connection) |
2022-08-29 17:14:19 +0200 | tromp | (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl) (Quit: My iMac has gone to sleep. ZZZzzz…) |
2022-08-29 17:14:35 +0200 | merijn | (~merijn@c-001-001-007.client.esciencecenter.eduvpn.nl) (Ping timeout: 268 seconds) |
2022-08-29 17:19:52 +0200 | matthewmosior | (~matthewmo@173.170.253.91) |
2022-08-29 17:20:07 +0200 | yvan-sraka | (~yvan-srak@2a02:2788:11e4:16b:1ee1:e1d4:c138:83fa) (Remote host closed the connection) |
2022-08-29 17:20:25 +0200 | yvan-sraka | (~yvan-srak@2a02:2788:11e4:16b:6564:71dd:7699:5e45) |
2022-08-29 17:21:50 +0200 | bontaq` | (~user@ool-45779fe5.dyn.optonline.net) |
2022-08-29 17:22:12 +0200 | eggplantade | (~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net) |
2022-08-29 17:23:15 +0200 | titibandit | (~titibandi@xdsl-87-78-66-58.nc.de) |
2022-08-29 17:23:58 +0200 | Tuplanolla | (~Tuplanoll@91-159-69-12.elisa-laajakaista.fi) |
2022-08-29 17:24:30 +0200 | username9431 | (~Thunderbi@2a00:23c5:4202:9c01:4d47:1a1f:d871:dac1) |
2022-08-29 17:26:55 +0200 | eggplantade | (~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net) (Ping timeout: 268 seconds) |
2022-08-29 17:27:36 +0200 | matthewmosior | (~matthewmo@173.170.253.91) (Ping timeout: 260 seconds) |
2022-08-29 17:27:40 +0200 | yvan-sraka | (~yvan-srak@2a02:2788:11e4:16b:6564:71dd:7699:5e45) (Remote host closed the connection) |
2022-08-29 17:27:58 +0200 | yvan-sraka | (~yvan-srak@2a02:2788:11e4:16b:3f54:566d:bfd8:5bfb) |
2022-08-29 17:32:51 +0200 | CiaoSen | (~Jura@p200300c95738a5002a3a4dfffe84dbd5.dip0.t-ipconnect.de) (Ping timeout: 248 seconds) |
2022-08-29 17:33:20 +0200 | sagax | (~sagax_nb@user/sagax) |
2022-08-29 17:36:35 +0200 | <qrpnxz> | maybe because it's only a keyword in an extension |
2022-08-29 17:37:47 +0200 | Everything | (~Everythin@37.115.210.35) |
2022-08-29 17:39:02 +0200 | titibandit | (~titibandi@xdsl-87-78-66-58.nc.de) (Remote host closed the connection) |
2022-08-29 17:40:00 +0200 | <geekosaur> | but then RecordDotSyntax shouldn't care either unless the extension is on? |
2022-08-29 17:40:04 +0200 | merijn | (~merijn@c-001-001-007.client.esciencecenter.eduvpn.nl) |
2022-08-29 17:40:36 +0200 | titibandit | (~titibandi@xdsl-87-78-66-58.nc.de) |
2022-08-29 17:42:52 +0200 | <nilradical> | i'm also using GHC2021 |
2022-08-29 17:43:17 +0200 | yvan-sraka | (~yvan-srak@2a02:2788:11e4:16b:3f54:566d:bfd8:5bfb) (Remote host closed the connection) |
2022-08-29 17:43:20 +0200 | <nilradical> | and OverloadedStrings, OverloadedRecordDot. that's it |
2022-08-29 17:43:35 +0200 | yvan-sraka | (~yvan-srak@2a02:2788:11e4:16b:687d:cd13:9a74:1853) |
2022-08-29 17:44:26 +0200 | gurkenglas | (~gurkengla@p548ac72e.dip0.t-ipconnect.de) |
2022-08-29 17:45:05 +0200 | eggplantade | (~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net) |
2022-08-29 17:45:55 +0200 | yvan-sraka | (~yvan-srak@2a02:2788:11e4:16b:687d:cd13:9a74:1853) (Remote host closed the connection) |
2022-08-29 17:48:31 +0200 | matthewmosior | (~matthewmo@173.170.253.91) |
2022-08-29 17:49:12 +0200 | stiell | (~stiell@gateway/tor-sasl/stiell) (Ping timeout: 258 seconds) |
2022-08-29 17:50:10 +0200 | shapr | (~user@2601:7c0:c383:70:8f2e:ebd3:e94d:76ae) |
2022-08-29 17:50:45 +0200 | ccntrq | (~Thunderbi@172.209.94.92.rev.sfr.net) (Remote host closed the connection) |
2022-08-29 17:51:03 +0200 | stiell | (~stiell@gateway/tor-sasl/stiell) |
2022-08-29 17:54:54 +0200 | zxx7529 | (~Thunderbi@user/zxx7529) (Remote host closed the connection) |
2022-08-29 17:55:09 +0200 | zxx7529 | (~Thunderbi@user/zxx7529) |
2022-08-29 17:57:37 +0200 | segfaultfizzbuzz | (~segfaultf@23-93-74-212.fiber.dynamic.sonic.net) (Ping timeout: 252 seconds) |
2022-08-29 17:58:46 +0200 | MoC | (~moc@user/moc) |
2022-08-29 18:01:18 +0200 | zebrag | (~chris@user/zebrag) |
2022-08-29 18:09:01 +0200 | raehik | (~raehik@cpc95906-rdng25-2-0-cust156.15-3.cable.virginm.net) (Ping timeout: 260 seconds) |
2022-08-29 18:10:08 +0200 | kilolympus | (~kilolympu@90.203.82.22) |
2022-08-29 18:10:44 +0200 | raehik | (~raehik@cpc95906-rdng25-2-0-cust156.15-3.cable.virginm.net) |
2022-08-29 18:10:50 +0200 | tromp | (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl) |
2022-08-29 18:11:43 +0200 | acidjnk | (~acidjnk@p54ad5adb.dip0.t-ipconnect.de) |
2022-08-29 18:12:11 +0200 | mvk | (~mvk@2607:fea8:5ce3:8500::a1ec) (Ping timeout: 244 seconds) |
2022-08-29 18:13:17 +0200 | FinnElija | (~finn_elij@user/finn-elija/x-0085643) (Remote host closed the connection) |
2022-08-29 18:13:51 +0200 | FinnElija | (~finn_elij@user/finn-elija/x-0085643) |
2022-08-29 18:13:51 +0200 | chronon | (~chronon@user/chronon) (Quit: leaving) |
2022-08-29 18:14:16 +0200 | merijn | (~merijn@c-001-001-007.client.esciencecenter.eduvpn.nl) (Ping timeout: 260 seconds) |
2022-08-29 18:16:29 +0200 | jakalx | (~jakalx@base.jakalx.net) () |
2022-08-29 18:18:15 +0200 | <qrpnxz> | TIL STRef is laziness killer: https://stackoverflow.com/questions/24072934/haskell-how-lazy-is-the-lazy-control-monad-st-lazy-mo… |
2022-08-29 18:18:16 +0200 | eggplantade | (~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net) (Remote host closed the connection) |
2022-08-29 18:19:19 +0200 | raym | (~raym@user/raym) (Remote host closed the connection) |
2022-08-29 18:22:17 +0200 | jakalx | (~jakalx@base.jakalx.net) |
2022-08-29 18:23:33 +0200 | chronon | (~chronon@user/chronon) |
2022-08-29 18:24:48 +0200 | coot | (~coot@2a02:a310:e241:1b00:ec1a:e9df:79ac:66ba) (Quit: coot) |
2022-08-29 18:25:28 +0200 | eggplantade | (~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net) |
2022-08-29 18:26:26 +0200 | matthewmosior | (~matthewmo@173.170.253.91) (Remote host closed the connection) |
2022-08-29 18:26:40 +0200 | segfaultfizzbuzz | (~segfaultf@23-93-74-212.fiber.dynamic.sonic.net) |
2022-08-29 18:27:12 +0200 | matthewmosior | (~matthewmo@173.170.253.91) |
2022-08-29 18:27:57 +0200 | nilradical | (~nilradica@user/naso) () |
2022-08-29 18:32:34 +0200 | <qrpnxz> | array has this same problem, btw. I don't know how you might fix it. Perhaps with unsafeInterleave |
2022-08-29 18:33:11 +0200 | chronon | (~chronon@user/chronon) (Quit: leaving) |
2022-08-29 18:33:57 +0200 | Kaiepi | (~Kaiepi@142.68.249.28) (Remote host closed the connection) |
2022-08-29 18:34:21 +0200 | <c_wraith> | yeah, Lazy ST is a weird thing that you shouldn't depend on |
2022-08-29 18:34:22 +0200 | Kaiepi | (~Kaiepi@142.68.249.28) |
2022-08-29 18:34:45 +0200 | <c_wraith> | unsafeInterleaveST is much more predictable |
2022-08-29 18:35:32 +0200 | raym | (~raym@user/raym) |
2022-08-29 18:35:42 +0200 | <c_wraith> | (just don't introduce evaluation-order dependencies that break purity. |
2022-08-29 18:35:45 +0200 | <c_wraith> | ) |
2022-08-29 18:36:22 +0200 | chronon | (~chronon@user/chronon) |
2022-08-29 18:40:31 +0200 | <qrpnxz> | unsafeInterleaveST is pretty hella unsafe though |
2022-08-29 18:42:03 +0200 | <qrpnxz> | it seems that STRef should be lazy in that case actually. The read doesn't happen until the value of the read is required according to the documentation of strictToLazy, but i guess it can't know that it doesn't depend on that `forever` bit so it has to force that too. |
2022-08-29 18:43:09 +0200 | eggplantade | (~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net) (Remote host closed the connection) |
2022-08-29 18:43:53 +0200 | <qrpnxz> | i guess the jarring thing is that the forever is a step before the newRef |
2022-08-29 18:44:57 +0200 | L29Ah | (~L29Ah@wikipedia/L29Ah) () |
2022-08-29 18:46:44 +0200 | matthewmosior | (~matthewmo@173.170.253.91) (Remote host closed the connection) |
2022-08-29 18:49:45 +0200 | <int-e> | Lazy ST still sequentializes all the ST actions. |
2022-08-29 18:50:59 +0200 | <int-e> | So everything that `forever` /might/ do must happen before subsequent ST actions. There's no magic inside >> or >>= to know that there aren't any ST actions happening at all in this case. |
2022-08-29 18:51:43 +0200 | nate4 | (~nate@98.45.169.16) |
2022-08-29 18:53:06 +0200 | <int-e> | > fix (id $) 42 -- it's a bit like this; you might argue that no matter how often you apply `id`, the value will be 42, but the reality of lazy evaluation is that this reasoning doesn't give you a non-bottom result |
2022-08-29 18:53:08 +0200 | <lambdabot> | *Exception: <<loop>> |
2022-08-29 18:53:32 +0200 | tromp | (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl) (Quit: My iMac has gone to sleep. ZZZzzz…) |
2022-08-29 18:54:03 +0200 | <qrpnxz> | yeah was thinking the same. The lazy runtime is not looking at what ST statement you are running, just "need this state token". |
2022-08-29 18:54:06 +0200 | <int-e> | TBH I'm not quite sure why ST.Lazy exists. |
2022-08-29 18:54:44 +0200 | <int-e> | Right, at the level of state tokens you have a data dependency and that's threaded through all the actions inside of `forever`, even when that happens lazily. |
2022-08-29 18:54:53 +0200 | <qrpnxz> | ST.Lazy is pretty neat. I needed ST to be lazy rather recently. I'm gonna try to use it for that, and if it doesn't work then maybe it's useless, but i do have a usecase |
2022-08-29 18:56:10 +0200 | <int-e> | Oh, ST.Lazy enables mfix. So that's somewhat useful, as long as you're aware that whatever you feed back cannot depend on ST actions. |
2022-08-29 18:56:17 +0200 | nate4 | (~nate@98.45.169.16) (Ping timeout: 252 seconds) |
2022-08-29 18:56:58 +0200 | matthewmosior | (~matthewmo@173.170.253.91) |
2022-08-29 18:57:07 +0200 | <dolio> | Strict ST is also MonadFix. |
2022-08-29 18:57:09 +0200 | <qrpnxz> | ST.Strict also a MonadFix, so I would think that's also usable? Though lazy would probably allow more uses |
2022-08-29 18:57:22 +0200 | <int-e> | unsafeInterleaveST gives you laziness for ST actions but makes it easy to break purity. |
2022-08-29 18:57:30 +0200 | matthewmosior | (~matthewmo@173.170.253.91) (Remote host closed the connection) |
2022-08-29 18:57:36 +0200 | segfaultfizzbuzz | (~segfaultf@23-93-74-212.fiber.dynamic.sonic.net) (Ping timeout: 268 seconds) |
2022-08-29 18:57:37 +0200 | matthewmosior | (~matthewmo@173.170.253.91) |
2022-08-29 18:59:01 +0200 | matthewmosior | (~matthewmo@173.170.253.91) (Remote host closed the connection) |
2022-08-29 18:59:56 +0200 | matthewmosior | (~matthewmo@173.170.253.91) |
2022-08-29 19:00:08 +0200 | chexum | (~quassel@gateway/tor-sasl/chexum) (Quit: No Ping reply in 180 seconds.) |
2022-08-29 19:00:16 +0200 | <int-e> | dolio: Hmm, good point. |
2022-08-29 19:01:39 +0200 | chexum | (~quassel@gateway/tor-sasl/chexum) |
2022-08-29 19:03:10 +0200 | eggplantade | (~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net) |
2022-08-29 19:03:23 +0200 | beteigeuze | (~Thunderbi@bl11-28-222.dsl.telepac.pt) |
2022-08-29 19:04:22 +0200 | matthewmosior | (~matthewmo@173.170.253.91) (Ping timeout: 244 seconds) |
2022-08-29 19:04:54 +0200 | foul_owl | (~kerry@23.82.194.108) (Ping timeout: 244 seconds) |
2022-08-29 19:05:24 +0200 | <int-e> | So the main thing that lazy ST enables is returning an infinitely result incrementally? Say, `do r <- strictToLazyST (newSTRef 0); sequence (repeat (strictToLazyST $ do v <- readSTRef r; writeSTRef r (v+1); pure v))` |
2022-08-29 19:06:01 +0200 | <int-e> | I guess that has some uses. |
2022-08-29 19:06:02 +0200 | beteigeuze | (~Thunderbi@bl11-28-222.dsl.telepac.pt) (Client Quit) |
2022-08-29 19:06:18 +0200 | beteigeuze | (~Thunderbi@bl11-28-222.dsl.telepac.pt) |
2022-08-29 19:06:18 +0200 | segfaultfizzbuzz | (~segfaultf@23-93-74-212.fiber.dynamic.sonic.net) |
2022-08-29 19:08:02 +0200 | pretty_dumm_guy | (trottel@gateway/vpn/protonvpn/prettydummguy/x-88029655) |
2022-08-29 19:11:12 +0200 | beteigeuze | (~Thunderbi@bl11-28-222.dsl.telepac.pt) (Quit: beteigeuze) |
2022-08-29 19:11:27 +0200 | beteigeuze | (~Thunderbi@bl11-28-222.dsl.telepac.pt) |
2022-08-29 19:14:11 +0200 | razetime | (~quassel@117.193.4.12) |
2022-08-29 19:17:12 +0200 | alphabeta | (~kilolympu@90.203.82.22) |
2022-08-29 19:18:32 +0200 | beteigeuze | (~Thunderbi@bl11-28-222.dsl.telepac.pt) (Ping timeout: 268 seconds) |
2022-08-29 19:18:50 +0200 | mbuf | (~Shakthi@122.165.55.71) (Quit: Leaving) |
2022-08-29 19:18:59 +0200 | kilolympus | (~kilolympu@90.203.82.22) (Ping timeout: 248 seconds) |
2022-08-29 19:20:06 +0200 | razetime | (~quassel@117.193.4.12) (Remote host closed the connection) |
2022-08-29 19:20:16 +0200 | foul_owl | (~kerry@23.82.194.108) |
2022-08-29 19:20:31 +0200 | tzh | (~tzh@c-24-21-73-154.hsd1.or.comcast.net) |
2022-08-29 19:20:37 +0200 | slack1256 | (~slack1256@191.126.227.217) |
2022-08-29 19:23:37 +0200 | rockymarine | (~rocky@user/rockymarine) |
2022-08-29 19:24:08 +0200 | matthewmosior | (~matthewmo@173.170.253.91) |
2022-08-29 19:24:44 +0200 | toeffel | (~toeffel@user/toeffel) (Ping timeout: 268 seconds) |
2022-08-29 19:28:41 +0200 | matthewmosior | (~matthewmo@173.170.253.91) (Ping timeout: 255 seconds) |
2022-08-29 19:29:39 +0200 | <slack1256> | What do you use for `sort`ing a Data.Vector? There is no default function on that module. |
2022-08-29 19:31:01 +0200 | <int-e> | look on hackage? my first hit is https://hackage.haskell.org/package/vector-algorithms which as *way* too many choices |
2022-08-29 19:31:40 +0200 | jmdaemon | (~jmdaemon@user/jmdaemon) |
2022-08-29 19:32:15 +0200 | pavonia | (~user@user/siracusa) (Quit: Bye!) |
2022-08-29 19:35:20 +0200 | tromp | (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl) |
2022-08-29 19:35:50 +0200 | gmg | (~user@user/gehmehgeh) |
2022-08-29 19:36:05 +0200 | <qrpnxz> | okay yes ST.Lazy is awesome. I can use lazy ST state to produce an infinite stream without a problem. If i use strict ST it has to run infinite actions on the runST |
2022-08-29 19:36:11 +0200 | <qrpnxz> | so very useful indeed! |
2022-08-29 19:39:22 +0200 | Midjak | (~Midjak@82.66.147.146) |
2022-08-29 19:41:10 +0200 | mc47 | (~mc47@xmonad/TheMC47) |
2022-08-29 19:41:22 +0200 | jakalx | (~jakalx@base.jakalx.net) (Error from remote client) |
2022-08-29 19:42:17 +0200 | <carbolymer> | hi, how's `Show` instance implemented for sum types e.g. `data Foo = Foo | Bar` ? I'm not seeing any generics there https://hackage.haskell.org/package/base-4.17.0.0/docs/src/GHC.Show.html#Show |
2022-08-29 19:42:42 +0200 | <geekosaur> | it's built into the compiler |
2022-08-29 19:43:19 +0200 | <geekosaur> | the rules are described in the Report. you'd have to ask in #ghc for how ghc actually implements them, but it doesn't use Generics |
2022-08-29 19:43:40 +0200 | jakalx | (~jakalx@base.jakalx.net) |
2022-08-29 19:43:46 +0200 | <carbolymer> | oh nice and not nice at the same time |
2022-08-29 19:43:47 +0200 | <carbolymer> | thanks |
2022-08-29 19:44:49 +0200 | <geekosaur> | -ddump-deriv will show the code ghc generates for derived instances including Show |
2022-08-29 19:45:09 +0200 | noisyboy | (~soumen@58.182.45.203) |
2022-08-29 19:47:46 +0200 | econo | (uid147250@user/econo) |
2022-08-29 19:49:19 +0200 | <slack1256> | int-e: Oh, it is a separate package. Gotcha |
2022-08-29 19:51:03 +0200 | noisyboy | (~soumen@58.182.45.203) (Remote host closed the connection) |
2022-08-29 19:51:52 +0200 | chexum | (~quassel@gateway/tor-sasl/chexum) (Ping timeout: 258 seconds) |
2022-08-29 19:52:01 +0200 | chexum | (~quassel@gateway/tor-sasl/chexum) |
2022-08-29 19:52:16 +0200 | wonko_ | (~wjc@2a0e:1c80:2::130) |
2022-08-29 19:52:23 +0200 | vglfr | (~vglfr@145.224.94.75) (Ping timeout: 252 seconds) |
2022-08-29 19:53:23 +0200 | vglfr | (~vglfr@145.224.94.75) |
2022-08-29 19:53:29 +0200 | soumen | (~soumen@58.182.45.203) |
2022-08-29 19:53:54 +0200 | toeffel | (~toeffel@user/toeffel) |
2022-08-29 19:54:23 +0200 | <codedmart> | I am trying to compile hls 1.7.0.0 with ghcup `ghcup compile hls --version 1.7.0.0 --ghc 9.2.4` and seeing this error `ghcup: cabal: executeFile: does not exist (No such file or directory)` |
2022-08-29 19:55:18 +0200 | benin0 | (~benin@183.82.205.66) (Quit: The Lounge - https://thelounge.chat) |
2022-08-29 19:56:46 +0200 | rockymarine | (~rocky@user/rockymarine) (Ping timeout: 268 seconds) |
2022-08-29 19:57:08 +0200 | chele | (~chele@user/chele) (Remote host closed the connection) |
2022-08-29 19:57:23 +0200 | alphabeta | (~kilolympu@90.203.82.22) (Ping timeout: 268 seconds) |
2022-08-29 19:57:48 +0200 | matthewmosior | (~matthewmo@173.170.253.91) |
2022-08-29 19:58:39 +0200 | username9431 | (~Thunderbi@2a00:23c5:4202:9c01:4d47:1a1f:d871:dac1) (Ping timeout: 268 seconds) |
2022-08-29 19:59:16 +0200 | toeffel | (~toeffel@user/toeffel) (Ping timeout: 268 seconds) |
2022-08-29 20:00:12 +0200 | kilolympus | (~kilolympu@90.203.82.22) |
2022-08-29 20:00:23 +0200 | <int-e> | codedmart: I'd guess that `ghcup install cabal` fixes that. |
2022-08-29 20:00:45 +0200 | gmg | (~user@user/gehmehgeh) (Remote host closed the connection) |
2022-08-29 20:01:26 +0200 | gmg | (~user@user/gehmehgeh) |
2022-08-29 20:02:37 +0200 | even4void[m] | (~even4void@2001:470:69fc:105::2:4b9c) (Quit: Reconnecting) |
2022-08-29 20:02:56 +0200 | even4void[m] | (~even4void@2001:470:69fc:105::2:4b9c) |
2022-08-29 20:02:58 +0200 | kannon | (~NK@135-180-47-54.fiber.dynamic.sonic.net) |
2022-08-29 20:03:33 +0200 | <codedmart> | int-e Nope already tried that |
2022-08-29 20:07:24 +0200 | kannon | (~NK@135-180-47-54.fiber.dynamic.sonic.net) (Ping timeout: 244 seconds) |
2022-08-29 20:08:03 +0200 | <geekosaur> | I just tried it here and it got past that (but immediately failed complaining about missing dependencies) |
2022-08-29 20:08:54 +0200 | titibandit | (~titibandi@xdsl-87-78-66-58.nc.de) (Quit: Leaving.) |
2022-08-29 20:09:29 +0200 | rockymarine | (~rocky@user/rockymarine) |
2022-08-29 20:10:11 +0200 | ofl^ | (~ofl@c-73-237-184-20.hsd1.ga.comcast.net) |
2022-08-29 20:10:17 +0200 | toeffel | (~toeffel@user/toeffel) |
2022-08-29 20:10:39 +0200 | zxx7529 | (~Thunderbi@user/zxx7529) (Remote host closed the connection) |
2022-08-29 20:13:16 +0200 | segfaultfizzbuzz | (~segfaultf@23-93-74-212.fiber.dynamic.sonic.net) (Ping timeout: 260 seconds) |
2022-08-29 20:13:49 +0200 | hippoid | (~idris@c-98-220-13-8.hsd1.il.comcast.net) (WeeChat 3.5) |
2022-08-29 20:15:10 +0200 | segfaultfizzbuzz | (~segfaultf@23-93-74-212.fiber.dynamic.sonic.net) |
2022-08-29 20:15:18 +0200 | toeffel | (~toeffel@user/toeffel) (Ping timeout: 268 seconds) |
2022-08-29 20:16:01 +0200 | <qrpnxz> | int-e: did you see my message above? I can confirm ST.Lazy useful :) |
2022-08-29 20:16:11 +0200 | matthewmosior | (~matthewmo@173.170.253.91) (Ping timeout: 260 seconds) |
2022-08-29 20:19:06 +0200 | <monochrom> | I think your example is equivalent to enabling mfix. :) |
2022-08-29 20:19:35 +0200 | <monochrom> | But yeah I've done that with both ST.Lazy and State.Lazy. |
2022-08-29 20:20:13 +0200 | <monochrom> | We love head recursion, don't we? Down with tail-call optimization! In Haskell we have head-call optimization! |
2022-08-29 20:20:29 +0200 | <monochrom> | I should say that next time someone asks about TCO. |
2022-08-29 20:20:33 +0200 | <qrpnxz> | 😄 |
2022-08-29 20:20:36 +0200 | <int-e> | qrpnxz: if you scroll up another half hour you'll see why I didn't reply |
2022-08-29 20:20:57 +0200 | slack1256 | (~slack1256@191.126.227.217) (Read error: Connection reset by peer) |
2022-08-29 20:21:44 +0200 | <qrpnxz> | yeah, but i felt like that example was too contrived to be a good proof of usefulness. Still, that definitely showcases the power |
2022-08-29 20:22:17 +0200 | slack1256 | (~slack1256@186.11.99.53) |
2022-08-29 20:22:19 +0200 | <qrpnxz> | on the other hand, i didn't post any code, so my message doesn't seem to express a use much different from your example lol |
2022-08-29 20:22:35 +0200 | <qrpnxz> | in my test i did i'm using vectors and doing some windowing |
2022-08-29 20:22:38 +0200 | <int-e> | the example was for illustration, something that fits into an IRC message |
2022-08-29 20:22:45 +0200 | <monochrom> | I haven't completely understood the semantics of ST.Lazy. For now I approximate it by: if you read any STRef, then it forces almost everything. But it's an approximation, I think I even saw a marginal counterexample. |
2022-08-29 20:23:02 +0200 | coot | (~coot@213.134.176.158) |
2022-08-29 20:23:20 +0200 | <int-e> | monochrom: If you use the result of readSTRef that will force all ST actions that precede it. |
2022-08-29 20:23:24 +0200 | <qrpnxz> | well, read from STRef forces everything *up to the read*, and strict forces everything period |
2022-08-29 20:23:35 +0200 | <qrpnxz> | that's the diff in a nutshell |
2022-08-29 20:23:59 +0200 | <int-e> | operationally, that's because of the artificial data dependency conveyed by the state token |
2022-08-29 20:24:47 +0200 | <monochrom> | Would be nice if the data dependency is fine-grained on the actual contents of the STRef's. |
2022-08-29 20:24:50 +0200 | <qrpnxz> | i feel like there's room for a really clever applicative |
2022-08-29 20:24:52 +0200 | <qrpnxz> | here |
2022-08-29 20:25:23 +0200 | <monochrom> | Although, probably no one needs it badly. |
2022-08-29 20:25:31 +0200 | <monochrom> | Talk about low demands haha. |
2022-08-29 20:25:37 +0200 | vglfr | (~vglfr@145.224.94.75) (Read error: Connection reset by peer) |
2022-08-29 20:25:47 +0200 | vglfr | (~vglfr@145.224.94.75) |
2022-08-29 20:25:50 +0200 | <int-e> | the finely grained version of this is lazy evaluation, which restricts you to at most one write per "STRef". ;) |
2022-08-29 20:26:18 +0200 | <int-e> | (I'm sure this is wrong when you look closely enough.) |
2022-08-29 20:27:07 +0200 | <monochrom> | No worries, that's how I explain Haskell and Java's final vars too! |
2022-08-29 20:27:16 +0200 | mima | (~mmh@dhcp-138-246-3-174.dynamic.eduroam.mwn.de) (Ping timeout: 260 seconds) |
2022-08-29 20:28:10 +0200 | <int-e> | Yeah, I once learned the hard way that Java's final vars cannot form cycles... |
2022-08-29 20:29:46 +0200 | <int-e> | (The write-once references model of lazy evaluation is missing thunks.) |
2022-08-29 20:30:34 +0200 | <monochrom> | Ah. I just mean I explain immutability that way. |
2022-08-29 20:31:38 +0200 | <int-e> | (Instead, Java lets you read uninitialized final variables druing initialization. It's quite a surprise if you mistake "final" for "constant". As I did.) |
2022-08-29 20:32:54 +0200 | matthewmosior | (~matthewmo@173.170.253.91) |
2022-08-29 20:33:24 +0200 | <int-e> | (it's not insane; "uninitialized" gives you a default value like null or 0 depending on the type) |
2022-08-29 20:36:01 +0200 | <monochrom> | Yeah, that. |
2022-08-29 20:36:32 +0200 | <monochrom> | Alternatively it's as insane as date-default? >:) |
2022-08-29 20:37:22 +0200 | matthewmosior | (~matthewmo@173.170.253.91) (Ping timeout: 244 seconds) |
2022-08-29 20:37:30 +0200 | Lord_of_Life | (~Lord@user/lord-of-life/x-2819915) (Ping timeout: 268 seconds) |
2022-08-29 20:38:04 +0200 | Lord_of_Life | (~Lord@user/lord-of-life/x-2819915) |
2022-08-29 20:41:36 +0200 | mvk | (~mvk@2607:fea8:5ce3:8500::a1ec) |
2022-08-29 20:47:35 +0200 | lortabac | (~lortabac@88.125.6.227) |
2022-08-29 20:47:40 +0200 | waleee | (~waleee@2001:9b0:213:7200:cc36:a556:b1e8:b340) |
2022-08-29 20:49:35 +0200 | segfaultfizzbuzz | (~segfaultf@23-93-74-212.fiber.dynamic.sonic.net) (Ping timeout: 252 seconds) |
2022-08-29 21:00:31 +0200 | wonko_ | (~wjc@2a0e:1c80:2::130) (Ping timeout: 260 seconds) |
2022-08-29 21:05:17 +0200 | matthewmosior | (~matthewmo@173.170.253.91) |
2022-08-29 21:06:27 +0200 | stiell | (~stiell@gateway/tor-sasl/stiell) (Remote host closed the connection) |
2022-08-29 21:06:59 +0200 | stiell | (~stiell@gateway/tor-sasl/stiell) |
2022-08-29 21:07:05 +0200 | jakalx | (~jakalx@base.jakalx.net) () |
2022-08-29 21:07:17 +0200 | jakalx | (~jakalx@base.jakalx.net) |
2022-08-29 21:14:38 +0200 | merijn | (~merijn@c-001-001-007.client.esciencecenter.eduvpn.nl) |
2022-08-29 21:16:07 +0200 | vektor | (~vektor@IP-212232083002.dynamic.medianet-world.de) |
2022-08-29 21:17:25 +0200 | madjestic | (~madjestic@88-159-247-120.fixed.kpn.net) |
2022-08-29 21:21:18 +0200 | <vektor> | For anyone familiar with Functorio ( https://bartoszmilewski.com/2021/02/16/functorio/ ) - how would I express a furnace? |
2022-08-29 21:22:48 +0200 | <Rembane> | Coal -> IronOre -> IronPlate -- something like that? |
2022-08-29 21:22:56 +0200 | <vektor> | Or to clarify: How do I encode, within haskell's type system, a function f :: a -> b that converts from a to b, when I have a known set of mappings from a to b? Can I bake those into the type system somehow, that one type a (say, iron ore) always gets converted to a specific other type b (say iron plate)? |
2022-08-29 21:22:57 +0200 | raym | (~raym@user/raym) (Ping timeout: 252 seconds) |
2022-08-29 21:23:25 +0200 | <vektor> | Rembane: generically, over all ores is what I'm looking for. |
2022-08-29 21:23:42 +0200 | <vektor> | How do I tell the type system that iron ore maps to iron plate and copper ore maps to copper plate? |
2022-08-29 21:23:53 +0200 | matthewmosior | (~matthewmo@173.170.253.91) (Ping timeout: 255 seconds) |
2022-08-29 21:24:23 +0200 | <vektor> | (Or, and that's a conjecture I'm entirely willing to accept, am I straying out of the domain of FP, because I'm moving away from generic functions and towards generic data and I actually need OOP? :'( |
2022-08-29 21:25:17 +0200 | causal | (~user@50.35.83.177) |
2022-08-29 21:25:46 +0200 | <[exa]> | vektor: something like `Metal a => Ore a -> Plate a` ? |
2022-08-29 21:26:07 +0200 | <[exa]> | plusminus some energy source ofc, I'm not good at factoryio |
2022-08-29 21:26:26 +0200 | <vektor> | I don't care about the energy source at all here, that's fine. |
2022-08-29 21:26:28 +0200 | <Rembane> | vektor: Maybe some funcdeps could help you out, or something like that |
2022-08-29 21:29:37 +0200 | ph88 | (~ph88@ip5f5af71f.dynamic.kabel-deutschland.de) |
2022-08-29 21:29:44 +0200 | <vektor> | The Metal a is not really what I'm looking for, as it requires me to keep track of ores and plates. (I'm also not sure I even *want* to distinctly separate things into ores and plates, what I'm interested in is more about the conversion function in the clarification above and making it work) |
2022-08-29 21:30:12 +0200 | <vektor> | Maybe something like convert :: (Convertible a b) => a -> b |
2022-08-29 21:30:28 +0200 | <vektor> | Can I write that? Or will the compiler yell at me? |
2022-08-29 21:30:55 +0200 | <vektor> | Plop down a bunch of instances (iron, copper, ...), done? |
2022-08-29 21:31:01 +0200 | <[exa]> | well you can, but the conversions tend to become more ambiguous than people would like |
2022-08-29 21:31:10 +0200 | <qrpnxz> | some like Convertible has been done in some libs, i was writing my own the other day then i thought it was a total waste of time and instead of asking for an `a` and `a -> b`, i should just accept a `b` |
2022-08-29 21:31:44 +0200 | <vektor> | Yeah, Ideally you'd have a way to enforce that there are no two instances Convertible a b and Convertible a c. That could be messy. |
2022-08-29 21:32:21 +0200 | <qrpnxz> | nothing wrong with having those instances |
2022-08-29 21:32:42 +0200 | <[exa]> | vektor: highly recommend to try to simulate the problem in prolog btw (problems are much more obvious than if hidden in a type language) |
2022-08-29 21:33:11 +0200 | <qrpnxz> | how does prolog help lol. And why not just LogicT |
2022-08-29 21:34:18 +0200 | <[exa]> | no like, this Convertible is literally the first problem thrown to prolog students (usually hidden in "has_child" or "road_from_to" or so) |
2022-08-29 21:34:48 +0200 | <dminuoso> | geekosaur: `family` is not a keyword, but it is an unconditionally (in the sense that its not dependent on extensions) reserved word. |
2022-08-29 21:35:27 +0200 | <dminuoso> | See `Note [Lexing type pseudo-keywords]` |
2022-08-29 21:35:28 +0200 | <qrpnxz> | ah |
2022-08-29 21:36:41 +0200 | <[exa]> | vektor: btw a good approach to invent types like this is to write up a list of concrete types your functions should be able to have and list of concrete types it should not have, and find the matching type(s) mechanically |
2022-08-29 21:37:12 +0200 | <dminuoso> | In particular, `role` or `family` are only considered special if they follow `type`. |
2022-08-29 21:37:18 +0200 | rockymarine | (~rocky@user/rockymarine) (Ping timeout: 244 seconds) |
2022-08-29 21:37:29 +0200 | <dminuoso> | (A top-level type, even) |
2022-08-29 21:38:26 +0200 | <vektor> | https://wiki.haskell.org/Functional_dependencies sounds good so far. So I could write class Convertible a b | a -> b where convert :: a -> b |
2022-08-29 21:38:29 +0200 | <qrpnxz> | >non-top-level type |
2022-08-29 21:38:31 +0200 | <qrpnxz> | huh? |
2022-08-29 21:39:21 +0200 | <qrpnxz> | vektor: you don't want a fun dep there. Usually you want to make many different things from an a |
2022-08-29 21:39:23 +0200 | <Rembane> | vektor: What about this? https://paste.tomsmeding.com/3PiryQbN |
2022-08-29 21:39:38 +0200 | <vektor> | Then haskell will yell at me if I have a furnace that would want to produce two different products from one input. Cool. I could even have the steel recipe (iron plate -> steel plate) in there. |
2022-08-29 21:40:19 +0200 | <vektor> | qrpnxz, depends. I mean, if that's the constraint that I want to express (and in the case of factorio, that *is* one of the constraints of furnaces), then I can add it. |
2022-08-29 21:40:37 +0200 | <vektor> | Of course, if I don't need that constraint, then I don't need the FunDep. |
2022-08-29 21:40:38 +0200 | <[exa]> | vektor: it won't yell |
2022-08-29 21:40:41 +0200 | <qrpnxz> | i wouldn't call it something as general as "Convertible", but sure |
2022-08-29 21:40:55 +0200 | xsebek_ | (xsebek@swarm.znchost.com) |
2022-08-29 21:40:55 +0200 | nerdypepper | (~nerdypepp@user/nerdypepper) (Quit: bye) |
2022-08-29 21:41:05 +0200 | <vektor> | That's fair. That's a bad name. |
2022-08-29 21:41:12 +0200 | <[exa]> | vektor: you can perfectly have a function (more precisely a typeclass method) that produce say String->Int and String->Float etc. |
2022-08-29 21:41:42 +0200 | <qrpnxz> | that's what i would expect from a Convertible (more commonly From) |
2022-08-29 21:41:43 +0200 | <vektor> | Wait, what? I thought that's literally the only point of fun deps? |
2022-08-29 21:41:47 +0200 | <qrpnxz> | for this i'd call it something else |
2022-08-29 21:41:58 +0200 | <vektor> | Yeah, call it "furnace" instead. |
2022-08-29 21:42:14 +0200 | raym | (~raym@user/raym) |
2022-08-29 21:42:29 +0200 | <qrpnxz> | vektor: i believe exa is saying generally, not the version with a fun dep. With a fundep it would be only one b per a |
2022-08-29 21:43:12 +0200 | <vektor> | ahh ok. Yeah, for a Convertible / From typeclass, you'd have no yelling and no fundep. For the furnace, fundep and yelling if you violate the product uniqueness constraint. |
2022-08-29 21:43:15 +0200 | <[exa]> | vektor: ofc unless you declare your typeclass with 2 parameters and prohibit this with a fundep. :D |
2022-08-29 21:43:19 +0200 | kuribas | (~user@ptr-17d51epjyeoyuptwhep.18120a2.ip6.access.telenet.be) (Quit: ERC (IRC client for Emacs 26.3)) |
2022-08-29 21:43:29 +0200 | merijn | (~merijn@c-001-001-007.client.esciencecenter.eduvpn.nl) (Ping timeout: 252 seconds) |
2022-08-29 21:44:14 +0200 | <vektor> | (To clarify, this is, much like functorio itself, entirely an exercise in learning about type systems.) |
2022-08-29 21:44:28 +0200 | segfaultfizzbuzz | (~segfaultf@23-93-74-212.fiber.dynamic.sonic.net) |
2022-08-29 21:44:53 +0200 | <vektor> | (Also a game design thought about things that bug me with giant factorio modpacks. A thought that's grown quite out of proportion. But that's beside the point.) |
2022-08-29 21:45:44 +0200 | titibandit | (~titibandi@xdsl-87-78-66-58.nc.de) |
2022-08-29 21:46:35 +0200 | <vektor> | Is there a generic From typeclass btw that literally every trivial conversion of types is lumped into? My google foo is failing due to the word "from" being so generic. |
2022-08-29 21:47:16 +0200 | random-jellyfish | (~random-je@user/random-jellyfish) |
2022-08-29 21:47:55 +0200 | matthewmosior | (~matthewmo@173.170.253.91) |
2022-08-29 21:48:34 +0200 | <geekosaur> | are you thinking of Coercible? suppose it depends on what you mean by "trivial" |
2022-08-29 21:48:38 +0200 | <geekosaur> | see Data.Coerce |
2022-08-29 21:49:37 +0200 | lortabac | (~lortabac@88.125.6.227) (Quit: WeeChat 2.8) |
2022-08-29 21:50:07 +0200 | nerdypepper | (~nerdypepp@user/nerdypepper) |
2022-08-29 21:50:26 +0200 | <qrpnxz> | you can indeed find From in a couple libs like i mentioned. There's one bundled with an attempted new stdlib (bedrock? foundation? i forget the name). I wrote one, but never posted because i realized it's useless. |
2022-08-29 21:50:33 +0200 | <vektor> | That and Data.Convertible about cover the space I was expecting. |
2022-08-29 21:51:09 +0200 | <xsebek_> | For example https://hackage.haskell.org/package/witch-1.0.0.3/docs/Witch-From.html is one I use :) |
2022-08-29 21:51:51 +0200 | <qrpnxz> | "default from :: Coercible source target => source -> target" oh boy, i tried that too. Actually kind of broken. |
2022-08-29 21:52:03 +0200 | dwt_ | (~dwt_@c-98-198-103-176.hsd1.tx.comcast.net) (Ping timeout: 248 seconds) |
2022-08-29 21:52:26 +0200 | matthewmosior | (~matthewmo@173.170.253.91) (Ping timeout: 260 seconds) |
2022-08-29 21:53:31 +0200 | dwt_ | (~dwt_@c-98-198-103-176.hsd1.tx.comcast.net) |
2022-08-29 21:56:26 +0200 | ozkutuk | (~ozkutuk@176.240.173.153) (Quit: The Lounge - https://thelounge.chat) |
2022-08-29 21:56:30 +0200 | rockymarine | (~rocky@user/rockymarine) |
2022-08-29 21:56:48 +0200 | <xsebek_> | whats broken about that? |
2022-08-29 21:57:27 +0200 | eggplantade | (~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net) (Remote host closed the connection) |
2022-08-29 21:57:57 +0200 | <xsebek_> | I only use it for couple of the defined instances so I did not run into any coerce problems |
2022-08-29 21:59:34 +0200 | <xsebek_> | Btw. how do I do a CURL like request in Haskell? |
2022-08-29 21:59:34 +0200 | <qrpnxz> | iirc, it really confuses the heck out of GHC when you actually try to use it, and cause overlapping instance problems |
2022-08-29 22:00:01 +0200 | <qrpnxz> | xsebek_: how about https://hackage.haskell.org/package/http-client |
2022-08-29 22:01:18 +0200 | echoone | (~echoone@188.74.37.39) |
2022-08-29 22:02:23 +0200 | <echoone> | Is it fair two view traverse with a monad constraint as fmap, but in the Kleisli category of the monad? |
2022-08-29 22:02:33 +0200 | ofl^ | (~ofl@c-73-237-184-20.hsd1.ga.comcast.net) (Ping timeout: 252 seconds) |
2022-08-29 22:02:55 +0200 | ofl^ | (~ofl@c-73-237-184-20.hsd1.ga.comcast.net) |
2022-08-29 22:03:50 +0200 | ix | (~ix@2a02:8010:674f:0:d65d:64ff:fe52:5efe) (Ping timeout: 268 seconds) |
2022-08-29 22:04:59 +0200 | slac13271 | (~slack1256@191.126.227.217) |
2022-08-29 22:05:54 +0200 | matthewmosior | (~matthewmo@173.170.253.91) |
2022-08-29 22:06:35 +0200 | rockymarine | (~rocky@user/rockymarine) (Ping timeout: 252 seconds) |
2022-08-29 22:07:36 +0200 | slack1256 | (~slack1256@186.11.99.53) (Ping timeout: 260 seconds) |
2022-08-29 22:09:17 +0200 | rockymarine | (~rocky@user/rockymarine) |
2022-08-29 22:10:05 +0200 | justsomeguy | (~justsomeg@user/justsomeguy) |
2022-08-29 22:10:59 +0200 | <geekosaur> | qrpnxz, I can well imagine that using coerce without a target type could confuse ghc if multiple possibilities exist with newtypes distinguishing them |
2022-08-29 22:11:25 +0200 | wonko_ | (~wjc@2a0e:1c80:2::130) |
2022-08-29 22:12:11 +0200 | ec | (~ec@gateway/tor-sasl/ec) (Remote host closed the connection) |
2022-08-29 22:12:40 +0200 | ec | (~ec@gateway/tor-sasl/ec) |
2022-08-29 22:14:17 +0200 | rockymarine | (~rocky@user/rockymarine) (Ping timeout: 252 seconds) |
2022-08-29 22:14:36 +0200 | ofl^ | (~ofl@c-73-237-184-20.hsd1.ga.comcast.net) (Ping timeout: 260 seconds) |
2022-08-29 22:15:22 +0200 | <qrpnxz> | echoone: i believe `join . mapM` would indeed be `=<<` |
2022-08-29 22:15:48 +0200 | <qrpnxz> | let me do a test |
2022-08-29 22:15:57 +0200 | vektor | (~vektor@IP-212232083002.dynamic.medianet-world.de) (Quit: Client closed) |
2022-08-29 22:16:44 +0200 | <qrpnxz> | nope |
2022-08-29 22:16:47 +0200 | <qrpnxz> | not true for list |
2022-08-29 22:17:04 +0200 | <qrpnxz> | it's... something |
2022-08-29 22:17:06 +0200 | <qrpnxz> | lol |
2022-08-29 22:17:13 +0200 | <echoone> | Aww shucks. |
2022-08-29 22:17:33 +0200 | <echoone> | And here I thought I could get away with thinking about it in simpler terms. |
2022-08-29 22:17:39 +0200 | <qrpnxz> | traverse is more a data type thing, and bind is more a control type thing |
2022-08-29 22:17:57 +0200 | <geekosaur> | were you thinking of join . fmap? |
2022-08-29 22:17:58 +0200 | <qrpnxz> | consider IO is not traversable |
2022-08-29 22:18:03 +0200 | <geekosaur> | :t join . fmap |
2022-08-29 22:18:04 +0200 | <lambdabot> | error: |
2022-08-29 22:18:04 +0200 | <lambdabot> | • Occurs check: cannot construct the infinite type: m ~ (->) (m a) |
2022-08-29 22:18:04 +0200 | <lambdabot> | Expected type: (a -> a1) -> m (m a1) |
2022-08-29 22:18:06 +0200 | random-jellyfish | (~random-je@user/random-jellyfish) (Quit: Client closed) |
2022-08-29 22:18:13 +0200 | <qrpnxz> | join . fmap could indeed actually be (=<<) |
2022-08-29 22:18:22 +0200 | <geekosaur> | :t (join .) . fmap |
2022-08-29 22:18:24 +0200 | <lambdabot> | Monad m => (a1 -> m a2) -> m a1 -> m a2 |
2022-08-29 22:19:02 +0200 | ofl^ | (~ofl@c-73-237-184-20.hsd1.ga.comcast.net) |
2022-08-29 22:19:42 +0200 | <echoone> | :t join . mapM |
2022-08-29 22:19:44 +0200 | <lambdabot> | Traversable t => (a -> t a -> b) -> t a -> t b |
2022-08-29 22:19:51 +0200 | <qrpnxz> | right we need black bird here so i really mean what geek put |
2022-08-29 22:20:31 +0200 | <qrpnxz> | :t (join .) . mapm |
2022-08-29 22:20:32 +0200 | <lambdabot> | error: |
2022-08-29 22:20:32 +0200 | <lambdabot> | • Variable not in scope: mapm :: a -> a1 -> m (m a2) |
2022-08-29 22:20:32 +0200 | <lambdabot> | • Perhaps you meant one of these: |
2022-08-29 22:20:33 +0200 | <qrpnxz> | :t (join .) . mapM |
2022-08-29 22:20:35 +0200 | <lambdabot> | (Monad m, Traversable m) => (a1 -> m a2) -> m a1 -> m a2 |
2022-08-29 22:21:13 +0200 | <qrpnxz> | because traverse is pulling the mapped m into the outside, it's reordering the effect. Causes a different result |
2022-08-29 22:21:26 +0200 | jargon | (~jargon@184.101.185.66) |
2022-08-29 22:21:32 +0200 | <echoone> | Which list example did you try? |
2022-08-29 22:21:59 +0200 | <qrpnxz> | i just mapped [1..10] with (\x -> [x, x+1]) |
2022-08-29 22:22:46 +0200 | segfaultfizzbuzz | (~segfaultf@23-93-74-212.fiber.dynamic.sonic.net) (Ping timeout: 260 seconds) |
2022-08-29 22:22:57 +0200 | <echoone> | So m is [], but what is the Traversable t you are using? |
2022-08-29 22:23:08 +0200 | <qrpnxz> | also [] |
2022-08-29 22:23:08 +0200 | ix | (~ix@2a02:8010:674f:0:d65d:64ff:fe52:5efe) |
2022-08-29 22:23:10 +0200 | <echoone> | Are you using t = [] too. |
2022-08-29 22:23:11 +0200 | <qrpnxz> | otherwise you can't join |
2022-08-29 22:23:12 +0200 | <echoone> | Ah, |
2022-08-29 22:23:52 +0200 | <echoone> | I'm not sure why join enters the picture here. |
2022-08-29 22:24:14 +0200 | renzhi | (~xp@2607:fa49:6500:b100::c93a) |
2022-08-29 22:24:25 +0200 | <qrpnxz> | so to answer the original question: not really. I'd give maybe that description to (=<<) though |
2022-08-29 22:24:43 +0200 | <qrpnxz> | with no join you aren't doing anything that i would really describe monadic |
2022-08-29 22:24:54 +0200 | <qrpnxz> | it would just be an applicative that happens to be a monad mapped into a traversable |
2022-08-29 22:25:06 +0200 | segfaultfizzbuzz | (~segfaultf@23-93-74-212.fiber.dynamic.sonic.net) |
2022-08-29 22:25:59 +0200 | matthewmosior | (~matthewmo@173.170.253.91) (Ping timeout: 255 seconds) |
2022-08-29 22:26:07 +0200 | <echoone> | Wouldn't I need to show that it does not satisfy the functor laws in the Kleisli category? |
2022-08-29 22:26:47 +0200 | rockymarine | (~rocky@user/rockymarine) |
2022-08-29 22:27:17 +0200 | <qrpnxz> | ya know, i think it actually might satisfy the laws, given the laws of traversable. But idk |
2022-08-29 22:28:14 +0200 | sammelweis | (~quassel@2601:401:8200:2d4c:bd9:d04c:7f69:eb10) (Ping timeout: 255 seconds) |
2022-08-29 22:28:38 +0200 | slack1256 | (~slack1256@186.11.99.53) |
2022-08-29 22:29:07 +0200 | slac13271 | (~slack1256@191.126.227.217) (Read error: Connection reset by peer) |
2022-08-29 22:29:16 +0200 | <qrpnxz> | where the laws would look like notBind pure = pure and notBind f <=< notBind g = notBind (f <=< g) where notBind = (join .) . mapM |
2022-08-29 22:29:46 +0200 | segfaultfizzbuzz | (~segfaultf@23-93-74-212.fiber.dynamic.sonic.net) (Ping timeout: 260 seconds) |
2022-08-29 22:32:21 +0200 | nate4 | (~nate@98.45.169.16) |
2022-08-29 22:33:09 +0200 | <echoone> | The identity/pure law is certainly satisfied. |
2022-08-29 22:33:21 +0200 | <qrpnxz> | i think better way to understand traversable is to implement an instance. Like for example the instance for list: traverse f [] = pure []; traverse f (x:xs) = liftA2 (:) (f x) (traverse f xs). You can see that all we do is rebuild structures inside the idiom of the applicative. |
2022-08-29 22:35:33 +0200 | <echoone> | I do have the understanding. It's basically like fmap, but your values are under an applicative, so in order to apply your constructors and other primitives, you have to liftA them. |
2022-08-29 22:36:02 +0200 | <echoone> | But the laws are difficult to remember. |
2022-08-29 22:36:22 +0200 | <echoone> | If it were really like fmap in an appropriate category, I could remember them easier. |
2022-08-29 22:36:56 +0200 | <[Leary]> | `mapM f <=< mapM g = mapM (f <=< g)` won't be satisfied unless the effects are symmetric; the transform transposes them. |
2022-08-29 22:37:09 +0200 | ix | (~ix@2a02:8010:674f:0:d65d:64ff:fe52:5efe) (Remote host closed the connection) |
2022-08-29 22:37:26 +0200 | <qrpnxz> | the laws are very similar to fmap, basically just two iirc: traverse pure = pure, and Compose . fmap (traverse f) . traverse g = traverse (Compose . fmap f . g) |
2022-08-29 22:37:50 +0200 | <qrpnxz> | [Leary]: thanks |
2022-08-29 22:38:11 +0200 | <echoone> | It is kind of like fmap, but I can't for the life of me remember it (or reverse engineer it). |
2022-08-29 22:38:34 +0200 | <echoone> | [Leary] What does "symmetric" mean |
2022-08-29 22:38:49 +0200 | <qrpnxz> | i think he means the effects commute (order doesn't matter) |
2022-08-29 22:39:29 +0200 | <echoone> | So like do {x <- m; y <- n} = do {y <- n; x <- m} ? |
2022-08-29 22:39:45 +0200 | <qrpnxz> | yeah, which is true sometimes |
2022-08-29 22:39:50 +0200 | eggplantade | (~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net) |
2022-08-29 22:39:59 +0200 | <c_wraith> | usually that's called a commutative monad |
2022-08-29 22:40:20 +0200 | <echoone> | Yes. |
2022-08-29 22:40:50 +0200 | shapr` | (~user@68.54.166.125) |
2022-08-29 22:40:51 +0200 | ix | (~ix@2a02:8010:674f:0:d65d:64ff:fe52:5efe) |
2022-08-29 22:40:55 +0200 | <c_wraith> | and the only really common ones I can think of are Maybe and Reader, but I'm sure there a lot more. |
2022-08-29 22:41:24 +0200 | pavonia | (~user@user/siracusa) |
2022-08-29 22:41:39 +0200 | <qrpnxz> | i think GenHaxl also relies on it. It's (<*>) is only `ap` if you satisfy that. |
2022-08-29 22:42:29 +0200 | <echoone> | I thought Haxl violated the `ap = <*>` law. |
2022-08-29 22:42:37 +0200 | kilolympus | (~kilolympu@90.203.82.22) (Quit: See you later! :)) |
2022-08-29 22:42:38 +0200 | wonko_ | (~wjc@2a0e:1c80:2::130) (Ping timeout: 255 seconds) |
2022-08-29 22:42:43 +0200 | <c_wraith> | Yeah, Haxl relies on ApplicativeDo rewriting |
2022-08-29 22:43:05 +0200 | shapr | (~user@2601:7c0:c383:70:8f2e:ebd3:e94d:76ae) (Ping timeout: 255 seconds) |
2022-08-29 22:43:08 +0200 | <qrpnxz> | only if you don't have a commutative effect iirc, which your data sources should be(?) |
2022-08-29 22:43:13 +0200 | <qrpnxz> | i'm not a haxl expert |
2022-08-29 22:43:13 +0200 | <c_wraith> | Things that can be converted to Applicative functions run in parallel, otherwise they're in sequence. |
2022-08-29 22:44:03 +0200 | <c_wraith> | data sources can change in time, so there are interleavings with the outside world in which the difference is observable |
2022-08-29 22:44:45 +0200 | <c_wraith> | for haxl's use case, that's determined to not matter. But it does mean that it's a sketchy monad. :) |
2022-08-29 22:45:01 +0200 | <c_wraith> | (in terms of agreeing with Applicative) |
2022-08-29 22:45:35 +0200 | <qrpnxz> | speaking of, that's why Concurrently from Async is not a Monad, but we could have Racing or something that was a Monad and also had the Alternative instance. Just sayin' |
2022-08-29 22:46:06 +0200 | <qrpnxz> | also weird that it's not a MonadIO |
2022-08-29 22:46:30 +0200 | <echoone> | But Concurrently is IO as a monad. In fact, Concurrently is a newtype wrapper of IO to get a concurrent applicative. |
2022-08-29 22:46:49 +0200 | <qrpnxz> | right, so it should be MonadIO :) |
2022-08-29 22:47:28 +0200 | <echoone> | What would happen if we did not have the ap = <*> law? |
2022-08-29 22:47:54 +0200 | adanwan | (~adanwan@gateway/tor-sasl/adanwan) (Remote host closed the connection) |
2022-08-29 22:47:56 +0200 | <qrpnxz> | `ap` is the proof that Applicative is a super class of Monad, it would be very confusing if ap didn't match <*> |
2022-08-29 22:48:39 +0200 | <qrpnxz> | i'd say if those don't match then it's not even a real super class |
2022-08-29 22:48:51 +0200 | <echoone> | OK, so what if it was not a superclass? |
2022-08-29 22:48:56 +0200 | adanwan | (~adanwan@gateway/tor-sasl/adanwan) |
2022-08-29 22:49:05 +0200 | <c_wraith> | lots of code would get uglier. :P |
2022-08-29 22:49:07 +0200 | <qrpnxz> | if it was not a superclass then sure, they don't have to match |
2022-08-29 22:49:25 +0200 | <qrpnxz> | but i mean, you can just have another function, or newtype wrap |
2022-08-29 22:49:30 +0200 | <c_wraith> | You'd end up with lots of (Applicative m, Monad m) constraints on stuff. |
2022-08-29 22:49:34 +0200 | Everything | (~Everythin@37.115.210.35) (Quit: leaving) |
2022-08-29 22:49:38 +0200 | <c_wraith> | I know this, because... I lived it. :P |
2022-08-29 22:49:43 +0200 | titibandit | (~titibandi@xdsl-87-78-66-58.nc.de) (Remote host closed the connection) |
2022-08-29 22:49:47 +0200 | <qrpnxz> | (Applicative m, Monad m) is crazy |
2022-08-29 22:50:08 +0200 | segfaultfizzbuzz | (~segfaultf@23-93-74-212.fiber.dynamic.sonic.net) |
2022-08-29 22:50:10 +0200 | <c_wraith> | before AMP, I wrote a fair bit of code where I had to decide if I wanted to use Applicative functions or have cleaner constraints |
2022-08-29 22:50:24 +0200 | <echoone> | c_wraith: But why? You can just wrap the Monad whose purpose is to make it an applicative |
2022-08-29 22:50:52 +0200 | <qrpnxz> | if they are separate you need traverse and mapM, is they are together you can just use traverse |
2022-08-29 22:51:05 +0200 | <qrpnxz> | i should be able to use a monad anywhere i only care about applicative |
2022-08-29 22:51:18 +0200 | <qrpnxz> | lot of code reuse and more general |
2022-08-29 22:51:31 +0200 | <echoone> | But as I said, you can use a newtype wrapper. We basically do with with Selective. |
2022-08-29 22:51:48 +0200 | mima | (mmh@gateway/vpn/airvpn/mima) |
2022-08-29 22:51:57 +0200 | <dolio> | Sprinkling newtypes all over your code is uglier. |
2022-08-29 22:52:04 +0200 | <echoone> | Too late. |
2022-08-29 22:52:17 +0200 | <qrpnxz> | i see what you mean, but meh, i rather newtype to choose an alternative applicative instance, than newtype every time i want to just use the normal sane likely singular applicative instance that i get form the monad |
2022-08-29 22:52:30 +0200 | <qrpnxz> | *from |
2022-08-29 22:53:09 +0200 | <qrpnxz> | there any reason the Applicative from the Monad should not be the default? It's the most sane thing. |
2022-08-29 22:53:42 +0200 | mc47 | (~mc47@xmonad/TheMC47) (Remote host closed the connection) |
2022-08-29 22:53:46 +0200 | <qrpnxz> | And you don't have to hope people define an applicative that should in no universe not exist if you have a monad |
2022-08-29 22:54:10 +0200 | matthewmosior | (~matthewmo@173.170.253.91) |
2022-08-29 22:55:20 +0200 | <qrpnxz> | Haxl just doesn't care because they want fancy syntax, but even that's not really an excuse imo because there's an extension that let's you do a custom do notation with alternate operators now |
2022-08-29 22:55:34 +0200 | <qrpnxz> | *lets |
2022-08-29 22:58:17 +0200 | ph88 | (~ph88@ip5f5af71f.dynamic.kabel-deutschland.de) (Ping timeout: 252 seconds) |
2022-08-29 22:58:32 +0200 | segfaultfizzbuzz | (~segfaultf@23-93-74-212.fiber.dynamic.sonic.net) (Quit: segfaultfizzbuzz) |
2022-08-29 22:59:09 +0200 | <qrpnxz> | ever tried using the ZipList Applicative? you gotta do like f <$> ZipList as <*> ZipList bs. Would you say it's in improvement or worse to have to do f <$> WrappedMonad as <*> WrappedMonad bs for the normal instance? echoone |
2022-08-29 23:00:11 +0200 | califax | (~califax@user/califx) (Remote host closed the connection) |
2022-08-29 23:00:12 +0200 | <qrpnxz> | i guess what you'd end up doing is liftM2 f as bs, but then you are marrying the Monad, and you start using Monad more than you should be, when all you needed was Applicative |
2022-08-29 23:00:38 +0200 | jinsun__ | (~jinsun@user/jinsun) |
2022-08-29 23:00:38 +0200 | jinsun | Guest5410 |
2022-08-29 23:00:38 +0200 | Guest5410 | (~jinsun@user/jinsun) (Killed (molybdenum.libera.chat (Nickname regained by services))) |
2022-08-29 23:00:38 +0200 | jinsun__ | jinsun |
2022-08-29 23:00:57 +0200 | a6a45081-2b83 | (~aditya@pal-210-106-57.itap.purdue.edu) |
2022-08-29 23:01:35 +0200 | nate4 | (~nate@98.45.169.16) (Ping timeout: 252 seconds) |
2022-08-29 23:01:38 +0200 | <qrpnxz> | as i see it, there's no downside and good upside to Applicative superclass |
2022-08-29 23:01:38 +0200 | <echoone> | > i rather newtype to choose an alternative applicative instance, |
2022-08-29 23:01:39 +0200 | <echoone> | this seems reasonable |
2022-08-29 23:01:40 +0200 | <lambdabot> | <hint>:1:10: error: parse error on input ‘newtype’ |
2022-08-29 23:02:01 +0200 | califax | (~califax@user/califx) |
2022-08-29 23:02:39 +0200 | merijn | (~merijn@c-001-001-007.client.esciencecenter.eduvpn.nl) |
2022-08-29 23:03:03 +0200 | euandreh | (~euandreh@179.214.113.107) (Ping timeout: 252 seconds) |
2022-08-29 23:04:31 +0200 | mima | (mmh@gateway/vpn/airvpn/mima) (Ping timeout: 252 seconds) |
2022-08-29 23:05:16 +0200 | euandreh | (~euandreh@179.214.113.107) |
2022-08-29 23:05:34 +0200 | <echoone> | In a world were Functor and Monad were closer to their real category theory definitions, there would be problems though. |
2022-08-29 23:06:23 +0200 | <qrpnxz> | No comment. |
2022-08-29 23:07:00 +0200 | <echoone> | I've tried it in Agda, it didn't work out. |
2022-08-29 23:08:33 +0200 | merijn | (~merijn@c-001-001-007.client.esciencecenter.eduvpn.nl) (Ping timeout: 268 seconds) |
2022-08-29 23:09:12 +0200 | Pickchea | (~private@user/pickchea) |
2022-08-29 23:10:01 +0200 | ofl^ | (~ofl@c-73-237-184-20.hsd1.ga.comcast.net) (Remote host closed the connection) |
2022-08-29 23:10:25 +0200 | tromp | (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl) (Quit: My iMac has gone to sleep. ZZZzzz…) |
2022-08-29 23:12:13 +0200 | cheater | (~Username@user/cheater) (Ping timeout: 252 seconds) |
2022-08-29 23:12:41 +0200 | cheater | (~Username@user/cheater) |
2022-08-29 23:13:24 +0200 | matthewmosior | (~matthewmo@173.170.253.91) (Ping timeout: 244 seconds) |
2022-08-29 23:14:51 +0200 | chexum | (~quassel@gateway/tor-sasl/chexum) (Quit: No Ping reply in 180 seconds.) |
2022-08-29 23:16:29 +0200 | chexum | (~quassel@gateway/tor-sasl/chexum) |
2022-08-29 23:18:40 +0200 | a6a45081-2b83 | (~aditya@pal-210-106-57.itap.purdue.edu) (Remote host closed the connection) |
2022-08-29 23:18:49 +0200 | <qrpnxz> | consider other class hierarchies for example. I can have all kinds of Foldable instances for types that won't match the one i get from Traversable's foldMapDefault. Does that mean then that Foldable should not be a superclass of Traversable? Hard no again imo. The Functor and fmapDefault could also behave differently if they weren't tied together. |
2022-08-29 23:23:18 +0200 | <echoone> | I'm not sold on that one. |
2022-08-29 23:23:31 +0200 | texasmynsted | (~texasmyns@99.96.221.112) |
2022-08-29 23:24:01 +0200 | tromp | (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl) |
2022-08-29 23:24:16 +0200 | zer0bitz | (~zer0bitz@2001:2003:f748:2000:4dbc:af65:e687:45de) (Ping timeout: 244 seconds) |
2022-08-29 23:24:27 +0200 | <echoone> | I have a weird feeling that Foldable and Traversable or not the right abstractions. |
2022-08-29 23:24:36 +0200 | <echoone> | s/or/are |
2022-08-29 23:25:01 +0200 | geekosaur | points out that <*> and ap need to do the same thing, because of all the legacy Monad-s that backform Applicatives from return and ap |
2022-08-29 23:25:34 +0200 | <Rembane> | echoone: Care to elucidate? |
2022-08-29 23:26:12 +0200 | <echoone> | Well, Foldable doesn't really have proper laws and Traversable's laws are weird. |
2022-08-29 23:26:51 +0200 | <echoone> | It seems that both these classes have to do with lists, ultimately. |
2022-08-29 23:27:05 +0200 | renzhi | (~xp@2607:fa49:6500:b100::c93a) (Ping timeout: 268 seconds) |
2022-08-29 23:29:16 +0200 | matthewmosior | (~matthewmo@173.170.253.91) |
2022-08-29 23:32:09 +0200 | <Rembane> | Those are very good points |
2022-08-29 23:32:11 +0200 | waleee | (~waleee@2001:9b0:213:7200:cc36:a556:b1e8:b340) (Ping timeout: 260 seconds) |
2022-08-29 23:32:23 +0200 | <qrpnxz> | Foldable has laws, they make sure that the different methods are are sane and things that should be equivalent are equivalent |
2022-08-29 23:32:46 +0200 | <qrpnxz> | in fact, what i said above applies to Functor and Monad too. liftM could differ from fmap, but again that's kind of insane |
2022-08-29 23:33:41 +0200 | <geekosaur> | no it can't |
2022-08-29 23:33:42 +0200 | tromp | (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl) (Quit: My iMac has gone to sleep. ZZZzzz…) |
2022-08-29 23:33:50 +0200 | <qrpnxz> | by law they can't, but they could |
2022-08-29 23:33:55 +0200 | <qrpnxz> | in reality |
2022-08-29 23:34:01 +0200 | Tuplanolla | (~Tuplanoll@91-159-69-12.elisa-laajakaista.fi) (Quit: Leaving.) |
2022-08-29 23:34:16 +0200 | <geekosaur> | doesn't a given type have at most one possible Functor? |
2022-08-29 23:34:26 +0200 | eikke | (~NicolasT@user/NicolasT) |
2022-08-29 23:34:40 +0200 | merijn | (~merijn@c-001-001-007.client.esciencecenter.eduvpn.nl) |
2022-08-29 23:34:43 +0200 | jao | (~jao@cpc103048-sgyl39-2-0-cust502.18-2.cable.virginm.net) (Remote host closed the connection) |
2022-08-29 23:34:54 +0200 | <texasmynsted> | wow, I just discovered Haxl. It looks super interesting. (Looks like it has been around 7 years or so) |
2022-08-29 23:35:51 +0200 | <echoone> | If Foldable had pure, we could make it into a wannabe Free monoid type class. |
2022-08-29 23:36:11 +0200 | <qrpnxz> | geekosaur: actually, you might be right. Because Functor can change types, there might only be one way to do it. |
2022-08-29 23:36:46 +0200 | justsomeguy | (~justsomeg@user/justsomeguy) (Quit: WeeChat 3.5) |
2022-08-29 23:38:07 +0200 | <qrpnxz> | SO says so: https://stackoverflow.com/questions/19774904/are-functor-instances-unique |
2022-08-29 23:38:36 +0200 | __monty__ | (~toonn@user/toonn) (Quit: leaving) |
2022-08-29 23:39:02 +0200 | <qrpnxz> | echoone: what is weird about traversable's laws? |
2022-08-29 23:39:22 +0200 | <texasmynsted> | I also did not know about the ApplicativeDo language extension. |
2022-08-29 23:39:26 +0200 | <qrpnxz> | should not traversing twice be the same as traversing once and doing two things? |
2022-08-29 23:39:50 +0200 | <qrpnxz> | if that were not so, that's a quite different abstraction |
2022-08-29 23:39:54 +0200 | jao | (~jao@cpc103048-sgyl39-2-0-cust502.18-2.cable.virginm.net) |
2022-08-29 23:41:17 +0200 | <echoone> | I'm used to structure-preserving laws. But for Traversable, there is no mention about what structure is being preserved. |
2022-08-29 23:41:18 +0200 | <qrpnxz> | the traversable laws have other nice consequences. For example, the number elements cannot change by doing a traversal. |
2022-08-29 23:41:22 +0200 | <qrpnxz> | behaves as you'd expect |
2022-08-29 23:42:40 +0200 | <qrpnxz> | you should check these papers out if you havent: https://hackage.haskell.org/package/base-4.17.0.0/docs/Data-Traversable.html#g:21 |
2022-08-29 23:42:45 +0200 | Midjak | (~Midjak@82.66.147.146) (Quit: This computer has gone to sleep) |
2022-08-29 23:42:51 +0200 | <qrpnxz> | echoone: |
2022-08-29 23:42:59 +0200 | raehik | (~raehik@cpc95906-rdng25-2-0-cust156.15-3.cable.virginm.net) (Ping timeout: 248 seconds) |
2022-08-29 23:43:56 +0200 | <echoone> | "the number elements cannot change by doing a traversal" <-- but here you are thinking of Traverable's as containers. This is OK to start with (in fact containers are the largest class of Traversables that we know of), but there may be more Traversable stuff out there and nobody really knows what structure these Traversable functors are the |
2022-08-29 23:43:57 +0200 | <echoone> | morphisms of. |
2022-08-29 23:44:25 +0200 | nate4 | (~nate@98.45.169.16) |
2022-08-29 23:44:28 +0200 | <echoone> | "you should check these papers out if you havent" <-- Yes, I have read them all already. |
2022-08-29 23:46:10 +0200 | <qrpnxz> | if you could give a concrete example maybe that might help |
2022-08-29 23:48:10 +0200 | <echoone> | A concrete example of structure-preserving laws? |
2022-08-29 23:48:10 +0200 | <qrpnxz> | i wouldn't say that's an example of a traversable as a container, but simply as a traversable/iterator. A traversable has a numbers of targets, 0 or more. namely what you pass to `a -> f b`. I don't need to invoke "container" to talk about that. |
2022-08-29 23:49:10 +0200 | <qrpnxz> | i can have a traversable that doesn't "contain" anything but merely is a generator of `a`s, and then i get another generator of `a`s |
2022-08-29 23:49:32 +0200 | <qrpnxz> | like `IO a` is a generator of `a` and doesn't contain an `a` |
2022-08-29 23:49:33 +0200 | <echoone> | But you don't see that from the laws. |
2022-08-29 23:49:41 +0200 | nate4 | (~nate@98.45.169.16) (Ping timeout: 260 seconds) |
2022-08-29 23:52:54 +0200 | <qrpnxz> | i don't know how to respond to that. Do you wish the docs for Data.Traversable mentoned more consequences of the two basic laws? |
2022-08-29 23:53:36 +0200 | <echoone> | I want a structure, e.g. a category or something that Traversable functors preserve. |
2022-08-29 23:55:54 +0200 | <qrpnxz> | runIdentity . traverse (Identity . f) = fmap f. Does that not evidence the kind of structure that is being preserved? traverse pure = pure, so the structure in the applicative will be the same as the structure outside the applicative. |
2022-08-29 23:57:11 +0200 | <echoone> | Yes, but what is that structure. That is the real question. |
2022-08-29 23:57:16 +0200 | rockymarine | (~rocky@user/rockymarine) (Ping timeout: 260 seconds) |
2022-08-29 23:57:41 +0200 | <qrpnxz> | what is the structure of any given Functor (which every Traversable is)? Depends on the Functor |
2022-08-29 23:57:48 +0200 | michalz | (~michalz@185.246.204.93) (Remote host closed the connection) |
2022-08-29 23:58:19 +0200 | <[Leary]> | I suspect the answer is actually "an algebraic data type". |
2022-08-29 23:58:37 +0200 | <[Leary]> | I've never seen an interesting Traversable instance. |
2022-08-29 23:59:02 +0200 | <qrpnxz> | traversable instance just looks exactly like functor instance inside the applicative idiom |
2022-08-29 23:59:07 +0200 | <qrpnxz> | so yeah me neithe rlol |
2022-08-29 23:59:18 +0200 | <[Leary]> | It's actually less interesting. |
2022-08-29 23:59:39 +0200 | <[Leary]> | You can't have things like (->) r or IO. I suspect your generators wouldn't work out either. |
2022-08-29 23:59:59 +0200 | <echoone> | Containers/polynomial functors are the largest class of Traversables we know of, so they preserve those, but its just a subset. |