2025/05/07

2025-05-07 00:08:46 +0200merijn(~merijn@host-vr.cgnat-g.v4.dfn.nl) merijn
2025-05-07 00:10:21 +0200vanishingideal(~vanishing@user/vanishingideal) vanishingideal
2025-05-07 00:11:04 +0200machinedgod(~machinedg@d108-173-18-100.abhsia.telus.net) (Ping timeout: 276 seconds)
2025-05-07 00:13:46 +0200merijn(~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 252 seconds)
2025-05-07 00:16:31 +0200prdak(~Thunderbi@user/prdak) prdak
2025-05-07 00:20:35 +0200amadaluzia(~amadaluzi@user/amadaluzia) (Read error: Connection reset by peer)
2025-05-07 00:20:40 +0200prdak(~Thunderbi@user/prdak) (Ping timeout: 252 seconds)
2025-05-07 00:20:54 +0200amadaluzia(~amadaluzi@user/amadaluzia) amadaluzia
2025-05-07 00:22:13 +0200tromp(~textual@2001:1c00:3487:1b00:cdc3:f42b:30fc:1c61) (Quit: My iMac has gone to sleep. ZZZzzz…)
2025-05-07 00:24:17 +0200tromp(~textual@2001:1c00:3487:1b00:cdc3:f42b:30fc:1c61)
2025-05-07 00:24:33 +0200merijn(~merijn@host-vr.cgnat-g.v4.dfn.nl) merijn
2025-05-07 00:25:37 +0200target_i(~target_i@user/target-i/x-6023099) (Quit: leaving)
2025-05-07 00:29:37 +0200merijn(~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 248 seconds)
2025-05-07 00:36:10 +0200tromp(~textual@2001:1c00:3487:1b00:cdc3:f42b:30fc:1c61) (Quit: My iMac has gone to sleep. ZZZzzz…)
2025-05-07 00:40:21 +0200merijn(~merijn@host-vr.cgnat-g.v4.dfn.nl) merijn
2025-05-07 00:42:12 +0200chexum(~quassel@gateway/tor-sasl/chexum) (Ping timeout: 264 seconds)
2025-05-07 00:42:28 +0200chexum(~quassel@gateway/tor-sasl/chexum) chexum
2025-05-07 00:42:31 +0200 <hellwolf> https://x.com/deusaquilus/status/1919866616331800614 shots fired at monad; why do people keep coming up with syntax just to hide things?
2025-05-07 00:43:22 +0200hellwolflooking at the mirror, but feeling content that it's all {-# LANGUAGE ... #-} to blame.
2025-05-07 00:43:43 +0200bitdex(~bitdex@gateway/tor-sasl/bitdex) bitdex
2025-05-07 00:43:59 +0200 <EvanR> IO as an example monad might not be wise, at some point someone questioned if it was even a monad xD
2025-05-07 00:45:18 +0200merijn(~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 252 seconds)
2025-05-07 00:45:43 +0200 <hellwolf> does it looks like a monad, and quarks like a monad?
2025-05-07 00:46:05 +0200 <hellwolf> (though monad is supposed to be an ugly fish)
2025-05-07 00:46:24 +0200 <hellwolf> there is a crypto bro project called monad. but don't look it up, it might ruin your day.
2025-05-07 00:46:45 +0200hellwolffeel self-deprecating about being in the crypto again.
2025-05-07 00:47:55 +0200 <monochrom> What is crypto bro?
2025-05-07 00:49:40 +0200 <hellwolf> crypto project that has a bro vibe.
2025-05-07 00:50:21 +0200drewr(~drew@user/drewr) (Ping timeout: 252 seconds)
2025-05-07 00:52:31 +0200sayurc(~sayurc@169.150.203.34) sayurc
2025-05-07 00:53:47 +0200 <monochrom> You know, I agree with that post, and take it to its logical conclusion: Just write SQL itself, it is literally 100% better than any encoding of SQL.
2025-05-07 00:55:16 +0200gentauro(~gentauro@user/gentauro) (Ping timeout: 276 seconds)
2025-05-07 00:55:17 +0200Lears(~Leary@user/Leary/x-0910699) Leary
2025-05-07 00:56:09 +0200merijn(~merijn@host-vr.cgnat-g.v4.dfn.nl) merijn
2025-05-07 00:57:04 +0200mistivia(~mistivia@user/mistivia) mistivia
2025-05-07 00:57:35 +0200mistivia_(~mistivia@user/mistivia) (Read error: Connection reset by peer)
2025-05-07 00:57:41 +0200 <haskellbridge> <Liamzee> you still need to deserialize the return types
2025-05-07 00:58:28 +0200Leary(~Leary@user/Leary/x-0910699) (Read error: Connection reset by peer)
2025-05-07 00:58:52 +0200Lord_of_Life(~Lord@user/lord-of-life/x-2819915) (Ping timeout: 252 seconds)
2025-05-07 00:59:23 +0200Lord_of_Life(~Lord@user/lord-of-life/x-2819915) Lord_of_Life
2025-05-07 01:00:36 +0200 <hellwolf> So, what do you think of quasiquote template haskell based approach?
2025-05-07 01:00:40 +0200 <monochrom> Just for the sake of being the devil's advocate: Why?
2025-05-07 01:00:48 +0200Square(~Square@user/square) Square
2025-05-07 01:01:01 +0200vanishingideal(~vanishing@user/vanishingideal) (Ping timeout: 244 seconds)
2025-05-07 01:01:04 +0200merijn(~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 252 seconds)
2025-05-07 01:01:14 +0200gentauro(~gentauro@user/gentauro) gentauro
2025-05-07 01:01:36 +0200 <hellwolf> what do you mean?
2025-05-07 01:01:50 +0200 <monochrom> Why do I still need to deserialize the return types.
2025-05-07 01:02:15 +0200 <monochrom> Deserialize to what, and who needs it, and why.
2025-05-07 01:02:36 +0200 <haskellbridge> <Liamzee> to Haskell types, I mean, the result of the query
2025-05-07 01:03:01 +0200sprout(~sprout@2a02-a448-3a80-0-c61c-b515-5509-58e7.fixed6.kpn.net) (Ping timeout: 268 seconds)
2025-05-07 01:03:05 +0200 <monochrom> Why to Haskell types? Why not get rid of even that Haskell program, for example?
2025-05-07 01:03:48 +0200 <haskellbridge> <Liamzee> too obviously socratic
2025-05-07 01:04:01 +0200 <monochrom> Maybe I should describe one of my use cases.
2025-05-07 01:04:34 +0200sprout(~sprout@84-80-106-227.fixed.kpn.net) sprout
2025-05-07 01:04:56 +0200 <int-e> You could simply not answer inane "what do you think of" questions that are asked without motivation or other direction or context that would confine the scope of the answer.
2025-05-07 01:05:34 +0200 <monochrom> I have a lot of student marks to process. Various marking platforms give me student marks as CSV. In the past I wrote my own Haskell program with cassava to read, compute, write. But I can see a future where I just use sqlite, in fact even just the sqlite command line. My Haskell program will be obsoleted.
2025-05-07 01:06:22 +0200 <monochrom> Read: My role as a Haskell programmer to maintain that Haskell code is also obsoleted.
2025-05-07 01:06:44 +0200 <haskellbridge> <Liamzee> advantages of such an approach: simplicity. disadvantages of such an approach: how performant is going straight through the database? how safe is using sqlite instead?
2025-05-07 01:06:45 +0200 <EvanR> the grass is always greener
2025-05-07 01:06:59 +0200 <haskellbridge> <Liamzee> If I say "Scanners Live in Vain", would anyone get the reference?
2025-05-07 01:07:11 +0200 <EvanR> I keep all my accounts for self employment in sqlite and then came to same conclusion, why?
2025-05-07 01:07:15 +0200 <haskellbridge> <Liamzee> nope, and that just makes me annoying
2025-05-07 01:07:16 +0200 <int-e> . o O ( meet my haymaker )
2025-05-07 01:07:47 +0200 <EvanR> some other thing would have been easier since I wouldn't have to maintain it
2025-05-07 01:10:12 +0200j1n37-(~j1n37@user/j1n37) j1n37
2025-05-07 01:10:36 +0200shr\ke(~shrike@user/shrke:31298) (Ping timeout: 252 seconds)
2025-05-07 01:10:41 +0200j1n37(~j1n37@user/j1n37) (Ping timeout: 248 seconds)
2025-05-07 01:10:53 +0200sprotte24(~sprotte24@p200300d16f36aa00202cf2be69d2c7e4.dip0.t-ipconnect.de) (Quit: Leaving)
2025-05-07 01:11:56 +0200merijn(~merijn@host-vr.cgnat-g.v4.dfn.nl) merijn
2025-05-07 01:17:06 +0200bdmg_(~myJebba@177.138.161.234)
2025-05-07 01:18:35 +0200merijn(~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 244 seconds)
2025-05-07 01:20:41 +0200shr\ke(~shrike@user/paxhumana) paxhumana
2025-05-07 01:20:41 +0200shr\ke(~shrike@user/paxhumana) (Changing host)
2025-05-07 01:20:41 +0200shr\ke(~shrike@user/shrke:31298) shr\ke
2025-05-07 01:23:34 +0200Unicorn_Princess(~Unicorn_P@user/Unicorn-Princess/x-3540542) (Remote host closed the connection)
2025-05-07 01:25:10 +0200 <haskellbridge> <Liamzee> oh, and to fill out the useless reference, "Scanners Live in Vain" refers to a short story by a US army intelligence guy (who was also a disclosed CIA officer after his death) about a fraternity of space pilots who went grueling and dehumanizing hardship to safely chaperone people across worlds. One day, someone invents a technological workaround that renders their job irrelevant, so they connive to have the guy...
2025-05-07 01:25:15 +0200 <haskellbridge> ... murdered and his project covered up. Of course, it's a pulp science fiction story, so their plot is foiled, but to some extent it seems relevant to modern software development, no?
2025-05-07 01:25:50 +0200 <haskellbridge> <Liamzee> /s/ who went/ who went through/
2025-05-07 01:26:23 +0200geekosaurwas afk but knew the reference
2025-05-07 01:26:35 +0200 <geekosaur> Vonnegut's first story iirc
2025-05-07 01:26:53 +0200 <haskellbridge> <Liamzee> no, Cordwainer Smith / Paul Linebarger (real name, wrote under pseudonyms due to the nature of his work)
2025-05-07 01:27:04 +0200 <geekosaur> ah, whoops
2025-05-07 01:27:15 +0200 <geekosaur> too many old SF shorts writers
2025-05-07 01:29:57 +0200merijn(~merijn@host-vr.cgnat-g.v4.dfn.nl) merijn
2025-05-07 01:33:43 +0200 <hellwolf> question to emacs user again: why haskell-mode does not indent function parameters in new lines?
2025-05-07 01:34:03 +0200 <hellwolf> *in the next line? not sure how to speak english anymore
2025-05-07 01:34:26 +0200merijn(~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 252 seconds)
2025-05-07 01:34:32 +0200 <hellwolf> https://paste.tomsmeding.com/vDyxr8yb
2025-05-07 01:34:48 +0200 <hellwolf> I don't find this default indentation experience (using <tab>) is very nice.
2025-05-07 01:37:28 +0200 <hellwolf> just tried out https://ormolu-live.tweag.io to see the difference
2025-05-07 01:38:17 +0200 <hellwolf> hmm, not sure I like ormolu one neither, but certainly looks nicer than mine.
2025-05-07 01:42:10 +0200j1n37(~j1n37@user/j1n37) j1n37
2025-05-07 01:44:02 +0200j1n37-(~j1n37@user/j1n37) (Ping timeout: 276 seconds)
2025-05-07 01:45:27 +0200merijn(~merijn@host-vr.cgnat-g.v4.dfn.nl) merijn
2025-05-07 01:50:12 +0200merijn(~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 252 seconds)
2025-05-07 01:54:45 +0200adamCS(~adamCS@70.19.85.77) (Ping timeout: 244 seconds)
2025-05-07 01:59:18 +0200 <haskellbridge> <sm> cool SF reference, and speaking of which, I just found this fine story on HN:
2025-05-07 01:59:18 +0200 <haskellbridge> https://standardebooks.org/ebooks/e-m-forster/short-fiction/text/the-machine-stops
2025-05-07 02:01:13 +0200merijn(~merijn@host-vr.cgnat-g.v4.dfn.nl) merijn
2025-05-07 02:01:15 +0200adamCS(~adamCS@70.19.85.77) adamCS
2025-05-07 02:04:31 +0200weary-traveler(~user@user/user363627) user363627
2025-05-07 02:04:41 +0200jespada_(~jespada@r179-24-30-150.dialup.adsl.anteldata.net.uy) (Ping timeout: 268 seconds)
2025-05-07 02:06:13 +0200merijn(~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 248 seconds)
2025-05-07 02:12:37 +0200sajenim(~sajenim@user/sajenim) sajenim
2025-05-07 02:17:01 +0200merijn(~merijn@host-vr.cgnat-g.v4.dfn.nl) merijn
2025-05-07 02:21:37 +0200merijn(~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 244 seconds)
2025-05-07 02:27:25 +0200sabathan2(~sabathan@amarseille-159-1-12-107.w86-203.abo.wanadoo.fr) (Read error: Connection reset by peer)
2025-05-07 02:28:24 +0200bitdex(~bitdex@gateway/tor-sasl/bitdex) (Ping timeout: 264 seconds)
2025-05-07 02:29:41 +0200acidjnk(~acidjnk@p200300d6e71c4f5301468c1cc0256076.dip0.t-ipconnect.de) (Ping timeout: 248 seconds)
2025-05-07 02:29:59 +0200euleritian(~euleritia@ip4d17f864.dynamic.kabel-deutschland.de) (Ping timeout: 245 seconds)
2025-05-07 02:30:13 +0200Tuplanolla(~Tuplanoll@91-159-69-59.elisa-laajakaista.fi) (Quit: Leaving.)
2025-05-07 02:30:55 +0200euleritian(~euleritia@dynamic-176-006-137-036.176.6.pool.telefonica.de)
2025-05-07 02:31:40 +0200sabathan2(~sabathan@amarseille-159-1-12-107.w86-203.abo.wanadoo.fr)
2025-05-07 02:32:17 +0200amadaluzia(~amadaluzi@user/amadaluzia) (Remote host closed the connection)
2025-05-07 02:32:47 +0200merijn(~merijn@host-vr.cgnat-g.v4.dfn.nl) merijn
2025-05-07 02:34:08 +0200Axma83103(~Axman6@user/axman6) Axman6
2025-05-07 02:36:27 +0200Axman6(~Axman6@user/axman6) (Ping timeout: 248 seconds)
2025-05-07 02:37:52 +0200merijn(~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 252 seconds)
2025-05-07 02:41:11 +0200 <hellwolf> today is a good day. after trial and errors, I finally got a working type signature.
2025-05-07 02:41:25 +0200hellwolfcan have a sound sleep today.
2025-05-07 02:43:44 +0200Square2(~Square4@user/square) Square
2025-05-07 02:47:10 +0200Square(~Square@user/square) (Ping timeout: 260 seconds)
2025-05-07 02:48:36 +0200merijn(~merijn@host-vr.cgnat-g.v4.dfn.nl) merijn
2025-05-07 02:53:05 +0200merijn(~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 248 seconds)
2025-05-07 02:54:56 +0200bdmg_(~myJebba@177.138.161.234) (Remote host closed the connection)
2025-05-07 02:55:51 +0200xff0x(~xff0x@2405:6580:b080:900:bd8f:49eb:d362:d8a3) (Ping timeout: 268 seconds)
2025-05-07 02:56:15 +0200 <haskellbridge> <Liamzee> congrats
2025-05-07 02:56:49 +0200ystael(~ystael@user/ystael) (Ping timeout: 248 seconds)
2025-05-07 02:58:29 +0200Axma83103Axman6
2025-05-07 03:04:08 +0200merijn(~merijn@host-vr.cgnat-g.v4.dfn.nl) merijn
2025-05-07 03:08:51 +0200merijn(~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 244 seconds)
2025-05-07 03:10:09 +0200tabaqui(~tabaqui@167.71.80.236) (Ping timeout: 248 seconds)
2025-05-07 03:13:09 +0200j1n37-(~j1n37@user/j1n37) j1n37
2025-05-07 03:13:19 +0200j1n37(~j1n37@user/j1n37) (Ping timeout: 245 seconds)
2025-05-07 03:16:31 +0200ttybitnik(~ttybitnik@user/wolper) (Quit: Fading out...)
2025-05-07 03:19:26 +0200bitdex(~bitdex@gateway/tor-sasl/bitdex) bitdex
2025-05-07 03:19:57 +0200merijn(~merijn@host-vr.cgnat-g.v4.dfn.nl) merijn
2025-05-07 03:24:14 +0200manwithluck(~manwithlu@2a09:bac5:5081:2dc::49:f6) (Ping timeout: 268 seconds)
2025-05-07 03:24:39 +0200merijn(~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 244 seconds)
2025-05-07 03:25:01 +0200manwithluck(~manwithlu@2a09:bac5:5081:2dc::49:f6) manwithluck
2025-05-07 03:33:46 +0200manwithluck(~manwithlu@2a09:bac5:5081:2dc::49:f6) (Remote host closed the connection)
2025-05-07 03:34:36 +0200manwithluck(~manwithlu@2a09:bac5:5081:2dc::49:f6) manwithluck
2025-05-07 03:35:45 +0200merijn(~merijn@host-vr.cgnat-g.v4.dfn.nl) merijn
2025-05-07 03:40:46 +0200merijn(~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 265 seconds)
2025-05-07 03:49:45 +0200xff0x(~xff0x@fsb6a9491c.tkyc517.ap.nuro.jp)
2025-05-07 03:51:31 +0200merijn(~merijn@host-vr.cgnat-g.v4.dfn.nl) merijn
2025-05-07 03:52:12 +0200machinedgod(~machinedg@d108-173-18-100.abhsia.telus.net) machinedgod
2025-05-07 03:58:13 +0200merijn(~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 248 seconds)
2025-05-07 04:04:33 +0200 <monochrom> I don't know why emacs haskell-mode doesn't indent function parameters the way I want. But I take it to be equivalent to "why is my immune system easily fooled by HIV COVID etc" so I don't ask. We already know the answer: "It's complicated".
2025-05-07 04:05:30 +0200 <monochrom> Alternatively if you think it's easy to fix then "patched welcome".
2025-05-07 04:09:33 +0200merijn(~merijn@host-vr.cgnat-g.v4.dfn.nl) merijn
2025-05-07 04:14:29 +0200merijn(~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 260 seconds)
2025-05-07 04:22:48 +0200td_(~td@i5387093E.versanet.de) (Ping timeout: 268 seconds)
2025-05-07 04:24:04 +0200td_(~td@i5387091E.versanet.de)
2025-05-07 04:25:19 +0200merijn(~merijn@host-vr.cgnat-g.v4.dfn.nl) merijn
2025-05-07 04:30:04 +0200merijn(~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 252 seconds)
2025-05-07 04:31:15 +0200mceresa(~mceresa@user/mceresa) (Read error: Connection reset by peer)
2025-05-07 04:31:24 +0200mceresa(~mceresa@user/mceresa) mceresa
2025-05-07 04:34:08 +0200tessier(~tessier@ec2-184-72-149-67.compute-1.amazonaws.com) (Ping timeout: 272 seconds)
2025-05-07 04:35:41 +0200tessier(~tessier@ip68-8-117-219.sd.sd.cox.net) tessier
2025-05-07 04:37:17 +0200tessier(~tessier@ip68-8-117-219.sd.sd.cox.net) (Remote host closed the connection)
2025-05-07 04:37:43 +0200j1n37-(~j1n37@user/j1n37) (Read error: Connection reset by peer)
2025-05-07 04:41:07 +0200merijn(~merijn@host-vr.cgnat-g.v4.dfn.nl) merijn
2025-05-07 04:41:27 +0200j1n37(~j1n37@user/j1n37) j1n37
2025-05-07 04:45:46 +0200merijn(~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 244 seconds)
2025-05-07 04:56:55 +0200merijn(~merijn@host-vr.cgnat-g.v4.dfn.nl) merijn
2025-05-07 05:00:58 +0200califax(~califax@user/califx) (Quit: ZNC 1.8.2 - https://znc.in)
2025-05-07 05:01:16 +0200califax(~califax@user/califx) califx
2025-05-07 05:02:00 +0200merijn(~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 272 seconds)
2025-05-07 05:05:57 +0200j1n37(~j1n37@user/j1n37) (Read error: Connection reset by peer)
2025-05-07 05:09:24 +0200j1n37(~j1n37@user/j1n37) j1n37
2025-05-07 05:12:22 +0200j1n37(~j1n37@user/j1n37) (Read error: Connection reset by peer)
2025-05-07 05:12:43 +0200merijn(~merijn@host-vr.cgnat-g.v4.dfn.nl) merijn
2025-05-07 05:14:29 +0200machinedgod(~machinedg@d108-173-18-100.abhsia.telus.net) (Ping timeout: 248 seconds)
2025-05-07 05:15:22 +0200j1n37(~j1n37@user/j1n37) j1n37
2025-05-07 05:17:29 +0200merijn(~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 245 seconds)
2025-05-07 05:25:20 +0200merijn(~merijn@host-vr.cgnat-g.v4.dfn.nl) merijn
2025-05-07 05:30:12 +0200merijn(~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 252 seconds)
2025-05-07 05:41:06 +0200merijn(~merijn@host-vr.cgnat-g.v4.dfn.nl) merijn
2025-05-07 05:45:29 +0200aforemny(~aforemny@2001:9e8:6ce9:2000:c495:2bb2:ad61:d989) aforemny
2025-05-07 05:46:25 +0200aforemny_(~aforemny@2001:9e8:6cc8:6800:9956:496f:fbf1:8d53) (Ping timeout: 248 seconds)
2025-05-07 05:47:48 +0200merijn(~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 252 seconds)
2025-05-07 05:59:09 +0200merijn(~merijn@host-vr.cgnat-g.v4.dfn.nl) merijn
2025-05-07 06:03:47 +0200merijn(~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 244 seconds)
2025-05-07 06:06:13 +0200tavare(~tavare@150.129.88.189)
2025-05-07 06:06:13 +0200tavare(~tavare@150.129.88.189) (Changing host)
2025-05-07 06:06:13 +0200tavare(~tavare@user/tavare) tavare
2025-05-07 06:06:13 +0200j1n37(~j1n37@user/j1n37) (Read error: Connection reset by peer)
2025-05-07 06:09:26 +0200j1n37(~j1n37@user/j1n37) j1n37
2025-05-07 06:10:23 +0200j1n37(~j1n37@user/j1n37) (Read error: Connection reset by peer)
2025-05-07 06:10:33 +0200merijn(~merijn@host-vr.cgnat-g.v4.dfn.nl) merijn
2025-05-07 06:11:27 +0200jmcantrell(~weechat@user/jmcantrell) (Quit: WeeChat 4.6.2)
2025-05-07 06:12:58 +0200jmcantrell(~weechat@user/jmcantrell) jmcantrell
2025-05-07 06:13:30 +0200j1n37(~j1n37@user/j1n37) j1n37
2025-05-07 06:14:43 +0200tavare(~tavare@user/tavare) (Remote host closed the connection)
2025-05-07 06:15:09 +0200merijn(~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 244 seconds)
2025-05-07 06:16:24 +0200tessier(~tessier@ip68-8-117-219.sd.sd.cox.net) tessier
2025-05-07 06:19:56 +0200j1n37(~j1n37@user/j1n37) (Read error: Connection reset by peer)
2025-05-07 06:22:57 +0200j1n37(~j1n37@user/j1n37) j1n37
2025-05-07 06:26:21 +0200merijn(~merijn@host-vr.cgnat-g.v4.dfn.nl) merijn
2025-05-07 06:31:26 +0200merijn(~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 252 seconds)
2025-05-07 06:32:10 +0200prdak(~Thunderbi@user/prdak) prdak
2025-05-07 06:36:34 +0200prdak(~Thunderbi@user/prdak) (Ping timeout: 252 seconds)
2025-05-07 06:42:09 +0200merijn(~merijn@host-vr.cgnat-g.v4.dfn.nl) merijn
2025-05-07 06:46:50 +0200merijn(~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 252 seconds)
2025-05-07 06:50:28 +0200sp1ff(~user@c-67-160-173-55.hsd1.wa.comcast.net) (Read error: Connection reset by peer)
2025-05-07 06:57:57 +0200merijn(~merijn@host-vr.cgnat-g.v4.dfn.nl) merijn
2025-05-07 07:02:41 +0200merijn(~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 244 seconds)
2025-05-07 07:05:27 +0200euleritian(~euleritia@dynamic-176-006-137-036.176.6.pool.telefonica.de) (Read error: Connection reset by peer)
2025-05-07 07:05:46 +0200euleritian(~euleritia@ip4d17f864.dynamic.kabel-deutschland.de)
2025-05-07 07:09:05 +0200euphores(~SASL_euph@user/euphores) (Ping timeout: 265 seconds)
2025-05-07 07:11:35 +0200merijn(~merijn@host-vr.cgnat-g.v4.dfn.nl) merijn
2025-05-07 07:12:36 +0200haritz(~hrtz@user/haritz) (Quit: ZNC 1.8.2+deb3.1+deb12u1 - https://znc.in)
2025-05-07 07:13:15 +0200euphores(~SASL_euph@user/euphores) euphores
2025-05-07 07:16:49 +0200merijn(~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 265 seconds)
2025-05-07 07:19:05 +0200bcksl(~bcksl@user/bcksl) (Ping timeout: 252 seconds)
2025-05-07 07:20:14 +0200JuanDaugherty(~juan@user/JuanDaugherty) JuanDaugherty
2025-05-07 07:21:25 +0200FragByte(~christian@user/fragbyte) (Ping timeout: 248 seconds)
2025-05-07 07:21:35 +0200FragByte(~christian@user/fragbyte) FragByte
2025-05-07 07:22:50 +0200bcksl(~bcksl@user/bcksl) bcksl
2025-05-07 07:26:03 +0200ByronJohnson(~bairyn@MAIL.DIGITALKINGDOM.ORG) (Ping timeout: 252 seconds)
2025-05-07 07:26:11 +0200ByronJohnson(~bairyn@MAIL.DIGITALKINGDOM.ORG) ByronJohnson
2025-05-07 07:27:17 +0200aku(aku@65.108.245.241) (Ping timeout: 248 seconds)
2025-05-07 07:27:20 +0200merijn(~merijn@host-vr.cgnat-g.v4.dfn.nl) merijn
2025-05-07 07:27:26 +0200aku(aku@65.108.245.241) eagleflo
2025-05-07 07:29:43 +0200Jonno_FTW(~come@user/jonno-ftw/x-0835346) (Ping timeout: 252 seconds)
2025-05-07 07:29:51 +0200Jonno_FTW(~come@api.carswap.me)
2025-05-07 07:29:51 +0200Jonno_FTW(~come@api.carswap.me) (Changing host)
2025-05-07 07:29:51 +0200Jonno_FTW(~come@user/jonno-ftw/x-0835346) Jonno_FTW
2025-05-07 07:29:56 +0200prasad(~Thunderbi@c-73-246-138-70.hsd1.in.comcast.net) (Remote host closed the connection)
2025-05-07 07:30:10 +0200weary-traveler(~user@user/user363627) (Read error: Connection reset by peer)
2025-05-07 07:30:12 +0200prasad(~Thunderbi@c-73-246-138-70.hsd1.in.comcast.net)
2025-05-07 07:30:35 +0200weary-traveler(~user@user/user363627) user363627
2025-05-07 07:31:11 +0200roconnor(~quassel@rocq/roconnor) (Ping timeout: 252 seconds)
2025-05-07 07:31:52 +0200roconnor(~quassel@rocq/roconnor) roconnor
2025-05-07 07:32:01 +0200merijn(~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 248 seconds)
2025-05-07 07:34:13 +0200euleritian(~euleritia@ip4d17f864.dynamic.kabel-deutschland.de) (Ping timeout: 265 seconds)
2025-05-07 07:34:27 +0200 <haskellbridge> <Liamzee> https://www.reddit.com/r/haskell/comments/1kg07xh/scrap_your_iteration_combinators/ sm
2025-05-07 07:34:31 +0200 <haskellbridge> <Liamzee> this is interesting when not taken literally, while I find Tom very nice, he's also a maximalist sometimes.
2025-05-07 07:35:21 +0200 <haskellbridge> <sm> why not discuss the ideas, not the person
2025-05-07 07:35:33 +0200 <haskellbridge> <Liamzee> the interesting idea is that effect-scoped for is equivalent to a particular iteration combinator
2025-05-07 07:35:33 +0200euleritian(~euleritia@dynamic-176-006-137-036.176.6.pool.telefonica.de)
2025-05-07 07:36:07 +0200sp1ff(~user@c-67-160-173-55.hsd1.wa.comcast.net) sp1ff
2025-05-07 07:36:13 +0200 <haskellbridge> <sm> sorry, just a friendly reminder based on past threads. Carry on
2025-05-07 07:36:44 +0200 <haskellbridge> <Liamzee> which is a natural and a substantial improvement to an imperative language, i guess the struggle is to see when it's applicable to Haskell (not that I'm saying it's never applicable to Haskell)
2025-05-07 07:37:17 +0200 <haskellbridge> <Liamzee> the maximalism is relevant insofar that I think that if you don't take a maximalist position or try to skim it out of the article, it's a great article
2025-05-07 07:39:45 +0200 <haskellbridge> <sm> I agree it's a fine article
2025-05-07 07:40:54 +0200 <haskellbridge> <sm> I don't find it convincing as general advice for haskell programmers. Or if that's not its goal, I misunderstood it
2025-05-07 07:41:33 +0200 <haskellbridge> <Liamzee> i guess i agree with you there
2025-05-07 07:42:08 +0200 <haskellbridge> <Liamzee> a lot of maximalist tendencies, you can get along with them, simply by agreeing with them around 80%, or looking for ways for them to be 80% right
2025-05-07 07:42:47 +0200 <haskellbridge> <Liamzee> then you still get a lot out of it, whereas if you end up becoming a maximalist yourself, going all or nothing, you're liable to throw the baby out with the bathwater
2025-05-07 07:43:08 +0200merijn(~merijn@host-vr.cgnat-g.v4.dfn.nl) merijn
2025-05-07 07:43:28 +0200 <haskellbridge> <sm> I just read it and gave some feedback, no more :)
2025-05-07 07:44:01 +0200 <haskellbridge> <Liamzee> sorry about that!
2025-05-07 07:45:46 +0200 <haskellbridge> <sm> no need Liamzee, I just didn't follow the maximalist comments, which is fine
2025-05-07 07:46:24 +0200 <haskellbridge> <sm> how's your startup going
2025-05-07 07:46:43 +0200 <haskellbridge> <Liamzee> ehhh, just going to hide doing FOSS for a while
2025-05-07 07:47:01 +0200 <haskellbridge> <Liamzee> if it goes nowhere at the FOSS stage, I hopefully still have useful work
2025-05-07 07:47:02 +0200 <haskellbridge> <maerwald> discussing personalities is sometimes valuable, but usually only when the person in question is part of the discussion and interested to engage
2025-05-07 07:48:28 +0200 <haskellbridge> <Liamzee> my mistake here, i was just trying to promote a positive reading of tomjaguarpaw's article
2025-05-07 07:48:34 +0200merijn(~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 272 seconds)
2025-05-07 07:49:24 +0200 <JuanDaugherty> bad ideas usually stand as such on their own wo personal invective
2025-05-07 07:50:10 +0200 <JuanDaugherty> and u could miss a gem they might emit
2025-05-07 07:50:34 +0200 <haskellbridge> <Liamzee> i'm not trying to attack tom, or call his ideas bad
2025-05-07 07:51:01 +0200 <JuanDaugherty> all haskellers are maximalist
2025-05-07 07:51:14 +0200 <haskellbridge> <maerwald> JuanDaugherty: are you suggesting to discuss the actual points people make? Ridiculous. Let me look up some of their sh*tposts on X first to discredit them ;)
2025-05-07 07:51:45 +0200 <haskellbridge> <sm> so, everyone! Is the article Good or Bad ? Shall Tom get a raise or be fired ? https://h2.jaguarpaw.co.uk/posts/scrap-your-iteration-combinators/
2025-05-07 07:51:48 +0200 <JuanDaugherty> maerwald :)
2025-05-07 07:51:53 +0200 <haskellbridge> <Liamzee> hey, that's mean
2025-05-07 07:52:03 +0200 <haskellbridge> <Liamzee> that's a bad way to discuss it
2025-05-07 07:52:07 +0200 <haskellbridge> <Liamzee> ugh, i regret everything i've said tonight
2025-05-07 07:52:09 +0200 <haskellbridge> <Liamzee> good night
2025-05-07 07:52:15 +0200jmcantrell(~weechat@user/jmcantrell) (Ping timeout: 260 seconds)
2025-05-07 07:52:23 +0200 <JuanDaugherty> dismissed prima facie based on title
2025-05-07 07:52:26 +0200 <haskellbridge> <maerwald> Liamzee: lol I wasn't referring to you
2025-05-07 07:52:39 +0200 <haskellbridge> <maerwald> but this has absolutely happened in our community
2025-05-07 07:53:06 +0200 <haskellbridge> <Liamzee> i mean SM :(
2025-05-07 07:53:49 +0200jle`(~jle`@2603:8001:3b00:11:43a3:4aa5:da69:7d43) (Ping timeout: 260 seconds)
2025-05-07 07:53:57 +0200 <haskellbridge> <sm> Liamzee what now ?? I'm sorry if I gave offense, no meanness intended! Since you brought up this article and got me thinking about it, I just hoped to hear a few more opinions
2025-05-07 07:54:16 +0200 <EvanR> FIGHT FIGHT
2025-05-07 07:54:22 +0200 <JuanDaugherty> formulas like 'no more X', i turn off from dislike of sales efforts
2025-05-07 07:54:29 +0200 <haskellbridge> <sm> it's late, we've got to have some fun in here
2025-05-07 07:54:35 +0200 <haskellbridge> <Liamzee> tom isn't here to defend himself :(
2025-05-07 07:54:40 +0200 <haskellbridge> <Liamzee> i just wanted to defend him :(
2025-05-07 07:54:40 +0200jle`(~jle`@2603:8001:3b00:11::1156) jle`
2025-05-07 07:54:50 +0200 <haskellbridge> <Liamzee> i think this is a misunderstanding :(
2025-05-07 07:55:00 +0200 <haskellbridge> <sm> come on now, nobody is attacking him. We love Tom.
2025-05-07 07:55:13 +0200 <haskellbridge> <sm> he write awesome posts
2025-05-07 07:55:24 +0200 <haskellbridge> <maerwald> Tom has strong opinions at times, but his reasoning is sharp
2025-05-07 07:55:31 +0200 <JuanDaugherty> well mean is OK just do it on principles not personalities
2025-05-07 07:55:47 +0200haskellbridgesm makes a pot of tea and passes a plate of cakes around
2025-05-07 07:57:05 +0200 <JuanDaugherty> trashing groups is OK, like capitalist knuckleheads
2025-05-07 07:57:55 +0200 <JuanDaugherty> the enemies of and parasites on doing
2025-05-07 07:58:39 +0200 <EvanR> antidisestablishmentarians
2025-05-07 07:58:47 +0200 <haskellbridge> <Liamzee> ultimately, how things work is that people come up with ideas, other people try them, people figure out how and where they're a bad idea, and use them within limits
2025-05-07 07:58:55 +0200merijn(~merijn@host-vr.cgnat-g.v4.dfn.nl) merijn
2025-05-07 08:04:05 +0200merijn(~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 248 seconds)
2025-05-07 08:04:24 +0200 <haskellbridge> <maerwald> Ok, let's discuss bad idea: Template Haskell
2025-05-07 08:04:34 +0200 <haskellbridge> <sm> oh must we
2025-05-07 08:04:52 +0200 <haskellbridge> <sm> TH BAD, mmkay... ?
2025-05-07 08:05:03 +0200 <haskellbridge> <maerwald> Real bad
2025-05-07 08:06:01 +0200 <haskellbridge> <sm> is there a Good subset or variant of it ? that we could rebrand with a cool name like comptime !
2025-05-07 08:06:08 +0200 <haskellbridge> <Bowuigi> Liamzee paradigm switches are useful and can make code clearer, but imperative is usually not the best one to switch to lol
2025-05-07 08:06:11 +0200 <JuanDaugherty> is that a joke? what mechanism do you suggest for affecting haskell compile at that level?
2025-05-07 08:06:24 +0200 <haskellbridge> <maerwald> Not a joke at all
2025-05-07 08:06:26 +0200 <dminuoso> Compiler plugins.
2025-05-07 08:06:45 +0200 <JuanDaugherty> i c
2025-05-07 08:06:49 +0200 <haskellbridge> <maerwald> TH causes lots of problems with bootstrapping, cross compiling and breaks certain invariants
2025-05-07 08:07:05 +0200 <JuanDaugherty> so?
2025-05-07 08:07:47 +0200 <dminuoso> maerwald: I feel like there is such a simple solution to all of this. Separate TH dependency set (plus a bit of cabal-wiring, so you get a th-depends section), and voila - problems start to disappear!
2025-05-07 08:08:08 +0200 <JuanDaugherty> that's work, and not make work; work the elimination of which is based on unreasonable expection
2025-05-07 08:08:27 +0200 <JuanDaugherty> also dev thing intrruding in ops
2025-05-07 08:08:43 +0200 <JuanDaugherty> or alternatively not properly separated
2025-05-07 08:08:58 +0200 <haskellbridge> <maerwald> the problem is you can't really know what TH is doing... is it "pure" and maybe just does some templating? Does it run code on the build machine? Does it depend on the environment? Is it reproducible?
2025-05-07 08:09:07 +0200 <dminuoso> Every time I look at it, the main headaches surrounding TH relate to mixing runtime and compile-time dependencies and linkage.
2025-05-07 08:09:12 +0200 <JuanDaugherty> maximalist on parade
2025-05-07 08:09:20 +0200 <JuanDaugherty> *ism
2025-05-07 08:09:31 +0200 <dminuoso> If we look at rust, its not as compile-time code is innately bad on the basis of not knowing what it may do.
2025-05-07 08:09:48 +0200 <haskellbridge> <sm> maybe TH needs bluefin!
2025-05-07 08:09:49 +0200 <JuanDaugherty> omg, rust? rly?
2025-05-07 08:09:55 +0200 <dminuoso> The argument is about as silly as saying "Dont use anything IO, we dont know what this is doing"
2025-05-07 08:10:02 +0200 <haskellbridge> <Bowuigi> Are those TH problems or staging problems? Or both?
2025-05-07 08:10:07 +0200 <dminuoso> It sounds like a hidden advertisement for effect systems.
2025-05-07 08:10:26 +0200 <dminuoso> Which ultimately is a documentation issue.
2025-05-07 08:10:53 +0200 <JuanDaugherty> *expectation
2025-05-07 08:11:03 +0200 <dminuoso> JuanDaugherty: I dont believe this to ever be an issue.
2025-05-07 08:11:07 +0200 <JuanDaugherty> *intruding
2025-05-07 08:11:14 +0200 <haskellbridge> <maerwald> runtime being "unpredictable" is one thing and kinda expected
2025-05-07 08:11:23 +0200 <haskellbridge> <maerwald> compile time being unpredictable is GARBAGE
2025-05-07 08:11:27 +0200 <dminuoso> in all my years, I have never heard a single user complain "I dont know whether this TH splice is doing network access"
2025-05-07 08:11:33 +0200 <dminuoso> It's just not a practical issue that ever concerns users.
2025-05-07 08:11:40 +0200 <dminuoso> It's a philosophical issue.
2025-05-07 08:11:43 +0200 <JuanDaugherty> dminuoso, yeah
2025-05-07 08:12:05 +0200 <haskellbridge> <maerwald> well, it causes problems with reproducible build artifacts
2025-05-07 08:12:10 +0200 <JuanDaugherty> and as always a depth of experience issue
2025-05-07 08:12:13 +0200 <haskellbridge> <maerwald> unless you reproduce the entire environment
2025-05-07 08:12:26 +0200haskellbridgesm is another one depending on TH all the time, I don't mess with it and it doesn't mess with me. But I know it's limiting the capabilities of the tools/language/platforms
2025-05-07 08:12:29 +0200 <dminuoso> maerwald: In large I dont expect this to actually be meaningful.
2025-05-07 08:12:36 +0200merijn(~merijn@host-vr.cgnat-g.v4.dfn.nl) merijn
2025-05-07 08:12:46 +0200 <haskellbridge> <maerwald> you mean you don't care about it
2025-05-07 08:12:48 +0200 <haskellbridge> <maerwald> ;)
2025-05-07 08:13:06 +0200 <dminuoso> Yes, there may be snowflake users that may look at it differently.
2025-05-07 08:13:38 +0200 <haskellbridge> <sm> I care that it's doing something useful for me, I care in that I'd love it to be better so it doesn't limit the tools (and so people don't constantly complain about it ... so boring.... :) :)
2025-05-07 08:13:50 +0200 <dminuoso> And we could address this by offering a limited TH set and a language pragma
2025-05-07 08:14:00 +0200 <dminuoso> Where large parts of IO are just removed.
2025-05-07 08:14:44 +0200 <haskellbridge> <Bowuigi> So what you need is a way to fake effect execution maerwald
2025-05-07 08:15:10 +0200 <haskellbridge> <sm> that seems to be the usual consensus when it's discussed dminuoso , I guess it's just another of those things that'll happen if ever there's money / need / focus for it
2025-05-07 08:15:23 +0200 <dminuoso> In practice if we look at the average user, the biggest issues about TH is linkage/cross-compilation related.
2025-05-07 08:16:20 +0200 <dminuoso> What I really want is to declare template-haskell-depends and template-haskell-libraries in my foo.cabal.
2025-05-07 08:16:21 +0200 <haskellbridge> <maerwald> Bowuigi: send the IO through an LLM prompt?
2025-05-07 08:16:43 +0200 <dminuoso> And not confuse build and runtime at every step of the way.
2025-05-07 08:16:55 +0200 <haskellbridge> <maerwald> dminuoso: so you use nix but don't care about reproducibility xD
2025-05-07 08:17:16 +0200 <dminuoso> maerwald: I use nix because NixOS is the sanest way to manage hundreds of servers.
2025-05-07 08:17:17 +0200 <JuanDaugherty> a nix fart
2025-05-07 08:17:19 +0200 <dminuoso> That's the sole reason.
2025-05-07 08:17:32 +0200 <dminuoso> reproducability is a red herring, honestly.
2025-05-07 08:17:40 +0200 <JuanDaugherty> see? mean on pkgs is OK too
2025-05-07 08:17:50 +0200 <haskellbridge> <sm> do you manage hundreds dminuoso ?
2025-05-07 08:17:59 +0200haskellbridgesm struggled to manage 2 tonight...
2025-05-07 08:18:07 +0200 <dminuoso> sm: Yes.
2025-05-07 08:18:15 +0200 <haskellbridge> <sm> nice!
2025-05-07 08:18:19 +0200 <haskellbridge> <maerwald> I think it's just a matter of what you're familiar with
2025-05-07 08:18:30 +0200 <haskellbridge> <maerwald> I managed "reproducible" servers with gentoo and binary packages
2025-05-07 08:18:38 +0200 <haskellbridge> <sm> yes, I haven't touched these for years and there's a lot to relearn
2025-05-07 08:19:33 +0200merijn(~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 248 seconds)
2025-05-07 08:19:48 +0200 <haskellbridge> <sm> bash setup scripts are the next step for me
2025-05-07 08:20:05 +0200 <haskellbridge> <Bowuigi> maerwald no I mean give them specific, deterministic and reproducible results without actually doing IO
2025-05-07 08:20:34 +0200 <haskellbridge> <sm> (anyone using https://hackage.haskell.org/package/propellor ?)
2025-05-07 08:20:43 +0200 <haskellbridge> <maerwald> dminuoso: are you at ZuriHac?
2025-05-07 08:20:57 +0200 <haskellbridge> <maerwald> sm: I used that one in prod. Not a fan
2025-05-07 08:20:57 +0200JuanDaughertyy
2025-05-07 08:21:25 +0200haskellbridgesm too, but didn't keep it
2025-05-07 08:21:47 +0200 <haskellbridge> <maerwald> you should treat servers like cattle, not like a child... if it misbehaves... shoot it
2025-05-07 08:21:54 +0200 <haskellbridge> <maerwald> and spawn a new one
2025-05-07 08:22:12 +0200 <dminuoso> People sell effect systems/deterministic things by bringing up far fetched and contrived problems, and then they go a long way to explain how their solution addresses that problem, and how bad it would be if this problem ever affected you.
2025-05-07 08:22:27 +0200 <haskellbridge> <sm> yup.. with bash.. (I feel like a cave man, but so be it 😂)
2025-05-07 08:22:43 +0200euleritian(~euleritia@dynamic-176-006-137-036.176.6.pool.telefonica.de) (Read error: Connection reset by peer)
2025-05-07 08:22:55 +0200 <JuanDaugherty> inventory isn even cattle
2025-05-07 08:23:00 +0200 <dminuoso> Or they introduce anecdotes..
2025-05-07 08:23:01 +0200euleritian(~euleritia@77.23.248.100)
2025-05-07 08:23:38 +0200 <haskellbridge> <maerwald> dminuoso: sounds like you're ok if my libraries work correctly 90% of the time. So I guess you don't mind if you get broken filepaths now and then
2025-05-07 08:23:55 +0200 <dminuoso> And honestly, Ive been on that side. I had a phase where I made loads of type tricks to solve contrived bugs that I never had, and then felt good about how I had code provably absent of bugs (that I never had)
2025-05-07 08:24:16 +0200 <dminuoso> And Haskell is great as a playground to do these experiments.
2025-05-07 08:24:16 +0200 <haskellbridge> <sm> soo.. don't rewrite TH with bluefin/effectful then ? Too much ?
2025-05-07 08:25:11 +0200JuanDaugherty(~juan@user/JuanDaugherty) (Quit: praxis.meansofproduction.biz (juan@acm.org))
2025-05-07 08:26:22 +0200 <haskellbridge> <maerwald> the main selling points of effects systems isn't even avoiding bugs
2025-05-07 08:26:28 +0200 <haskellbridge> <maerwald> it's composability
2025-05-07 08:26:48 +0200 <haskellbridge> <maerwald> not that I use any
2025-05-07 08:27:01 +0200 <dminuoso> If that was true IO would be the ideal solution as it is maximally composable.
2025-05-07 08:27:18 +0200 <dminuoso> effect systems exist *precisely* because they reduce composability.
2025-05-07 08:27:40 +0200 <dminuoso> In hopes of filtering out more bad programs than it filters out good programs.
2025-05-07 08:28:09 +0200 <dminuoso> But it begs the question if the number of bad programs filtered out if worth the pain.
2025-05-07 08:28:27 +0200 <haskellbridge> <maerwald> dminuoso: Yes, bluefin is just IO under the hood
2025-05-07 08:28:43 +0200 <haskellbridge> <sm> the goal is usually controlled composability, not a big ball of mud
2025-05-07 08:29:10 +0200 <haskellbridge> <maerwald> yes, if you compare it to e.g. mtl/transformers, then it's clear that it's more composable
2025-05-07 08:29:30 +0200 <haskellbridge> <maerwald> where in mtl/transformers you have to consciously think about the different stacks all the time
2025-05-07 08:29:35 +0200 <dminuoso> Well I wouldn't use mtl/transformers except for some local tricks
2025-05-07 08:29:47 +0200 <haskellbridge> <Bowuigi> I don't have enough computers to worry about reproducibility, or enough effects to worry about effect systems, but if you do, why not use the best tools available?
2025-05-07 08:29:58 +0200 <dminuoso> Transformer stacks are, in my opinion, just an experiment gone wild and spread around.
2025-05-07 08:30:00 +0200 <dminuoso> Much like PHp.
2025-05-07 08:30:07 +0200 <haskellbridge> <sm> we're arguing about what's best, you fool!
2025-05-07 08:30:33 +0200 <haskellbridge> <sm> oops did I say that out loud. Sorry Bowuigi :)
2025-05-07 08:30:33 +0200 <haskellbridge> <maerwald> dminuoso: So you're an IO maximalist
2025-05-07 08:30:38 +0200merijn(~merijn@host-vr.cgnat-g.v4.dfn.nl) merijn
2025-05-07 08:30:48 +0200 <dminuoso> maerwald: ultimately, if you are suggesting you have a library that induces 90% reproducability in TH splices, then effect systems are not the right choice
2025-05-07 08:30:52 +0200 <haskellbridge> <maerwald> writing Haskell code like in the 90s
2025-05-07 08:31:03 +0200 <dminuoso> Just dont use piss poor libraries that do network calls in the middle ofyour $(makeFromJSON) ?
2025-05-07 08:31:13 +0200 <haskellbridge> <maerwald> lmao
2025-05-07 08:31:17 +0200emmanuelux(~emmanuelu@user/emmanuelux) (Quit: au revoir)
2025-05-07 08:31:34 +0200 <dminuoso> That is, effect systems dont fix bad libraries.
2025-05-07 08:32:00 +0200 <dminuoso> They help in some situations where you have developers with less-than-ideal discipline
2025-05-07 08:33:15 +0200 <haskellbridge> <Bowuigi> sm np lol, I don't see much of a discussion though
2025-05-07 08:33:15 +0200 <dminuoso> And as with nix, there may be odd cases where reproducability has been an issue.
2025-05-07 08:33:30 +0200 <haskellbridge> <maerwald> well, as I said... I don't use effects systems. Mainly because whenever I looked at heavy effects system code... I realized it's impossible to reason what it will do _operationally_ ...don't denotational semantics me... I have to run my program in the end
2025-05-07 08:33:39 +0200 <dminuoso> But honestly, the main pain point for us with other solutions is not reproducability, its *expressivity* and *diagnostics*.
2025-05-07 08:33:43 +0200 <haskellbridge> <sm> Bowuigi I'm in the same boat as you
2025-05-07 08:33:53 +0200 <dminuoso> Now nix tosses away all kinds of diagnostics, and plenty of performance, but you get expressivity.
2025-05-07 08:35:18 +0200 <haskellbridge> <maerwald> ergonomics > expressivity :)
2025-05-07 08:36:04 +0200 <dminuoso> In nix they kind of go hand in hand.
2025-05-07 08:36:04 +0200merijn(~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 272 seconds)
2025-05-07 08:36:17 +0200 <haskellbridge> <maerwald> You mean lack of ergenomics?
2025-05-07 08:36:22 +0200 <dminuoso> I mean there's code ergonomics and tool ergonomics.
2025-05-07 08:36:43 +0200 <dminuoso> Unless we can agree expressivity to mean code ergonomics.
2025-05-07 08:36:48 +0200 <haskellbridge> <maerwald> well, nix has no boundaries between code and configuration
2025-05-07 08:36:52 +0200 <haskellbridge> <maerwald> so there goes your ergonomics
2025-05-07 08:38:30 +0200 <dminuoso> Yeah, though Im fine with the lack of that boundary.
2025-05-07 08:38:35 +0200 <haskellbridge> <maerwald> dminuoso: anyway, you didn't answer my question above ;)
2025-05-07 08:38:39 +0200 <dminuoso> At work we have some rigorous discipline to have minimal code logic.
2025-05-07 08:38:43 +0200 <dminuoso> maerwald: Which question?
2025-05-07 08:38:54 +0200 <haskellbridge> <maerwald> will you be at ZuriHac?
2025-05-07 08:39:02 +0200 <dminuoso> Probably yes.
2025-05-07 08:39:24 +0200 <haskellbridge> <maerwald> there'll probably be endless nix debates on the grass, lmao
2025-05-07 08:39:39 +0200 <haskellbridge> <Bowuigi> The declarative nature of Nix is great for everyone. The rest sometimes feels annoying
2025-05-07 08:39:59 +0200 <dminuoso> I recently decided to do munihac and zurihac in a biennial rotation. :)
2025-05-07 08:40:19 +0200 <dminuoso> Bowuigi: Yes. and I only like it for NixOS modules
2025-05-07 08:40:30 +0200 <dminuoso> For nix derivation it is a hopelessly horrible excercise.
2025-05-07 08:41:02 +0200 <dminuoso> You're essentially writing autotools parts but without any documentation how or in what order they execute, and what it done when.
2025-05-07 08:41:19 +0200 <haskellbridge> <maerwald> MuniHac at in September, which is bad weather... and I can't be bothered to fly twice from Asia to Europe
2025-05-07 08:41:21 +0200 <dminuoso> Declarative autotools sans documentation.
2025-05-07 08:41:32 +0200 <haskellbridge> <maerwald> autotools, lmao
2025-05-07 08:41:50 +0200 <dminuoso> Oh and you cant even inspect any of it.
2025-05-07 08:41:52 +0200 <haskellbridge> <maerwald> m4 is th the worst macro system in existence
2025-05-07 08:42:02 +0200 <haskellbridge> <Bowuigi> Reproducibility was annoying sometimes because it actively nerfed some programs
2025-05-07 08:42:17 +0200 <haskellbridge> <sm> hey I depend on m4, sometimes nothing else gets it done
2025-05-07 08:42:44 +0200 <haskellbridge> <maerwald> the best thing is when your configure has some syntax errors, but carries on anyway... uhm, bro
2025-05-07 08:43:27 +0200 <dminuoso> Has there ever been a build system that isnt just bad?
2025-05-07 08:43:36 +0200euleritian(~euleritia@77.23.248.100) (Read error: Connection reset by peer)
2025-05-07 08:43:39 +0200 <haskellbridge> <Bowuigi> No
2025-05-07 08:43:45 +0200euleritian(~euleritia@77.23.248.100)
2025-05-07 08:43:47 +0200 <haskellbridge> <sm> hmmm
2025-05-07 08:44:01 +0200 <dminuoso> There's certainly a plethora of build systems that claim they finally solved all the bad parts...
2025-05-07 08:44:05 +0200 <haskellbridge> <maerwald> premake, SCons? xD
2025-05-07 08:44:07 +0200euleritian(~euleritia@77.23.248.100) (Remote host closed the connection)
2025-05-07 08:44:08 +0200 <dminuoso> Just to replace them with a different kind of bad.
2025-05-07 08:44:28 +0200 <haskellbridge> <sm> Shake is quite powerful
2025-05-07 08:44:37 +0200 <haskellbridge> <maerwald> sm: Too powerful, imo
2025-05-07 08:44:57 +0200 <haskellbridge> <sm> and also not enough (only one shake file / process per directory)
2025-05-07 08:44:57 +0200euleritian(~euleritia@77.23.248.100)
2025-05-07 08:45:45 +0200 <haskellbridge> <Bowuigi> Because when something is good, everyone wants to use it for everything, thus making it bad
2025-05-07 08:46:23 +0200 <haskellbridge> <maerwald> So now Haskell is bad?
2025-05-07 08:46:25 +0200merijn(~merijn@host-vr.cgnat-g.v4.dfn.nl) merijn
2025-05-07 08:46:55 +0200 <haskellbridge> <Bowuigi> At some things, yes
2025-05-07 08:46:58 +0200 <haskellbridge> <sm> we all know its badness :)
2025-05-07 08:48:53 +0200mistivia(~mistivia@user/mistivia) (Ping timeout: 248 seconds)
2025-05-07 08:49:17 +0200 <haskellbridge> <Bowuigi> But I was talking about build systems, not languages :)
2025-05-07 08:49:25 +0200j1n37(~j1n37@user/j1n37) (Ping timeout: 248 seconds)
2025-05-07 08:50:06 +0200j1n37(~j1n37@user/j1n37) j1n37
2025-05-07 08:51:11 +0200merijn(~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 244 seconds)
2025-05-07 08:51:41 +0200mistivia(~mistivia@user/mistivia) mistivia
2025-05-07 08:52:34 +0200 <haskellbridge> <maerwald> dminuoso: what's your opinion on frp?
2025-05-07 08:56:55 +0200tromp(~textual@2001:1c00:3487:1b00:d43:3b62:1503:cb84)
2025-05-07 09:00:02 +0200caconym7(~caconym@user/caconym) (Quit: bye)
2025-05-07 09:00:42 +0200caconym7(~caconym@user/caconym) caconym
2025-05-07 09:01:08 +0200acidjnk(~acidjnk@p200300d6e71c4f51a913f462df63336d.dip0.t-ipconnect.de) acidjnk
2025-05-07 09:05:05 +0200lortabac(~lortabac@2a01:e0a:541:b8f0:55ab:e185:7f81:54a4)
2025-05-07 09:09:07 +0200CiaoSen(~Jura@2a02:8071:64e1:da0:5a47:caff:fe78:33db) CiaoSen
2025-05-07 09:12:54 +0200Sgeo(~Sgeo@user/sgeo) (Read error: Connection reset by peer)
2025-05-07 09:14:42 +0200rvalue-(~rvalue@user/rvalue) rvalue
2025-05-07 09:14:53 +0200rvalue(~rvalue@user/rvalue) (Read error: Connection reset by peer)
2025-05-07 09:21:30 +0200rvalue-rvalue
2025-05-07 09:22:55 +0200 <haskellbridge> <hellwolf> maerwald: I will be at ZuriHac. Looking forward to seeing you in person. Not sure I will engage with your nix debate though :p
2025-05-07 09:23:39 +0200 <haskellbridge> <maerwald> I do have friends who use nix... so there is that xD
2025-05-07 09:24:52 +0200 <haskellbridge> <hellwolf> :p good to know that we may become friends still.
2025-05-07 09:26:18 +0200sajenim(~sajenim@user/sajenim) (Quit: WeeChat 4.4.3)
2025-05-07 09:26:20 +0200ljdarj(~Thunderbi@user/ljdarj) ljdarj
2025-05-07 09:26:26 +0200 <haskellbridge> <hellwolf> I do want to sell Haskell. But I guess I am at the choir at ZuriHac.
2025-05-07 09:27:35 +0200 <haskellbridge> <hellwolf> But this thread is so confusing. So, for_ good or not
2025-05-07 09:27:48 +0200 <haskellbridge> <hellwolf> no answer. IRC at its finest.
2025-05-07 09:28:14 +0200fp(~Thunderbi@wireless-86-50-140-117.open.aalto.fi) fp
2025-05-07 09:28:35 +0200sord937(~sord937@gateway/tor-sasl/sord937) sord937
2025-05-07 09:33:30 +0200chele(~chele@user/chele) chele
2025-05-07 09:35:11 +0200merijn(~merijn@77.242.116.146) merijn
2025-05-07 09:36:59 +0200sabathan2(~sabathan@amarseille-159-1-12-107.w86-203.abo.wanadoo.fr) (Read error: Connection reset by peer)
2025-05-07 09:39:28 +0200 <haskellbridge> <hellwolf> I guess the idea being sold by tom, if interpolated, is that for_ is at the sweet spot where it addresses /most/ of our iteration needs while being also friendly to people (as a word, or similar to foreach, in other languages).
2025-05-07 09:39:31 +0200 <haskellbridge> ... long message truncated: https://kf8nh.com/_heisenbridge/media/kf8nh.com/nixvJLeXrGvewcPZQffWwHnL/5n5W18Cg9vc (3 lines)
2025-05-07 09:40:24 +0200 <haskellbridge> <hellwolf> Oops, it's IRC. And probably my message was squashed in the irc world.
2025-05-07 09:40:52 +0200sabathan2(~sabathan@amarseille-159-1-12-107.w86-203.abo.wanadoo.fr)
2025-05-07 09:43:54 +0200 <haskellbridge> <Bowuigi> I actually answered, I cite: "Paradigm switches are useful and can make code clearer, but imperative is usually not the best one to switch to lol"
2025-05-07 09:45:05 +0200darkstardevx(~darkstard@50.53.3.2) darkstardevx
2025-05-07 09:45:25 +0200darkstardevx(~darkstard@50.53.3.2) (Remote host closed the connection)
2025-05-07 09:46:24 +0200 <haskellbridge> <hellwolf> tom is openly a imperative 5th column in haskell republic.
2025-05-07 09:46:24 +0200 <haskellbridge> okay, now i am in danger of being ad hominen. but i swear i can quote his words
2025-05-07 09:46:26 +0200 <haskellbridge> <Bowuigi> IMO, for bad unless for is exactly what you need
2025-05-07 09:47:01 +0200 <haskellbridge> <hellwolf> that's saying nothing :D
2025-05-07 09:49:38 +0200 <haskellbridge> <Bowuigi> Don't "unroll the definition" unless it's absolutely necessary I guess
2025-05-07 09:53:33 +0200tzh(~tzh@c-76-115-131-146.hsd1.or.comcast.net) (Quit: zzz)
2025-05-07 09:54:54 +0200 <haskellbridge> <Bowuigi> I'm against the idea that imperative code is inherently "more intuitive"/"fundamental in programming" and all that, I don't think for makes things that much clearer
2025-05-07 09:55:47 +0200 <haskellbridge> <hellwolf> I tend to agree. That's conflating current culture and popularity with ideal
2025-05-07 09:55:59 +0200 <haskellbridge> <hellwolf> Programming populists.
2025-05-07 09:56:59 +0200 <haskellbridge> <hellwolf> okay, let's rather discuss technical cases. otherwise I can be sometimes too meta. I do armchair philosophy with friends as a hobby, it's a bad habit.
2025-05-07 09:57:21 +0200 <haskellbridge> <magic_rb> I have a specific question related to this kinda
2025-05-07 09:57:58 +0200machinedgod(~machinedg@d108-173-18-100.abhsia.telus.net) machinedgod
2025-05-07 09:59:02 +0200 <haskellbridge> <magic_rb> So im writing a FAT12/16/32 driver for.my thesis and im struggling to imagine how to write this "not like C code". If you look at the "Programming Guide" section in https://wiki.osdev.org/FAT and scroll down there is a list of 8 steps that need to be done for reading out a single 32-byte entry
2025-05-07 10:00:04 +0200xff0x(~xff0x@fsb6a9491c.tkyc517.ap.nuro.jp) (Ping timeout: 252 seconds)
2025-05-07 10:00:35 +0200 <haskellbridge> <magic_rb> My code is currently a while loop with if statements roughly corresponding to the steps there, all wrapped in a StateT which contains a Ptr Word8, ByteArray and MVector FATEntry. As you can see none of this is very "functional"
2025-05-07 10:00:42 +0200 <haskellbridge> <magic_rb> But i dont know how to make it more functiinal
2025-05-07 10:05:02 +0200 <haskellbridge> <Bowuigi> It's parsing 32 bytes
2025-05-07 10:05:44 +0200 <haskellbridge> <Bowuigi> Use flatparse for it
2025-05-07 10:06:01 +0200ft(~ft@p4fc2a6e6.dip0.t-ipconnect.de) (Quit: leaving)
2025-05-07 10:06:12 +0200 <haskellbridge> <sm> if the task is a procedure, it's a procedure. Write the code that's most natural for it
2025-05-07 10:07:38 +0200 <haskellbridge> <Bowuigi> Yeah that also works
2025-05-07 10:08:51 +0200 <haskellbridge> <magic_rb> Bowuigi flatparse is fascinating but i dont have a bytestring. I have a Ptr to a mmaped file.
2025-05-07 10:09:41 +0200 <haskellbridge> <magic_rb> sm indeed, but thats like the whole driver, so then the conclusion of my thesis would be "dont use haskell for this" :P
2025-05-07 10:09:54 +0200 <haskellbridge> <magic_rb> So im trying to see if im perhaps missing something
2025-05-07 10:10:05 +0200 <haskellbridge> <Bowuigi> Parser combinators in general seem to fit
2025-05-07 10:10:32 +0200 <haskellbridge> <sm> haskell code doesn't have to look functional. It's a good imperative language too
2025-05-07 10:11:02 +0200 <tomsmeding> magic_rb: what does that code snippet look like?
2025-05-07 10:11:05 +0200 <haskellbridge> <sm> but I don't know if it's the right language for your thesis problem.. what's the argument of the thesis ?
2025-05-07 10:11:41 +0200 <haskellbridge> <magic_rb> Seeing if a FUSE FAT driver can be done in haskell, while remaining performant and haskell-y
2025-05-07 10:11:45 +0200 <haskellbridge> <magic_rb> Essentially
2025-05-07 10:12:07 +0200 <haskellbridge> <magic_rb> tomsmeding will share, give me a sec
2025-05-07 10:12:27 +0200 <haskellbridge> <sm> alright, well that might involve some procedural-looking code, and if so that's fine, I'd say
2025-05-07 10:13:46 +0200 <haskellbridge> <sm> at least to start with. You might get some refactoring ideas
2025-05-07 10:13:53 +0200 <tomsmeding> magic_rb: and also, you say "can't use flatparse because I don't have a bytestring" -- may be true, but there's no reason one cannot write (or hack) a parser combinator library to work on a Ptr instead
2025-05-07 10:14:09 +0200 <tomsmeding> and one that's currently written to work on ByteString is probably a good place to start :p
2025-05-07 10:14:20 +0200 <tomsmeding> I'd be surprised if it's a lot of work
2025-05-07 10:16:00 +0200 <haskellbridge> <Bowuigi> Try various approaches and see what is more elegant, that's the Haskell way (tm)
2025-05-07 10:17:44 +0200 <haskellbridge> <magic_rb> tomsmeding: https://paste.tomsmeding.com/RKZytHDb
2025-05-07 10:18:04 +0200 <haskellbridge> <magic_rb> the ifs could be done with case, see that already
2025-05-07 10:18:19 +0200 <haskellbridge> <magic_rb> finished it yesterday so there is some low hanging fruit
2025-05-07 10:18:57 +0200 <haskellbridge> <magic_rb> sm: so far im fresh out on the ideas :P and theoretically the deadline is in 2 months, i really despise the dutch system where you have 3 months for you thesis
2025-05-07 10:19:16 +0200 <haskellbridge> <magic_rb> im still considering extending my bsc just because of the thesis so i can submit something im actually happy with
2025-05-07 10:20:03 +0200sajenim(~sajenim@user/sajenim) sajenim
2025-05-07 10:20:15 +0200 <haskellbridge> <sm> have you achieved the goals, other than how the code looks ? does it work, is it performant ?
2025-05-07 10:20:56 +0200 <tomsmeding> magic_rb: those manual read-at-offset and plusPtr operations scream for parser combinators
2025-05-07 10:21:56 +0200 <haskellbridge> <magic_rb> sm: it does so far, doesnt mean im happy with it :P
2025-05-07 10:22:36 +0200 <tomsmeding> magic_rb: where does that filename field on line 42 come from?
2025-05-07 10:22:37 +0200 <haskellbridge> <sm> that's great, so just refactoring code golfing remains. That's fun
2025-05-07 10:23:09 +0200 <tomsmeding> perhaps you expect to first get into the 'then' on line 31?
2025-05-07 10:23:14 +0200 <haskellbridge> <magic_rb> yeah
2025-05-07 10:23:17 +0200 <haskellbridge> <sm> a field in PeekDirectoryState isn't it ?
2025-05-07 10:23:21 +0200 <haskellbridge> <magic_rb> its accumulated
2025-05-07 10:23:28 +0200 <haskellbridge> <magic_rb> but its broken, i misunderstood how it works
2025-05-07 10:23:37 +0200 <haskellbridge> <magic_rb> but yeah you accumulate the filename over possibly many entries
2025-05-07 10:23:42 +0200 <tomsmeding> I see
2025-05-07 10:24:00 +0200 <tomsmeding> I see no functionality for handling a non-long filename, is why I was confused
2025-05-07 10:24:01 +0200 <haskellbridge> <magic_rb> the exact structure of it is super fucked, its like 0-7 then 10-13 then 18-24 or something like that
2025-05-07 10:24:15 +0200 <haskellbridge> <magic_rb> yeah thats also missing, something i figured out how to do yesterday
2025-05-07 10:24:32 +0200 <haskellbridge> <magic_rb> the official doc for FAT32 is horrendous and the osdev wiki page is only marginally better
2025-05-07 10:24:35 +0200 <tomsmeding> why is the filename a mutablebytearray that you resize every time you append a little chunk for it?
2025-05-07 10:24:55 +0200 <haskellbridge> <magic_rb> probably should have been a Strict ByteString ?
2025-05-07 10:25:11 +0200 <tomsmeding> why not represent it as a list of (Ptr Word8, Int) pairs, and then collect the filename in one go after reading all chunks
2025-05-07 10:25:31 +0200 <tomsmeding> separates responsibility of the parser (this code) and the whole byte array writing nonsense
2025-05-07 10:25:40 +0200 <haskellbridge> <magic_rb> oh thats a great idea
2025-05-07 10:25:49 +0200 <haskellbridge> <sm> 👍️
2025-05-07 10:25:50 +0200 <haskellbridge> <magic_rb> thanks
2025-05-07 10:27:43 +0200 <tomsmeding> similar question for `s ^. output`; it's a VM-something that you manually unsafeGrow by 1 every time you find an entry
2025-05-07 10:27:55 +0200 <haskellbridge> <magic_rb> yeah will also do that one
2025-05-07 10:27:57 +0200 <tomsmeding> that sounds like O(n^2) because presumably that grow operation is O(n)
2025-05-07 10:28:27 +0200 <haskellbridge> <magic_rb> didnt think of deferring it to later with the [] idea, dont know why that didnt occur to me
2025-05-07 10:28:57 +0200 <tomsmeding> both of these things allow you to separate the things that _must_ happen procedurally (parsing) and the things that can happen more functionally (albeit with effects)
2025-05-07 10:29:38 +0200 <tomsmeding> even if effectful, "collect all these chunks and concatenate them into a filename" feels more functional-style than "at every found chunk, enlarge the filename allocation and write a chunk there"
2025-05-07 10:30:16 +0200 <haskellbridge> <sm> +1 for separating all the things that can be separated
2025-05-07 10:31:18 +0200 <haskellbridge> <magic_rb> ill try to get a parser combinator into the codebase
2025-05-07 10:33:20 +0200__monty__(~toonn@user/toonn) toonn
2025-05-07 10:33:50 +0200 <haskellbridge> <magic_rb> tomsmeding: i think "newtype PeekT p m a = PeekT (StateT p m a)" is sufficient, holds the pointer and returns a peeked result
2025-05-07 10:34:00 +0200 <haskellbridge> <magic_rb> is there a reason why not to base it on StateT?
2025-05-07 10:34:36 +0200 <tomsmeding> in a parser monad you usually not only have state, but also error handling (an ExceptT effect) and some kind of backtracking support
2025-05-07 10:34:40 +0200 <tomsmeding> I'm not sure if you need those here
2025-05-07 10:34:56 +0200 <haskellbridge> <magic_rb> dont think so
2025-05-07 10:35:22 +0200 <tomsmeding> e.g. in flatparse, the basic result of the function inside the monad is https://hackage.haskell.org/package/flatparse-0.5.2.1/docs/FlatParse-Basic.html#t:ResI-35-
2025-05-07 10:35:38 +0200 <tomsmeding> which is "success, here is the new state (Addr#)", or "failure, backtrack", or "fatal failure, error"
2025-05-07 10:35:52 +0200 <tomsmeding> by using just StateT you're skipping the 2nd and 3rd options
2025-05-07 10:36:07 +0200 <tomsmeding> but it might be okay for your purposes!
2025-05-07 10:36:55 +0200 <haskellbridge> <magic_rb> think it sholud be fine?
2025-05-07 10:37:09 +0200 <haskellbridge> <magic_rb> ill have to if it instead of a Alternative instance
2025-05-07 10:37:15 +0200 <tomsmeding> peek :: (Storable a, Monad m) => PeekT (Ptr ()) m a; skip :: Monad m => Int -> PeekT (Ptr ()) m ()
2025-05-07 10:37:27 +0200 <tomsmeding> right
2025-05-07 10:37:48 +0200 <tomsmeding> (I suspect you'll want to hard-code that p to Ptr ())
2025-05-07 10:38:20 +0200 <haskellbridge> <magic_rb> yeah i have it as Ptr ()
2025-05-07 10:39:07 +0200 <tomsmeding> this parser combinator approach may fail if you need to read a value towards the end of a structure and based on that decide how to parse the start of that structure
2025-05-07 10:39:16 +0200 <tomsmeding> because the assumption is that you proceed forward during parsing, not backward
2025-05-07 10:39:34 +0200lortabac(~lortabac@2a01:e0a:541:b8f0:55ab:e185:7f81:54a4) (Ping timeout: 272 seconds)
2025-05-07 10:39:37 +0200 <tomsmeding> though it's just peek/skip I'm not sure one can really call this "parser combinators" :p
2025-05-07 10:39:43 +0200 <tomsmeding> just "useful helper functions"
2025-05-07 10:39:51 +0200 <tomsmeding> which is largely what parser combinators are anyway
2025-05-07 10:40:07 +0200 <haskellbridge> <magic_rb> yeah its very simple currently
2025-05-07 10:40:19 +0200 <tomsmeding> simple is good
2025-05-07 10:43:36 +0200fp(~Thunderbi@wireless-86-50-140-117.open.aalto.fi) (Ping timeout: 276 seconds)
2025-05-07 10:43:55 +0200sord937(~sord937@gateway/tor-sasl/sord937) (Remote host closed the connection)
2025-05-07 10:44:47 +0200sord937(~sord937@gateway/tor-sasl/sord937) sord937
2025-05-07 10:47:47 +0200tromp(~textual@2001:1c00:3487:1b00:d43:3b62:1503:cb84) (Quit: My iMac has gone to sleep. ZZZzzz…)
2025-05-07 10:58:29 +0200j1n37-(~j1n37@user/j1n37) j1n37
2025-05-07 10:59:28 +0200xff0x(~xff0x@fsb6a9491c.tkyc517.ap.nuro.jp)
2025-05-07 10:59:38 +0200j1n37(~j1n37@user/j1n37) (Ping timeout: 265 seconds)
2025-05-07 11:02:13 +0200sord937(~sord937@gateway/tor-sasl/sord937) (Remote host closed the connection)
2025-05-07 11:02:32 +0200sord937(~sord937@gateway/tor-sasl/sord937) sord937
2025-05-07 11:10:11 +0200fp(~Thunderbi@2001:708:20:1406::1370) fp
2025-05-07 11:11:01 +0200j1n37(~j1n37@user/j1n37) j1n37
2025-05-07 11:11:42 +0200tromp(~textual@2001:1c00:3487:1b00:d43:3b62:1503:cb84)
2025-05-07 11:12:07 +0200j1n37-(~j1n37@user/j1n37) (Ping timeout: 276 seconds)
2025-05-07 11:14:42 +0200lortabac(~lortabac@2a0d:e487:53f:1bb4:a731:33f3:afa0:8130)
2025-05-07 11:22:02 +0200Unicorn_Princess(~Unicorn_P@user/Unicorn-Princess/x-3540542) Unicorn_Princess
2025-05-07 11:24:09 +0200econo_(uid147250@id-147250.tinside.irccloud.com) (Quit: Connection closed for inactivity)
2025-05-07 11:28:59 +0200ljdarj(~Thunderbi@user/ljdarj) (Ping timeout: 244 seconds)
2025-05-07 11:31:17 +0200sayurc(~sayurc@169.150.203.34) (Quit: Konversation terminated!)
2025-05-07 11:42:09 +0200ubert1(~Thunderbi@2a02:8109:ab8a:5a00:3fca:6e1e:2b37:f18d) ubert
2025-05-07 11:43:07 +0200takuan(~takuan@d8D86B601.access.telenet.be)
2025-05-07 11:44:27 +0200ubert1ubert
2025-05-07 11:49:20 +0200Square2(~Square4@user/square) (Ping timeout: 252 seconds)
2025-05-07 11:55:26 +0200lortabac(~lortabac@2a0d:e487:53f:1bb4:a731:33f3:afa0:8130) (Ping timeout: 268 seconds)
2025-05-07 12:07:24 +0200rvalue(~rvalue@user/rvalue) (Read error: Connection reset by peer)
2025-05-07 12:07:26 +0200ljdarj(~Thunderbi@user/ljdarj) ljdarj
2025-05-07 12:08:02 +0200rvalue(~rvalue@user/rvalue) rvalue
2025-05-07 12:12:20 +0200rvalue-(~rvalue@user/rvalue) rvalue
2025-05-07 12:13:24 +0200rvalue(~rvalue@user/rvalue) (Ping timeout: 260 seconds)
2025-05-07 12:19:02 +0200rvalue-rvalue
2025-05-07 12:23:45 +0200xff0x(~xff0x@fsb6a9491c.tkyc517.ap.nuro.jp) (Ping timeout: 244 seconds)
2025-05-07 12:35:23 +0200mistivia(~mistivia@user/mistivia) (Read error: Connection reset by peer)
2025-05-07 12:39:31 +0200lortabac(~lortabac@2a01:e0a:541:b8f0:55ab:e185:7f81:54a4) lortabac
2025-05-07 12:40:08 +0200mistivia(~mistivia@user/mistivia) mistivia
2025-05-07 12:52:08 +0200 <haskellbridge> <magic_rb> tomsmeding: https://paste.tomsmeding.com/TCeWNqJV
2025-05-07 12:52:13 +0200 <haskellbridge> <magic_rb> newest version which actually works
2025-05-07 12:53:43 +0200 <tomsmeding> is there no unsafePackCString without finalizer?
2025-05-07 12:54:08 +0200 <haskellbridge> <magic_rb> didnt see it
2025-05-07 12:54:42 +0200 <haskellbridge> <magic_rb> oh there is
2025-05-07 12:54:45 +0200 <haskellbridge> <magic_rb> its named weirdly
2025-05-07 12:54:50 +0200 <haskellbridge> <magic_rb> unsafePackCStringLen
2025-05-07 12:55:17 +0200 <tomsmeding> myself I would probably write that foldM_ loop like this: forM_ (zip chunks (scanl' (+) 0 (map snd chunks))) $ \((chunk, len), off) -> copyPtrToMutableByteArray ba off chunk len
2025-05-07 12:55:20 +0200 <tomsmeding> with a newline after the `->`
2025-05-07 12:55:36 +0200 <tomsmeding> but it already looks much nicer, well done
2025-05-07 12:56:11 +0200 <haskellbridge> <magic_rb> thank you :)
2025-05-07 12:56:18 +0200 <tomsmeding> what does savePtr do?
2025-05-07 12:56:25 +0200 <haskellbridge> <magic_rb> saves and restores the ptr
2025-05-07 12:56:32 +0200 <tomsmeding> restore read offset after you exit the block?
2025-05-07 12:56:35 +0200 <haskellbridge> <magic_rb> after the inner action
2025-05-07 12:56:35 +0200 <tomsmeding> right
2025-05-07 12:56:36 +0200 <haskellbridge> <magic_rb> yeah
2025-05-07 12:56:41 +0200 <haskellbridge> <magic_rb> it makes the math simpler
2025-05-07 12:56:47 +0200 <tomsmeding> what is 'continue'?
2025-05-07 12:56:56 +0200 <tomsmeding> oh the boolean
2025-05-07 12:57:36 +0200 <tomsmeding> perhaps it's nicer to put early-exiting in the monad instead of using whileM
2025-05-07 12:57:50 +0200 <tomsmeding> https://git.tomsmeding.com/yahb2/tree/src/ExitEarly.hs
2025-05-07 12:57:56 +0200 <tomsmeding> (this is ContT with a different name)
2025-05-07 12:58:45 +0200 <tomsmeding> perhaps it makes more sense to have a peekOffset instead of this repeated savePtr/skip/peek dance?
2025-05-07 12:59:15 +0200 <tomsmeding> gets you further from standard parser combinators, but nobody says that you must adhere to the standard construction
2025-05-07 13:00:02 +0200 <tomsmeding> and then I would rename the `peek` operation (which _does_ increment the read offset) to perhaps `readStorable`
2025-05-07 13:00:10 +0200 <tomsmeding> reserving "peek" for "read but don't advance cursor"
2025-05-07 13:01:46 +0200jespada(~jespada@r179-25-194-114.dialup.adsl.anteldata.net.uy) jespada
2025-05-07 13:02:01 +0200 <tomsmeding> what does the argument to peekPtr do?
2025-05-07 13:02:15 +0200 <tomsmeding> if it just returns a Ptr that you separately record the length for anyway
2025-05-07 13:02:44 +0200 <tomsmeding> magic_rb: note that Ptr is Storable
2025-05-07 13:02:57 +0200 <tomsmeding> oh ignore that, you're not reading pointers here
2025-05-07 13:03:48 +0200 <tomsmeding> and filenameLength does not need to be tracked explicitly, it can be computed by buildFilename
2025-05-07 13:04:15 +0200 <tomsmeding> (it's the final result of the scanl' in my code that I discard)
2025-05-07 13:08:16 +0200euleritian(~euleritia@77.23.248.100) (Remote host closed the connection)
2025-05-07 13:08:30 +0200euleritian(~euleritia@77.23.248.100)
2025-05-07 13:10:33 +0200j1n37(~j1n37@user/j1n37) (Ping timeout: 244 seconds)
2025-05-07 13:10:56 +0200j1n37(~j1n37@user/j1n37) j1n37
2025-05-07 13:13:52 +0200 <haskellbridge> <magic_rb> i track it separetely so im not traversing the list twice
2025-05-07 13:14:42 +0200 <haskellbridge> <magic_rb> yeah getPtr is just to fetch the current ptr value since i need to store it for later
2025-05-07 13:15:10 +0200xff0x(~xff0x@2405:6580:b080:900:b221:6d86:16ab:9b95)
2025-05-07 13:17:28 +0200fp(~Thunderbi@2001:708:20:1406::1370) (Ping timeout: 268 seconds)
2025-05-07 13:20:57 +0200fp(~Thunderbi@wireless-86-50-140-117.open.aalto.fi) fp
2025-05-07 13:22:12 +0200 <haskellbridge> <magic_rb> hm, i dont think i can lift PeekT through ContT
2025-05-07 13:22:15 +0200 <haskellbridge> <magic_rb> or at least i dont know how
2025-05-07 13:22:24 +0200 <haskellbridge> <magic_rb> i think for now this is good enough
2025-05-07 13:22:37 +0200 <haskellbridge> <magic_rb> ive never used ContT so trying to shove it in will probably only confuse me more
2025-05-07 13:24:26 +0200 <tomsmeding> magic_rb: you can steal my ExitEarly
2025-05-07 13:24:36 +0200 <tomsmeding> it's contained, if you use it you don't need to be aware that it's ContT
2025-05-07 13:24:42 +0200 <tomsmeding> it's MonadTrans too
2025-05-07 13:26:05 +0200 <haskellbridge> <magic_rb> Okay ill borrow then
2025-05-07 13:26:11 +0200 <haskellbridge> <magic_rb> Will have to credit you in the thesis :P
2025-05-07 13:26:15 +0200 <tomsmeding> :p
2025-05-07 13:26:22 +0200 <tomsmeding> no need for this
2025-05-07 13:26:30 +0200 <tomsmeding> but if you like, sure :)
2025-05-07 13:26:47 +0200tabaqui(~tabaqui@167.71.80.236) tabaqui
2025-05-07 13:29:16 +0200tromp(~textual@2001:1c00:3487:1b00:d43:3b62:1503:cb84) (Quit: My iMac has gone to sleep. ZZZzzz…)
2025-05-07 13:36:24 +0200 <haskellbridge> <magic_rb> tomsmeding how do i lift savePtr throught it? https://paste.tomsmeding.com/hHHHNSfn
2025-05-07 13:36:28 +0200acidjnk(~acidjnk@p200300d6e71c4f51a913f462df63336d.dip0.t-ipconnect.de) (Read error: Connection reset by peer)
2025-05-07 13:40:05 +0200acidjnk(~acidjnk@p200300d6e71c4f51b866ab59d2d5f2bd.dip0.t-ipconnect.de) acidjnk
2025-05-07 13:42:36 +0200j1n37-(~j1n37@user/j1n37) j1n37
2025-05-07 13:44:00 +0200j1n37(~j1n37@user/j1n37) (Ping timeout: 260 seconds)
2025-05-07 13:50:51 +0200 <dminuoso> maerwald: So you mentioned FRP. Do you mean FRP in the Conal Elliot sense?
2025-05-07 13:51:04 +0200 <haskellbridge> <maerwald> frp-reflex
2025-05-07 13:53:58 +0200Square2(~Square4@user/square) Square
2025-05-07 13:54:01 +0200 <dminuoso> Have not used it, and at $work it would be a bad fit for a bunch of reasons.
2025-05-07 13:54:48 +0200 <dminuoso> Tools are often used because they fit organizational structure and experience, FRP is just not that for us.
2025-05-07 13:58:20 +0200 <tomsmeding> magic_rb: you likely want `ExitEarlyT r Peek r` as your type
2025-05-07 13:58:39 +0200 <tomsmeding> where Peek is a monad that implements MonadPeek
2025-05-07 13:59:25 +0200 <tomsmeding> then you can implement MonadPeek for `ExitEarlyT r Peek` by just using `lift` from MonadTrans, which ExitEarlyT implements
2025-05-07 14:01:24 +0200 <tomsmeding> in `ExitEarlyT r m a`, `a` is the result of this particular small computation, `m` is the monad that it all runs in, and `r` is the return type of the top-level computation that you "exit early" to
2025-05-07 14:01:30 +0200fp(~Thunderbi@wireless-86-50-140-117.open.aalto.fi) (Ping timeout: 260 seconds)
2025-05-07 14:01:42 +0200 <tomsmeding> hence `exitEarly :: Monad m => r -> ExitEarlyT r m a`
2025-05-07 14:02:02 +0200SlackCoder(~SlackCode@64-94-63-8.ip.weststar.net.ky) SlackCoder
2025-05-07 14:03:02 +0200 <haskellbridge> <magic_rb> you lost me, whre do i want "ExitEarlyT r Peek r"
2025-05-07 14:03:45 +0200 <tomsmeding> that was a typo I guess, I meant "ExitEarlyT r Peek a"
2025-05-07 14:04:03 +0200 <haskellbridge> <magic_rb> "MonadPeek (ExitEarlyT r (PeekT m))" this?
2025-05-07 14:04:04 +0200 <tomsmeding> at the start of your function you'd `execExitEarlyT`
2025-05-07 14:04:10 +0200 <tomsmeding> yes
2025-05-07 14:04:30 +0200 <tomsmeding> that should be implementable using `lift`
2025-05-07 14:04:44 +0200 <tomsmeding> :t Control.Monad.Trans.Class.lift
2025-05-07 14:04:45 +0200 <lambdabot> (MonadTrans t, Monad m) => m a -> t m a
2025-05-07 14:04:53 +0200 <tomsmeding> t ~ ExitEarlyT r
2025-05-07 14:05:19 +0200 <haskellbridge> <magic_rb> but i need to go the other way
2025-05-07 14:05:29 +0200 <tomsmeding> where?
2025-05-07 14:05:43 +0200 <haskellbridge> <magic_rb> "savePtr :: m a -> m a"
2025-05-07 14:05:45 +0200 <haskellbridge> <magic_rb> when lifting that
2025-05-07 14:05:56 +0200 <tomsmeding> oh I see
2025-05-07 14:05:57 +0200 <haskellbridge> <magic_rb> " savePtr act = lift $ savePtr act"
2025-05-07 14:06:19 +0200 <tomsmeding> heh
2025-05-07 14:06:31 +0200 <haskellbridge> <magic_rb> https://paste.tomsmeding.com/5Gulp26p i solved in StateT kinda
2025-05-07 14:06:49 +0200 <haskellbridge> <magic_rb> this is unlifting right?
2025-05-07 14:08:45 +0200 <haskellbridge> <magic_rb> if i had "ExitEarlyT r m a -> m (Either r a)" then i can do it, thats where i got stuck
2025-05-07 14:14:49 +0200 <tomsmeding> meh, I don't know how to solve this nicely
2025-05-07 14:15:22 +0200 <tomsmeding> oh, let me try
2025-05-07 14:15:32 +0200 <dminuoso> maerwald: Why did you ask about frp by the way?
2025-05-07 14:15:57 +0200 <haskellbridge> <maerwald> I'm just being random
2025-05-07 14:19:41 +0200 <tomsmeding> magic_rb: I think you're right, lifting savePtr as-is is hard if not impossible
2025-05-07 14:19:48 +0200 <tomsmeding> without knowledge of the underlying monad
2025-05-07 14:20:01 +0200 <tomsmeding> you're using knowledge of the underlying monad (StateT) to solve it
2025-05-07 14:20:07 +0200 <haskellbridge> <magic_rb> indeed
2025-05-07 14:20:25 +0200 <haskellbridge> <magic_rb> im gonna stick to my whileM :P
2025-05-07 14:20:57 +0200 <tomsmeding> sure :p
2025-05-07 14:23:37 +0200bitdex(~bitdex@gateway/tor-sasl/bitdex) (Quit: = "")
2025-05-07 14:23:42 +0200Co0kie(~Jura@2a02:8071:64e1:da0:5a47:caff:fe78:33db) CiaoSen
2025-05-07 14:25:25 +0200CiaoSen(~Jura@2a02:8071:64e1:da0:5a47:caff:fe78:33db) (Ping timeout: 248 seconds)
2025-05-07 14:26:16 +0200__monty__(~toonn@user/toonn) (Ping timeout: 252 seconds)
2025-05-07 14:27:51 +0200weary-traveler(~user@user/user363627) (Remote host closed the connection)
2025-05-07 14:28:18 +0200__monty__(~toonn@user/toonn) toonn
2025-05-07 14:30:00 +0200fp(~Thunderbi@2001:708:20:1406::1370) fp
2025-05-07 14:33:03 +0200xff0x(~xff0x@2405:6580:b080:900:b221:6d86:16ab:9b95) (Ping timeout: 276 seconds)
2025-05-07 14:36:11 +0200xff0x(~xff0x@2405:6580:b080:900:c380:f27a:d8a3:29c7)
2025-05-07 14:37:03 +0200Co0kie(~Jura@2a02:8071:64e1:da0:5a47:caff:fe78:33db) (Ping timeout: 244 seconds)
2025-05-07 14:48:16 +0200tromp(~textual@2001:1c00:3487:1b00:d43:3b62:1503:cb84)
2025-05-07 14:48:17 +0200Pozyomka(~pyon@user/pyon) (Quit: brb)
2025-05-07 14:48:31 +0200Pozyomka(~pyon@user/pyon) pyon
2025-05-07 14:59:59 +0200euleritian(~euleritia@77.23.248.100) (Ping timeout: 252 seconds)
2025-05-07 15:00:27 +0200ystael(~ystael@user/ystael) ystael
2025-05-07 15:01:30 +0200euleritian(~euleritia@dynamic-176-006-142-050.176.6.pool.telefonica.de)
2025-05-07 15:09:16 +0200ttybitnik(~ttybitnik@user/wolper) ttybitnik
2025-05-07 15:21:22 +0200 <haskellbridge> <hellwolf> I have a thought about "simple Haskell".
2025-05-07 15:21:22 +0200 <haskellbridge> Would there be any similarity in asking people to speak "simple English", since most of the communication can go by with it?
2025-05-07 15:21:32 +0200 <haskellbridge> <hellwolf> (hope it's on topic)
2025-05-07 15:22:35 +0200lortabac(~lortabac@2a01:e0a:541:b8f0:55ab:e185:7f81:54a4) (Ping timeout: 260 seconds)
2025-05-07 15:26:00 +0200 <haskellbridge> <magic_rb> In a way yes, good analogy
2025-05-07 15:29:32 +0200 <haskellbridge> <hellwolf> On the same line, maybe we should treat new Haskellers as either language tourists or language immigrants
2025-05-07 15:29:51 +0200 <haskellbridge> <hellwolf> Speaking simple Haskell with them has its advantages
2025-05-07 15:30:24 +0200 <haskellbridge> <hellwolf> but it would be bizarre to ask English people to apeak Simple English in all occasions too. It's part of the culture.
2025-05-07 15:31:06 +0200SlackCoder(~SlackCode@64-94-63-8.ip.weststar.net.ky) (Quit: Leaving)
2025-05-07 15:35:43 +0200 <haskellbridge> <terrorjack> then what does "dependent English" looks like, i wonder
2025-05-07 15:40:14 +0200 <haskellbridge> <magic_rb> There have been cases of natural languages being simplified though. Cant recall one of the top of my head, but it has happened
2025-05-07 15:40:36 +0200 <haskellbridge> <magic_rb> There are also cases of languages which should be simplified _looks at german_
2025-05-07 15:42:50 +0200lortabac(~lortabac@2a0d:e487:134e:dfc4:bc9e:f34c:f24f:a0e7) lortabac
2025-05-07 15:44:21 +0200fp(~Thunderbi@2001:708:20:1406::1370) (Ping timeout: 252 seconds)
2025-05-07 15:44:42 +0200 <hellwolf> So, german is C++?
2025-05-07 15:45:33 +0200 <hellwolf> dependent English: "dependent English" is speaking with footnotes
2025-05-07 15:45:40 +0200 <hellwolf> in speeches
2025-05-07 15:47:54 +0200 <hellwolf> every definitions must be brought with each sentences.
2025-05-07 15:48:39 +0200 <hellwolf> or, less tongue-in-cheak, speaking like lawyers
2025-05-07 15:48:49 +0200 <hellwolf> hmm, maybe not, speaking like philosophers?
2025-05-07 15:49:02 +0200 <hellwolf> anyways, probably going too far with this analogy
2025-05-07 16:00:21 +0200hsw_(~hsw@112-104-12-126.adsl.dynamic.seed.net.tw) (Quit: Leaving)
2025-05-07 16:00:37 +0200hsw(~hsw@112-104-12-126.adsl.dynamic.seed.net.tw) hsw
2025-05-07 16:03:28 +0200 <mauke> <magic_rb> There have been cases of natural languages being simplified though. <- English
2025-05-07 16:03:47 +0200 <mauke> almost completely lost its declensions, conjugations, and grammatical genders
2025-05-07 16:04:02 +0200 <haskellbridge> <magic_rb> yeah i said there have been cases
2025-05-07 16:04:13 +0200 <haskellbridge> <magic_rb> i just took a stab at german for being needlessly complex