2022/08/29

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 +0200pretty_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 +0200zeenk(~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 +0200mikoto-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 +0200segfaultfizzbuzz(~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 +0200kannon(~NK@76.243.126.210)
2022-08-29 00:18:20 +0200kannon(~NK@76.243.126.210) (Read error: Connection reset by peer)
2022-08-29 00:18:28 +0200merijn(~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 +0200bilegeek(~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 +0200zer0bitz(~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 +0200kannon(~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 +0200ten_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 +0200chexum(~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 +0200chexum(~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 +0200justsomeguy(~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 +0200segfaultfizzbuzz(~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 +0200tv(~tv@user/tv) (Quit: derp)
2022-08-29 00:33:25 +0200tv(~tv@user/tv)
2022-08-29 00:33:36 +0200mikoto-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 +0200segfaultfizzbuzz(~segfaultf@23-93-74-212.fiber.dynamic.sonic.net)
2022-08-29 00:51:28 +0200MoC(~moc@user/moc) (Quit: Konversation terminated!)
2022-08-29 00:52:54 +0200merijn(~merijn@c-001-001-007.client.esciencecenter.eduvpn.nl) (Ping timeout: 268 seconds)
2022-08-29 00:55:20 +0200phma(phma@2001:5b0:210d:2468:ee36:3a6:50fd:1e95) (Read error: Connection reset by peer)
2022-08-29 00:55:41 +0200szkl(uid110435@id-110435.uxbridge.irccloud.com)
2022-08-29 01:00:25 +0200kannon(~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 +0200merijn(~merijn@c-001-001-007.client.esciencecenter.eduvpn.nl)
2022-08-29 01:07:04 +0200mjs2600_(~mjs2600@c-24-91-3-49.hsd1.vt.comcast.net) (Ping timeout: 268 seconds)
2022-08-29 01:08:19 +0200wonko(~wjc@2a0e:1c80:2::130) (Ping timeout: 248 seconds)
2022-08-29 01:09:32 +0200merijn(~merijn@c-001-001-007.client.esciencecenter.eduvpn.nl) (Ping timeout: 268 seconds)
2022-08-29 01:09:42 +0200aeka(~aeka@2606:6080:2001:6:e14e:c3f3:8562:6916) (Ping timeout: 244 seconds)
2022-08-29 01:13:23 +0200Guest4172(~chenqisu1@183.217.200.212)
2022-08-29 01:16:31 +0200matthewmosior(~matthewmo@173.170.253.91) (Ping timeout: 255 seconds)
2022-08-29 01:18:08 +0200phma(~phma@host-67-44-208-66.hnremote.net)
2022-08-29 01:21:01 +0200eikke(~NicolasT@user/NicolasT) (Ping timeout: 255 seconds)
2022-08-29 01:21:04 +0200Tuplanolla(~Tuplanoll@91-159-69-12.elisa-laajakaista.fi) (Quit: Leaving.)
2022-08-29 01:22:09 +0200jmorris(uid537181@id-537181.uxbridge.irccloud.com)
2022-08-29 01:25:09 +0200aeka(~aeka@user/hiruji)
2022-08-29 01:30:36 +0200matthewmosior(~matthewmo@173.170.253.91)
2022-08-29 01:34:50 +0200eggplantade(~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net) (Remote host closed the connection)
2022-08-29 01:37:56 +0200shapr(~user@76.73.156.98)
2022-08-29 01:43:11 +0200euandreh(~euandreh@179.214.113.107) (Ping timeout: 260 seconds)
2022-08-29 01:44:52 +0200euandreh(~euandreh@179.214.113.107)
2022-08-29 01:47:37 +0200themc47(~mc47@xmonad/TheMC47) (Remote host closed the connection)
2022-08-29 01:47:55 +0200geekosaur(~geekosaur@xmonad/geekosaur) (Quit: Leaving)
2022-08-29 01:48:06 +0200eggplantade(~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net)
2022-08-29 01:48:30 +0200asd1123(~asd112345@2001:999:250:841b:41b5:1bba:4b73:1c6a)
2022-08-29 01:49:57 +0200asd1123(~asd112345@2001:999:250:841b:41b5:1bba:4b73:1c6a) (Quit: Leaving)
2022-08-29 01:50:46 +0200segfaultfizzbuzz(~segfaultf@23-93-74-212.fiber.dynamic.sonic.net) (Ping timeout: 260 seconds)
2022-08-29 01:51:22 +0200justsomeguy(~justsomeg@user/justsomeguy)
2022-08-29 01:52:00 +0200jero98772(~jero98772@2800:484:1d80:d8ce:efcc:cbb3:7f2a:6dff)
2022-08-29 01:54:10 +0200segfaultfizzbuzz(~segfaultf@23-93-74-212.fiber.dynamic.sonic.net)
2022-08-29 01:58:19 +0200talismanick(~talismani@c-67-174-251-163.hsd1.ca.comcast.net)
2022-08-29 02:01:00 +0200geekosaur(~geekosaur@xmonad/geekosaur)
2022-08-29 02:05:10 +0200merijn(~merijn@c-001-001-007.client.esciencecenter.eduvpn.nl)
2022-08-29 02:11:11 +0200bontaq`(~user@ool-45779fe5.dyn.optonline.net) (Ping timeout: 260 seconds)
2022-08-29 02:11:59 +0200nate4(~nate@98.45.169.16) (Ping timeout: 252 seconds)
2022-08-29 02:12:41 +0200nate4(~nate@98.45.169.16)
2022-08-29 02:15:55 +0200kannon(~NK@135-180-47-54.fiber.dynamic.sonic.net)
2022-08-29 02:16:39 +0200Polo(~Gambino@user/polo)
2022-08-29 02:20:26 +0200kannon(~NK@135-180-47-54.fiber.dynamic.sonic.net) (Ping timeout: 255 seconds)
2022-08-29 02:27:48 +0200waleee(~waleee@2001:9b0:213:7200:cc36:a556:b1e8:b340) (Quit: WeeChat 3.6)
2022-08-29 02:28:24 +0200waleee(~waleee@2001:9b0:213:7200:cc36:a556:b1e8:b340)
2022-08-29 02:32:18 +0200Polo(~Gambino@user/polo) (Ping timeout: 240 seconds)
2022-08-29 02:33:56 +0200matthewmosior(~matthewmo@173.170.253.91) (Ping timeout: 260 seconds)
2022-08-29 02:35:09 +0200lottaquestions_(~nick@2607:fa49:503e:7100:8f8a:99be:1f79:fe99) (Remote host closed the connection)
2022-08-29 02:36:02 +0200nilradical(~nilradica@user/naso)
2022-08-29 02:44:28 +0200mvk(~mvk@2607:fea8:5ce3:8500::a1ec)
2022-08-29 02:45:44 +0200segfaultfizzbuzz(~segfaultf@23-93-74-212.fiber.dynamic.sonic.net) (Ping timeout: 268 seconds)
2022-08-29 02:46:13 +0200FurorColere
2022-08-29 02:46:32 +0200matthewmosior(~matthewmo@173.170.253.91)
2022-08-29 02:47:52 +0200Colere(~colere@about/linux/staff/sauvin) (Remote host closed the connection)
2022-08-29 02:47:52 +0200justsomeguy(~justsomeg@user/justsomeguy) (Ping timeout: 244 seconds)
2022-08-29 02:49:23 +0200gurkenglas(~gurkengla@p548ac72e.dip0.t-ipconnect.de) (Ping timeout: 252 seconds)
2022-08-29 02:50:31 +0200kannon(~NK@135-180-47-54.fiber.dynamic.sonic.net)
2022-08-29 02:50:34 +0200segfaultfizzbuzz(~segfaultf@23-93-74-212.fiber.dynamic.sonic.net)
2022-08-29 02:55:06 +0200kannon(~NK@135-180-47-54.fiber.dynamic.sonic.net) (Ping timeout: 244 seconds)
2022-08-29 02:58:55 +0200mikoto-chan(~mikoto-ch@164.5.249.78) (Ping timeout: 252 seconds)
2022-08-29 02:58:57 +0200zxx7529(~Thunderbi@user/zxx7529)
2022-08-29 03:02:48 +0200nilradical(~nilradica@user/naso) (Remote host closed the connection)
2022-08-29 03:03:37 +0200nilradical(~nilradica@user/naso)
2022-08-29 03:06:15 +0200beteigeuze(~Thunderbi@bl11-28-222.dsl.telepac.pt) (Ping timeout: 252 seconds)
2022-08-29 03:07:57 +0200kannon(~NK@135-180-47-54.fiber.dynamic.sonic.net)
2022-08-29 03:08:20 +0200bilegeek_(~bilegeek@105.sub-174-209-45.myvzw.com)
2022-08-29 03:10:37 +0200bilegeek(~bilegeek@2600:1008:b044:1225:6505:fd25:5d3:3087) (Ping timeout: 244 seconds)
2022-08-29 03:10:43 +0200albet70(~xxx@2400:8902::f03c:92ff:fe60:98d8) (Remote host closed the connection)
2022-08-29 03:12:26 +0200kannon(~NK@135-180-47-54.fiber.dynamic.sonic.net) (Ping timeout: 260 seconds)
2022-08-29 03:13:15 +0200kannon(~NK@135-180-47-54.fiber.dynamic.sonic.net)
2022-08-29 03:16:51 +0200albet70(~xxx@2400:8902::f03c:92ff:fe60:98d8)
2022-08-29 03:17:35 +0200kannon(~NK@135-180-47-54.fiber.dynamic.sonic.net) (Ping timeout: 255 seconds)
2022-08-29 03:22:05 +0200waleee(~waleee@2001:9b0:213:7200:cc36:a556:b1e8:b340) (Ping timeout: 255 seconds)
2022-08-29 03:23:58 +0200notzmv(~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 +0200xff0x(~xff0x@ai071162.d.east.v6connect.net) (Ping timeout: 268 seconds)
2022-08-29 03:25:58 +0200segfaultfizzbuzz(~segfaultf@23-93-74-212.fiber.dynamic.sonic.net) (Quit: segfaultfizzbuzz)
2022-08-29 03:26:12 +0200segfaultfizzbuzz(~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 +0200mikoto-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 +0200matthewmosior(~matthewmo@173.170.253.91) (Remote host closed the connection)
2022-08-29 03:36:38 +0200matthewmosior(~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 +0200merijn(~merijn@c-001-001-007.client.esciencecenter.eduvpn.nl) (Ping timeout: 252 seconds)
2022-08-29 03:42:01 +0200matthewmosior(~matthewmo@173.170.253.91) (Remote host closed the connection)
2022-08-29 03:42:55 +0200segfaultfizzbuzz(~segfaultf@23-93-74-212.fiber.dynamic.sonic.net) (Ping timeout: 252 seconds)
2022-08-29 03:45:07 +0200raehik(~raehik@cpc95906-rdng25-2-0-cust156.15-3.cable.virginm.net) (Ping timeout: 252 seconds)
2022-08-29 03:46:09 +0200segfaultfizzbuzz(~segfaultf@23-93-74-212.fiber.dynamic.sonic.net)
2022-08-29 03:47:06 +0200matthewmosior(~matthewmo@173.170.253.91)
2022-08-29 03:47:30 +0200frost(~frost@user/frost)
2022-08-29 03:49:17 +0200kannon(~NK@135-180-47-54.fiber.dynamic.sonic.net)
2022-08-29 03:51:06 +0200segfaultfizzbuzz(~segfaultf@23-93-74-212.fiber.dynamic.sonic.net) (Ping timeout: 268 seconds)
2022-08-29 03:51:25 +0200matthewmosior(~matthewmo@173.170.253.91) (Ping timeout: 244 seconds)
2022-08-29 03:53:43 +0200matthewmosior(~matthewmo@173.170.253.91)
2022-08-29 03:53:51 +0200kannon(~NK@135-180-47-54.fiber.dynamic.sonic.net) (Ping timeout: 260 seconds)
2022-08-29 03:54:10 +0200nate4(~nate@98.45.169.16) (Ping timeout: 268 seconds)
2022-08-29 03:54:49 +0200merijn(~merijn@c-001-001-007.client.esciencecenter.eduvpn.nl)
2022-08-29 03:58:08 +0200matthewmosior(~matthewmo@173.170.253.91) (Ping timeout: 244 seconds)
2022-08-29 03:59:06 +0200segfaultfizzbuzz(~segfaultf@23-93-74-212.fiber.dynamic.sonic.net)
2022-08-29 04:01:30 +0200matthewmosior(~matthewmo@173.170.253.91)
2022-08-29 04:02:58 +0200lemonsnicks(~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 +0200mjs2600(~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 +0200xff0x(~xff0x@125x103x176x34.ap125.ftth.ucom.ne.jp)
2022-08-29 04:08:25 +0200eggplantade(~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net) (Remote host closed the connection)
2022-08-29 04:09:29 +0200Colere(~colere@about/linux/staff/sauvin)
2022-08-29 04:11:21 +0200td_(~td@94.134.91.78) (Ping timeout: 260 seconds)
2022-08-29 04:13:08 +0200td_(~td@94.134.91.130)
2022-08-29 04:17:01 +0200segfaultfizzbuzz(~segfaultf@23-93-74-212.fiber.dynamic.sonic.net) (Ping timeout: 252 seconds)
2022-08-29 04:18:26 +0200kannon(~NK@135-180-47-54.fiber.dynamic.sonic.net)
2022-08-29 04:19:09 +0200jmorris(uid537181@id-537181.uxbridge.irccloud.com) (Quit: Connection closed for inactivity)
2022-08-29 04:19:47 +0200nate4(~nate@98.45.169.16)
2022-08-29 04:20:51 +0200lemonsnicks(~lemonsnic@cpc159519-perr18-2-0-cust114.19-1.cable.virginm.net)
2022-08-29 04:22:56 +0200kannon(~NK@135-180-47-54.fiber.dynamic.sonic.net) (Ping timeout: 244 seconds)
2022-08-29 04:23:37 +0200segfaultfizzbuzz(~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 +0200kimjetwav(~user@2607:fea8:235e:b600:2558:8d7b:38b4:84a)
2022-08-29 04:26:51 +0200jmorris(uid537181@id-537181.uxbridge.irccloud.com)
2022-08-29 04:28:51 +0200notzmv(~zmv@user/notzmv)
2022-08-29 04:29:26 +0200merijn(~merijn@c-001-001-007.client.esciencecenter.eduvpn.nl) (Ping timeout: 260 seconds)
2022-08-29 04:30:16 +0200slaydr(~slaydr@173.239.197.75) (Remote host closed the connection)
2022-08-29 04:30:34 +0200nate4(~nate@98.45.169.16) (Ping timeout: 268 seconds)
2022-08-29 04:36:22 +0200frost(~frost@user/frost) (Quit: Client closed)
2022-08-29 04:38:13 +0200eggplantade(~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net)
2022-08-29 04:39:12 +0200notzmv(~zmv@user/notzmv) (Ping timeout: 268 seconds)
2022-08-29 04:43:12 +0200terrorjack(~terrorjac@2a01:4f8:1c1e:509a::1) (Quit: The Lounge - https://thelounge.chat)
2022-08-29 04:43:33 +0200kimjetwav(~user@2607:fea8:235e:b600:2558:8d7b:38b4:84a) (Remote host closed the connection)
2022-08-29 04:43:51 +0200kimjetwav(~user@2607:fea8:235e:b600:bb37:18ea:2f8c:d5ac)
2022-08-29 04:44:11 +0200terrorjack(~terrorjac@2a01:4f8:1c1e:509a::1)
2022-08-29 04:46:36 +0200segfaultfizzbuzz(~segfaultf@23-93-74-212.fiber.dynamic.sonic.net) (Ping timeout: 268 seconds)
2022-08-29 04:48:25 +0200kannon(~NK@135-180-47-54.fiber.dynamic.sonic.net)
2022-08-29 04:50:07 +0200notzmv(~zmv@user/notzmv)
2022-08-29 04:52:54 +0200kannon(~NK@135-180-47-54.fiber.dynamic.sonic.net) (Ping timeout: 244 seconds)
2022-08-29 04:57:16 +0200FinnElija(~finn_elij@user/finn-elija/x-0085643) (Killed (NickServ (Forcing logout FinnElija -> finn_elija)))
2022-08-29 04:57:16 +0200finn_elija(~finn_elij@user/finn-elija/x-0085643)
2022-08-29 04:57:16 +0200finn_elijaFinnElija
2022-08-29 05:00:50 +0200bitdex(~bitdex@gateway/tor-sasl/bitdex) (Ping timeout: 268 seconds)
2022-08-29 05:01:32 +0200stiell(~stiell@gateway/tor-sasl/stiell) (Remote host closed the connection)
2022-08-29 05:02:07 +0200stiell(~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 +0200shapr(~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 +0200noteness(~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 +0200bitdex(~bitdex@gateway/tor-sasl/bitdex)
2022-08-29 05:14:04 +0200segfaultfizzbuzz(~segfaultf@23-93-74-212.fiber.dynamic.sonic.net)
2022-08-29 05:17:03 +0200instantaphex(~jb@c-73-171-252-84.hsd1.fl.comcast.net)
2022-08-29 05:20:42 +0200kannon(~NK@135-180-47-54.fiber.dynamic.sonic.net)
2022-08-29 05:21:21 +0200segfaultfizzbuzz(~segfaultf@23-93-74-212.fiber.dynamic.sonic.net) (Ping timeout: 260 seconds)
2022-08-29 05:22:04 +0200segfaultfizzbuzz(~segfaultf@23-93-74-212.fiber.dynamic.sonic.net)
2022-08-29 05:25:23 +0200kannon(~NK@135-180-47-54.fiber.dynamic.sonic.net) (Ping timeout: 255 seconds)
2022-08-29 05:25:29 +0200merijn(~merijn@c-001-001-007.client.esciencecenter.eduvpn.nl)
2022-08-29 05:26:28 +0200jero98772(~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 +0200jakalx(~jakalx@base.jakalx.net) (Error from remote client)
2022-08-29 05:32:26 +0200sympt(~sympt@user/sympt) (Ping timeout: 260 seconds)
2022-08-29 05:35:49 +0200jakalx(~jakalx@base.jakalx.net)
2022-08-29 05:37:41 +0200instantaphex(~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 +0200kimjetwav(~user@2607:fea8:235e:b600:bb37:18ea:2f8c:d5ac) (Read error: Connection reset by peer)
2022-08-29 05:48:15 +0200kimjetwav(~user@2607:fea8:235e:b600:bb37:18ea:2f8c:d5ac)
2022-08-29 05:48:25 +0200kannon(~NK@135-180-47-54.fiber.dynamic.sonic.net)
2022-08-29 05:57:29 +0200kenran(~kenran@200116b82b0e3000ec071ac97606b242.dip.versatel-1u1.de)
2022-08-29 05:58:12 +0200kenran(~kenran@200116b82b0e3000ec071ac97606b242.dip.versatel-1u1.de) (Client Quit)
2022-08-29 05:59:57 +0200merijn(~merijn@c-001-001-007.client.esciencecenter.eduvpn.nl) (Ping timeout: 268 seconds)
2022-08-29 06:01:08 +0200jmdaemon(~jmdaemon@user/jmdaemon)
2022-08-29 06:02:28 +0200jmdaemon(~jmdaemon@user/jmdaemon) (Remote host closed the connection)
2022-08-29 06:04:18 +0200ddellacosta(~ddellacos@143.244.47.77) (Ping timeout: 268 seconds)
2022-08-29 06:08:57 +0200nilradical(~nilradica@user/naso) ()
2022-08-29 06:10:17 +0200FinnElija(~finn_elij@user/finn-elija/x-0085643) (Remote host closed the connection)
2022-08-29 06:10:44 +0200FinnElija(~finn_elij@user/finn-elija/x-0085643)
2022-08-29 06:12:11 +0200FinnElija(~finn_elij@user/finn-elija/x-0085643) (*.net *.split)
2022-08-29 06:12:11 +0200bitdex(~bitdex@gateway/tor-sasl/bitdex) (*.net *.split)
2022-08-29 06:12:11 +0200stiell(~stiell@gateway/tor-sasl/stiell) (*.net *.split)
2022-08-29 06:12:11 +0200chexum(~quassel@gateway/tor-sasl/chexum) (*.net *.split)
2022-08-29 06:12:11 +0200azimut(~azimut@gateway/tor-sasl/azimut) (*.net *.split)
2022-08-29 06:12:11 +0200ChaiTRex(~ChaiTRex@user/chaitrex) (*.net *.split)
2022-08-29 06:12:11 +0200califax(~califax@user/califx) (*.net *.split)
2022-08-29 06:12:11 +0200jpds(~jpds@gateway/tor-sasl/jpds) (*.net *.split)
2022-08-29 06:12:11 +0200adanwan(~adanwan@gateway/tor-sasl/adanwan) (*.net *.split)
2022-08-29 06:13:51 +0200jpds(~jpds@gateway/tor-sasl/jpds)
2022-08-29 06:13:59 +0200adanwan(~adanwan@gateway/tor-sasl/adanwan)
2022-08-29 06:14:31 +0200bitdex(~bitdex@gateway/tor-sasl/bitdex)
2022-08-29 06:14:42 +0200stiell(~stiell@gateway/tor-sasl/stiell)
2022-08-29 06:14:54 +0200ChaiTRex(~ChaiTRex@user/chaitrex)
2022-08-29 06:15:04 +0200azimut(~azimut@gateway/tor-sasl/azimut)
2022-08-29 06:15:15 +0200FinnElija(~finn_elij@user/finn-elija/x-0085643)
2022-08-29 06:15:27 +0200califax(~califax@user/califx)
2022-08-29 06:16:27 +0200jmdaemon(~jmdaemon@user/jmdaemon)
2022-08-29 06:16:33 +0200ystael(~ystael@user/ystael) (Ping timeout: 252 seconds)
2022-08-29 06:16:36 +0200machinedgod(~machinedg@d198-53-218-113.abhsia.telus.net) (Ping timeout: 268 seconds)
2022-08-29 06:16:47 +0200chexum(~quassel@gateway/tor-sasl/chexum)
2022-08-29 06:17:58 +0200adanwan(~adanwan@gateway/tor-sasl/adanwan) (Remote host closed the connection)
2022-08-29 06:18:12 +0200adanwan(~adanwan@gateway/tor-sasl/adanwan)
2022-08-29 06:18:19 +0200king_gs(~Thunderbi@2806:103e:29:da7a:1f74:531c:dec2:7aec)
2022-08-29 06:21:26 +0200takuan(~takuan@178-116-218-225.access.telenet.be)
2022-08-29 06:27:02 +0200nate4(~nate@98.45.169.16)
2022-08-29 06:27:51 +0200matthewmosior(~matthewmo@173.170.253.91) (Ping timeout: 260 seconds)
2022-08-29 06:30:07 +0200mbuf(~Shakthi@122.165.55.71)
2022-08-29 06:31:51 +0200azimut(~azimut@gateway/tor-sasl/azimut) (Ping timeout: 258 seconds)
2022-08-29 06:32:01 +0200nate4(~nate@98.45.169.16) (Ping timeout: 268 seconds)
2022-08-29 06:33:39 +0200azimut(~azimut@gateway/tor-sasl/azimut)
2022-08-29 06:36:36 +0200zxx7529(~Thunderbi@user/zxx7529) (Remote host closed the connection)
2022-08-29 06:36:49 +0200zxx7529(~Thunderbi@user/zxx7529)
2022-08-29 06:46:08 +0200hays(~rootveget@fsf/member/hays) (Remote host closed the connection)
2022-08-29 06:47:38 +0200matthewmosior(~matthewmo@173.170.253.91)
2022-08-29 06:48:11 +0200kimjetwav(~user@2607:fea8:235e:b600:bb37:18ea:2f8c:d5ac) (Ping timeout: 255 seconds)
2022-08-29 06:48:54 +0200merijn(~merijn@c-001-001-007.client.esciencecenter.eduvpn.nl)
2022-08-29 06:49:08 +0200hays(rootvegeta@fsf/member/hays)
2022-08-29 06:51:44 +0200matthewmosior(~matthewmo@173.170.253.91) (Ping timeout: 244 seconds)
2022-08-29 06:53:00 +0200titibandit(~titibandi@xdsl-87-78-66-58.nc.de)
2022-08-29 06:54:06 +0200merijn(~merijn@c-001-001-007.client.esciencecenter.eduvpn.nl) (Ping timeout: 260 seconds)
2022-08-29 06:54:15 +0200jao(~jao@cpc103048-sgyl39-2-0-cust502.18-2.cable.virginm.net) (Ping timeout: 268 seconds)
2022-08-29 07:05:43 +0200matthewmosior(~matthewmo@173.170.253.91)
2022-08-29 07:06:35 +0200mmarusea1ph2(~mihai@198.199.98.239) (Quit: So long and thanks for all the lambdas)
2022-08-29 07:06:51 +0200mmaruseacph2(~mihai@198.199.98.239)
2022-08-29 07:07:33 +0200merijn(~merijn@c-001-001-007.client.esciencecenter.eduvpn.nl)
2022-08-29 07:08:14 +0200king_gs(~Thunderbi@2806:103e:29:da7a:1f74:531c:dec2:7aec) (Remote host closed the connection)
2022-08-29 07:08:32 +0200king_gs(~Thunderbi@2806:103e:29:da7a:1f74:531c:dec2:7aec)
2022-08-29 07:11:43 +0200bitdex(~bitdex@gateway/tor-sasl/bitdex) (Ping timeout: 258 seconds)
2022-08-29 07:12:52 +0200adanwan(~adanwan@gateway/tor-sasl/adanwan) (Ping timeout: 258 seconds)
2022-08-29 07:13:59 +0200adanwan(~adanwan@gateway/tor-sasl/adanwan)
2022-08-29 07:14:01 +0200FinnElija(~finn_elij@user/finn-elija/x-0085643) (Ping timeout: 258 seconds)
2022-08-29 07:14:24 +0200chexum(~quassel@gateway/tor-sasl/chexum) (Ping timeout: 258 seconds)
2022-08-29 07:15:07 +0200FinnElija(~finn_elij@user/finn-elija/x-0085643)
2022-08-29 07:15:37 +0200chexum(~quassel@gateway/tor-sasl/chexum)
2022-08-29 07:16:42 +0200bitdex(~bitdex@gateway/tor-sasl/bitdex)
2022-08-29 07:18:18 +0200Guest4172(~chenqisu1@183.217.200.212) (Ping timeout: 268 seconds)
2022-08-29 07:31:21 +0200segfaultfizzbuzz(~segfaultf@23-93-74-212.fiber.dynamic.sonic.net) (Ping timeout: 252 seconds)
2022-08-29 07:35:25 +0200zeenk(~zeenk@2a02:2f04:a311:2d00:6865:d863:4c93:799f)
2022-08-29 07:40:46 +0200merijn(~merijn@c-001-001-007.client.esciencecenter.eduvpn.nl) (Ping timeout: 260 seconds)
2022-08-29 07:42:21 +0200mikoto-chan(~mikoto-ch@164.5.249.78) (Ping timeout: 252 seconds)
2022-08-29 07:49:47 +0200segfaultfizzbuzz(~segfaultf@23-93-74-212.fiber.dynamic.sonic.net)
2022-08-29 07:53:00 +0200shriekingnoise(~shrieking@186.137.167.202) (Quit: Quit)
2022-08-29 07:57:01 +0200zxx7529(~Thunderbi@user/zxx7529) (Ping timeout: 252 seconds)
2022-08-29 08:06:08 +0200kannon(~NK@135-180-47-54.fiber.dynamic.sonic.net) (Ping timeout: 244 seconds)
2022-08-29 08:08:55 +0200michalz(~michalz@185.246.204.93)
2022-08-29 08:10:05 +0200nilradical(~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 +0200king_gs(~Thunderbi@2806:103e:29:da7a:1f74:531c:dec2:7aec) (Ping timeout: 268 seconds)
2022-08-29 08:28:23 +0200paolino(~paolo@5.157.115.53)
2022-08-29 08:28:27 +0200king_gs(~Thunderbi@187.201.216.244)
2022-08-29 08:30:28 +0200zxx7529(~Thunderbi@user/zxx7529)
2022-08-29 08:32:34 +0200 <sm> 🐱 | 🐶
2022-08-29 08:32:37 +0200bilegeek_(~bilegeek@105.sub-174-209-45.myvzw.com) (Quit: Leaving)
2022-08-29 08:33:51 +0200dcoutts_(~duncan@host86-151-9-109.range86-151.btcentralplus.com) (Ping timeout: 260 seconds)
2022-08-29 08:35:22 +0200coot(~coot@213.134.176.158)
2022-08-29 08:37:31 +0200merijn(~merijn@c-001-001-007.client.esciencecenter.eduvpn.nl)
2022-08-29 08:39:06 +0200jargon(~jargon@184.101.185.66) (Remote host closed the connection)
2022-08-29 08:39:38 +0200alternateved(~user@staticline-31-183-146-203.toya.net.pl)
2022-08-29 08:39:49 +0200paolino(~paolo@5.157.115.53) (Quit: Leaving)
2022-08-29 08:40:11 +0200Sgeo(~Sgeo@user/sgeo) (Read error: Connection reset by peer)
2022-08-29 08:43:38 +0200ccapndave(~ccapndave@xcpe-194-230-18-108.cgn.res.adslplus.ch)
2022-08-29 08:44:32 +0200ccapndave(~ccapndave@xcpe-194-230-18-108.cgn.res.adslplus.ch) (Client Quit)
2022-08-29 08:46:46 +0200raym(~raym@user/raym)
2022-08-29 08:47:43 +0200nate4(~nate@98.45.169.16)
2022-08-29 08:48:20 +0200raym_(~raym@user/raym) (Ping timeout: 268 seconds)
2022-08-29 08:51:25 +0200segfaultfizzbuzz(~segfaultf@23-93-74-212.fiber.dynamic.sonic.net) (Ping timeout: 268 seconds)
2022-08-29 08:51:37 +0200titibandit(~titibandi@xdsl-87-78-66-58.nc.de) (Remote host closed the connection)
2022-08-29 08:52:31 +0200nate4(~nate@98.45.169.16) (Ping timeout: 260 seconds)
2022-08-29 08:53:34 +0200lortabac(~lortabac@2a01:e0a:541:b8f0:e726:4d7c:52f8:911e)
2022-08-29 08:55:05 +0200nilradical(~nilradica@user/naso) (Remote host closed the connection)
2022-08-29 08:55:16 +0200jargon(~jargon@184.101.185.66)
2022-08-29 08:55:51 +0200nilradical(~nilradica@user/naso)
2022-08-29 08:56:59 +0200nilradical(~nilradica@user/naso) (Remote host closed the connection)
2022-08-29 08:58:11 +0200nilradical(~nilradica@user/naso)
2022-08-29 08:58:28 +0200chele(~chele@user/chele)
2022-08-29 09:00:26 +0200Pickchea(~private@user/pickchea)
2022-08-29 09:03:01 +0200nilradical(~nilradica@user/naso) (Ping timeout: 252 seconds)
2022-08-29 09:08:51 +0200kadobanana(~mud@user/kadoban) (Ping timeout: 260 seconds)
2022-08-29 09:12:23 +0200merijn(~merijn@c-001-001-007.client.esciencecenter.eduvpn.nl) (Ping timeout: 268 seconds)
2022-08-29 09:13:54 +0200kadobanana(~mud@user/kadoban)
2022-08-29 09:16:40 +0200king_gs1(~Thunderbi@2806:103e:29:da7a:1f74:531c:dec2:7aec)
2022-08-29 09:17:01 +0200king_gs(~Thunderbi@187.201.216.244) (Read error: Connection reset by peer)
2022-08-29 09:17:01 +0200king_gs1king_gs
2022-08-29 09:17:45 +0200ccapndave(~ccapndave@xcpe-194-230-18-108.cgn.res.adslplus.ch)
2022-08-29 09:22:36 +0200segfaultfizzbuzz(~segfaultf@23-93-74-212.fiber.dynamic.sonic.net)
2022-08-29 09:25:57 +0200yvan-sraka(~yvan-srak@2a02:2788:224:71c:a4a5:6c05:6213:1707)
2022-08-29 09:26:14 +0200ccapndave(~ccapndave@xcpe-194-230-18-108.cgn.res.adslplus.ch) (Quit: Textual IRC Client: www.textualapp.com)
2022-08-29 09:32:51 +0200PiDelport(uid25146@id-25146.lymington.irccloud.com)
2022-08-29 09:33:10 +0200bitdex(~bitdex@gateway/tor-sasl/bitdex) (Ping timeout: 258 seconds)
2022-08-29 09:33:54 +0200merijn(~merijn@c-001-001-007.client.esciencecenter.eduvpn.nl)
2022-08-29 09:33:54 +0200bitdex(~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 +0200yvan-sraka(~yvan-srak@2a02:2788:224:71c:a4a5:6c05:6213:1707) (Remote host closed the connection)
2022-08-29 09:38:32 +0200yvan-sraka(~yvan-srak@2a02:2788:224:71c:53e3:703a:d1b3:d4c8)
2022-08-29 09:42:19 +0200ccntrq(~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 +0200jmdaemon(~jmdaemon@user/jmdaemon) (Quit: ZNC 1.8.2 - https://znc.in)
2022-08-29 09:48:02 +0200yvan-sraka(~yvan-srak@2a02:2788:224:71c:53e3:703a:d1b3:d4c8) (Remote host closed the connection)
2022-08-29 09:48:14 +0200kuribas(~user@ptr-17d51epjyeoyuptwhep.18120a2.ip6.access.telenet.be)
2022-08-29 09:48:20 +0200yvan-sraka(~yvan-srak@2a02:2788:224:71c:dd72:669f:e21b:366)
2022-08-29 09:49:13 +0200jmdaemon(~jmdaemon@user/jmdaemon)
2022-08-29 09:52:55 +0200jmdaemon(~jmdaemon@user/jmdaemon) (Client Quit)
2022-08-29 09:55:12 +0200jmdaemon(~jmdaemon@user/jmdaemon)
2022-08-29 09:56:17 +0200tzh(~tzh@c-24-21-73-154.hsd1.or.comcast.net) (Quit: zzz)
2022-08-29 09:57:27 +0200machinedgod(~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 +0200tromp(~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl)
2022-08-29 09:58:32 +0200yvan-sraka(~yvan-srak@2a02:2788:224:71c:dd72:669f:e21b:366) (Remote host closed the connection)
2022-08-29 09:58:51 +0200yvan-sraka(~yvan-srak@2a02:2788:224:71c:5fb1:bb64:a2bf:5534)
2022-08-29 10:07:35 +0200jargon(~jargon@184.101.185.66) (Remote host closed the connection)
2022-08-29 10:10:36 +0200yvan-sraka(~yvan-srak@2a02:2788:224:71c:5fb1:bb64:a2bf:5534) (Remote host closed the connection)
2022-08-29 10:10:54 +0200yvan-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 +0200king_gs(~Thunderbi@2806:103e:29:da7a:1f74:531c:dec2:7aec) (Quit: king_gs)
2022-08-29 10:19:28 +0200zaquest(~notzaques@5.130.79.72) (Remote host closed the connection)
2022-08-29 10:20:01 +0200matthewmosior(~matthewmo@173.170.253.91) (Ping timeout: 260 seconds)
2022-08-29 10:25:10 +0200coot(~coot@213.134.176.158) (Quit: coot)
2022-08-29 10:27:21 +0200segfaultfizzbuzz(~segfaultf@23-93-74-212.fiber.dynamic.sonic.net) (Ping timeout: 252 seconds)
2022-08-29 10:27:58 +0200Guest|65(~Guest|65@178.173.97.240)
2022-08-29 10:29:17 +0200Guest|65(~Guest|65@178.173.97.240) (Client Quit)
2022-08-29 10:29:48 +0200zaquest(~notzaques@5.130.79.72)
2022-08-29 10:29:58 +0200yvan-sraka(~yvan-srak@2a02:2788:224:71c:9fa:958a:9fe4:dc8e) (Remote host closed the connection)
2022-08-29 10:30:17 +0200yvan-sraka(~yvan-srak@2a02:2788:224:71c:9fa:958a:9fe4:dc8e)
2022-08-29 10:30:53 +0200benin0(~benin@183.82.205.66)
2022-08-29 10:33:13 +0200matthewmosior(~matthewmo@173.170.253.91)
2022-08-29 10:40:56 +0200yvan-sraka(~yvan-srak@2a02:2788:224:71c:9fa:958a:9fe4:dc8e) (Remote host closed the connection)
2022-08-29 10:41:14 +0200yvan-sraka(~yvan-srak@2a02:2788:224:71c:d850:9e35:a08d:9c6a)
2022-08-29 10:47:32 +0200frost(~frost@user/frost)
2022-08-29 10:49:09 +0200jmorris(uid537181@id-537181.uxbridge.irccloud.com) (Quit: Connection closed for inactivity)
2022-08-29 10:49:56 +0200dcoutts(~duncan@host86-175-248-103.range86-175.btcentralplus.com)
2022-08-29 10:51:09 +0200jmdaemon(~jmdaemon@user/jmdaemon) (Quit: ZNC 1.8.2 - https://znc.in)
2022-08-29 10:51:11 +0200talismanick(~talismani@c-67-174-251-163.hsd1.ca.comcast.net) (Ping timeout: 252 seconds)
2022-08-29 10:55:10 +0200wonko(~wjc@2a0e:1c80:2::130)
2022-08-29 10:56:12 +0200coot(~coot@213.134.176.158)
2022-08-29 10:57:08 +0200Pickchea(~private@user/pickchea) (Quit: Leaving)
2022-08-29 10:58:19 +0200azimut(~azimut@gateway/tor-sasl/azimut) (Remote host closed the connection)
2022-08-29 10:58:47 +0200azimut(~azimut@gateway/tor-sasl/azimut)
2022-08-29 10:59:39 +0200segfaultfizzbuzz(~segfaultf@23-93-74-212.fiber.dynamic.sonic.net)
2022-08-29 11:05:16 +0200gurkenglas(~gurkengla@p548ac72e.dip0.t-ipconnect.de)
2022-08-29 11:09:42 +0200luffy(~chenqisu1@183.217.200.212)
2022-08-29 11:11:46 +0200coot(~coot@213.134.176.158) (Remote host closed the connection)
2022-08-29 11:12:10 +0200coot(~coot@2a02:a310:e241:1b00:ec1a:e9df:79ac:66ba)
2022-08-29 11:12:27 +0200yvan-sraka(~yvan-srak@2a02:2788:224:71c:d850:9e35:a08d:9c6a) (Remote host closed the connection)
2022-08-29 11:12:46 +0200yvan-sraka(~yvan-srak@2a02:2788:224:71c:4f47:fa29:b160:ee6d)
2022-08-29 11:21:17 +0200eggplantade(~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net) (Remote host closed the connection)
2022-08-29 11:24:21 +0200gurkenglas(~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 +0200nilradical(~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 +0200yvan-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 +0200acidjnk(~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 +0200toeffel(~toeffel@user/toeffel)
2022-08-29 12:02:11 +0200kannon(~NK@135-180-47-54.fiber.dynamic.sonic.net)
2022-08-29 12:02:41 +0200segfaultfizzbuzz(~segfaultf@23-93-74-212.fiber.dynamic.sonic.net) (Ping timeout: 260 seconds)
2022-08-29 12:03:17 +0200eikke(~NicolasT@user/NicolasT)
2022-08-29 12:04:11 +0200nilradical(~nilradica@user/naso) (Remote host closed the connection)
2022-08-29 12:04:31 +0200zxx7529(~Thunderbi@user/zxx7529) (Ping timeout: 252 seconds)
2022-08-29 12:04:58 +0200chexum(~quassel@gateway/tor-sasl/chexum) (Ping timeout: 258 seconds)
2022-08-29 12:04:58 +0200ChaiTRex(~ChaiTRex@user/chaitrex) (Ping timeout: 258 seconds)
2022-08-29 12:04:59 +0200nilradical(~nilradica@user/naso)
2022-08-29 12:06:11 +0200chexum(~quassel@gateway/tor-sasl/chexum)
2022-08-29 12:06:23 +0200kannon(~NK@135-180-47-54.fiber.dynamic.sonic.net) (Ping timeout: 244 seconds)
2022-08-29 12:07:09 +0200ChaiTRex(~ChaiTRex@user/chaitrex)
2022-08-29 12:08:43 +0200CiaoSen(~Jura@p200300c95738a5002a3a4dfffe84dbd5.dip0.t-ipconnect.de)
2022-08-29 12:09:41 +0200cheater(~Username@user/cheater) (Ping timeout: 260 seconds)
2022-08-29 12:09:56 +0200nilradical(~nilradica@user/naso) (Ping timeout: 255 seconds)
2022-08-29 12:11:07 +0200luffy(~chenqisu1@183.217.200.212) (Ping timeout: 252 seconds)
2022-08-29 12:11:13 +0200xff0x(~xff0x@125x103x176x34.ap125.ftth.ucom.ne.jp) (Ping timeout: 268 seconds)
2022-08-29 12:11:49 +0200eggplantade(~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net)
2022-08-29 12:13:27 +0200mikoto-chan(~mikoto-ch@164.5.249.78)
2022-08-29 12:15:08 +0200FinnElija(~finn_elij@user/finn-elija/x-0085643) (Remote host closed the connection)
2022-08-29 12:15:41 +0200FinnElija(~finn_elij@user/finn-elija/x-0085643)
2022-08-29 12:16:21 +0200cheater(~Username@user/cheater)
2022-08-29 12:16:44 +0200eggplantade(~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net) (Ping timeout: 268 seconds)
2022-08-29 12:22:09 +0200luffy(~chenqisu1@183.217.201.192)
2022-08-29 12:32:52 +0200segfaultfizzbuzz(~segfaultf@23-93-74-212.fiber.dynamic.sonic.net)
2022-08-29 12:34:35 +0200mikoto-chan(~mikoto-ch@164.5.249.78) (Ping timeout: 252 seconds)
2022-08-29 12:37:44 +0200segfaultfizzbuzz(~segfaultf@23-93-74-212.fiber.dynamic.sonic.net) (Ping timeout: 268 seconds)
2022-08-29 12:38:38 +0200beteigeuze(~Thunderbi@bl11-28-222.dsl.telepac.pt)
2022-08-29 12:38:59 +0200cheater(~Username@user/cheater) (Ping timeout: 252 seconds)
2022-08-29 12:39:15 +0200cheater(~Username@user/cheater)
2022-08-29 12:39:39 +0200beteigeuze(~Thunderbi@bl11-28-222.dsl.telepac.pt) (Client Quit)
2022-08-29 12:42:11 +0200CiaoSen(~Jura@p200300c95738a5002a3a4dfffe84dbd5.dip0.t-ipconnect.de) (Ping timeout: 248 seconds)
2022-08-29 12:43:02 +0200jonathanx(~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 +0200zxx7529(~Thunderbi@user/zxx7529)
2022-08-29 12:49:15 +0200nate4(~nate@98.45.169.16)
2022-08-29 12:50:07 +0200jakalx(~jakalx@base.jakalx.net) (Error from remote client)
2022-08-29 12:50:59 +0200segfaultfizzbuzz(~segfaultf@23-93-74-212.fiber.dynamic.sonic.net)
2022-08-29 12:51:25 +0200jakalx(~jakalx@base.jakalx.net)
2022-08-29 12:51:27 +0200cheater(~Username@user/cheater) (Ping timeout: 252 seconds)
2022-08-29 12:51:48 +0200cheater(~Username@user/cheater)
2022-08-29 12:54:01 +0200kilolympus(~kilolympu@90.203.82.22) (Ping timeout: 260 seconds)
2022-08-29 12:54:21 +0200nate4(~nate@98.45.169.16) (Ping timeout: 268 seconds)
2022-08-29 12:56:28 +0200Putonlalla(~Putonlall@it-cyan.it.jyu.fi)
2022-08-29 12:56:28 +0200vglfr(~vglfr@145.224.94.75) (Read error: Connection reset by peer)
2022-08-29 12:56:38 +0200vglfr(~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 +0200mikoto-chan(~mikoto-ch@164.5.249.78)
2022-08-29 13:05:06 +0200azimut(~azimut@gateway/tor-sasl/azimut) (Quit: ZNC - https://znc.in)
2022-08-29 13:05:34 +0200azimut(~azimut@gateway/tor-sasl/azimut)
2022-08-29 13:06:26 +0200nilradical(~nilradica@user/naso)
2022-08-29 13:07:21 +0200L29Ah(~L29Ah@wikipedia/L29Ah) ()
2022-08-29 13:10:07 +0200raym(~raym@user/raym) (Quit: kernel update, rebooting...)
2022-08-29 13:10:59 +0200eikke(~NicolasT@user/NicolasT) (Ping timeout: 248 seconds)
2022-08-29 13:12:34 +0200eggplantade(~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net)
2022-08-29 13:13:41 +0200raym(~raym@user/raym)
2022-08-29 13:14:42 +0200xff0x(~xff0x@2405:6580:b080:900:9d05:41cc:615d:5546)
2022-08-29 13:16:59 +0200eggplantade(~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net) (Ping timeout: 255 seconds)
2022-08-29 13:17:03 +0200nilradical(~nilradica@user/naso) (Remote host closed the connection)
2022-08-29 13:18:15 +0200nilradical(~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 +0200nilradical(~nilradica@user/naso) (Ping timeout: 268 seconds)
2022-08-29 13:25:55 +0200econo(uid147250@user/econo) (Quit: Connection closed for inactivity)
2022-08-29 13:27:42 +0200CiaoSen(~Jura@p200300c95738a5002a3a4dfffe84dbd5.dip0.t-ipconnect.de)
2022-08-29 13:28:10 +0200lisbeths(uid135845@id-135845.lymington.irccloud.com)
2022-08-29 13:30:56 +0200zxx7529(~Thunderbi@user/zxx7529) (Remote host closed the connection)
2022-08-29 13:31:08 +0200zxx7529(~Thunderbi@user/zxx7529)
2022-08-29 13:31:23 +0200mikoto-chan(~mikoto-ch@164.5.249.78) (Ping timeout: 255 seconds)
2022-08-29 13:34:24 +0200nilradical(~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 +0200bitdex(~bitdex@gateway/tor-sasl/bitdex) (Quit: = "")
2022-08-29 13:39:32 +0200L29Ah(~L29Ah@wikipedia/L29Ah)
2022-08-29 13:44:57 +0200xff0x(~xff0x@2405:6580:b080:900:9d05:41cc:615d:5546) (Ping timeout: 268 seconds)
2022-08-29 13:45:20 +0200xff0x(~xff0x@ai071162.d.east.v6connect.net)
2022-08-29 13:47:23 +0200causal(~user@50.35.83.177) (Quit: WeeChat 3.6)
2022-08-29 13:53:35 +0200segfaultfizzbuzz(~segfaultf@23-93-74-212.fiber.dynamic.sonic.net) (Ping timeout: 268 seconds)
2022-08-29 13:56:21 +0200raym(~raym@user/raym) (Ping timeout: 252 seconds)
2022-08-29 13:58:11 +0200raym(~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 +0200Robert72(~Robert@ext-1-122.eduroam.chalmers.se)
2022-08-29 14:08:05 +0200eikke(~NicolasT@user/NicolasT)
2022-08-29 14:09:19 +0200Robert72(~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 +0200eggplantade(~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 +0200eggplantade(~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net) (Ping timeout: 252 seconds)
2022-08-29 14:22:32 +0200segfaultfizzbuzz(~segfaultf@23-93-74-212.fiber.dynamic.sonic.net)
2022-08-29 14:26:47 +0200segfaultfizzbuzz(~segfaultf@23-93-74-212.fiber.dynamic.sonic.net) (Ping timeout: 252 seconds)
2022-08-29 14:28:05 +0200ccntrq(~Thunderbi@172.209.94.92.rev.sfr.net) (Ping timeout: 268 seconds)
2022-08-29 14:30:17 +0200ccntrq(~Thunderbi@172.209.94.92.rev.sfr.net)
2022-08-29 14:31:39 +0200merijn(~merijn@c-001-001-007.client.esciencecenter.eduvpn.nl) (Read error: Connection reset by peer)
2022-08-29 14:32:52 +0200merijn(~merijn@c-001-001-007.client.esciencecenter.eduvpn.nl)
2022-08-29 14:33:33 +0200ystael(~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 +0200drdo5drdo
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 +0200ystael(~ystael@user/ystael) (Ping timeout: 268 seconds)
2022-08-29 14:41:25 +0200segfaultfizzbuzz(~segfaultf@23-93-74-212.fiber.dynamic.sonic.net)
2022-08-29 14:48:20 +0200raehik(~raehik@cpc95906-rdng25-2-0-cust156.15-3.cable.virginm.net)
2022-08-29 14:48:33 +0200ccntrq(~Thunderbi@172.209.94.92.rev.sfr.net) (Quit: ccntrq)
2022-08-29 14:48:42 +0200jao(~jao@cpc103048-sgyl39-2-0-cust502.18-2.cable.virginm.net)
2022-08-29 14:48:54 +0200ccntrq(~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 +0200luffy(~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 +0200tromp(~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl) (Quit: My iMac has gone to sleep. ZZZzzz…)
2022-08-29 15:15:13 +0200jao(~jao@cpc103048-sgyl39-2-0-cust502.18-2.cable.virginm.net) (Remote host closed the connection)
2022-08-29 15:16:06 +0200ystael(~ystael@user/ystael)
2022-08-29 15:16:31 +0200matthewmosior(~matthewmo@173.170.253.91) (Ping timeout: 244 seconds)
2022-08-29 15:17:18 +0200eggplantade(~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net)
2022-08-29 15:19:29 +0200jao(~jao@cpc103048-sgyl39-2-0-cust502.18-2.cable.virginm.net)
2022-08-29 15:20:04 +0200tromp(~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl)
2022-08-29 15:21:39 +0200eggplantade(~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net) (Ping timeout: 248 seconds)
2022-08-29 15:21:43 +0200mikoto-chan(~mikoto-ch@164.5.249.78)
2022-08-29 15:24:35 +0200szkl(uid110435@id-110435.uxbridge.irccloud.com) ()
2022-08-29 15:25:02 +0200szkl(uid110435@id-110435.uxbridge.irccloud.com)
2022-08-29 15:26:40 +0200mima(mmh@gateway/vpn/airvpn/mima) (Ping timeout: 268 seconds)
2022-08-29 15:28:54 +0200azimut(~azimut@gateway/tor-sasl/azimut) (Ping timeout: 258 seconds)
2022-08-29 15:29:40 +0200ChaiTRex(~ChaiTRex@user/chaitrex) (Ping timeout: 258 seconds)
2022-08-29 15:30:47 +0200matthewmosior(~matthewmo@173.170.253.91)
2022-08-29 15:32:38 +0200chexum(~quassel@gateway/tor-sasl/chexum) (Remote host closed the connection)
2022-08-29 15:32:52 +0200chexum(~quassel@gateway/tor-sasl/chexum)
2022-08-29 15:33:00 +0200azimut(~azimut@gateway/tor-sasl/azimut)
2022-08-29 15:33:08 +0200ChaiTRex(~ChaiTRex@user/chaitrex)
2022-08-29 15:41:30 +0200matthewmosior(~matthewmo@173.170.253.91) (Remote host closed the connection)
2022-08-29 15:42:28 +0200matthewmosior(~matthewmo@173.170.253.91)
2022-08-29 15:43:25 +0200segfaultfizzbuzz(~segfaultf@23-93-74-212.fiber.dynamic.sonic.net) (Ping timeout: 252 seconds)
2022-08-29 15:47:00 +0200matthewmosior(~matthewmo@173.170.253.91) (Ping timeout: 244 seconds)
2022-08-29 15:48:51 +0200motherfsck(~motherfsc@user/motherfsck) (Ping timeout: 248 seconds)
2022-08-29 15:49:29 +0200matthewmosior(~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 +0200matthewmosior(~matthewmo@173.170.253.91) (Remote host closed the connection)
2022-08-29 15:51:09 +0200matthewmosior(~matthewmo@173.170.253.91)
2022-08-29 15:54:27 +0200hippoid(~idris@c-98-220-13-8.hsd1.il.comcast.net) (Ping timeout: 268 seconds)
2022-08-29 16:01:39 +0200motherfsck(~motherfsc@user/motherfsck)
2022-08-29 16:02:43 +0200kannon(~NK@135-180-47-54.fiber.dynamic.sonic.net)
2022-08-29 16:07:09 +0200kannon(~NK@135-180-47-54.fiber.dynamic.sonic.net) (Ping timeout: 244 seconds)
2022-08-29 16:11:45 +0200segfaultfizzbuzz(~segfaultf@23-93-74-212.fiber.dynamic.sonic.net)
2022-08-29 16:12:04 +0200frost(~frost@user/frost) (Ping timeout: 252 seconds)
2022-08-29 16:12:18 +0200lortabac(~lortabac@2a01:e0a:541:b8f0:e726:4d7c:52f8:911e) (Quit: WeeChat 2.8)
2022-08-29 16:13:14 +0200lisbeths(uid135845@id-135845.lymington.irccloud.com) (Quit: Connection closed for inactivity)
2022-08-29 16:14:11 +0200shriekingnoise(~shrieking@186.137.167.202)
2022-08-29 16:15:54 +0200yvan-sraka(~yvan-srak@2a02:2788:11e4:16b:4118:3220:160b:6a4e)
2022-08-29 16:16:26 +0200segfaultfizzbuzz(~segfaultf@23-93-74-212.fiber.dynamic.sonic.net) (Ping timeout: 260 seconds)
2022-08-29 16:19:38 +0200eggplantade(~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net)
2022-08-29 16:20:58 +0200wonko(~wjc@2a0e:1c80:2::130) (Ping timeout: 268 seconds)
2022-08-29 16:24:07 +0200eggplantade(~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net) (Ping timeout: 252 seconds)
2022-08-29 16:25:14 +0200hippoid(~idris@c-98-220-13-8.hsd1.il.comcast.net)
2022-08-29 16:26:24 +0200azimut(~azimut@gateway/tor-sasl/azimut) (Ping timeout: 258 seconds)
2022-08-29 16:31:52 +0200segfaultfizzbuzz(~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 +0200mima(~mmh@dhcp-138-246-3-174.dynamic.eduroam.mwn.de)
2022-08-29 16:33:56 +0200acidjnk(~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 +0200segfaultfizzbuzz(~segfaultf@23-93-74-212.fiber.dynamic.sonic.net) (Ping timeout: 260 seconds)
2022-08-29 16:39:44 +0200yvan-sraka(~yvan-srak@2a02:2788:11e4:16b:4118:3220:160b:6a4e) (Remote host closed the connection)
2022-08-29 16:40:03 +0200yvan-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 +0200nate4(~nate@98.45.169.16)
2022-08-29 16:51:42 +0200tromp(~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl) (Quit: My iMac has gone to sleep. ZZZzzz…)
2022-08-29 16:54:13 +0200yvan-sraka(~yvan-srak@2a02:2788:11e4:16b:49a6:cc29:c028:f4b9) (Remote host closed the connection)
2022-08-29 16:55:31 +0200nate4(~nate@98.45.169.16) (Ping timeout: 248 seconds)
2022-08-29 16:57:51 +0200cheater(~Username@user/cheater) (Ping timeout: 252 seconds)
2022-08-29 16:58:40 +0200cheater(~Username@user/cheater)
2022-08-29 16:58:40 +0200gentauro(~gentauro@user/gentauro) (Read error: Connection reset by peer)
2022-08-29 16:59:30 +0200segfaultfizzbuzz(~segfaultf@23-93-74-212.fiber.dynamic.sonic.net)
2022-08-29 16:59:53 +0200tromp(~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl)
2022-08-29 17:02:26 +0200matthewmosior(~matthewmo@173.170.253.91) (Remote host closed the connection)
2022-08-29 17:04:15 +0200gentauro(~gentauro@user/gentauro)
2022-08-29 17:06:03 +0200yvan-sraka(~yvan-srak@2a02:2788:11e4:16b:19b9:c902:b61c:ca7e)
2022-08-29 17:07:13 +0200yvan-sraka(~yvan-srak@2a02:2788:11e4:16b:19b9:c902:b61c:ca7e) (Remote host closed the connection)
2022-08-29 17:07:32 +0200yvan-sraka(~yvan-srak@2a02:2788:11e4:16b:6d7e:2100:38ba:17a9)
2022-08-29 17:11:48 +0200ec(~ec@gateway/tor-sasl/ec)
2022-08-29 17:12:46 +0200eikke(~NicolasT@user/NicolasT) (Ping timeout: 244 seconds)
2022-08-29 17:13:03 +0200yvan-sraka(~yvan-srak@2a02:2788:11e4:16b:6d7e:2100:38ba:17a9) (Remote host closed the connection)
2022-08-29 17:13:22 +0200yvan-sraka(~yvan-srak@2a02:2788:11e4:16b:1ee1:e1d4:c138:83fa)
2022-08-29 17:14:15 +0200alternateved(~user@staticline-31-183-146-203.toya.net.pl) (Remote host closed the connection)
2022-08-29 17:14:19 +0200tromp(~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl) (Quit: My iMac has gone to sleep. ZZZzzz…)
2022-08-29 17:14:35 +0200merijn(~merijn@c-001-001-007.client.esciencecenter.eduvpn.nl) (Ping timeout: 268 seconds)
2022-08-29 17:19:52 +0200matthewmosior(~matthewmo@173.170.253.91)
2022-08-29 17:20:07 +0200yvan-sraka(~yvan-srak@2a02:2788:11e4:16b:1ee1:e1d4:c138:83fa) (Remote host closed the connection)
2022-08-29 17:20:25 +0200yvan-sraka(~yvan-srak@2a02:2788:11e4:16b:6564:71dd:7699:5e45)
2022-08-29 17:21:50 +0200bontaq`(~user@ool-45779fe5.dyn.optonline.net)
2022-08-29 17:22:12 +0200eggplantade(~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net)
2022-08-29 17:23:15 +0200titibandit(~titibandi@xdsl-87-78-66-58.nc.de)
2022-08-29 17:23:58 +0200Tuplanolla(~Tuplanoll@91-159-69-12.elisa-laajakaista.fi)
2022-08-29 17:24:30 +0200username9431(~Thunderbi@2a00:23c5:4202:9c01:4d47:1a1f:d871:dac1)
2022-08-29 17:26:55 +0200eggplantade(~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net) (Ping timeout: 268 seconds)
2022-08-29 17:27:36 +0200matthewmosior(~matthewmo@173.170.253.91) (Ping timeout: 260 seconds)
2022-08-29 17:27:40 +0200yvan-sraka(~yvan-srak@2a02:2788:11e4:16b:6564:71dd:7699:5e45) (Remote host closed the connection)
2022-08-29 17:27:58 +0200yvan-sraka(~yvan-srak@2a02:2788:11e4:16b:3f54:566d:bfd8:5bfb)
2022-08-29 17:32:51 +0200CiaoSen(~Jura@p200300c95738a5002a3a4dfffe84dbd5.dip0.t-ipconnect.de) (Ping timeout: 248 seconds)
2022-08-29 17:33:20 +0200sagax(~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 +0200Everything(~Everythin@37.115.210.35)
2022-08-29 17:39:02 +0200titibandit(~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 +0200merijn(~merijn@c-001-001-007.client.esciencecenter.eduvpn.nl)
2022-08-29 17:40:36 +0200titibandit(~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 +0200yvan-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 +0200yvan-sraka(~yvan-srak@2a02:2788:11e4:16b:687d:cd13:9a74:1853)
2022-08-29 17:44:26 +0200gurkenglas(~gurkengla@p548ac72e.dip0.t-ipconnect.de)
2022-08-29 17:45:05 +0200eggplantade(~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net)
2022-08-29 17:45:55 +0200yvan-sraka(~yvan-srak@2a02:2788:11e4:16b:687d:cd13:9a74:1853) (Remote host closed the connection)
2022-08-29 17:48:31 +0200matthewmosior(~matthewmo@173.170.253.91)
2022-08-29 17:49:12 +0200stiell(~stiell@gateway/tor-sasl/stiell) (Ping timeout: 258 seconds)
2022-08-29 17:50:10 +0200shapr(~user@2601:7c0:c383:70:8f2e:ebd3:e94d:76ae)
2022-08-29 17:50:45 +0200ccntrq(~Thunderbi@172.209.94.92.rev.sfr.net) (Remote host closed the connection)
2022-08-29 17:51:03 +0200stiell(~stiell@gateway/tor-sasl/stiell)
2022-08-29 17:54:54 +0200zxx7529(~Thunderbi@user/zxx7529) (Remote host closed the connection)
2022-08-29 17:55:09 +0200zxx7529(~Thunderbi@user/zxx7529)
2022-08-29 17:57:37 +0200segfaultfizzbuzz(~segfaultf@23-93-74-212.fiber.dynamic.sonic.net) (Ping timeout: 252 seconds)
2022-08-29 17:58:46 +0200MoC(~moc@user/moc)
2022-08-29 18:01:18 +0200zebrag(~chris@user/zebrag)
2022-08-29 18:09:01 +0200raehik(~raehik@cpc95906-rdng25-2-0-cust156.15-3.cable.virginm.net) (Ping timeout: 260 seconds)
2022-08-29 18:10:08 +0200kilolympus(~kilolympu@90.203.82.22)
2022-08-29 18:10:44 +0200raehik(~raehik@cpc95906-rdng25-2-0-cust156.15-3.cable.virginm.net)
2022-08-29 18:10:50 +0200tromp(~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl)
2022-08-29 18:11:43 +0200acidjnk(~acidjnk@p54ad5adb.dip0.t-ipconnect.de)
2022-08-29 18:12:11 +0200mvk(~mvk@2607:fea8:5ce3:8500::a1ec) (Ping timeout: 244 seconds)
2022-08-29 18:13:17 +0200FinnElija(~finn_elij@user/finn-elija/x-0085643) (Remote host closed the connection)
2022-08-29 18:13:51 +0200FinnElija(~finn_elij@user/finn-elija/x-0085643)
2022-08-29 18:13:51 +0200chronon(~chronon@user/chronon) (Quit: leaving)
2022-08-29 18:14:16 +0200merijn(~merijn@c-001-001-007.client.esciencecenter.eduvpn.nl) (Ping timeout: 260 seconds)
2022-08-29 18:16:29 +0200jakalx(~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 +0200eggplantade(~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net) (Remote host closed the connection)
2022-08-29 18:19:19 +0200raym(~raym@user/raym) (Remote host closed the connection)
2022-08-29 18:22:17 +0200jakalx(~jakalx@base.jakalx.net)
2022-08-29 18:23:33 +0200chronon(~chronon@user/chronon)
2022-08-29 18:24:48 +0200coot(~coot@2a02:a310:e241:1b00:ec1a:e9df:79ac:66ba) (Quit: coot)
2022-08-29 18:25:28 +0200eggplantade(~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net)
2022-08-29 18:26:26 +0200matthewmosior(~matthewmo@173.170.253.91) (Remote host closed the connection)
2022-08-29 18:26:40 +0200segfaultfizzbuzz(~segfaultf@23-93-74-212.fiber.dynamic.sonic.net)
2022-08-29 18:27:12 +0200matthewmosior(~matthewmo@173.170.253.91)
2022-08-29 18:27:57 +0200nilradical(~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 +0200chronon(~chronon@user/chronon) (Quit: leaving)
2022-08-29 18:33:57 +0200Kaiepi(~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 +0200Kaiepi(~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 +0200raym(~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 +0200chronon(~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 +0200eggplantade(~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 +0200L29Ah(~L29Ah@wikipedia/L29Ah) ()
2022-08-29 18:46:44 +0200matthewmosior(~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 +0200nate4(~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 +0200tromp(~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 +0200nate4(~nate@98.45.169.16) (Ping timeout: 252 seconds)
2022-08-29 18:56:58 +0200matthewmosior(~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 +0200matthewmosior(~matthewmo@173.170.253.91) (Remote host closed the connection)
2022-08-29 18:57:36 +0200segfaultfizzbuzz(~segfaultf@23-93-74-212.fiber.dynamic.sonic.net) (Ping timeout: 268 seconds)
2022-08-29 18:57:37 +0200matthewmosior(~matthewmo@173.170.253.91)
2022-08-29 18:59:01 +0200matthewmosior(~matthewmo@173.170.253.91) (Remote host closed the connection)
2022-08-29 18:59:56 +0200matthewmosior(~matthewmo@173.170.253.91)
2022-08-29 19:00:08 +0200chexum(~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 +0200chexum(~quassel@gateway/tor-sasl/chexum)
2022-08-29 19:03:10 +0200eggplantade(~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net)
2022-08-29 19:03:23 +0200beteigeuze(~Thunderbi@bl11-28-222.dsl.telepac.pt)
2022-08-29 19:04:22 +0200matthewmosior(~matthewmo@173.170.253.91) (Ping timeout: 244 seconds)
2022-08-29 19:04:54 +0200foul_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 +0200beteigeuze(~Thunderbi@bl11-28-222.dsl.telepac.pt) (Client Quit)
2022-08-29 19:06:18 +0200beteigeuze(~Thunderbi@bl11-28-222.dsl.telepac.pt)
2022-08-29 19:06:18 +0200segfaultfizzbuzz(~segfaultf@23-93-74-212.fiber.dynamic.sonic.net)
2022-08-29 19:08:02 +0200pretty_dumm_guy(trottel@gateway/vpn/protonvpn/prettydummguy/x-88029655)
2022-08-29 19:11:12 +0200beteigeuze(~Thunderbi@bl11-28-222.dsl.telepac.pt) (Quit: beteigeuze)
2022-08-29 19:11:27 +0200beteigeuze(~Thunderbi@bl11-28-222.dsl.telepac.pt)
2022-08-29 19:14:11 +0200razetime(~quassel@117.193.4.12)
2022-08-29 19:17:12 +0200alphabeta(~kilolympu@90.203.82.22)
2022-08-29 19:18:32 +0200beteigeuze(~Thunderbi@bl11-28-222.dsl.telepac.pt) (Ping timeout: 268 seconds)
2022-08-29 19:18:50 +0200mbuf(~Shakthi@122.165.55.71) (Quit: Leaving)
2022-08-29 19:18:59 +0200kilolympus(~kilolympu@90.203.82.22) (Ping timeout: 248 seconds)
2022-08-29 19:20:06 +0200razetime(~quassel@117.193.4.12) (Remote host closed the connection)
2022-08-29 19:20:16 +0200foul_owl(~kerry@23.82.194.108)
2022-08-29 19:20:31 +0200tzh(~tzh@c-24-21-73-154.hsd1.or.comcast.net)
2022-08-29 19:20:37 +0200slack1256(~slack1256@191.126.227.217)
2022-08-29 19:23:37 +0200rockymarine(~rocky@user/rockymarine)
2022-08-29 19:24:08 +0200matthewmosior(~matthewmo@173.170.253.91)
2022-08-29 19:24:44 +0200toeffel(~toeffel@user/toeffel) (Ping timeout: 268 seconds)
2022-08-29 19:28:41 +0200matthewmosior(~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 +0200jmdaemon(~jmdaemon@user/jmdaemon)
2022-08-29 19:32:15 +0200pavonia(~user@user/siracusa) (Quit: Bye!)
2022-08-29 19:35:20 +0200tromp(~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl)
2022-08-29 19:35:50 +0200gmg(~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 +0200Midjak(~Midjak@82.66.147.146)
2022-08-29 19:41:10 +0200mc47(~mc47@xmonad/TheMC47)
2022-08-29 19:41:22 +0200jakalx(~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 +0200jakalx(~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 +0200noisyboy(~soumen@58.182.45.203)
2022-08-29 19:47:46 +0200econo(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 +0200noisyboy(~soumen@58.182.45.203) (Remote host closed the connection)
2022-08-29 19:51:52 +0200chexum(~quassel@gateway/tor-sasl/chexum) (Ping timeout: 258 seconds)
2022-08-29 19:52:01 +0200chexum(~quassel@gateway/tor-sasl/chexum)
2022-08-29 19:52:16 +0200wonko_(~wjc@2a0e:1c80:2::130)
2022-08-29 19:52:23 +0200vglfr(~vglfr@145.224.94.75) (Ping timeout: 252 seconds)
2022-08-29 19:53:23 +0200vglfr(~vglfr@145.224.94.75)
2022-08-29 19:53:29 +0200soumen(~soumen@58.182.45.203)
2022-08-29 19:53:54 +0200toeffel(~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 +0200benin0(~benin@183.82.205.66) (Quit: The Lounge - https://thelounge.chat)
2022-08-29 19:56:46 +0200rockymarine(~rocky@user/rockymarine) (Ping timeout: 268 seconds)
2022-08-29 19:57:08 +0200chele(~chele@user/chele) (Remote host closed the connection)
2022-08-29 19:57:23 +0200alphabeta(~kilolympu@90.203.82.22) (Ping timeout: 268 seconds)
2022-08-29 19:57:48 +0200matthewmosior(~matthewmo@173.170.253.91)
2022-08-29 19:58:39 +0200username9431(~Thunderbi@2a00:23c5:4202:9c01:4d47:1a1f:d871:dac1) (Ping timeout: 268 seconds)
2022-08-29 19:59:16 +0200toeffel(~toeffel@user/toeffel) (Ping timeout: 268 seconds)
2022-08-29 20:00:12 +0200kilolympus(~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 +0200gmg(~user@user/gehmehgeh) (Remote host closed the connection)
2022-08-29 20:01:26 +0200gmg(~user@user/gehmehgeh)
2022-08-29 20:02:37 +0200even4void[m](~even4void@2001:470:69fc:105::2:4b9c) (Quit: Reconnecting)
2022-08-29 20:02:56 +0200even4void[m](~even4void@2001:470:69fc:105::2:4b9c)
2022-08-29 20:02:58 +0200kannon(~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 +0200kannon(~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 +0200titibandit(~titibandi@xdsl-87-78-66-58.nc.de) (Quit: Leaving.)
2022-08-29 20:09:29 +0200rockymarine(~rocky@user/rockymarine)
2022-08-29 20:10:11 +0200ofl^(~ofl@c-73-237-184-20.hsd1.ga.comcast.net)
2022-08-29 20:10:17 +0200toeffel(~toeffel@user/toeffel)
2022-08-29 20:10:39 +0200zxx7529(~Thunderbi@user/zxx7529) (Remote host closed the connection)
2022-08-29 20:13:16 +0200segfaultfizzbuzz(~segfaultf@23-93-74-212.fiber.dynamic.sonic.net) (Ping timeout: 260 seconds)
2022-08-29 20:13:49 +0200hippoid(~idris@c-98-220-13-8.hsd1.il.comcast.net) (WeeChat 3.5)
2022-08-29 20:15:10 +0200segfaultfizzbuzz(~segfaultf@23-93-74-212.fiber.dynamic.sonic.net)
2022-08-29 20:15:18 +0200toeffel(~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 +0200matthewmosior(~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 +0200slack1256(~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 +0200slack1256(~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 +0200coot(~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 +0200vglfr(~vglfr@145.224.94.75) (Read error: Connection reset by peer)
2022-08-29 20:25:47 +0200vglfr(~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 +0200mima(~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 +0200matthewmosior(~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 +0200matthewmosior(~matthewmo@173.170.253.91) (Ping timeout: 244 seconds)
2022-08-29 20:37:30 +0200Lord_of_Life(~Lord@user/lord-of-life/x-2819915) (Ping timeout: 268 seconds)
2022-08-29 20:38:04 +0200Lord_of_Life(~Lord@user/lord-of-life/x-2819915)
2022-08-29 20:41:36 +0200mvk(~mvk@2607:fea8:5ce3:8500::a1ec)
2022-08-29 20:47:35 +0200lortabac(~lortabac@88.125.6.227)
2022-08-29 20:47:40 +0200waleee(~waleee@2001:9b0:213:7200:cc36:a556:b1e8:b340)
2022-08-29 20:49:35 +0200segfaultfizzbuzz(~segfaultf@23-93-74-212.fiber.dynamic.sonic.net) (Ping timeout: 252 seconds)
2022-08-29 21:00:31 +0200wonko_(~wjc@2a0e:1c80:2::130) (Ping timeout: 260 seconds)
2022-08-29 21:05:17 +0200matthewmosior(~matthewmo@173.170.253.91)
2022-08-29 21:06:27 +0200stiell(~stiell@gateway/tor-sasl/stiell) (Remote host closed the connection)
2022-08-29 21:06:59 +0200stiell(~stiell@gateway/tor-sasl/stiell)
2022-08-29 21:07:05 +0200jakalx(~jakalx@base.jakalx.net) ()
2022-08-29 21:07:17 +0200jakalx(~jakalx@base.jakalx.net)
2022-08-29 21:14:38 +0200merijn(~merijn@c-001-001-007.client.esciencecenter.eduvpn.nl)
2022-08-29 21:16:07 +0200vektor(~vektor@IP-212232083002.dynamic.medianet-world.de)
2022-08-29 21:17:25 +0200madjestic(~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 +0200raym(~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 +0200matthewmosior(~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 +0200causal(~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 +0200ph88(~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 +0200rockymarine(~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 +0200xsebek_(xsebek@swarm.znchost.com)
2022-08-29 21:40:55 +0200nerdypepper(~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 +0200raym(~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 +0200kuribas(~user@ptr-17d51epjyeoyuptwhep.18120a2.ip6.access.telenet.be) (Quit: ERC (IRC client for Emacs 26.3))
2022-08-29 21:43:29 +0200merijn(~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 +0200segfaultfizzbuzz(~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 +0200titibandit(~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 +0200random-jellyfish(~random-je@user/random-jellyfish)
2022-08-29 21:47:55 +0200matthewmosior(~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 +0200lortabac(~lortabac@88.125.6.227) (Quit: WeeChat 2.8)
2022-08-29 21:50:07 +0200nerdypepper(~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 +0200dwt_(~dwt_@c-98-198-103-176.hsd1.tx.comcast.net) (Ping timeout: 248 seconds)
2022-08-29 21:52:26 +0200matthewmosior(~matthewmo@173.170.253.91) (Ping timeout: 260 seconds)
2022-08-29 21:53:31 +0200dwt_(~dwt_@c-98-198-103-176.hsd1.tx.comcast.net)
2022-08-29 21:56:26 +0200ozkutuk(~ozkutuk@176.240.173.153) (Quit: The Lounge - https://thelounge.chat)
2022-08-29 21:56:30 +0200rockymarine(~rocky@user/rockymarine)
2022-08-29 21:56:48 +0200 <xsebek_> whats broken about that?
2022-08-29 21:57:27 +0200eggplantade(~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 +0200echoone(~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 +0200ofl^(~ofl@c-73-237-184-20.hsd1.ga.comcast.net) (Ping timeout: 252 seconds)
2022-08-29 22:02:55 +0200ofl^(~ofl@c-73-237-184-20.hsd1.ga.comcast.net)
2022-08-29 22:03:50 +0200ix(~ix@2a02:8010:674f:0:d65d:64ff:fe52:5efe) (Ping timeout: 268 seconds)
2022-08-29 22:04:59 +0200slac13271(~slack1256@191.126.227.217)
2022-08-29 22:05:54 +0200matthewmosior(~matthewmo@173.170.253.91)
2022-08-29 22:06:35 +0200rockymarine(~rocky@user/rockymarine) (Ping timeout: 252 seconds)
2022-08-29 22:07:36 +0200slack1256(~slack1256@186.11.99.53) (Ping timeout: 260 seconds)
2022-08-29 22:09:17 +0200rockymarine(~rocky@user/rockymarine)
2022-08-29 22:10:05 +0200justsomeguy(~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 +0200wonko_(~wjc@2a0e:1c80:2::130)
2022-08-29 22:12:11 +0200ec(~ec@gateway/tor-sasl/ec) (Remote host closed the connection)
2022-08-29 22:12:40 +0200ec(~ec@gateway/tor-sasl/ec)
2022-08-29 22:14:17 +0200rockymarine(~rocky@user/rockymarine) (Ping timeout: 252 seconds)
2022-08-29 22:14:36 +0200ofl^(~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 +0200vektor(~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 +0200random-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 +0200ofl^(~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 +0200jargon(~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 +0200segfaultfizzbuzz(~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 +0200ix(~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 +0200renzhi(~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 +0200segfaultfizzbuzz(~segfaultf@23-93-74-212.fiber.dynamic.sonic.net)
2022-08-29 22:25:59 +0200matthewmosior(~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 +0200rockymarine(~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 +0200sammelweis(~quassel@2601:401:8200:2d4c:bd9:d04c:7f69:eb10) (Ping timeout: 255 seconds)
2022-08-29 22:28:38 +0200slack1256(~slack1256@186.11.99.53)
2022-08-29 22:29:07 +0200slac13271(~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 +0200segfaultfizzbuzz(~segfaultf@23-93-74-212.fiber.dynamic.sonic.net) (Ping timeout: 260 seconds)
2022-08-29 22:32:21 +0200nate4(~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 +0200ix(~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 +0200eggplantade(~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 +0200shapr`(~user@68.54.166.125)
2022-08-29 22:40:51 +0200ix(~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 +0200pavonia(~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 +0200kilolympus(~kilolympu@90.203.82.22) (Quit: See you later! :))
2022-08-29 22:42:38 +0200wonko_(~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 +0200shapr(~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 +0200adanwan(~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 +0200adanwan(~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 +0200Everything(~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 +0200titibandit(~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 +0200segfaultfizzbuzz(~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 +0200mima(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 +0200mc47(~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 +0200matthewmosior(~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 +0200ph88(~ph88@ip5f5af71f.dynamic.kabel-deutschland.de) (Ping timeout: 252 seconds)
2022-08-29 22:58:32 +0200segfaultfizzbuzz(~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 +0200califax(~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 +0200jinsun__(~jinsun@user/jinsun)
2022-08-29 23:00:38 +0200jinsunGuest5410
2022-08-29 23:00:38 +0200Guest5410(~jinsun@user/jinsun) (Killed (molybdenum.libera.chat (Nickname regained by services)))
2022-08-29 23:00:38 +0200jinsun__jinsun
2022-08-29 23:00:57 +0200a6a45081-2b83(~aditya@pal-210-106-57.itap.purdue.edu)
2022-08-29 23:01:35 +0200nate4(~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 +0200califax(~califax@user/califx)
2022-08-29 23:02:39 +0200merijn(~merijn@c-001-001-007.client.esciencecenter.eduvpn.nl)
2022-08-29 23:03:03 +0200euandreh(~euandreh@179.214.113.107) (Ping timeout: 252 seconds)
2022-08-29 23:04:31 +0200mima(mmh@gateway/vpn/airvpn/mima) (Ping timeout: 252 seconds)
2022-08-29 23:05:16 +0200euandreh(~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 +0200merijn(~merijn@c-001-001-007.client.esciencecenter.eduvpn.nl) (Ping timeout: 268 seconds)
2022-08-29 23:09:12 +0200Pickchea(~private@user/pickchea)
2022-08-29 23:10:01 +0200ofl^(~ofl@c-73-237-184-20.hsd1.ga.comcast.net) (Remote host closed the connection)
2022-08-29 23:10:25 +0200tromp(~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl) (Quit: My iMac has gone to sleep. ZZZzzz…)
2022-08-29 23:12:13 +0200cheater(~Username@user/cheater) (Ping timeout: 252 seconds)
2022-08-29 23:12:41 +0200cheater(~Username@user/cheater)
2022-08-29 23:13:24 +0200matthewmosior(~matthewmo@173.170.253.91) (Ping timeout: 244 seconds)
2022-08-29 23:14:51 +0200chexum(~quassel@gateway/tor-sasl/chexum) (Quit: No Ping reply in 180 seconds.)
2022-08-29 23:16:29 +0200chexum(~quassel@gateway/tor-sasl/chexum)
2022-08-29 23:18:40 +0200a6a45081-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 +0200texasmynsted(~texasmyns@99.96.221.112)
2022-08-29 23:24:01 +0200tromp(~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl)
2022-08-29 23:24:16 +0200zer0bitz(~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 +0200geekosaurpoints 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 +0200renzhi(~xp@2607:fa49:6500:b100::c93a) (Ping timeout: 268 seconds)
2022-08-29 23:29:16 +0200matthewmosior(~matthewmo@173.170.253.91)
2022-08-29 23:32:09 +0200 <Rembane> Those are very good points
2022-08-29 23:32:11 +0200waleee(~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 +0200tromp(~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 +0200Tuplanolla(~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 +0200eikke(~NicolasT@user/NicolasT)
2022-08-29 23:34:40 +0200merijn(~merijn@c-001-001-007.client.esciencecenter.eduvpn.nl)
2022-08-29 23:34:43 +0200jao(~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 +0200justsomeguy(~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 +0200jao(~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 +0200Midjak(~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 +0200raehik(~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 +0200nate4(~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 +0200nate4(~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 +0200rockymarine(~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 +0200michalz(~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.