Home liberachat/#haskell: Logs Calendar

Logs on 2026-04-10 (liberachat/#haskell)

00:03:09 × merijn quits (~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 255 seconds)
00:04:15 uli-fem joins (~uli-fem@115.128.112.118)
00:04:21 × peterbecich quits (~Thunderbi@71.84.33.135) (Ping timeout: 246 seconds)
00:11:42 × uli-fem quits (~uli-fem@115.128.112.118) (Ping timeout: 255 seconds)
00:14:04 merijn joins (~merijn@host-cl.cgnat-g.v4.dfn.nl)
00:18:35 × merijn quits (~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 244 seconds)
00:25:52 uli-fem joins (~uli-fem@115.128.112.118)
00:29:26 merijn joins (~merijn@host-cl.cgnat-g.v4.dfn.nl)
00:30:55 × uli-fem quits (~uli-fem@115.128.112.118) (Ping timeout: 272 seconds)
00:33:40 × merijn quits (~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 244 seconds)
00:38:41 Sgeo joins (~Sgeo@user/sgeo)
00:44:49 merijn joins (~merijn@host-cl.cgnat-g.v4.dfn.nl)
00:51:30 × merijn quits (~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 248 seconds)
00:57:27 × slomp quits (~slomp@47-158-212-88.lsan.ca.frontiernet.net) (Read error: Connection reset by peer)
00:59:30 × Square quits (~Square4@user/square) (Ping timeout: 244 seconds)
01:00:19 slomp joins (~slomp@47-158-212-88.lsan.ca.frontiernet.net)
01:00:25 × xff0x quits (~xff0x@ai112096.d.east.v6connect.net) (Ping timeout: 248 seconds)
01:02:33 _d0t_ joins (~{-d0t-}@user/-d0t-/x-7915216)
01:02:42 × _d0t quits (~{-d0t-}@user/-d0t-/x-7915216) (Ping timeout: 248 seconds)
01:02:42 _d0t_ is now known as _d0t
01:02:52 merijn joins (~merijn@host-cl.cgnat-g.v4.dfn.nl)
01:04:41 × tremon quits (~tremon@83.80.159.219) (Quit: getting boxed in)
01:07:21 × merijn quits (~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 248 seconds)
01:09:50 slomp_ joins (~slomp@47-158-212-88.lsan.ca.frontiernet.net)
01:12:41 × slomp quits (~slomp@47-158-212-88.lsan.ca.frontiernet.net) (Ping timeout: 248 seconds)
01:14:54 slomp joins (~slomp@47-158-198-45.lsan.ca.frontiernet.net)
01:17:35 × slomp_ quits (~slomp@47-158-212-88.lsan.ca.frontiernet.net) (Ping timeout: 244 seconds)
01:18:14 merijn joins (~merijn@host-cl.cgnat-g.v4.dfn.nl)
01:22:45 × merijn quits (~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 244 seconds)
01:34:41 merijn joins (~merijn@host-cl.cgnat-g.v4.dfn.nl)
01:39:12 × merijn quits (~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 246 seconds)
01:55:39 × slomp quits (~slomp@47-158-198-45.lsan.ca.frontiernet.net) (Ping timeout: 255 seconds)
01:56:21 uli-fem joins (~uli-fem@115.128.112.118)
01:57:53 slomp joins (~slomp@47-158-198-45.lsan.ca.frontiernet.net)
02:03:45 × uli-fem quits (~uli-fem@115.128.112.118) (Ping timeout: 255 seconds)
02:03:46 × haskellbridge quits (~hackager@96.28.224.214) (Remote host closed the connection)
02:04:17 haskellbridge joins (~hackager@96.28.224.214)
02:04:17 ChanServ sets mode +v haskellbridge
02:05:04 xff0x joins (~xff0x@fsb6a9491c.tkyc517.ap.nuro.jp)
02:05:23 merijn joins (~merijn@host-cl.cgnat-g.v4.dfn.nl)
02:07:48 × slomp quits (~slomp@47-158-198-45.lsan.ca.frontiernet.net) (Quit: Lost terminal)
02:10:04 × merijn quits (~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 265 seconds)
02:10:50 slomp joins (~slomp@47-158-198-45.lsan.ca.frontiernet.net)
02:15:28 × m1dnight_ quits (~m1dnight@d8D861A17.access.telenet.be) (Ping timeout: 256 seconds)
02:18:18 uli-fem joins (~uli-fem@115.128.112.118)
02:18:25 m1dnight_ joins (~m1dnight@d8D861A17.access.telenet.be)
02:23:06 merijn joins (~merijn@host-cl.cgnat-g.v4.dfn.nl)
02:23:49 slomp_ joins (~slomp@47-158-199-90.lsan.ca.frontiernet.net)
02:26:26 × slomp quits (~slomp@47-158-198-45.lsan.ca.frontiernet.net) (Ping timeout: 248 seconds)
02:29:55 × merijn quits (~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 244 seconds)
02:40:17 × EvanR quits (~EvanR@user/evanr) (Quit: Leaving)
02:41:09 merijn joins (~merijn@host-cl.cgnat-g.v4.dfn.nl)
02:41:50 EvanR joins (~EvanR@user/evanr)
02:45:25 × merijn quits (~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 244 seconds)
02:56:30 merijn joins (~merijn@host-cl.cgnat-g.v4.dfn.nl)
03:00:00 × krei-se quits (~krei-se@p5b1642b0.dip0.t-ipconnect.de) (Ping timeout: 255 seconds)
03:00:55 × merijn quits (~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 244 seconds)
03:03:11 krei-se joins (~krei-se@p5b15768c.dip0.t-ipconnect.de)
03:11:52 merijn joins (~merijn@host-cl.cgnat-g.v4.dfn.nl)
03:16:39 × merijn quits (~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 255 seconds)
03:24:26 × Googulator85 quits (~Googulato@94-21-172-213.pool.digikabel.hu) (Quit: Client closed)
03:24:51 Googulator85 joins (~Googulato@94-21-172-213.pool.digikabel.hu)
03:27:22 × divlamir quits (~divlamir@user/divlamir) (Read error: Connection reset by peer)
03:27:35 divlamir joins (~divlamir@user/divlamir)
03:42:39 merijn joins (~merijn@62.45.136.136)
03:44:27 × machinedgod quits (~machinedg@d172-219-48-230.abhsia.telus.net) (Ping timeout: 268 seconds)
03:47:18 × merijn quits (~merijn@62.45.136.136) (Ping timeout: 268 seconds)
03:54:23 jmcantrell_ joins (~weechat@user/jmcantrell)
03:57:58 merijn joins (~merijn@host-cl.cgnat-g.v4.dfn.nl)
04:05:11 × merijn quits (~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 268 seconds)
04:13:06 × tomboy65 quits (~tomboy64@user/tomboy64) (Ping timeout: 248 seconds)
04:16:01 merijn joins (~merijn@host-cl.cgnat-g.v4.dfn.nl)
04:16:41 tomboy64 joins (~tomboy64@user/tomboy64)
04:20:36 × merijn quits (~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 268 seconds)
04:31:21 × uli-fem quits (~uli-fem@115.128.112.118) (Ping timeout: 255 seconds)
04:31:23 merijn joins (~merijn@host-cl.cgnat-g.v4.dfn.nl)
04:32:49 peterbecich joins (~Thunderbi@71.84.33.135)
04:35:44 × merijn quits (~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 245 seconds)
04:46:45 merijn joins (~merijn@host-cl.cgnat-g.v4.dfn.nl)
04:51:23 × merijn quits (~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 244 seconds)
04:57:30 merijn joins (~merijn@host-cl.cgnat-g.v4.dfn.nl)
04:58:21 michalz joins (~michalz@185.246.207.215)
04:59:25 × squid64 quits (~user@fsf/member/squid64) (Quit: ERC 5.6.0.30.1 (IRC client for GNU Emacs 30.2))
05:01:49 × merijn quits (~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 244 seconds)
05:12:51 merijn joins (~merijn@host-cl.cgnat-g.v4.dfn.nl)
05:17:19 × merijn quits (~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 244 seconds)
05:21:43 acidjnk_new joins (~acidjnk@p200300d6e700e53609e75ead6525121b.dip0.t-ipconnect.de)
05:28:15 merijn joins (~merijn@host-cl.cgnat-g.v4.dfn.nl)
05:32:39 × merijn quits (~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 246 seconds)
05:43:36 merijn joins (~merijn@host-cl.cgnat-g.v4.dfn.nl)
05:46:32 × ChaiTRex quits (~ChaiTRex@user/chaitrex) (Remote host closed the connection)
05:46:56 ChaiTRex joins (~ChaiTRex@user/chaitrex)
05:48:50 × merijn quits (~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 244 seconds)
05:54:09 × ChaiTRex quits (~ChaiTRex@user/chaitrex) (Remote host closed the connection)
05:54:29 ChaiTRex joins (~ChaiTRex@user/chaitrex)
05:55:07 × acidjnk_new quits (~acidjnk@p200300d6e700e53609e75ead6525121b.dip0.t-ipconnect.de) (Ping timeout: 276 seconds)
05:56:32 karenw joins (~karenw@user/karenw)
05:57:24 uli-fem joins (~uli-fem@115.128.112.118)
05:58:19 CiaoSen joins (~Jura@p549cbfb1.dip0.t-ipconnect.de)
05:58:30 merijn joins (~merijn@host-cl.cgnat-g.v4.dfn.nl)
05:59:35 × peterbecich quits (~Thunderbi@71.84.33.135) (Ping timeout: 244 seconds)
06:02:41 × merijn quits (~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 244 seconds)
06:04:13 × jmcantrell_ quits (~weechat@user/jmcantrell) (Ping timeout: 276 seconds)
06:10:51 × mfc_kbs- quits (~keibisoft@mail.keibisoft.com) (Quit: ZNC 1.9.0+deb2build3 - https://znc.in)
06:11:11 mfc_kbs joins (~keibisoft@mail.keibisoft.com)
06:13:55 merijn joins (~merijn@host-cl.cgnat-g.v4.dfn.nl)
06:18:17 × merijn quits (~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 244 seconds)
06:24:21 × ft quits (~ft@p508db287.dip0.t-ipconnect.de) (Quit: leaving)
06:24:36 × tusko quits (~uwu@user/tusko) (Remote host closed the connection)
06:24:52 tusko joins (~uwu@user/tusko)
06:28:48 × tusko quits (~uwu@user/tusko) (Remote host closed the connection)
06:29:19 merijn joins (~merijn@host-cl.cgnat-g.v4.dfn.nl)
06:29:55 tusko joins (~uwu@user/tusko)
06:32:21 × attlin quits (~user@user/attlin) (Quit: Leaving)
06:33:47 × merijn quits (~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 244 seconds)
06:36:34 attlin joins (~user@user/attlin)
06:41:40 × czan quits (~czan@user/mange) (Quit: Zzz...)
06:44:44 merijn joins (~merijn@host-cl.cgnat-g.v4.dfn.nl)
06:46:26 × synchromesh quits (~john@2406:5a00:2412:2c00:e029:fa8c:cb38:398f) (Read error: Connection reset by peer)
06:47:47 synchromesh joins (~john@2406:5a00:2412:2c00:84a:b712:d1d0:a9d4)
06:51:21 × merijn quits (~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 244 seconds)
06:56:34 × constxd quits (~constxd@user/constxd) (Quit: kiwi irc - hadmade client)
06:57:01 constxd joins (~constxd@user/constxd)
06:59:32 merijn joins (~merijn@host-cl.cgnat-g.v4.dfn.nl)
07:01:02 × Googulator85 quits (~Googulato@94-21-172-213.pool.digikabel.hu) (Ping timeout: 245 seconds)
07:01:30 Milan_Vanca joins (~milan@88.212.61.169)
07:04:40 × merijn quits (~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 276 seconds)
07:09:06 tromp joins (~textual@2001:1c00:340e:2700:8dcf:a6d6:339b:7a0)
07:13:18 <gentauro> if you use the `DuplicateRecordFields` language pragma (duplicate record fields). How do you specify you want to use `Foo { foo :: String }` from `FooBar { foo :: String, bar :: String}`?
07:14:53 merijn joins (~merijn@host-cl.cgnat-g.v4.dfn.nl)
07:19:15 × merijn quits (~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 244 seconds)
07:20:42 sord937 joins (~sord937@gateway/tor-sasl/sord937)
07:25:09 arandombit joins (~arandombi@user/arandombit)
07:30:16 merijn joins (~merijn@host-cl.cgnat-g.v4.dfn.nl)
07:30:34 califax_ joins (~califax@user/califx)
07:30:49 × califax quits (~califax@user/califx) (Remote host closed the connection)
07:31:49 califax_ is now known as califax
07:34:45 × merijn quits (~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 244 seconds)
07:39:35 Enrico63 joins (~Enrico63@host-212-171-80-94.retail.telecomitalia.it)
07:43:14 × arandombit quits (~arandombi@user/arandombit) (Remote host closed the connection)
07:44:53 arandombit joins (~arandombi@2a02:2455:8656:7100:e481:bbc9:3363:2734)
07:44:53 × arandombit quits (~arandombi@2a02:2455:8656:7100:e481:bbc9:3363:2734) (Changing host)
07:44:53 arandombit joins (~arandombi@user/arandombit)
07:45:38 merijn joins (~merijn@host-cl.cgnat-g.v4.dfn.nl)
07:48:37 Guest62 joins (~Guest62@p200300ca8f075300066cfcebe99f05bc.dip0.t-ipconnect.de)
07:50:22 × merijn quits (~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 256 seconds)
07:56:33 merijn joins (~merijn@host-cl.cgnat-g.v4.dfn.nl)
08:02:22 × Sgeo quits (~Sgeo@user/sgeo) (Read error: Connection reset by peer)
08:04:33 × merijn quits (~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 246 seconds)
08:07:14 × xff0x quits (~xff0x@fsb6a9491c.tkyc517.ap.nuro.jp) (Ping timeout: 248 seconds)
08:09:09 krei-se- joins (~krei-se@2003:a:67f:b77c::c8c6)
08:09:12 xff0x joins (~xff0x@fsb6a9491c.tkyc517.ap.nuro.jp)
08:09:36 × krei-se quits (~krei-se@p5b15768c.dip0.t-ipconnect.de) (Ping timeout: 255 seconds)
08:09:53 takuan joins (~takuan@d8D86B9E9.access.telenet.be)
08:10:55 × karenw quits (~karenw@user/karenw) (Ping timeout: 244 seconds)
08:12:08 × emmanuelux quits (~em@user/emmanuelux) (Quit: bye)
08:13:20 karenw joins (~karenw@user/karenw)
08:15:16 merijn joins (~merijn@host-cl.cgnat-g.v4.dfn.nl)
08:22:10 × merijn quits (~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 248 seconds)
08:23:53 danza joins (~danza@user/danza)
08:27:46 merijn joins (~merijn@host-cl.cgnat-g.v4.dfn.nl)
08:34:13 <tomsmeding> gentauro: https://downloads.haskell.org/ghc/latest/docs/users_guide/exts/duplicate_record_fields.html#extension-DuplicateRecordFields
08:34:24 <tomsmeding> I think the part until 6.5.5.1 answers your question
08:34:28 szkl joins (uid110435@id-110435.uxbridge.irccloud.com)
08:39:46 × synchromesh quits (~john@2406:5a00:2412:2c00:84a:b712:d1d0:a9d4) (Ping timeout: 248 seconds)
08:42:04 × weary-traveler quits (~user@user/user363627) (Remote host closed the connection)
08:42:23 __monty__ joins (~toonn@user/toonn)
08:57:15 GdeVolpi1 joins (~GdeVolpia@user/GdeVolpiano)
08:58:58 × GdeVolpiano quits (~GdeVolpia@user/GdeVolpiano) (Ping timeout: 244 seconds)
08:59:32 × arandombit quits (~arandombi@user/arandombit) (Remote host closed the connection)
09:01:38 <Milan_Vanca> Do I understand that correctly that there is difference between exporting module M (S(S, x)) where .. and module M (S(S), x) where
09:02:36 <Milan_Vanca> data S = S {x :: Int}
09:03:39 synchromesh joins (~john@2406:5a00:2412:2c00:84a:b712:d1d0:a9d4)
09:10:04 <Milan_Vanca> Anyway I want to ask different question. I have noticed many libs (alost all) on hackage to specify upper bound for its dependencies. This article https://iscinumpy.dev/post/bound-version-constraints/ says libs should not do that. Do you think information in that article is relevant for haskell packages?
09:11:22 × danza quits (~danza@user/danza) (Read error: Connection reset by peer)
09:11:32 danza joins (~danza@user/danza)
09:12:23 <Milan_Vanca> I don't want to start flame war I am asking in good faith. Like now I just manually "allow-newer" for every dependency but it tiresome
09:14:40 × infinity0 quits (~infinity0@pwned.gg) (Ping timeout: 276 seconds)
09:15:16 <Milan_Vanca> To my knowledge cabal/ghc too uses "flat" structure of dependencies same as python, so arguments should be applicable.
09:19:03 <merijn> I don't know what "flt structure oif dependencies" means
09:19:32 <merijn> Milan_Vanca: Python's ecosystem is constantly broken, so I would ignore anything they say
09:19:39 <tomsmeding> from the tldr in that article:
09:19:42 <tomsmeding> > Anyone can fix a missing cap, but users cannot fix an over restrictive cap
09:19:51 <merijn> They keep reinventing their build tools every year too, each time with the same problems
09:19:51 <tomsmeding> well, no
09:20:25 <tomsmeding> fixing a missing cap requires forking the project, whereas fixing an over-restrictive cap can be done with allow-newer or by asking for a non-maintainer update of the metadata on hackagte
09:20:29 <merijn> Milan_Vanca: cabal is fundamentally different from python's dependencies management approach
09:20:55 <merijn> Milan_Vanca: Have you read the PVP?
09:21:14 <merijn> Milan_Vanca: https://pvp.haskell.org
09:22:18 <Milan_Vanca> merijn: :D Good point I think
09:22:26 <merijn> Not to mention in python everything's just dictionaries of strings to values and no guarantees of what fields exist. Which means that using the wrong version very often kinda seems to work, if you're lucky
09:23:15 <Milan_Vanca> merijn: Not yet thank you for link
09:23:18 <merijn> Milan_Vanca: If you have to "allow-newer" many things, that's a sign you're using unmaintained/out of date dependencies
09:23:27 <merijn> OR you're on the bleeding edge
09:24:02 <Milan_Vanca> tomsmeding: but can't we say in cabal to cap some max version and thus no need for fork?
09:24:39 <merijn> Milan_Vanca: Some important differences between cabal and python's tooling: 1) cabal creates a DAG of dependencies with version constraints and tries to solve it to find a combination of dependency versions that makes every transitive dependency happy
09:24:57 <Milan_Vanca> merijn: No I use ghc 9.14 and many libs just don't support that yet.
09:25:00 <merijn> that means that if a package claims to work (no upper bound), but doesn't you break everything
09:25:07 <merijn> Milan_Vanca: Right, so that's bleeding edge :p
09:25:14 <merijn> I would not use the latest GHC, tbh
09:25:26 <merijn> I personally always used "second to latest"
09:27:34 <merijn> Milan_Vanca: 2) unlike python's "everything is globally installed" OR "you gotta manually sandbox each project", cabal creates "on-demand" per-project projections of everything installed globally
09:27:37 <Milan_Vanca> merijn: I read your note about building DAG and trying to satisfy all dependencies.. But python must do the same
09:27:43 <merijn> Milan_Vanca: Oh god no
09:28:00 <Milan_Vanca> Okey I mean poetry
09:28:06 <merijn> Milan_Vanca: Most Python tooling just looks at your flat list of dependencies and goes "check, lemme use that"
09:28:36 <Milan_Vanca> you have sandbox and then solve dependencies there...
09:28:57 <merijn> Milan_Vanca: at any rate, unless there is a specific bug blocking you OR new feature you need from the latest GHC I would never recommend using the latest version
09:29:16 <merijn> I'd probably pick 9.10 or 9.12 atm
09:30:46 <merijn> And then all your --allow-newer problems should hopefully disappear
09:31:13 <Milan_Vanca> That is one way granted
09:31:58 <gentauro> tomsmeding: yeah, I road that piece of documentation and I didn't get any wiser …
09:32:05 <merijn> It generally takes 9 months to a year for a new GHC version to percolate through to for the majority of the ecosystem to
09:32:24 <merijn> And there's often not a really big reason to adopt the bleeding edge while that happens
09:33:04 <gentauro> anyway, just renamed the field and no probs :)
09:34:36 infinity0 joins (~infinity0@pwned.gg)
09:43:41 <Milan_Vanca> merijn: Your stance about not using latest version are quite strong. And I kind of agree when one develops mission critical application. But also somebody needs to use and test latest version to iron out all issues. I don't want to believe that "Suitable for use/LTS" is really that buggy.
09:44:58 <Milan_Vanca> But also maybe I like to live on edge...There is also .NET MAUI "production ready" for few years but still unusable...
09:48:49 <merijn> Oh, I'm not saying you shouldn't use/test the latest version. Just be aware that that comes with a lot of --allow-newer overrides until adoption goes wider :p
09:49:38 <merijn> Milan_Vanca: It's not so much about not using latest because of being buggy, but just because dealing with the ecosystem not being instantly ready is too much of a hassle
09:51:26 <Milan_Vanca> merijn: If I "allow-newer" then the "worst" case is that type's won't match and it just won't compile right? Should I also expect runtime bugs? I mean there is always posibility to use "untested" version.
09:52:39 craunts795335385 joins (~craunts@152.32.99.2)
09:53:23 <Milan_Vanca> Yeah.. runtime bugs are always possible.. I should start writing more tests :D
09:54:47 × craunts795335385 quits (~craunts@152.32.99.2) (Client Quit)
09:55:17 × xff0x quits (~xff0x@fsb6a9491c.tkyc517.ap.nuro.jp) (Ping timeout: 244 seconds)
09:55:53 craunts795335385 joins (~craunts@152.32.99.2)
10:01:43 Square3 joins (~Square@user/square)
10:02:59 <Milan_Vanca> merijn: Anyway when you said not to look up to python packaging. Are there other systems you might recommend?
10:03:13 × Enrico63 quits (~Enrico63@host-212-171-80-94.retail.telecomitalia.it) (Quit: Client closed)
10:03:42 <merijn> haskell's :p
10:03:47 <merijn> and maybe Rust?
10:04:03 <merijn> Although rust's stuff is heavily cabal inspired afaik
10:04:23 <Milan_Vanca> really? I didn't know that
10:10:52 × uli-fem quits (~uli-fem@115.128.112.118) (Ping timeout: 268 seconds)
10:16:59 × craunts795335385 quits (~craunts@152.32.99.2) (Quit: The Lounge - https://thelounge.chat)
10:17:27 Pozyomka_ joins (~pyon@user/pyon)
10:17:40 × Pozyomka quits (~pyon@user/pyon) (Ping timeout: 245 seconds)
10:18:06 craunts795335385 joins (~craunts@152.32.99.2)
10:20:21 × danza quits (~danza@user/danza) (Ping timeout: 246 seconds)
10:22:13 srazkvt joins (~sarah@user/srazkvt)
10:25:58 czan joins (~czan@user/mange)
10:27:54 Googulator85 joins (~Googulato@team.broadbit.hu)
10:40:22 × Pozyomka_ quits (~pyon@user/pyon) (Ping timeout: 256 seconds)
10:40:34 Pozyomka joins (~pyon@user/pyon)
10:51:32 × puke quits (~puke@user/puke) (Ping timeout: 250 seconds)
10:54:04 × m quits (~travltux@user/travltux) (Quit: WeeChat 4.7.2)
10:57:31 m joins (~travltux@user/travltux)
11:03:27 × tromp quits (~textual@2001:1c00:340e:2700:8dcf:a6d6:339b:7a0) (Quit: My iMac has gone to sleep. ZZZzzz…)
11:04:48 × ec quits (~ec@gateway/tor-sasl/ec) (Ping timeout: 265 seconds)
11:05:23 ec joins (~ec@gateway/tor-sasl/ec)
11:14:23 × CiaoSen quits (~Jura@p549cbfb1.dip0.t-ipconnect.de) (Ping timeout: 268 seconds)
11:18:07 tromp joins (~textual@2001:1c00:340e:2700:8dcf:a6d6:339b:7a0)
11:43:36 Googulator46 joins (~Googulato@team.broadbit.hu)
11:43:59 × Googulator85 quits (~Googulato@team.broadbit.hu) (Quit: Client closed)
11:51:04 × szkl quits (uid110435@id-110435.uxbridge.irccloud.com) (Quit: Connection closed for inactivity)
11:55:09 × tromp quits (~textual@2001:1c00:340e:2700:8dcf:a6d6:339b:7a0) (Quit: My iMac has gone to sleep. ZZZzzz…)
11:58:48 ft joins (~ft@p508db287.dip0.t-ipconnect.de)
11:59:23 tromp joins (~textual@2001:1c00:340e:2700:8dcf:a6d6:339b:7a0)
12:01:20 xff0x joins (~xff0x@138.64.112.96)
12:03:40 Googulator79 joins (~Googulato@team.broadbit.hu)
12:04:15 × tusko quits (~uwu@user/tusko) (Ping timeout: 265 seconds)
12:05:53 tusko joins (~uwu@user/tusko)
12:06:27 × Googulator46 quits (~Googulato@team.broadbit.hu) (Ping timeout: 245 seconds)
12:10:16 CiaoSen joins (~Jura@p549cbfb1.dip0.t-ipconnect.de)
12:12:28 × oxapentane quits (~oxapentan@user/oxapentane) (Remote host closed the connection)
12:12:58 oxapentane joins (~oxapentan@user/oxapentane)
12:14:23 bggd joins (~bgg@2a01:e0a:fd5:f510:8242:b373:3ea2:5d94)
12:14:23 × bggd quits (~bgg@2a01:e0a:fd5:f510:8242:b373:3ea2:5d94) (Changing host)
12:14:23 bggd joins (~bgg@user/bggd)
12:24:42 Googulator64 joins (~Googulato@team.broadbit.hu)
12:27:42 × Googulator79 quits (~Googulato@team.broadbit.hu) (Ping timeout: 245 seconds)
12:37:21 × tromp quits (~textual@2001:1c00:340e:2700:8dcf:a6d6:339b:7a0) (Quit: My iMac has gone to sleep. ZZZzzz…)
12:39:07 tromp joins (~textual@2001:1c00:340e:2700:8dcf:a6d6:339b:7a0)
12:48:00 puke joins (~puke@user/puke)
12:51:20 machinedgod joins (~machinedg@d172-219-48-230.abhsia.telus.net)
13:02:10 × karenw quits (~karenw@user/karenw) (Ping timeout: 248 seconds)
13:08:28 karenw joins (~karenw@user/karenw)
13:12:21 × tromp quits (~textual@2001:1c00:340e:2700:8dcf:a6d6:339b:7a0) (Quit: My iMac has gone to sleep. ZZZzzz…)
13:12:45 acidjnk_new joins (~acidjnk@p200300d6e700e5485df403a3a7e19ae1.dip0.t-ipconnect.de)
13:14:27 × karenw quits (~karenw@user/karenw) (Quit: Deep into that darkness peering...)
13:21:35 comerijn joins (~merijn@77.242.116.146)
13:24:32 × machinedgod quits (~machinedg@d172-219-48-230.abhsia.telus.net) (Ping timeout: 244 seconds)
13:24:32 × CiaoSen quits (~Jura@p549cbfb1.dip0.t-ipconnect.de) (Ping timeout: 244 seconds)
13:24:32 × merijn quits (~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 244 seconds)
13:26:35 CiaoSen joins (~Jura@p549cbfb1.dip0.t-ipconnect.de)
13:26:35 machinedgod joins (~machinedg@d172-219-48-230.abhsia.telus.net)
13:27:20 pavonia_ joins (~user@user/siracusa)
13:27:27 monochrm joins (trebla@216.138.220.146)
13:27:38 × divlamir quits (~divlamir@user/divlamir) (Ping timeout: 244 seconds)
13:29:11 × ft quits (~ft@p508db287.dip0.t-ipconnect.de) (Ping timeout: 244 seconds)
13:29:11 × craunts795335385 quits (~craunts@152.32.99.2) (Ping timeout: 244 seconds)
13:29:11 × pavonia quits (~user@user/siracusa) (Ping timeout: 244 seconds)
13:29:11 × mulk quits (~mulk@pd95147f8.dip0.t-ipconnect.de) (Ping timeout: 244 seconds)
13:29:23 benkard joins (~mulk@pd95147f8.dip0.t-ipconnect.de)
13:29:42 × monochrom quits (trebla@216.138.220.146) (Ping timeout: 244 seconds)
13:29:43 monochrm is now known as monochrom
13:29:47 benkard is now known as mulk
13:29:54 pavonia_ is now known as pavonia
13:30:11 divlamir joins (~divlamir@user/divlamir)
13:30:44 × xff0x quits (~xff0x@138.64.112.96) (Ping timeout: 244 seconds)
13:30:58 ft joins (~ft@p508db287.dip0.t-ipconnect.de)
13:32:34 xff0x joins (~xff0x@2405:6580:b080:900:e257:4447:f172:94ba)
13:34:52 × CiaoSen quits (~Jura@p549cbfb1.dip0.t-ipconnect.de) (Ping timeout: 244 seconds)
13:35:08 pavonia_ joins (~user@user/siracusa)
13:36:25 × pavonia quits (~user@user/siracusa) (Ping timeout: 244 seconds)
13:36:49 pavonia_ is now known as pavonia
13:36:54 CiaoSen joins (~Jura@p549cbfb1.dip0.t-ipconnect.de)
13:43:05 pavonia_ joins (~user@user/siracusa)
13:45:12 × CiaoSen quits (~Jura@p549cbfb1.dip0.t-ipconnect.de) (Ping timeout: 244 seconds)
13:45:12 × pavonia quits (~user@user/siracusa) (Ping timeout: 244 seconds)
13:45:35 pavonia_ is now known as pavonia
13:47:06 CiaoSen joins (~Jura@p549cbfb1.dip0.t-ipconnect.de)
13:55:04 × srazkvt quits (~sarah@user/srazkvt) (Quit: Konversation terminated!)
14:02:46 × Square3 quits (~Square@user/square) (Ping timeout: 244 seconds)
14:07:54 × CiaoSen quits (~Jura@p549cbfb1.dip0.t-ipconnect.de) (Ping timeout: 268 seconds)
14:14:27 Sgeo joins (~Sgeo@user/sgeo)
14:15:28 × czan quits (~czan@user/mange) (Quit: Zzz...)
14:25:09 tromp joins (~textual@2001:1c00:340e:2700:8dcf:a6d6:339b:7a0)
14:29:39 <tomsmeding> suppose I'm writing a little TCP server, and I have a loop that calls accept() to accept connections. I want to be exception-safe and I have some locking going on around this, so I write `mask $ \unmask -> do .... ; unmask (accept sock) `onException` cleanup; ...`
14:30:14 <tomsmeding> i.e. I want the `accept` call to be interruptible (because I'll be blocking there), but I want to know it if it went wrong and do some cleanup
14:31:03 <tomsmeding> now from just reading Control.Exception documentation, it seems that it might be possible that this thread is killed _after_ `accept` has accepted a connection (and thus opened a socket for it), but _before_ it returns.
14:31:24 <tomsmeding> I do get to run my cleanup in this case, but I don't have a socket, so I have a lingering socket open that was accepted but not closed
14:31:55 <tomsmeding> Can this be avoided, or alternatively, is it impossible for an asynchronous exception to be delivered in that interval?
14:35:26 <tomsmeding> (this is the function that is called: https://hackage-content.haskell.org/package/network-3.2.8.0/docs/src/Network.Socket.Syscall.html#accept )
14:36:16 <tomsmeding> that mkSocket call (on the `new_sock <- ...` line) performs allocation, so it's an exception reception point as far as I know
14:38:03 <tomsmeding> or is this whole design wrong and should I just not unmask, but instead run the accept() call in masked state and do an `allowInterrupt` afterwards to check if something happened in the meantime?
14:38:25 <tomsmeding> (since accept() blocks in a foreign call, and foreign calls can't be interrupted with an asynchronous exception anyway)
14:39:33 <geekosaur> you might want https://flora.pm/packages/@hackage/safe-exceptions or UnliftIO
14:39:39 <tomsmeding> I'm in IO
14:39:54 <tomsmeding> so I don't need to unlift anything
14:40:13 <int-e> tomsmeding: Yeah I don't think the `unmask` is buying you anything useful here, in terms of interruptibility.
14:40:28 <tomsmeding> yeah I think I talked myself into the proper solution in the end
14:40:55 <int-e> (I was about to write something similar to what you wrote.)
14:41:13 <tomsmeding> cool, thank you for being my rubber duck
14:41:21 <tomsmeding> I just packed all of mine (I'm moving), so I needed you guys
14:41:30 <int-e> quack
14:41:36 <tomsmeding> :D
14:42:00 <geekosaur> the reason I mentioned UnliftIO is that it also provides an exception API that, unlike the standard one, lets you ensure nothing leaks
14:42:19 <geekosaur> (because it's a prerequisite for getting UnliftIO right)
14:43:37 danza joins (~danza@user/danza)
14:49:21 <tomsmeding> relatedly: is Control.Concurrent.STM.atomically an interruptible operation?
14:50:00 <tomsmeding> (and if it throws, or lets through, an asynchronous exception, can I assume that the transaction has failed?)
14:52:32 × tromp quits (~textual@2001:1c00:340e:2700:8dcf:a6d6:339b:7a0) (Quit: My iMac has gone to sleep. ZZZzzz…)
14:53:27 <int-e> STM transactions that don't retry are not interruptible
14:53:38 <tomsmeding> but it has a literal retry in it :p
14:53:47 × bggd quits (~bgg@user/bggd) (Remote host closed the connection)
14:53:49 <tomsmeding> (that's why I'm using STM here)
14:54:06 <tomsmeding> it's fine if it's interruptible, as long as I can assume that if it's interrupted, it failed
14:54:59 rekahsoft joins (~rekahsoft@bras-base-orllon1103w-grc-20-76-67-111-168.dsl.bell.ca)
14:55:39 <int-e> If the retry bubbles up to atomically, it blocks the thread waiting for some of the involved variables to change, so the thread becomes interruptible then.
14:55:50 <tomsmeding> right
14:56:14 <int-e> So if you run `atomically` with exceptions masked... yeah getting an exception is only possible if the transaction hasn't succeeded yet.
14:56:22 <tomsmeding> perfect
14:57:17 <int-e> ("bubbles up" -- it can also hit `orElse` and that doesn't make things interruptible)
14:57:26 <tomsmeding> yes makes sense
14:57:41 <int-e> Partly based on https://stackoverflow.com/questions/78132502/is-retry-using-stm-action-guaranteed-interruptible-in-ghc-haskell
14:58:11 <int-e> (mostly for confirmation, but the `orElse` details didn't occur to me)
15:07:04 jmcantrell_ joins (~weechat@user/jmcantrell)
15:19:51 tromp joins (~textual@2001:1c00:340e:2700:8dcf:a6d6:339b:7a0)
15:26:49 driib3180 joins (~driib@vmi931078.contaboserver.net)
15:26:50 karenw joins (~karenw@user/karenw)
15:34:49 × danza quits (~danza@user/danza) (Remote host closed the connection)
15:36:29 × driib3180 quits (~driib@vmi931078.contaboserver.net) (Quit: The Lounge - https://thelounge.chat)
15:38:45 driib3180 joins (~driib@vmi931078.contaboserver.net)
15:43:28 somemathguy joins (~somemathg@user/somemathguy)
15:48:51 eldritch-cooklie joins (~eldritch-@user/eldritch-cookie)
15:51:37 emaczen joins (~user@user/emaczen)
15:53:21 jmcantrell_ is now known as jmcantrell
15:59:15 × pavonia quits (~user@user/siracusa) (Quit: Bye!)
16:00:43 × chromoblob quits (~chromoblo@user/chromob1ot1c) (Remote host closed the connection)
16:00:59 chromoblob joins (~chromoblo@user/chromob1ot1c)
16:06:59 × jmcantrell quits (~weechat@user/jmcantrell) (Ping timeout: 245 seconds)
16:25:37 × Googulator64 quits (~Googulato@team.broadbit.hu) (Ping timeout: 245 seconds)
16:28:31 weary-traveler joins (~user@user/user363627)
16:36:28 × puke quits (~puke@user/puke) (Ping timeout: 250 seconds)
16:38:11 × sord937 quits (~sord937@gateway/tor-sasl/sord937) (Quit: sord937)
16:39:05 Pozyomka_ joins (~pyon@user/pyon)
16:39:16 × Pozyomka quits (~pyon@user/pyon) (Ping timeout: 276 seconds)
16:41:06 × tromp quits (~textual@2001:1c00:340e:2700:8dcf:a6d6:339b:7a0) (Quit: My iMac has gone to sleep. ZZZzzz…)
16:44:19 × takuan quits (~takuan@d8D86B9E9.access.telenet.be) (Remote host closed the connection)
16:45:31 takuan joins (~takuan@d8D86B9E9.access.telenet.be)
16:54:18 jmcantrell_ joins (~weechat@user/jmcantrell)
16:54:25 jmcantrell_ is now known as jmcantrell
16:54:28 × jmcantrell quits (~weechat@user/jmcantrell) (Client Quit)
16:54:44 jmcantrell joins (~weechat@user/jmcantrell)
16:57:43 × gmg quits (~user@user/gehmehgeh) (Remote host closed the connection)
16:57:52 gmg joins (~user@user/gehmehgeh)
16:59:17 tromp joins (~textual@2001:1c00:340e:2700:8dcf:a6d6:339b:7a0)
17:03:52 × tromp quits (~textual@2001:1c00:340e:2700:8dcf:a6d6:339b:7a0) (Client Quit)
17:17:29 tromp joins (~textual@2001:1c00:340e:2700:8dcf:a6d6:339b:7a0)
17:32:01 × eldritch-cooklie quits (~eldritch-@user/eldritch-cookie) (Ping timeout: 244 seconds)
17:35:06 × jmcantrell quits (~weechat@user/jmcantrell) (Ping timeout: 268 seconds)
18:13:16 qqq joins (~qqq@185.54.23.237)
18:16:27 arandombit joins (~arandombi@2a02:2455:8656:7100:edce:786d:a89b:79a6)
18:16:27 × arandombit quits (~arandombi@2a02:2455:8656:7100:edce:786d:a89b:79a6) (Changing host)
18:16:27 arandombit joins (~arandombi@user/arandombit)
18:18:40 × rainbyte quits (~rainbyte@181.47.219.3) (Read error: Connection reset by peer)
18:19:43 rainbyte joins (~rainbyte@181.47.219.3)
18:20:33 jmcantrell_ joins (~weechat@user/jmcantrell)
18:20:35 jmcantrell_ is now known as jmcantrell
18:33:30 × karenw quits (~karenw@user/karenw) (Ping timeout: 244 seconds)
18:33:50 karenw joins (~karenw@user/karenw)
19:00:21 emmanuelux joins (~em@user/emmanuelux)
19:10:56 × weary-traveler quits (~user@user/user363627) (Remote host closed the connection)
19:23:18 mehbark joins (~mehbark@joey.luug.ece.vt.edu)
19:24:36 × emmanuelux quits (~em@user/emmanuelux) (Read error: Connection reset by peer)
19:28:00 emmanuelux joins (~em@user/emmanuelux)
19:54:28 × karenw quits (~karenw@user/karenw) (Remote host closed the connection)
19:55:15 Lord_of_Life_ joins (~Lord@user/lord-of-life/x-2819915)
19:55:44 × Lord_of_Life quits (~Lord@user/lord-of-life/x-2819915) (Ping timeout: 245 seconds)
19:56:31 karenw joins (~karenw@user/karenw)
19:56:37 Lord_of_Life_ is now known as Lord_of_Life
19:57:39 puke joins (~puke@user/puke)
20:00:39 weary-traveler joins (~user@user/user363627)
20:03:50 × michalz quits (~michalz@185.246.207.215) (Remote host closed the connection)
20:18:58 × comerijn quits (~merijn@77.242.116.146) (Ping timeout: 248 seconds)
20:33:21 merijn joins (~merijn@host-cl.cgnat-g.v4.dfn.nl)
20:34:59 emmanuelux_ joins (~em@216.106.204.77.rev.sfr.net)
20:36:19 × emmanuelux quits (~em@user/emmanuelux) (Ping timeout: 264 seconds)
20:40:12 × merijn quits (~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 255 seconds)
20:43:57 emmanuelux joins (~em@user/emmanuelux)
20:44:32 × takuan quits (~takuan@d8D86B9E9.access.telenet.be) (Remote host closed the connection)
20:45:01 × emmanuelux_ quits (~em@216.106.204.77.rev.sfr.net) (Read error: Connection reset by peer)
20:57:08 Square3 joins (~Square@user/square)
21:09:19 pavonia joins (~user@user/siracusa)
21:20:23 × puke quits (~puke@user/puke) (Remote host closed the connection)
21:20:47 puke joins (~puke@user/puke)
21:24:10 pyook joins (~puke@user/puke)
21:24:10 puke is now known as Guest9609
21:24:10 pyook is now known as puke
21:26:48 × Guest9609 quits (~puke@user/puke) (Ping timeout: 250 seconds)
21:29:42 × synchromesh quits (~john@2406:5a00:2412:2c00:84a:b712:d1d0:a9d4) (Read error: Connection reset by peer)
21:30:31 synchromesh joins (~john@2406:5a00:2412:2c00:84a:b712:d1d0:a9d4)
21:45:19 × jmcantrell quits (~weechat@user/jmcantrell) (Ping timeout: 264 seconds)
21:53:09 hololeap_ is now known as hololeap

All times are in UTC on 2026-04-10.