2025/03/05

2025-03-05 00:02:34 +0100merijn(~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 260 seconds)
2025-03-05 00:05:15 +0100tabaqui1(~root@87.200.129.102) (Ping timeout: 276 seconds)
2025-03-05 00:06:18 +0100messewix(~jmc@c-73-204-219-232.hsd1.fl.comcast.net)
2025-03-05 00:06:18 +0100messewix(~jmc@c-73-204-219-232.hsd1.fl.comcast.net) (Changing host)
2025-03-05 00:06:18 +0100messewix(~jmc@user/messewix) messewix
2025-03-05 00:11:48 +0100preflex(~preflex@user/mauke/bot/preflex) (Ping timeout: 246 seconds)
2025-03-05 00:12:19 +0100preflex(~preflex@user/mauke/bot/preflex) preflex
2025-03-05 00:13:07 +0100merijn(~merijn@host-vr.cgnat-g.v4.dfn.nl) merijn
2025-03-05 00:16:19 +0100alfiee(~alfiee@user/alfiee) alfiee
2025-03-05 00:17:37 +0100merijn(~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 252 seconds)
2025-03-05 00:20:32 +0100__monty__(~toonn@user/toonn) (Quit: leaving)
2025-03-05 00:20:42 +0100alfiee(~alfiee@user/alfiee) (Ping timeout: 244 seconds)
2025-03-05 00:26:50 +0100vanishingideal(~vanishing@user/vanishingideal) vanishingideal
2025-03-05 00:28:29 +0100merijn(~merijn@host-vr.cgnat-g.v4.dfn.nl) merijn
2025-03-05 00:30:13 +0100LainExperiments(~LainExper@user/LainExperiments) LainExperiments
2025-03-05 00:31:34 +0100doyougnu-(~doyougnu@syn-045-046-170-068.res.spectrum.com)
2025-03-05 00:32:57 +0100doyougnu(~doyougnu@syn-045-046-170-068.res.spectrum.com) (Ping timeout: 265 seconds)
2025-03-05 00:33:02 +0100merijn(~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 252 seconds)
2025-03-05 00:33:55 +0100peterbecich(~Thunderbi@syn-047-229-123-186.res.spectrum.com) (Ping timeout: 265 seconds)
2025-03-05 00:34:26 +0100__jmcantrell__(~weechat@user/jmcantrell) jmcantrell
2025-03-05 00:34:26 +0100jmcantrellGuest3365
2025-03-05 00:34:26 +0100Guest3365(644f1bed9a@user/jmcantrell) (Killed (tantalum.libera.chat (Nickname regained by services)))
2025-03-05 00:34:26 +0100__jmcantrell__jmcantrell
2025-03-05 00:34:36 +0100jmcantrell_(644f1bed9a@user/jmcantrell) jmcantrell
2025-03-05 00:43:52 +0100merijn(~merijn@host-vr.cgnat-g.v4.dfn.nl) merijn
2025-03-05 00:44:46 +0100Tuplanolla(~Tuplanoll@91-159-69-59.elisa-laajakaista.fi) Tuplanolla
2025-03-05 00:46:22 +0100Unicorn_Princess(~Unicorn_P@user/Unicorn-Princess/x-3540542) (Remote host closed the connection)
2025-03-05 00:48:18 +0100merijn(~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 244 seconds)
2025-03-05 00:57:48 +0100shr\ke(~shrike@user/shrke:31298) (Read error: Connection reset by peer)
2025-03-05 00:57:57 +0100shr\ke(~shrike@user/paxhumana) paxhumana
2025-03-05 00:57:57 +0100shr\ke(~shrike@user/paxhumana) (Changing host)
2025-03-05 00:57:57 +0100shr\ke(~shrike@user/shrke:31298) shr\ke
2025-03-05 00:59:14 +0100merijn(~merijn@host-vr.cgnat-g.v4.dfn.nl) merijn
2025-03-05 01:03:03 +0100alfiee(~alfiee@user/alfiee) alfiee
2025-03-05 01:03:49 +0100merijn(~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 260 seconds)
2025-03-05 01:07:19 +0100alfiee(~alfiee@user/alfiee) (Ping timeout: 260 seconds)
2025-03-05 01:10:16 +0100Sgeo(~Sgeo@user/sgeo) Sgeo
2025-03-05 01:14:36 +0100merijn(~merijn@host-vr.cgnat-g.v4.dfn.nl) merijn
2025-03-05 01:16:21 +0100cyphase(~cyphase@user/cyphase) (Ping timeout: 248 seconds)
2025-03-05 01:19:14 +0100merijn(~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 252 seconds)
2025-03-05 01:26:22 +0100peterbecich(~Thunderbi@syn-047-229-123-186.res.spectrum.com) peterbecich
2025-03-05 01:29:59 +0100merijn(~merijn@host-vr.cgnat-g.v4.dfn.nl) merijn
2025-03-05 01:34:37 +0100merijn(~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 252 seconds)
2025-03-05 01:39:11 +0100machinedgod(~machinedg@d108-173-18-100.abhsia.telus.net) machinedgod
2025-03-05 01:39:22 +0100 <jle`> does anyone know how duped TChans get GC'd? AFAICT from looking at the source (https://hackage.haskell.org/package/stm-2.5.3.1/docs/src/Control.Concurrent.STM.TChan.html#dupTChan) it adds the new reader hole to the shared write list, but when that new TChan gets GC'd doesn't the unused hole remain in the list?
2025-03-05 01:39:55 +0100 <jle`> but simon states that the TChan does clean up itself (https://github.com/haskell/stm/issues/21)
2025-03-05 01:40:10 +0100LainExperiments(~LainExper@user/LainExperiments) (Ping timeout: 240 seconds)
2025-03-05 01:40:38 +0100 <jle`> or maybe i am misunderstanding what 'write' is used for
2025-03-05 01:45:21 +0100merijn(~merijn@host-vr.cgnat-g.v4.dfn.nl) merijn
2025-03-05 01:46:34 +0100xff0x(~xff0x@2405:6580:b080:900:9c0d:a18a:824d:47d5) (Ping timeout: 260 seconds)
2025-03-05 01:48:09 +0100sprotte24(~sprotte24@p200300d16f1cc100391369cbcf60a0c3.dip0.t-ipconnect.de) (Quit: Leaving)
2025-03-05 01:48:09 +0100acidjnk_new(~acidjnk@p200300d6e7283f62f42219c1fddec46c.dip0.t-ipconnect.de) (Ping timeout: 268 seconds)
2025-03-05 01:49:47 +0100alfiee(~alfiee@user/alfiee) alfiee
2025-03-05 01:50:17 +0100yegorc(~yegorc@user/yegorc) (Leaving)
2025-03-05 01:50:23 +0100LainExperiments(~LainExper@user/LainExperiments) LainExperiments
2025-03-05 01:50:33 +0100merijn(~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 276 seconds)
2025-03-05 01:52:43 +0100 <jle`> oh okay the write hole doesn't reference the duped chans, maybe that's it
2025-03-05 01:54:04 +0100alfiee(~alfiee@user/alfiee) (Ping timeout: 252 seconds)
2025-03-05 01:55:14 +0100 <jle`> okay so i think the implementation is basically that each of the readers are climbing up a tvar-linked list essentially, so if one of the readers gets GC'd then it'd just stop reading the list and everytthing upstream of the remaining readers gets gc'd
2025-03-05 02:00:44 +0100merijn(~merijn@host-vr.cgnat-g.v4.dfn.nl) merijn
2025-03-05 02:01:33 +0100myxos(~myxos@syn-065-028-251-121.res.spectrum.com) myxokephale
2025-03-05 02:05:04 +0100merijn(~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 252 seconds)
2025-03-05 02:16:05 +0100merijn(~merijn@host-vr.cgnat-g.v4.dfn.nl) merijn
2025-03-05 02:23:18 +0100merijn(~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 268 seconds)
2025-03-05 02:23:18 +0100peterbecich(~Thunderbi@syn-047-229-123-186.res.spectrum.com) (Ping timeout: 268 seconds)
2025-03-05 02:33:06 +0100j1n37(~j1n37@user/j1n37) j1n37
2025-03-05 02:34:09 +0100merijn(~merijn@host-vr.cgnat-g.v4.dfn.nl) merijn
2025-03-05 02:35:03 +0100poscat(~poscat@user/poscat) (Ping timeout: 252 seconds)
2025-03-05 02:35:16 +0100cyphase(~cyphase@user/cyphase) cyphase
2025-03-05 02:35:51 +0100alfiee(~alfiee@user/alfiee) alfiee
2025-03-05 02:39:06 +0100merijn(~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 265 seconds)
2025-03-05 02:39:30 +0100cyphase(~cyphase@user/cyphase) (Ping timeout: 248 seconds)
2025-03-05 02:39:56 +0100poscat(~poscat@user/poscat) poscat
2025-03-05 02:40:33 +0100alfiee(~alfiee@user/alfiee) (Ping timeout: 265 seconds)
2025-03-05 02:46:51 +0100xff0x(~xff0x@fsb6a9491c.tkyc517.ap.nuro.jp)
2025-03-05 02:47:13 +0100machinedgod(~machinedg@d108-173-18-100.abhsia.telus.net) (Ping timeout: 252 seconds)
2025-03-05 02:49:32 +0100merijn(~merijn@host-vr.cgnat-g.v4.dfn.nl) merijn
2025-03-05 02:51:23 +0100LainExperiments(~LainExper@user/LainExperiments) (Quit: Client closed)
2025-03-05 02:53:50 +0100merijn(~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 252 seconds)
2025-03-05 02:54:03 +0100fp(~Thunderbi@89-27-29-68.bb.dnainternet.fi) fp
2025-03-05 02:54:16 +0100Tuplanolla(~Tuplanoll@91-159-69-59.elisa-laajakaista.fi) (Quit: Leaving.)
2025-03-05 03:00:39 +0100fp(~Thunderbi@89-27-29-68.bb.dnainternet.fi) (Ping timeout: 260 seconds)
2025-03-05 03:04:55 +0100merijn(~merijn@host-vr.cgnat-g.v4.dfn.nl) merijn
2025-03-05 03:09:08 +0100merijn(~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 244 seconds)
2025-03-05 03:20:17 +0100merijn(~merijn@host-vr.cgnat-g.v4.dfn.nl) merijn
2025-03-05 03:21:36 +0100alfiee(~alfiee@user/alfiee) alfiee
2025-03-05 03:24:14 +0100euphores(~SASL_euph@user/euphores) (Read error: Connection reset by peer)
2025-03-05 03:24:37 +0100merijn(~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 252 seconds)
2025-03-05 03:25:48 +0100alfiee(~alfiee@user/alfiee) (Ping timeout: 245 seconds)
2025-03-05 03:32:20 +0100euphores(~SASL_euph@user/euphores) euphores
2025-03-05 03:32:21 +0100notdabs(~Owner@2600:1700:69cf:9000:3d02:fb32:31ee:6acc) (Read error: Connection reset by peer)
2025-03-05 03:32:27 +0100ljdarj(~Thunderbi@user/ljdarj) (Quit: ljdarj)
2025-03-05 03:34:25 +0100hexreel(~hexreel@user/hexreel) hexreel
2025-03-05 03:35:40 +0100merijn(~merijn@host-vr.cgnat-g.v4.dfn.nl) merijn
2025-03-05 03:40:21 +0100merijn(~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 248 seconds)
2025-03-05 03:42:13 +0100hexreel(~hexreel@user/hexreel) ()
2025-03-05 03:51:02 +0100merijn(~merijn@host-vr.cgnat-g.v4.dfn.nl) merijn
2025-03-05 03:51:29 +0100Square(~Square@user/square) Square
2025-03-05 03:55:20 +0100Square2(~Square4@user/square) (Ping timeout: 244 seconds)
2025-03-05 03:55:21 +0100LainExperiments(~LainExper@user/LainExperiments) LainExperiments
2025-03-05 03:56:04 +0100merijn(~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 260 seconds)
2025-03-05 04:05:40 +0100LainExperiments(~LainExper@user/LainExperiments) (Ping timeout: 240 seconds)
2025-03-05 04:06:11 +0100tromp(~textual@2a02:a210:cba:8500:4189:9487:9abd:f78) (Ping timeout: 244 seconds)
2025-03-05 04:06:36 +0100merijn(~merijn@host-vr.cgnat-g.v4.dfn.nl) merijn
2025-03-05 04:07:29 +0100tavare(~tavare@150.129.88.189) tavare
2025-03-05 04:07:29 +0100tavare(~tavare@150.129.88.189) (Changing host)
2025-03-05 04:07:29 +0100tavare(~tavare@user/tavare) tavare
2025-03-05 04:07:40 +0100alfiee(~alfiee@user/alfiee) alfiee
2025-03-05 04:07:58 +0100anjii(~user@177.47.220.78) (Quit: goodnight)
2025-03-05 04:11:08 +0100merijn(~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 244 seconds)
2025-03-05 04:12:12 +0100alfiee(~alfiee@user/alfiee) (Ping timeout: 272 seconds)
2025-03-05 04:16:51 +0100cyphase(~cyphase@user/cyphase) cyphase
2025-03-05 04:21:59 +0100merijn(~merijn@host-vr.cgnat-g.v4.dfn.nl) merijn
2025-03-05 04:23:41 +0100peterbecich(~Thunderbi@syn-047-229-123-186.res.spectrum.com) peterbecich
2025-03-05 04:26:20 +0100merijn(~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 244 seconds)
2025-03-05 04:27:24 +0100tavare(~tavare@user/tavare) (Ping timeout: 272 seconds)
2025-03-05 04:28:29 +0100_xor(~xor@ip-66-42-132-175.dynamic.fuse.net) (Read error: Connection reset by peer)
2025-03-05 04:28:47 +0100tavare(~tavare@user/tavare) tavare
2025-03-05 04:31:14 +0100ystael(~ystael@user/ystael) (Ping timeout: 265 seconds)
2025-03-05 04:34:03 +0100_xor(~xor@ip-66-42-132-175.dynamic.fuse.net) _xor
2025-03-05 04:37:20 +0100merijn(~merijn@host-vr.cgnat-g.v4.dfn.nl) merijn
2025-03-05 04:41:59 +0100merijn(~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 252 seconds)
2025-03-05 04:43:47 +0100ljdarj(~Thunderbi@user/ljdarj) ljdarj
2025-03-05 04:45:32 +0100bitdex(~bitdex@gateway/tor-sasl/bitdex) bitdex
2025-03-05 04:47:48 +0100bilegeek(~bilegeek@108.sub-174-228-98.myvzw.com) bilegeek
2025-03-05 04:49:02 +0100ystael(~ystael@user/ystael) ystael
2025-03-05 04:52:44 +0100merijn(~merijn@host-vr.cgnat-g.v4.dfn.nl) merijn
2025-03-05 04:53:24 +0100alfiee(~alfiee@user/alfiee) alfiee
2025-03-05 04:54:44 +0100messewix(~jmc@user/messewix) (Quit: Konversation terminated!)
2025-03-05 04:54:49 +0100ystael(~ystael@user/ystael) (Ping timeout: 260 seconds)
2025-03-05 04:57:44 +0100alfiee(~alfiee@user/alfiee) (Ping timeout: 260 seconds)
2025-03-05 04:59:11 +0100merijn(~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 244 seconds)
2025-03-05 05:03:16 +0100peterbecich(~Thunderbi@syn-047-229-123-186.res.spectrum.com) (Ping timeout: 252 seconds)
2025-03-05 05:04:06 +0100ljdarj(~Thunderbi@user/ljdarj) (Ping timeout: 265 seconds)
2025-03-05 05:10:47 +0100merijn(~merijn@host-vr.cgnat-g.v4.dfn.nl) merijn
2025-03-05 05:15:17 +0100merijn(~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 248 seconds)
2025-03-05 05:26:09 +0100merijn(~merijn@host-vr.cgnat-g.v4.dfn.nl) merijn
2025-03-05 05:30:46 +0100merijn(~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 252 seconds)
2025-03-05 05:39:08 +0100alfiee(~alfiee@user/alfiee) alfiee
2025-03-05 05:41:32 +0100merijn(~merijn@host-vr.cgnat-g.v4.dfn.nl) merijn
2025-03-05 05:43:36 +0100alfiee(~alfiee@user/alfiee) (Ping timeout: 252 seconds)
2025-03-05 05:45:48 +0100merijn(~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 245 seconds)
2025-03-05 05:47:48 +0100Guest42(~Guest42@220-233-36-23.ip4.exetel.com.au)
2025-03-05 05:50:20 +0100aforemny(~aforemny@i577BEE31.versanet.de) (Ping timeout: 244 seconds)
2025-03-05 05:51:18 +0100aforemny(~aforemny@2001:9e8:6ce5:d00:19b4:f9fd:f481:8f07) aforemny
2025-03-05 05:53:13 +0100Guest42(~Guest42@220-233-36-23.ip4.exetel.com.au) (Quit: Client closed)
2025-03-05 05:56:55 +0100merijn(~merijn@host-vr.cgnat-g.v4.dfn.nl) merijn
2025-03-05 06:01:12 +0100merijn(~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 252 seconds)
2025-03-05 06:01:14 +0100j1n37(~j1n37@user/j1n37) (Read error: Connection reset by peer)
2025-03-05 06:04:33 +0100j1n37(~j1n37@user/j1n37) j1n37
2025-03-05 06:06:22 +0100j1n37(~j1n37@user/j1n37) (Read error: Connection reset by peer)
2025-03-05 06:07:11 +0100j1n37(~j1n37@user/j1n37) j1n37
2025-03-05 06:07:45 +0100hgolden(~hgolden@2603:8000:9d00:3ed1:6ff3:8389:b901:6363) (Remote host closed the connection)
2025-03-05 06:08:41 +0100j1n37(~j1n37@user/j1n37) (Read error: Connection reset by peer)
2025-03-05 06:10:12 +0100hgolden(~hgolden@2603:8000:9d00:3ed1:6ff3:8389:b901:6363) hgolden
2025-03-05 06:12:17 +0100merijn(~merijn@host-vr.cgnat-g.v4.dfn.nl) merijn
2025-03-05 06:12:52 +0100j1n37(~j1n37@user/j1n37) j1n37
2025-03-05 06:14:38 +0100j1n37(~j1n37@user/j1n37) (Read error: Connection reset by peer)
2025-03-05 06:16:35 +0100merijn(~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 252 seconds)
2025-03-05 06:17:44 +0100j1n37(~j1n37@user/j1n37) j1n37
2025-03-05 06:18:47 +0100j1n37(~j1n37@user/j1n37) (Read error: Connection reset by peer)
2025-03-05 06:23:22 +0100j1n37(~j1n37@user/j1n37) j1n37
2025-03-05 06:26:12 +0100alfiee(~alfiee@user/alfiee) alfiee
2025-03-05 06:27:39 +0100merijn(~merijn@host-vr.cgnat-g.v4.dfn.nl) merijn
2025-03-05 06:28:25 +0100jmcantrell(~weechat@user/jmcantrell) (Quit: WeeChat 4.5.2)
2025-03-05 06:28:27 +0100jmcantrell_jmcantrell
2025-03-05 06:30:38 +0100alfiee(~alfiee@user/alfiee) (Ping timeout: 244 seconds)
2025-03-05 06:32:22 +0100merijn(~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 252 seconds)
2025-03-05 06:35:06 +0100peterbecich(~Thunderbi@syn-047-229-123-186.res.spectrum.com) peterbecich
2025-03-05 06:38:17 +0100Square2(~Square4@user/square) Square
2025-03-05 06:39:23 +0100michalz(~michalz@185.246.207.222)
2025-03-05 06:40:07 +0100tavare(~tavare@user/tavare) (Remote host closed the connection)
2025-03-05 06:41:02 +0100merijn(~merijn@host-vr.cgnat-g.v4.dfn.nl) merijn
2025-03-05 06:41:45 +0100Square(~Square@user/square) (Ping timeout: 276 seconds)
2025-03-05 06:45:25 +0100merijn(~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 248 seconds)
2025-03-05 06:47:39 +0100takuan(~takuan@d8D86B601.access.telenet.be)
2025-03-05 06:56:26 +0100merijn(~merijn@host-vr.cgnat-g.v4.dfn.nl) merijn
2025-03-05 07:00:08 +0100vanishingideal(~vanishing@user/vanishingideal) (Remote host closed the connection)
2025-03-05 07:00:49 +0100merijn(~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 248 seconds)
2025-03-05 07:11:49 +0100merijn(~merijn@host-vr.cgnat-g.v4.dfn.nl) merijn
2025-03-05 07:11:55 +0100alfiee(~alfiee@user/alfiee) alfiee
2025-03-05 07:16:11 +0100 <c_wraith> anyone know why hsc2hs would be genrating blank files on windows?
2025-03-05 07:16:19 +0100merijn(~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 244 seconds)
2025-03-05 07:16:22 +0100alfiee(~alfiee@user/alfiee) (Ping timeout: 252 seconds)
2025-03-05 07:21:52 +0100 <c_wraith> or even where to find its log when run by cabal?
2025-03-05 07:22:49 +0100vanishingideal(~vanishing@user/vanishingideal) vanishingideal
2025-03-05 07:26:15 +0100bilegeek(~bilegeek@108.sub-174-228-98.myvzw.com) (Quit: Leaving)
2025-03-05 07:27:12 +0100merijn(~merijn@host-vr.cgnat-g.v4.dfn.nl) merijn
2025-03-05 07:32:15 +0100merijn(~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 268 seconds)
2025-03-05 07:32:48 +0100ljdarj(~Thunderbi@user/ljdarj) ljdarj
2025-03-05 07:42:35 +0100merijn(~merijn@host-vr.cgnat-g.v4.dfn.nl) merijn
2025-03-05 07:45:37 +0100CiaoSen(~Jura@2a02:8071:64e1:7180:4e50:ddff:fe9b:8922) CiaoSen
2025-03-05 07:49:10 +0100merijn(~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 244 seconds)
2025-03-05 07:51:59 +0100peterbecich(~Thunderbi@syn-047-229-123-186.res.spectrum.com) (Ping timeout: 268 seconds)
2025-03-05 07:57:59 +0100alfiee(~alfiee@user/alfiee) alfiee
2025-03-05 08:00:37 +0100merijn(~merijn@host-vr.cgnat-g.v4.dfn.nl) merijn
2025-03-05 08:03:00 +0100alfiee(~alfiee@user/alfiee) (Ping timeout: 276 seconds)
2025-03-05 08:05:36 +0100merijn(~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 276 seconds)
2025-03-05 08:11:22 +0100Lord_of_Life(~Lord@user/lord-of-life/x-2819915) (Ping timeout: 252 seconds)
2025-03-05 08:11:38 +0100sam113101(~sam@modemcable220.199-203-24.mc.videotron.ca) (Ping timeout: 265 seconds)
2025-03-05 08:12:09 +0100 <kilolympus> c_wraith, are you able to run e.g. cabal exec -- hsc2hs ?
2025-03-05 08:12:16 +0100 <kilolympus> maybe that can help debug stuff
2025-03-05 08:12:20 +0100Lord_of_Life(~Lord@user/lord-of-life/x-2819915) Lord_of_Life
2025-03-05 08:15:59 +0100merijn(~merijn@host-vr.cgnat-g.v4.dfn.nl) merijn
2025-03-05 08:20:10 +0100merijn(~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 244 seconds)
2025-03-05 08:20:54 +0100ljdarj(~Thunderbi@user/ljdarj) (Ping timeout: 260 seconds)
2025-03-05 08:26:13 +0100CiaoSen(~Jura@2a02:8071:64e1:7180:4e50:ddff:fe9b:8922) (Ping timeout: 248 seconds)
2025-03-05 08:28:00 +0100CiaoSen(~Jura@ip-037-201-240-075.um10.pools.vodafone-ip.de) CiaoSen
2025-03-05 08:30:02 +0100sam113101(~sam@modemcable220.199-203-24.mc.videotron.ca) sam113101
2025-03-05 08:31:22 +0100merijn(~merijn@host-vr.cgnat-g.v4.dfn.nl) merijn
2025-03-05 08:33:44 +0100sord937(~sord937@gateway/tor-sasl/sord937) sord937
2025-03-05 08:35:53 +0100merijn(~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 244 seconds)
2025-03-05 08:38:51 +0100vanishingideal(~vanishing@user/vanishingideal) (Ping timeout: 252 seconds)
2025-03-05 08:40:50 +0100vanishingideal(~vanishing@user/vanishingideal) vanishingideal
2025-03-05 08:42:01 +0100merijn(~merijn@host-vr.cgnat-g.v4.dfn.nl) merijn
2025-03-05 08:43:24 +0100alfiee(~alfiee@user/alfiee) alfiee
2025-03-05 08:46:51 +0100merijn(~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 252 seconds)
2025-03-05 08:48:06 +0100alfiee(~alfiee@user/alfiee) (Ping timeout: 268 seconds)
2025-03-05 08:51:00 +0100Sgeo(~Sgeo@user/sgeo) (Read error: Connection reset by peer)
2025-03-05 08:51:41 +0100j1n37(~j1n37@user/j1n37) (Ping timeout: 244 seconds)
2025-03-05 08:52:40 +0100j1n37(~j1n37@user/j1n37) j1n37
2025-03-05 08:53:34 +0100ft(~ft@p3e9bc68d.dip0.t-ipconnect.de) (Quit: leaving)
2025-03-05 08:54:27 +0100zungi(~tory@user/andrewchawk) (Remote host closed the connection)
2025-03-05 08:56:09 +0100zungi(~tory@user/andrewchawk) andrewchawk
2025-03-05 08:57:24 +0100merijn(~merijn@host-vr.cgnat-g.v4.dfn.nl) merijn
2025-03-05 09:00:00 +0100caconym(~caconym@user/caconym) (Quit: bye)
2025-03-05 09:00:53 +0100caconym(~caconym@user/caconym) caconym
2025-03-05 09:01:58 +0100merijn(~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 252 seconds)
2025-03-05 09:10:51 +0100weary-traveler(~user@user/user363627) (Remote host closed the connection)
2025-03-05 09:22:17 +0100zmt01(~zmt00@user/zmt00) zmt00
2025-03-05 09:22:38 +0100evgeny(~Shaeto@94.25.234.254)
2025-03-05 09:24:29 +0100zmt00(~zmt00@user/zmt00) (Ping timeout: 268 seconds)
2025-03-05 09:30:08 +0100alfiee(~alfiee@user/alfiee) alfiee
2025-03-05 09:34:33 +0100alfiee(~alfiee@user/alfiee) (Ping timeout: 245 seconds)
2025-03-05 09:40:17 +0100merijn(~merijn@77.242.116.146) merijn
2025-03-05 09:41:07 +0100kmein(~weechat@user/kmein) (Quit: ciao kakao)
2025-03-05 09:43:11 +0100kmein(~weechat@user/kmein) kmein
2025-03-05 09:44:05 +0100CiaoSen(~Jura@ip-037-201-240-075.um10.pools.vodafone-ip.de) (Ping timeout: 244 seconds)
2025-03-05 09:45:59 +0100Unicorn_Princess(~Unicorn_P@user/Unicorn-Princess/x-3540542) Unicorn_Princess
2025-03-05 09:46:08 +0100CiaoSen(~Jura@2a02:8071:64e1:7180:4e50:ddff:fe9b:8922) CiaoSen
2025-03-05 09:55:41 +0100Smiles(uid551636@id-551636.lymington.irccloud.com) Smiles
2025-03-05 09:56:31 +0100machinedgod(~machinedg@d108-173-18-100.abhsia.telus.net) machinedgod
2025-03-05 10:11:15 +0100merijn(~merijn@77.242.116.146) (Ping timeout: 244 seconds)
2025-03-05 10:12:08 +0100acidjnk_new(~acidjnk@p200300d6e7283f53f42219c1fddec46c.dip0.t-ipconnect.de) acidjnk
2025-03-05 10:15:34 +0100merijn(~merijn@77.242.116.146) merijn
2025-03-05 10:16:33 +0100alfiee(~alfiee@user/alfiee) alfiee
2025-03-05 10:20:33 +0100alfiee(~alfiee@user/alfiee) (Ping timeout: 244 seconds)
2025-03-05 10:20:48 +0100merijn(~merijn@77.242.116.146) (Ping timeout: 272 seconds)
2025-03-05 10:22:25 +0100mceresa(~mceresa@user/mceresa) (Ping timeout: 248 seconds)
2025-03-05 10:22:35 +0100mceresa(~mceresa@user/mceresa) mceresa
2025-03-05 10:29:50 +0100merijn(~merijn@77.242.116.146) merijn
2025-03-05 10:35:51 +0100kuribas(~user@ip-188-118-57-242.reverse.destiny.be) kuribas
2025-03-05 10:36:39 +0100tzh(~tzh@c-76-115-131-146.hsd1.or.comcast.net) (Quit: zzz)
2025-03-05 10:40:23 +0100merijn(~merijn@77.242.116.146) (Ping timeout: 245 seconds)
2025-03-05 10:41:17 +0100__monty__(~toonn@user/toonn) toonn
2025-03-05 10:44:17 +0100yuuta(~YuutaW@2404:f4c0:f9c3:502::100:17b7) (Ping timeout: 248 seconds)
2025-03-05 10:45:27 +0100chele(~chele@user/chele) chele
2025-03-05 10:47:35 +0100YuutaW(~YuutaW@2404:f4c0:f9c3:502::100:17b7) YuutaW
2025-03-05 10:50:03 +0100xff0x(~xff0x@fsb6a9491c.tkyc517.ap.nuro.jp) (Ping timeout: 252 seconds)
2025-03-05 10:53:47 +0100merijn(~merijn@77.242.116.146) merijn
2025-03-05 11:02:16 +0100alfiee(~alfiee@user/alfiee) alfiee
2025-03-05 11:03:36 +0100tabaqui1(~root@87.200.129.102) tabaqui
2025-03-05 11:03:50 +0100gmg(~user@user/gehmehgeh) (Remote host closed the connection)
2025-03-05 11:06:38 +0100alfiee(~alfiee@user/alfiee) (Ping timeout: 252 seconds)
2025-03-05 11:18:23 +0100Digitteknohippie(~user@user/digit) Digit
2025-03-05 11:19:28 +0100Digit(~user@user/digit) (Ping timeout: 252 seconds)
2025-03-05 11:22:22 +0100anpad(~pandeyan@user/anpad) (Quit: ZNC 1.8.2 - https://znc.in)
2025-03-05 11:22:33 +0100merijn(~merijn@77.242.116.146) (Ping timeout: 244 seconds)
2025-03-05 11:23:30 +0100Digitteknohippie(~user@user/digit) (Ping timeout: 272 seconds)
2025-03-05 11:23:47 +0100anpad(~pandeyan@user/anpad) anpad
2025-03-05 11:24:44 +0100econo_(uid147250@id-147250.tinside.irccloud.com) (Quit: Connection closed for inactivity)
2025-03-05 11:32:50 +0100Unicorn_Princess(~Unicorn_P@user/Unicorn-Princess/x-3540542) (Remote host closed the connection)
2025-03-05 11:33:39 +0100cyphase(~cyphase@user/cyphase) (Remote host closed the connection)
2025-03-05 11:34:48 +0100euouae(~euouae@user/euouae) euouae
2025-03-05 11:35:01 +0100 <euouae> Hello, what does `class (Stream s, MonadPlus m) => MonadParsec e s m | m -> e s where ` mean? In particular the | character there.
2025-03-05 11:35:15 +0100merijn(~merijn@77.242.116.146) merijn
2025-03-05 11:35:24 +0100 <tomsmeding> euouae: https://downloads.haskell.org/ghc/latest/docs/users_guide/exts/functional_dependencies.html#extens…
2025-03-05 11:40:00 +0100merijn(~merijn@77.242.116.146) (Ping timeout: 252 seconds)
2025-03-05 11:41:26 +0100cyphase(~cyphase@user/cyphase) cyphase
2025-03-05 11:42:18 +0100ubert(~Thunderbi@2a02:8109:ab8a:5a00:42eb:c7e6:6d02:7a65) ubert
2025-03-05 11:42:19 +0100euouae(~euouae@user/euouae) (Read error: Connection reset by peer)
2025-03-05 11:42:57 +0100Square2(~Square4@user/square) (Remote host closed the connection)
2025-03-05 11:43:33 +0100Square2(~Square4@user/square) Square
2025-03-05 11:45:19 +0100euouae(~euouae@user/euouae) euouae
2025-03-05 11:45:32 +0100xff0x(~xff0x@2405:6580:b080:900:65a4:3374:7c1f:492b)
2025-03-05 11:46:28 +0100 <euouae> It seems that functional dependencies are hints to the type system?
2025-03-05 11:47:10 +0100 <euouae> and perhaps constraint in terms of what new instances can be added
2025-03-05 11:47:44 +0100 <euouae> so in the case of MonadParsec, e,s are uniquely determined by m?
2025-03-05 11:48:08 +0100cyphase(~cyphase@user/cyphase) (Quit: cyphase.com)
2025-03-05 11:49:00 +0100alfiee(~alfiee@user/alfiee) alfiee
2025-03-05 11:49:13 +0100 <mauke> yes
2025-03-05 11:49:21 +0100merijn(~merijn@77.242.116.146) merijn
2025-03-05 11:50:35 +0100 <euouae> great thank you
2025-03-05 11:51:42 +0100Square2(~Square4@user/square) (Ping timeout: 244 seconds)
2025-03-05 11:53:39 +0100alfiee(~alfiee@user/alfiee) (Ping timeout: 260 seconds)
2025-03-05 11:54:11 +0100cyphase(~cyphase@user/cyphase) cyphase
2025-03-05 12:03:52 +0100cyphase(~cyphase@user/cyphase) (Quit: cyphase.com)
2025-03-05 12:05:26 +0100Digit(~user@user/digit) Digit
2025-03-05 12:06:39 +0100Digit(~user@user/digit) (Remote host closed the connection)
2025-03-05 12:06:57 +0100xff0x(~xff0x@2405:6580:b080:900:65a4:3374:7c1f:492b) (Ping timeout: 248 seconds)
2025-03-05 12:07:51 +0100cyphase(~cyphase@user/cyphase) cyphase
2025-03-05 12:08:59 +0100CiaoSen(~Jura@2a02:8071:64e1:7180:4e50:ddff:fe9b:8922) (Ping timeout: 260 seconds)
2025-03-05 12:09:21 +0100merijn(~merijn@77.242.116.146) (Ping timeout: 276 seconds)
2025-03-05 12:09:33 +0100CiaoSen(~Jura@ip-037-201-240-075.um10.pools.vodafone-ip.de) CiaoSen
2025-03-05 12:09:39 +0100digitteknohippie(~user@user/digit) Digit
2025-03-05 12:11:14 +0100zmt01(~zmt00@user/zmt00) (Ping timeout: 248 seconds)
2025-03-05 12:11:44 +0100cyphase(~cyphase@user/cyphase) (Client Quit)
2025-03-05 12:13:28 +0100digitteknohippieDigit
2025-03-05 12:14:25 +0100cyphase(~cyphase@user/cyphase) cyphase
2025-03-05 12:15:26 +0100cyphase(~cyphase@user/cyphase) (Client Quit)
2025-03-05 12:20:29 +0100cyphase(~cyphase@user/cyphase) cyphase
2025-03-05 12:21:25 +0100cyphase(~cyphase@user/cyphase) (Client Quit)
2025-03-05 12:21:47 +0100iteratee_(~kyle@162.218.222.207)
2025-03-05 12:22:25 +0100iteratee(~kyle@162.218.222.207) (Read error: Connection reset by peer)
2025-03-05 12:25:12 +0100cyphase(~cyphase@user/cyphase) cyphase
2025-03-05 12:26:45 +0100califax_(~califax@user/califx) califx
2025-03-05 12:27:12 +0100califax(~califax@user/califx) (Ping timeout: 264 seconds)
2025-03-05 12:27:59 +0100califax_califax
2025-03-05 12:31:19 +0100merijn(~merijn@77.242.116.146) merijn
2025-03-05 12:32:48 +0100cyphase(~cyphase@user/cyphase) (Quit: cyphase.com)
2025-03-05 12:34:24 +0100alfiee(~alfiee@user/alfiee) alfiee
2025-03-05 12:38:52 +0100alfiee(~alfiee@user/alfiee) (Ping timeout: 272 seconds)
2025-03-05 12:39:09 +0100cyphase(~cyphase@user/cyphase) cyphase
2025-03-05 12:47:40 +0100absence_absence
2025-03-05 12:49:28 +0100fp(~Thunderbi@89-27-29-68.bb.dnainternet.fi) fp
2025-03-05 12:55:33 +0100CiaoSen(~Jura@ip-037-201-240-075.um10.pools.vodafone-ip.de) (Ping timeout: 244 seconds)
2025-03-05 13:09:09 +0100xff0x(~xff0x@2405:6580:b080:900:1bc3:e66f:477:1057)
2025-03-05 13:17:29 +0100ystael(~ystael@user/ystael) ystael
2025-03-05 13:20:29 +0100alfiee(~alfiee@user/alfiee) alfiee
2025-03-05 13:23:22 +0100Googulator(~Googulato@80-95-93-248.pool.digikabel.hu) (Quit: Client closed)
2025-03-05 13:23:54 +0100Googulator(~Googulato@80-95-93-248.pool.digikabel.hu)
2025-03-05 13:24:36 +0100alfiee(~alfiee@user/alfiee) (Ping timeout: 252 seconds)
2025-03-05 13:30:32 +0100hughjfchen(~hughjfche@vmi2417424.contaboserver.net) (Ping timeout: 268 seconds)
2025-03-05 13:32:12 +0100jespada(~jespada@2800:a4:22da:e400:b167:8181:c13f:cb54) jespada
2025-03-05 13:46:13 +0100eL_Bart0(eL_Bart0@dietunichtguten.org) (Ping timeout: 245 seconds)
2025-03-05 14:02:28 +0100gentauro(~gentauro@user/gentauro) (Ping timeout: 272 seconds)
2025-03-05 14:02:43 +0100gentauro(~gentauro@user/gentauro) gentauro
2025-03-05 14:03:07 +0100Square2(~Square4@user/square) Square
2025-03-05 14:04:15 +0100mange(~user@user/mange) (Quit: Zzz...)
2025-03-05 14:06:53 +0100alfiee(~alfiee@user/alfiee) alfiee
2025-03-05 14:09:51 +0100zmt00(~zmt00@user/zmt00) zmt00
2025-03-05 14:11:04 +0100forell_(~forell@host-178-216-90-220.sta.tvknaszapraca.pl)
2025-03-05 14:11:19 +0100alfiee(~alfiee@user/alfiee) (Ping timeout: 260 seconds)
2025-03-05 14:11:26 +0100forell(~forell@user/forell) (Ping timeout: 252 seconds)
2025-03-05 14:22:03 +0100fp(~Thunderbi@89-27-29-68.bb.dnainternet.fi) (Ping timeout: 245 seconds)
2025-03-05 14:35:33 +0100Googulator(~Googulato@80-95-93-248.pool.digikabel.hu) (Quit: Client closed)
2025-03-05 14:35:58 +0100Googulator(~Googulato@2a01-036d-0106-14b2-c443-5a96-b49d-1dd5.pool6.digikabel.hu)
2025-03-05 14:36:24 +0100evgeny(~Shaeto@94.25.234.254) (Ping timeout: 260 seconds)
2025-03-05 14:38:03 +0100evgeny(~Shaeto@94.25.234.181)
2025-03-05 14:38:06 +0100pavonia(~user@user/siracusa) (Quit: Bye!)
2025-03-05 14:42:12 +0100zungi(~tory@user/andrewchawk) (Ping timeout: 264 seconds)
2025-03-05 14:47:21 +0100zungi(~tory@user/andrewchawk) andrewchawk
2025-03-05 14:52:18 +0100alfiee(~alfiee@user/alfiee) alfiee
2025-03-05 14:56:40 +0100alfiee(~alfiee@user/alfiee) (Ping timeout: 244 seconds)
2025-03-05 14:57:12 +0100bitdex(~bitdex@gateway/tor-sasl/bitdex) (Ping timeout: 264 seconds)
2025-03-05 15:02:36 +0100ChaiTRex(~ChaiTRex@user/chaitrex) (Ping timeout: 264 seconds)
2025-03-05 15:08:15 +0100 <euouae> I have just been studying the Reader (and will soon study the ReaderT too) monad. I know it's defined through ReaderT, but could I just define it as function composition (from left with `withReader` and from right with `mapReader`)?
2025-03-05 15:08:47 +0100 <euouae> I think I've seen this pattern before in the lexical environment, where a lexical environment E : V -> R is just an evaluation map from the variables to their values.
2025-03-05 15:08:51 +0100 <tomsmeding> of course, you can also define Reader directly as `newtype Reader r a = Reader (r -> a)`
2025-03-05 15:09:18 +0100 <euouae> Oh, that's slick right
2025-03-05 15:09:43 +0100 <euouae> so when people say the reader monad is useful, do they mean ReaderT?
2025-03-05 15:09:47 +0100 <euouae> for the most part?
2025-03-05 15:10:00 +0100 <tomsmeding> usually, but not necessarily
2025-03-05 15:10:20 +0100 <mauke> > join (+) 3
2025-03-05 15:10:21 +0100 <lambdabot> 6
2025-03-05 15:10:33 +0100 <tomsmeding> _just_ a Reader is not particularly useful, the cost of the monadic syntax is higher than what it gives you
2025-03-05 15:10:41 +0100 <tomsmeding> disregarding pointfree tricks
2025-03-05 15:10:44 +0100 <euouae> > :t join
2025-03-05 15:10:46 +0100 <lambdabot> <hint>:1:1: error: parse error on input ‘:’
2025-03-05 15:10:46 +0100tomsmedinglooks askance at mauke
2025-03-05 15:10:50 +0100 <tomsmeding> :t join
2025-03-05 15:10:51 +0100 <lambdabot> Monad m => m (m a) -> m a
2025-03-05 15:11:16 +0100 <euouae> ah what, I didn't realize you used the -> monad instance to diagonalize +
2025-03-05 15:11:21 +0100ChaiTRex(~ChaiTRex@user/chaitrex) ChaiTRex
2025-03-05 15:11:21 +0100 <tomsmeding> % :t join @((->) r)
2025-03-05 15:11:21 +0100 <yahb2> <interactive>:1:13: error: [GHC-76037] ; Not in scope: type variable ‘r’
2025-03-05 15:11:25 +0100 <tomsmeding> % :t join @((->) Int)
2025-03-05 15:11:25 +0100 <yahb2> join @((->) Int) ; :: Monad ((->) Int) => (Int -> (Int -> a)) -> Int -> a
2025-03-05 15:12:19 +0100 <euouae> tomsmeding: and is there a difference between mapReader and >>=?
2025-03-05 15:12:27 +0100 <euouae> In using one or the other I mea
2025-03-05 15:12:54 +0100 <mauke> :t mapReader
2025-03-05 15:12:55 +0100 <lambdabot> (a -> b) -> Reader r a -> Reader r b
2025-03-05 15:13:10 +0100 <mauke> oh, that's fmap
2025-03-05 15:13:17 +0100 <mauke> >>= is fmap + join
2025-03-05 15:13:29 +0100 <euouae> Ah yeah I forgot to say that I was using pure . too
2025-03-05 15:13:39 +0100 <euouae> Right, so mapReader is just a specialized fmap?
2025-03-05 15:13:41 +0100 <mauke> join undoes pure
2025-03-05 15:13:47 +0100 <mauke> yeah
2025-03-05 15:13:56 +0100 <euouae> Right! thank you
2025-03-05 15:14:03 +0100 <mauke> > ((!!) =<< show) 0
2025-03-05 15:14:05 +0100 <lambdabot> '0'
2025-03-05 15:14:37 +0100euouaeshies away from the brain teasers and goes back into his studies
2025-03-05 15:15:35 +0100 <mauke> :-)
2025-03-05 15:18:05 +0100 <tomsmeding> ((!!) =<< show) 0 = (\r -> (!!) (show r) r) 0 = show 0 !! 0
2025-03-05 15:21:09 +0100 <mauke> (=<<): the other S
2025-03-05 15:24:14 +0100Googulator(~Googulato@2a01-036d-0106-14b2-c443-5a96-b49d-1dd5.pool6.digikabel.hu) (Quit: Client closed)
2025-03-05 15:24:28 +0100Googulator(~Googulato@80-95-93-248.pool.digikabel.hu)
2025-03-05 15:35:10 +0100ystael(~ystael@user/ystael) (Quit: Lost terminal)
2025-03-05 15:38:02 +0100alfiee(~alfiee@user/alfiee) alfiee
2025-03-05 15:42:22 +0100alfiee(~alfiee@user/alfiee) (Ping timeout: 252 seconds)
2025-03-05 15:46:18 +0100gmg(~user@user/gehmehgeh) gehmehgeh
2025-03-05 15:49:23 +0100CiaoSen(~Jura@2a02:8071:64e1:7180:4e50:ddff:fe9b:8922) CiaoSen
2025-03-05 15:55:11 +0100ystael(~ystael@user/ystael) ystael
2025-03-05 15:56:21 +0100 <haskellbridge> <mauke> E
2025-03-05 15:59:19 +0100fp(~Thunderbi@89-27-29-68.bb.dnainternet.fi) fp
2025-03-05 16:05:23 +0100Googulator(~Googulato@80-95-93-248.pool.digikabel.hu) (Quit: Client closed)
2025-03-05 16:05:47 +0100Googulator(~Googulato@2a01-036d-0106-14b2-c443-5a96-b49d-1dd5.pool6.digikabel.hu)
2025-03-05 16:07:23 +0100ash3en(~Thunderbi@2a03:7846:b6eb:101:93ac:a90a:da67:f207) ash3en
2025-03-05 16:09:25 +0100vulpine(xfnw@user/meow/xfnw) (Quit: Connection reset by purr)
2025-03-05 16:09:54 +0100vulpine(xfnw@user/meow/xfnw) xfnw
2025-03-05 16:13:50 +0100Unicorn_Princess(~Unicorn_P@user/Unicorn-Princess/x-3540542) Unicorn_Princess
2025-03-05 16:21:21 +0100vanishingideal(~vanishing@user/vanishingideal) (Ping timeout: 268 seconds)
2025-03-05 16:23:07 +0100vanishingideal(~vanishing@user/vanishingideal) vanishingideal
2025-03-05 16:25:26 +0100alfiee(~alfiee@user/alfiee) alfiee
2025-03-05 16:29:40 +0100alfiee(~alfiee@user/alfiee) (Ping timeout: 252 seconds)
2025-03-05 16:30:01 +0100lucasEsc(~lucasEsc@181.110.191.164)
2025-03-05 16:30:34 +0100jespada(~jespada@2800:a4:22da:e400:b167:8181:c13f:cb54) (Quit: My Mac has gone to sleep. ZZZzzz…)
2025-03-05 16:35:52 +0100son0p(~ff@2800:e6:4000:d723:c181:4205:f2b1:437a) (Ping timeout: 244 seconds)
2025-03-05 16:37:43 +0100sabathan(~sabathan@amarseille-159-1-12-107.w86-203.abo.wanadoo.fr) (Read error: Connection reset by peer)
2025-03-05 16:38:41 +0100ash3en(~Thunderbi@2a03:7846:b6eb:101:93ac:a90a:da67:f207) (Quit: ash3en)
2025-03-05 16:39:03 +0100ash3en(~Thunderbi@2a03:7846:b6eb:101:93ac:a90a:da67:f207) ash3en
2025-03-05 16:40:47 +0100ash3en(~Thunderbi@2a03:7846:b6eb:101:93ac:a90a:da67:f207) (Client Quit)
2025-03-05 16:41:08 +0100ash3en(~Thunderbi@2a03:7846:b6eb:101:93ac:a90a:da67:f207) ash3en
2025-03-05 16:41:48 +0100sabathan(~sabathan@amarseille-159-1-12-107.w86-203.abo.wanadoo.fr)
2025-03-05 16:44:38 +0100jespada(~jespada@2800:a4:22da:e400:b167:8181:c13f:cb54) jespada
2025-03-05 16:45:13 +0100notdabs(~Owner@2600:1700:69cf:9000:d900:e64:5cae:a17e)
2025-03-05 16:45:45 +0100evgeny(~Shaeto@94.25.234.181) (Quit: WeeChat 4.1.1)
2025-03-05 16:50:46 +0100lucasEsc(~lucasEsc@181.110.191.164) (Quit: Client closed)
2025-03-05 16:52:37 +0100euphores(~SASL_euph@user/euphores) (Quit: Leaving.)
2025-03-05 16:57:44 +0100euphores(~SASL_euph@user/euphores) euphores
2025-03-05 17:02:28 +0100hughjfchen(~hughjfche@vmi2417424.contaboserver.net) hughjfchen
2025-03-05 17:04:08 +0100iteratee_(~kyle@162.218.222.207) (Ping timeout: 252 seconds)
2025-03-05 17:06:12 +0100ChaiTRex(~ChaiTRex@user/chaitrex) (Ping timeout: 264 seconds)
2025-03-05 17:11:30 +0100alfiee(~alfiee@user/alfiee) alfiee
2025-03-05 17:13:18 +0100Square2(~Square4@user/square) (Ping timeout: 245 seconds)
2025-03-05 17:15:39 +0100alfiee(~alfiee@user/alfiee) (Ping timeout: 244 seconds)
2025-03-05 17:15:52 +0100jespada(~jespada@2800:a4:22da:e400:b167:8181:c13f:cb54) (Quit: My Mac has gone to sleep. ZZZzzz…)
2025-03-05 17:16:14 +0100merijn(~merijn@77.242.116.146) (Ping timeout: 268 seconds)
2025-03-05 17:17:28 +0100acidjnk_new(~acidjnk@p200300d6e7283f53f42219c1fddec46c.dip0.t-ipconnect.de) (Ping timeout: 268 seconds)
2025-03-05 17:18:09 +0100merijn(~merijn@77.242.116.146) merijn
2025-03-05 17:18:34 +0100chexum(~quassel@gateway/tor-sasl/chexum) chexum
2025-03-05 17:18:45 +0100wildtrees(~user@pool-108-26-34-85.syrcny.east.verizon.net)
2025-03-05 17:28:19 +0100vanishingideal(~vanishing@user/vanishingideal) (Remote host closed the connection)
2025-03-05 17:31:24 +0100 <kaol> One day I'll understand what ScopedTypeVariables and TypeApplications do together. I had yet more ambiguous type variable stuff with variable names GHC generated from thin air and I followed a SO answer and added a "forall a." to the top level function signature and then used @a at the offending place. The error went away but my confusion didn't.
2025-03-05 17:33:44 +0100 <tomsmeding> kaol: type parameters are, in a certain sense, just additional arguments to your function
2025-03-05 17:33:52 +0100 <tomsmeding> :t map
2025-03-05 17:33:53 +0100 <lambdabot> (a -> b) -> [a] -> [b]
2025-03-05 17:34:09 +0100 <tomsmeding> in that view, `map` has 4 arguments: `a`, `b`, a function of type `a -> b`, and a list `[a]`
2025-03-05 17:34:47 +0100 <tomsmeding> there are two differences between normal arguments and type arguments: 1. GHC automatically infers type arguments, and 2. you can't pattern-match on them
2025-03-05 17:35:08 +0100 <tomsmeding> but you can _pass_ them manually!
2025-03-05 17:35:18 +0100 <tomsmeding> % :set -XTypeApplications
2025-03-05 17:35:18 +0100 <yahb2> <no output>
2025-03-05 17:35:22 +0100 <tomsmeding> % :set -fprint-explicit-foralls
2025-03-05 17:35:22 +0100 <yahb2> <no output>
2025-03-05 17:35:25 +0100 <tomsmeding> % :t map
2025-03-05 17:35:25 +0100 <yahb2> map :: forall a b. (a -> b) -> [a] -> [b]
2025-03-05 17:35:47 +0100 <tomsmeding> with -fprint-explicit-foralls, GHC also prints those additional "arguments" even if it normally wouldn't
2025-03-05 17:35:50 +0100 <tomsmeding> % :t map @Int
2025-03-05 17:35:50 +0100 <yahb2> map @Int :: forall b. (Int -> b) -> [Int] -> [b]
2025-03-05 17:35:55 +0100 <tomsmeding> % :t map @Int @Float
2025-03-05 17:35:55 +0100 <yahb2> map @Int @Float :: (Int -> Float) -> [Int] -> [Float]
2025-03-05 17:36:10 +0100 <tomsmeding> you can see me passing types to the `a` and `b` type arguments of `map`
2025-03-05 17:36:45 +0100 <kaol> So my forall made the "a" visible inside the function body and @a used it?
2025-03-05 17:36:55 +0100 <int-e> With ScopedTypeVariables, the `forall a.` in the function's type signature binds the `a` type variable to that type in the function implementation
2025-03-05 17:36:58 +0100 <tomsmeding> so if you find yourself in a position where GHC somehow does not have enough information to automatically infer what type argument to pass somewhere, you can pass it manually
2025-03-05 17:37:31 +0100 <tomsmeding> now, what happens if you are yourself writing a polymorphic function, and you find yourself in that same situation? You will have to pass types with @ that mention the type arguments of _your_ function
2025-03-05 17:37:41 +0100 <tomsmeding> normally, in Haskell2010, there's no way to refer to those type arguments
2025-03-05 17:38:10 +0100 <tomsmeding> ScopedTypeVariables changes that, but only if you bind your type arguments explicitly using `forall` in the type signature
2025-03-05 17:38:31 +0100 <tomsmeding> does that help? :)
2025-03-05 17:38:57 +0100 <tomsmeding> kaol: so yes, the forall made the "a" visible inside the function body; that @a used it, yes
2025-03-05 17:40:02 +0100 <kaol> I think I understand. This is one of those things you'd have to ask me again in a week.
2025-03-05 17:40:19 +0100merijn(~merijn@77.242.116.146) (Ping timeout: 260 seconds)
2025-03-05 17:42:13 +0100 <kaol> Another related thing I'm curious about: Why's ScopedTypeVariables the extension that makes something like let a :: Int = read "123" work?
2025-03-05 17:42:49 +0100 <tomsmeding> hysterical raisins
2025-03-05 17:43:16 +0100 <tomsmeding> the features are connected though: you can write `map (f :: a -> b) (x :: [a]) = ...` and then use `a` and `b` in the function body of `map`
2025-03-05 17:43:29 +0100 <tomsmeding> those type ascriptions bound `a` and `b` just like a `forall` would
2025-03-05 17:43:37 +0100 <tomsmeding> but this is enabled only with ScopedTypeVariables, again
2025-03-05 17:43:54 +0100 <tomsmeding> `let a :: Int = ...` is just a special case of this
2025-03-05 17:44:43 +0100ft(~ft@p3e9bc68d.dip0.t-ipconnect.de) ft
2025-03-05 17:44:50 +0100 <dminuoso> Everything about ScopedTypeVariables is a bit smelly.
2025-03-05 17:45:14 +0100 <kaol> What's the difference between ScopedTypeVariables forall and RankNTypes forall?
2025-03-05 17:45:25 +0100 <dminuoso> It would have been more consistent to allow `let a :: Int = ...` even without the extension.
2025-03-05 17:45:25 +0100 <tomsmeding> completely unrelated
2025-03-05 17:45:29 +0100 <tomsmeding> they just happen to share the same keyword
2025-03-05 17:45:47 +0100 <kaol> Apply directly to the forehead.
2025-03-05 17:46:16 +0100 <tomsmeding> (there's a decent reason they share the same keyword: the `forall` of ScopedTypeVariables makes sense because it could have been there anyway. ScopedTypeVariables just gives an additional meaning to a forall in that specific position.)
2025-03-05 17:46:17 +0100 <dminuoso> kaol: The underlying problem is that when Haskell was invented, it was deemed to be more useful to have variables not be inscope (so you could never refer to an outer type variable in another type signature)
2025-03-05 17:46:47 +0100 <dminuoso> kaol: There's nothing about forall, except that the authors trying to increase compatibility with a bunch of hackage libraries.
2025-03-05 17:46:59 +0100__jmcantrell__(~weechat@user/jmcantrell) jmcantrell
2025-03-05 17:47:07 +0100jmcantrellGuest5227
2025-03-05 17:47:08 +0100__jmcantrell__jmcantrell
2025-03-05 17:47:17 +0100 <dminuoso> Say if you enabled `ScopedTypeVariables` in your cabal file project wide, and suddenly `a` was captured and brought into scope, it could perhaps cause some issues or compilation errors.
2025-03-05 17:47:49 +0100 <tomsmeding> well, they could have used a different keyword so that existing uses even with ExplicitForall didn't change meaning
2025-03-05 17:47:49 +0100 <dminuoso> Tying this into an ExplicitForall is one of the stranger parts that seems to have no fundamentally good reason behind it
2025-03-05 17:48:09 +0100 <tomsmeding> it could even be useful to be able to mark _some_ type variables as being in scope, and others not
2025-03-05 17:48:16 +0100 <dminuoso> Personally, I would prefer if ScopedTypeVariables just brought them into scope, even without forall.
2025-03-05 17:48:18 +0100 <tomsmeding> the new -XTypeAbstractions allows you to do the latter, at least
2025-03-05 17:48:18 +0100 <dminuoso> Done!
2025-03-05 17:49:06 +0100srazkvt(~sarah@user/srazkvt) srazkvt
2025-03-05 17:50:07 +0100jespada(~jespada@2800:a4:22da:e400:b167:8181:c13f:cb54) jespada
2025-03-05 17:50:57 +0100 <kaol> Perhaps the GHC error message could suggest ScopedTypeVariables in the ambiguous type variable error. It sure is mystifying to see GHC conjure up new names when the source code clearly has the same text at both sites but it isn't so because it requires ScopedTypeVariables to really be so.
2025-03-05 17:51:51 +0100 <dminuoso> kaol: What do you mean by new names?
2025-03-05 17:51:56 +0100 <tomsmeding> kaol: if you get an ambiguous type variable error, then there are multiple instantiations of a type variable that could in principle result in a well-typed result
2025-03-05 17:52:13 +0100 <tomsmeding> and that GHC has no good reason to prefer one particular instantiation over another
2025-03-05 17:52:29 +0100 <tomsmeding> if you have type families in the picture, then non-injective type families can result in this
2025-03-05 17:52:39 +0100 <tomsmeding> GHC doesn't just complain willy-nilly ;)
2025-03-05 17:53:59 +0100j1n37(~j1n37@user/j1n37) (Ping timeout: 252 seconds)
2025-03-05 17:54:06 +0100 <dminuoso> kaol: Note, that you cannot "just use the type variables you wrote" in GHC. There's a very subtle type machinery going on, if GHC did not alpha-rename, you would inevitably get errors like `cannot you unify a with a` errors, which is even *less* helpful.
2025-03-05 17:54:07 +0100 <kaol> dminuoso: If I have "MyTypeClass a =>" in the function signature I'd expect the same "a" to mean the same thing in the body. Instead I see it come up with "a0" or something on its own. Or that's the naive understanding of it at least.
2025-03-05 17:54:15 +0100 <dminuoso> ^- see previous message
2025-03-05 17:54:27 +0100 <dminuoso> Or rather, its not exactly alpha renaming either
2025-03-05 17:54:34 +0100 <dminuoso> It's following generalization rules
2025-03-05 17:54:44 +0100 <kaol> I think I'm starting to understand but I'm saying that GHC could offer more help in its error message.
2025-03-05 17:54:49 +0100j1n37(~j1n37@user/j1n37) j1n37
2025-03-05 17:54:49 +0100 <tomsmeding> kaol: do you have a code snippet so that we're talking about the same thing?
2025-03-05 17:54:53 +0100 <dminuoso> Take a look at Hindley Milner to get a better understanding
2025-03-05 17:54:58 +0100 <kaol> It's generally pretty good about suggesting extensions to make code work.
2025-03-05 17:55:04 +0100 <dminuoso> kaol: I dont think there's much we can do in a HM type of inference.
2025-03-05 17:55:23 +0100 <dminuoso> kaol: GHC tries its best to give you context
2025-03-05 17:55:25 +0100 <dminuoso> e.g. it might say
2025-03-05 17:55:37 +0100 <dminuoso> Ambiguous type variable `a0' arising from a use of `show' prevents the constraint `(Show a0)' from being solved. Relevant bindings include xs :: [a0] (bound at l.hs:13:9)
2025-03-05 17:55:56 +0100 <dminuoso> So if you read the entirety, then `a0` is a type that GHC has in its inference at *that* particular point.
2025-03-05 17:55:58 +0100tomsmeding(~tomsmedin@static.21.109.88.23.clients.your-server.de) (Quit: ZNC 1.9.1 - https://znc.in)
2025-03-05 17:56:31 +0100iteratee(~kyle@208.97.58.241)
2025-03-05 17:56:46 +0100 <dminuoso> kaol: Whats happening roughly is, that GHC has no idea what the type is here. It just makes one up, calls it a0, in hopes of later finding out more.
2025-03-05 17:56:54 +0100alfiee(~alfiee@user/alfiee) alfiee
2025-03-05 17:59:36 +0100tomsmeding(~tomsmedin@static.21.109.88.23.clients.your-server.de) tomsmeding
2025-03-05 18:00:45 +0100 <tomsmeding> kaol: and if what dminuoso just said sounds stupid in your case, then we'd need to look at the code to see what's actually happening ;)
2025-03-05 18:01:09 +0100alfiee(~alfiee@user/alfiee) (Ping timeout: 260 seconds)
2025-03-05 18:03:27 +0100 <dminuoso> kaol: Another thing is, with "in the body" - GHC has to figure out whether that's actually the case! It does not know.
2025-03-05 18:03:31 +0100CiaoSen(~Jura@2a02:8071:64e1:7180:4e50:ddff:fe9b:8922) (Ping timeout: 252 seconds)
2025-03-05 18:04:45 +0100 <euouae> I keep forgetting this, but it just occurred to me and I'll note it: Although studying "the type system" of Haskell as a total is kind of a tall order and perhaps not fruitful, it seems that the HN inference rules are important and simpler to study
2025-03-05 18:05:21 +0100 <dminuoso> kaol: When the type checker goes through your binding, it takes the function signature as some assertion. Say `f :: MyTypeClass a => T a; f = T 1`. Now, to type check this it has to go into the AST and assign a type to stuff. For instance, what is the type of `1`? GHC does not know, it's `Num a0 => a0`
2025-03-05 18:05:38 +0100 <dminuoso> So it builds up a bunch of things like
2025-03-05 18:05:57 +0100 <dminuoso> f :: MyTypeClass a => T a
2025-03-05 18:06:02 +0100 <dminuoso> 1 :: Num a0 => a0
2025-03-05 18:06:12 +0100 <dminuoso> T :: ...something sensible here...
2025-03-05 18:06:30 +0100 <dminuoso> And then it unifies according to HM rules.
2025-03-05 18:06:55 +0100 <dminuoso> Which requires giving `1` that type here
2025-03-05 18:07:25 +0100 <dminuoso> Remember, GHC does not just take your type signatures for granted, it actually type checks whether what you just claimed is actually true.
2025-03-05 18:08:13 +0100 <dminuoso> Now it is true, that we are very liberal with polymorphism, and the way typeclasses interact here with the type checker - as a consequence - leads to worse diagnostics
2025-03-05 18:08:30 +0100 <dminuoso> We pay that price to get more expressiveness
2025-03-05 18:09:15 +0100 <euouae> It could *still* provide better diagnostics.
2025-03-05 18:09:24 +0100 <dminuoso> In this particular case, Im not sure how.
2025-03-05 18:09:39 +0100 <dminuoso> GHC cannot, ahead of time, know that a0 will be the same as a from the outer type signature.
2025-03-05 18:09:40 +0100 <euouae> For example, it could explain to the user that "hey this is part of HM type system in case you're curious what's going on"
2025-03-05 18:09:46 +0100 <dminuoso> It would require type checking to know that, the very thing that failed.
2025-03-05 18:10:00 +0100 <euouae> I mean in a vague way, it could point the user to things that the user can study to become better acquiainted with what's going on
2025-03-05 18:10:04 +0100 <dminuoso> Well, the dignostic tells you how and why it came up with a0 in trivial cases.
2025-03-05 18:10:16 +0100 <euouae> It's not that the errors are entirely unparseable, it's just that they require more expertise to understand. Right?
2025-03-05 18:10:45 +0100 <dminuoso> Ambiguous type variable `a0' arising from a use of `show' prevents the constraint `(Show a0)' from being solved. Relevant bindings include xs :: [a0] (bound at l.hs:13:9)
2025-03-05 18:10:47 +0100 <dminuoso> Probable fix: use a type annotation to specify what `a0' should be.
2025-03-05 18:10:50 +0100 <dminuoso> These potential instances exist:
2025-03-05 18:10:53 +0100 <dminuoso> ....
2025-03-05 18:11:08 +0100 <dminuoso> If you think this can be reworded to be more explicit, feel free to make a pull request.
2025-03-05 18:11:16 +0100 <tomsmeding> I don't think it's a good idea for EVERY type error to point to hindley-milner. If you google for "type checking haskell" you already get a bunch of resources
2025-03-05 18:11:27 +0100 <tomsmeding> the diagnostics are _already_ epics with how long they are
2025-03-05 18:11:36 +0100 <dminuoso> You just have to spend the time to read them.
2025-03-05 18:11:53 +0100 <euouae> tomsmeding: why not? in any case, it's not evident that it is type checking at all. could always have a -verbose flag that experts can turn off
2025-03-05 18:12:15 +0100 <tomsmeding> euouae: "it's not evident that it is type checking at all" -- what else would it be?
2025-03-05 18:12:19 +0100 <dminuoso> I dont think the diagnostic here is overly erbose, or lacking details.
2025-03-05 18:12:36 +0100 <dminuoso> It's telling you precisly what happened, where it happened, and comes with sensible suggestions
2025-03-05 18:12:41 +0100 <euouae> I don't know what the number of unsuspecting victims falling onto Haskell is. I'm sure a lot who come into Haskell from universities are taught well and they don't suffer the confusion that a complete outsider would.
2025-03-05 18:12:41 +0100 <tomsmeding> I think pointing to hindley-milner is the job of a haskell tutorial, not GHC type errors
2025-03-05 18:12:47 +0100 <dminuoso> Of course, if you employ type level trickery or generally not have any type signatures... well yes.
2025-03-05 18:12:49 +0100 <dminuoso> We cant help you.
2025-03-05 18:13:03 +0100 <dminuoso> Like if servant blows up, you are on your own.
2025-03-05 18:13:10 +0100 <tomsmeding> I'm not saying GHC type errors are not unclear sometimes!
2025-03-05 18:13:22 +0100 <dminuoso> But thats not an issue of GHC, but rather a servant design problem.
2025-03-05 18:13:39 +0100 <dminuoso> (If you insist on employing this type machinery, your users will have to suffer)
2025-03-05 18:13:54 +0100 <tomsmeding> but GHC Haskell's type system is large enough and supports enough trickeries that there is just a lot of freedom in how to write your code -- and that means that the diagnostics cannot point you to "the" fix, because there are many things you might have meant
2025-03-05 18:14:00 +0100 <dminuoso> optics is one of the few libraries that manages to hide type trickery behind simple user facing type errors
2025-03-05 18:14:42 +0100 <euouae> tomsmeding: yeah but you could mention a few basic ones that newbies would make
2025-03-05 18:15:00 +0100 <euouae> perhaps by annotating types and/or functions so that the compiler can make the suggestion when a certain pattern is matched. IDK.
2025-03-05 18:15:12 +0100 <euouae> type error pattern
2025-03-05 18:15:20 +0100 <euouae> I'm sort of coming up with this as I go. I haven't thought of it too much.
2025-03-05 18:15:38 +0100 <tomsmeding> many people have suggested such things, and if you have a good idea, please do suggest it!
2025-03-05 18:15:40 +0100 <dminuoso> type error slicing is perhaps one of those things that could be a helpful thing.
2025-03-05 18:15:57 +0100 <tomsmeding> I just suspect that if you think more carefully about how that feature would look, exactly, it will turn out to be difficult to make precise
2025-03-05 18:15:58 +0100 <dminuoso> But it is so easy to invoke an idea if you dont have to actually design and/or implement it in the scope of GHCs type checker.
2025-03-05 18:16:26 +0100 <dminuoso> I keep mentioning type error slicers in hopes of some PhD student being forced to implement it, so I can benefit from their sweat, blood and tears.
2025-03-05 18:16:33 +0100 <dminuoso> Because I dont know how to do it myself.
2025-03-05 18:16:39 +0100 <euouae> For example say you try to return from a do block with `123 :: Int`. It will tell you that Int mismatches m Int. But does it suggest `pure 123` in its place?
2025-03-05 18:17:11 +0100 <tomsmeding> dminuoso: is type error slicing this idea where you get just the inconsistent path of constraints between two things that the user specified?
2025-03-05 18:17:24 +0100 <tomsmeding> instead of only the wrong position, or the whole function, that is?
2025-03-05 18:18:12 +0100zungi(~tory@user/andrewchawk) (Ping timeout: 264 seconds)
2025-03-05 18:18:59 +0100 <tomsmeding> euouae: assuming that the 123 was indeed of type Int, and there was a `Monad m` constraint in scope -- that could be a helpful hint, yes
2025-03-05 18:19:20 +0100 <tomsmeding> (if you just write "123", then it could be that there is a Num instance for `m Int`!)
2025-03-05 18:19:47 +0100 <tomsmeding> > 123 :: Data.Monoid.Sum Int
2025-03-05 18:19:48 +0100 <lambdabot> Sum {getSum = 123}
2025-03-05 18:19:53 +0100 <kaol> I should look into making a self contained example of the thing I ran into. But I'm afraid it's not today.
2025-03-05 18:19:57 +0100 <tomsmeding> here, that's an 123 of type `m Int`, just not a monad m
2025-03-05 18:21:22 +0100 <euouae> tomsmeding: https://link.springer.com/chapter/10.1007/978-3-642-32037-8_1 by looking at this I think type error slicing is about determining all the parts of the source code that contribute to type errors
2025-03-05 18:21:52 +0100 <tomsmeding> right
2025-03-05 18:22:05 +0100 <euouae> I think it was introduced here <https://www.sciencedirect.com/science/article/pii/S016764230400005X>
2025-03-05 18:22:37 +0100 <euouae> oh no, it seems that it's something different:
2025-03-05 18:22:45 +0100srazkvt(~sarah@user/srazkvt) (Quit: Konversation terminated!)
2025-03-05 18:22:55 +0100 <tomsmeding> nah looks similar
2025-03-05 18:22:59 +0100 <euouae> a slice is a set of program points. the type error slice is all the program points that contributed to the type error.
2025-03-05 18:23:33 +0100srazkvt(~sarah@user/srazkvt) srazkvt
2025-03-05 18:23:35 +0100 <tomsmeding> strip away as many parts of your function as possible so that the result still exhibits the type error
2025-03-05 18:23:50 +0100 <tomsmeding> may be helpful to see what exactly the reasoning is that the compiler is doing
2025-03-05 18:24:09 +0100tzh(~tzh@c-76-115-131-146.hsd1.or.comcast.net) tzh
2025-03-05 18:24:18 +0100kuribas(~user@ip-188-118-57-242.reverse.destiny.be) (Remote host closed the connection)
2025-03-05 18:27:07 +0100 <euouae> yeah I had more of a heuristics approach for certain common errors that newbies do
2025-03-05 18:27:45 +0100 <tomsmeding> euouae: here's motivation for learning more haskell: learn enough so that you can add this in GHC yourself :)
2025-03-05 18:29:10 +0100 <euouae> tomsmeding: hey you know what, I'm trying. :) so far I'm just trying to mostly do stuff I've done before in other programming languages
2025-03-05 18:29:29 +0100 <tomsmeding> sounds like a decent way :)
2025-03-05 18:29:52 +0100 <tomsmeding> don't fall in the trap of wanting to write code that looks as closely as possible like the code you're used to in other langauges
2025-03-05 18:30:20 +0100 <euouae> oh like iterative and such?
2025-03-05 18:30:29 +0100 <tomsmeding> yes
2025-03-05 18:30:51 +0100 <tomsmeding> you _can_, but you'll hate haskell because you don't get to see the kinds of code where it shines
2025-03-05 18:31:09 +0100 <tomsmeding> part of the fun is learning how to solve the same problem, but in a different way
2025-03-05 18:33:45 +0100 <tomsmeding> that doesn't mean that you need to go all recursion schemes and "I don't use recursion, I must use foldr/scanr etc."
2025-03-05 18:34:27 +0100 <tomsmeding> heck, if you want to write `while :: (a -> Bool) -> (a -> a) -> a -> a` that implements a poor man's while loop, please do!
2025-03-05 18:34:35 +0100 <tomsmeding> just avoid writing everything in IO
2025-03-05 18:34:52 +0100 <kaol> fix is lovely.
2025-03-05 18:35:18 +0100 <tomsmeding> (part of the point of writing that `while`, and programming with it, is that you realise it's really not that different from the fancy combinators you've been avoiding)
2025-03-05 18:35:57 +0100zungi(~tory@user/andrewchawk) andrewchawk
2025-03-05 18:37:01 +0100 <srazkvt> say i want to build a small git forge in haskell, should i go with gitlib to have the entire thing in a single thing, or should i have the git handling seperated from web part, maybe in go or c ?
2025-03-05 18:37:52 +0100 <srazkvt> i see gitlib hasn't had an update on hackage since 2023
2025-03-05 18:43:45 +0100 <srazkvt> nvm, 2021
2025-03-05 18:43:53 +0100 <dminuoso> tomsmeding: Not sure what you mean by inconsistent path of constraints.
2025-03-05 18:44:28 +0100 <tomsmeding> dminuoso: subset of the constraints, that will necessarily form some kind of tree structure (I guess not just path), that exhibit the constradiction
2025-03-05 18:44:59 +0100 <dminuoso> What's the adjective "inconsistent" doing there?
2025-03-05 18:46:38 +0100 <tomsmeding> Well, there was a type error, right?
2025-03-05 18:46:53 +0100 <tomsmeding> If the constraints were all consistent with each other, there would be no type error.
2025-03-05 18:46:58 +0100alfiee(~alfiee@user/alfiee) alfiee
2025-03-05 18:47:17 +0100son0p(~ff@2800:e6:4000:d723:c181:4205:f2b1:437a) son0p
2025-03-05 18:47:28 +0100 <dminuoso> Oh okay. Then yeah, though "constraints" probably does not mean typeclass type of constraints here.
2025-03-05 18:48:00 +0100 <dminuoso> If we assume the type checker to be following its judgements, then every part that was plugged into a premise of a judgement could be part of a type error slice.
2025-03-05 18:48:21 +0100 <tomsmeding> Ah indeed, I was thinking of the constraint-solving approach to type checkinf
2025-03-05 18:48:26 +0100 <tomsmeding> *checking
2025-03-05 18:48:26 +0100 <davean> srazkvt: I wrote an implimentation of git in Haskell which is rather fast. For my use cases it beats the official git implimentation
2025-03-05 18:49:09 +0100acidjnk_new(~acidjnk@p200300d6e7283f5311bd92edfda65283.dip0.t-ipconnect.de)
2025-03-05 18:50:20 +0100 <dminuoso> tomsmeding: https://www.macs.hw.ac.uk/~fairouz/forest/papers/conference-publications/lsfa14.pdf is a nice practical read into the subject, along with some of the theory.
2025-03-05 18:51:01 +0100alfiee(~alfiee@user/alfiee) (Ping timeout: 244 seconds)
2025-03-05 18:51:32 +0100 <tomsmeding> "incorrect type information" in the abstract sounds like a bug -- they're overselling a little bit there
2025-03-05 18:51:54 +0100chele(~chele@user/chele) (Remote host closed the connection)
2025-03-05 18:52:01 +0100 <srazkvt> davean: oh interesting, is it public ? i'd like to have a look at it if so
2025-03-05 18:52:35 +0100 <davean> Yah its on hackage. 'miss' I have plenty of complaints about it, and wanted to take it further but it did what I needed
2025-03-05 18:52:46 +0100 <dminuoso> tomsmeding: Well, it depends on how you look at it.
2025-03-05 18:53:05 +0100 <dminuoso> tomsmeding: When GHC blows up in line #a while the actual error is line #b ...
2025-03-05 18:53:19 +0100 <tomsmeding> the claims that GHC makes are still correct, even if unhelpful
2025-03-05 18:53:33 +0100 <davean> The actual error is both places
2025-03-05 18:53:35 +0100 <tomsmeding> anyway this is arguing semantics
2025-03-05 18:53:56 +0100 <davean> The error is them not matching
2025-03-05 18:53:57 +0100 <dminuoso> It may also relate to some SML implementations, I am not sure.
2025-03-05 18:54:20 +0100 <davean> You can pick a location you can make more minimal changes in terms of code to bring into alignment
2025-03-05 18:55:04 +0100 <dminuoso> So if we take the usual approach of "add type signatures to constrain the type checker", the type error slicers would tell you *precisely* the places that actually would have any impact on that process.
2025-03-05 18:55:17 +0100 <dminuoso> To the point that this could even be a guided process
2025-03-05 18:55:25 +0100 <tomsmeding> right
2025-03-05 18:55:59 +0100 <tomsmeding> that paper looks more technical, especially in presentation (guys, you don't explain something by first giving 200 definitions), than I'm willing to read right now :)
2025-03-05 18:56:10 +0100 <tomsmeding> but I have a rough idea from the discussion here and that's good enough for me now
2025-03-05 18:59:14 +0100 <tomsmeding> (a more charitable take is that this is an implementation paper that assumes you already know how slicing works in principle -- which is fair)
2025-03-05 19:11:31 +0100srazkvt(~sarah@user/srazkvt) (Quit: Konversation terminated!)
2025-03-05 19:12:21 +0100fp(~Thunderbi@89-27-29-68.bb.dnainternet.fi) (Ping timeout: 265 seconds)
2025-03-05 19:13:10 +0100Tuplanolla(~Tuplanoll@91-159-69-59.elisa-laajakaista.fi) Tuplanolla
2025-03-05 19:15:24 +0100wootehfoot(~wootehfoo@user/wootehfoot) wootehfoot
2025-03-05 19:20:55 +0100vgtw_(~vgtw@user/vgtw) vgtw
2025-03-05 19:21:04 +0100vgtw(~vgtw@user/vgtw) (Ping timeout: 260 seconds)
2025-03-05 19:27:01 +0100bilegeek(~bilegeek@2600:1008:b050:b561:2843:58a0:b048:fc36) bilegeek
2025-03-05 19:28:14 +0100vgtw_(~vgtw@user/vgtw) (Ping timeout: 252 seconds)
2025-03-05 19:33:01 +0100alfiee(~alfiee@user/alfiee) alfiee
2025-03-05 19:35:43 +0100vgtw(~vgtw@user/vgtw) vgtw
2025-03-05 19:37:03 +0100alfiee(~alfiee@user/alfiee) (Ping timeout: 245 seconds)
2025-03-05 19:37:52 +0100Googulator(~Googulato@2a01-036d-0106-14b2-c443-5a96-b49d-1dd5.pool6.digikabel.hu) (Quit: Client closed)
2025-03-05 19:38:15 +0100Googulator(~Googulato@2a01-036d-0106-14b2-c443-5a96-b49d-1dd5.pool6.digikabel.hu)
2025-03-05 19:39:11 +0100jespada(~jespada@2800:a4:22da:e400:b167:8181:c13f:cb54) (Quit: My Mac has gone to sleep. ZZZzzz…)
2025-03-05 19:39:58 +0100machinedgod(~machinedg@d108-173-18-100.abhsia.telus.net) (Ping timeout: 252 seconds)
2025-03-05 19:40:15 +0100fun-safe-math(~fun-safe-@2601:1c2:1b7f:801f:26d6:a094:aa3b:66cd) (Quit: No Ping reply in 180 seconds.)
2025-03-05 19:41:30 +0100fun-safe-math(~fun-safe-@2601:1c2:1b7f:801f:e1d3:88d5:3ff2:2f10) fun-safe-math
2025-03-05 19:46:43 +0100p3n(~p3n@2a00:19a0:3:7c:0:d9c6:7cf6:1) p3n
2025-03-05 19:47:49 +0100ubert(~Thunderbi@2a02:8109:ab8a:5a00:42eb:c7e6:6d02:7a65) (Quit: ubert)
2025-03-05 19:48:54 +0100jmcantrell(~weechat@user/jmcantrell) (Ping timeout: 276 seconds)
2025-03-05 19:49:13 +0100Googulator(~Googulato@2a01-036d-0106-14b2-c443-5a96-b49d-1dd5.pool6.digikabel.hu) (Quit: Client closed)
2025-03-05 19:49:39 +0100Googulator(~Googulato@2a01-036d-0106-14b2-c443-5a96-b49d-1dd5.pool6.digikabel.hu)
2025-03-05 19:55:00 +0100_xor(~xor@ip-66-42-132-175.dynamic.fuse.net) (Ping timeout: 252 seconds)
2025-03-05 19:55:12 +0100ljdarj(~Thunderbi@user/ljdarj) ljdarj
2025-03-05 20:02:39 +0100_xor(~xor@ip-66-42-132-175.dynamic.fuse.net) _xor
2025-03-05 20:03:32 +0100peterbecich(~Thunderbi@syn-047-229-123-186.res.spectrum.com) peterbecich
2025-03-05 20:07:06 +0100weary-traveler(~user@user/user363627) user363627
2025-03-05 20:08:40 +0100vanishingideal(~vanishing@user/vanishingideal) vanishingideal
2025-03-05 20:09:39 +0100bilegeek_(~bilegeek@2600:1008:b09d:26e1:5113:f5a5:f05a:228d) bilegeek
2025-03-05 20:11:19 +0100bilegeek__(~bilegeek@2600:1008:b06f:f975:a471:7a4:18e0:46c) bilegeek
2025-03-05 20:12:03 +0100bilegeek(~bilegeek@2600:1008:b050:b561:2843:58a0:b048:fc36) (Ping timeout: 245 seconds)
2025-03-05 20:13:36 +0100jespada(~jespada@r186-48-57-94.dialup.adsl.anteldata.net.uy) jespada
2025-03-05 20:14:09 +0100bilegeek_(~bilegeek@2600:1008:b09d:26e1:5113:f5a5:f05a:228d) (Ping timeout: 260 seconds)
2025-03-05 20:14:28 +0100ash3en(~Thunderbi@2a03:7846:b6eb:101:93ac:a90a:da67:f207) (Read error: Connection reset by peer)
2025-03-05 20:14:39 +0100ash3en(~Thunderbi@2a03:7846:b6eb:101:93ac:a90a:da67:f207) ash3en
2025-03-05 20:16:12 +0100bilegeek__(~bilegeek@2600:1008:b06f:f975:a471:7a4:18e0:46c) (Ping timeout: 276 seconds)
2025-03-05 20:16:20 +0100vanishingideal(~vanishing@user/vanishingideal) (Quit: leaving)
2025-03-05 20:16:48 +0100vanishingideal(~vanishing@user/vanishingideal) vanishingideal
2025-03-05 20:17:19 +0100jmcantrell(~weechat@user/jmcantrell) jmcantrell
2025-03-05 20:18:45 +0100alfiee(~alfiee@user/alfiee) alfiee
2025-03-05 20:19:05 +0100 <TheHoodedClaw> I have a fairly large library written that does a lot of unrelated things and I've never uploaded to hackage before, can anyone advise me on whether it's any good, whether it needs to be broken up, which parts are most useful or whatever its https://github.com/ibrettyoudid/SwissArmyKnife
2025-03-05 20:20:23 +0100hgolden(~hgolden@2603:8000:9d00:3ed1:6ff3:8389:b901:6363) (Remote host closed the connection)
2025-03-05 20:23:04 +0100alfiee(~alfiee@user/alfiee) (Ping timeout: 260 seconds)
2025-03-05 20:23:20 +0100hgolden(~hgolden@2603:8000:9d00:3ed1:6ff3:8389:b901:6363) hgolden
2025-03-05 20:24:20 +0100peterbecich(~Thunderbi@syn-047-229-123-186.res.spectrum.com) (Quit: peterbecich)
2025-03-05 20:24:52 +0100peterbecich(~Thunderbi@syn-047-229-123-186.res.spectrum.com) peterbecich
2025-03-05 20:29:34 +0100j0lol(~j0lol@132.145.17.236) j0lol
2025-03-05 20:29:58 +0100ChaiTRex(~ChaiTRex@user/chaitrex) ChaiTRex
2025-03-05 20:40:28 +0100peterbecich(~Thunderbi@syn-047-229-123-186.res.spectrum.com) (Ping timeout: 252 seconds)
2025-03-05 20:45:12 +0100zungi(~tory@user/andrewchawk) (Ping timeout: 264 seconds)
2025-03-05 20:55:11 +0100fp(~Thunderbi@89-27-29-68.bb.dnainternet.fi) fp
2025-03-05 21:00:01 +0100caconym(~caconym@user/caconym) (Quit: bye)
2025-03-05 21:00:44 +0100caconym(~caconym@user/caconym) caconym
2025-03-05 21:02:01 +0100sabathan(~sabathan@amarseille-159-1-12-107.w86-203.abo.wanadoo.fr) (Read error: Connection reset by peer)
2025-03-05 21:05:09 +0100alfiee(~alfiee@user/alfiee) alfiee
2025-03-05 21:05:31 +0100sabathan(~sabathan@amarseille-159-1-12-107.w86-203.abo.wanadoo.fr)
2025-03-05 21:05:34 +0100SlackCoder(~SlackCode@64-94-63-8.ip.weststar.net.ky) SlackCoder
2025-03-05 21:10:06 +0100olivial(~benjaminl@user/benjaminl) (Read error: Connection reset by peer)
2025-03-05 21:10:09 +0100alfiee(~alfiee@user/alfiee) (Ping timeout: 276 seconds)
2025-03-05 21:10:21 +0100olivial(~benjaminl@user/benjaminl) benjaminl
2025-03-05 21:11:15 +0100zungi(~tory@user/andrewchawk) andrewchawk
2025-03-05 21:11:52 +0100ash3en(~Thunderbi@2a03:7846:b6eb:101:93ac:a90a:da67:f207) (Quit: ash3en)
2025-03-05 21:14:00 +0100jespada(~jespada@r186-48-57-94.dialup.adsl.anteldata.net.uy) (Quit: My Mac has gone to sleep. ZZZzzz…)
2025-03-05 21:14:10 +0100ljdarj1(~Thunderbi@user/ljdarj) ljdarj
2025-03-05 21:14:45 +0100Smiles(uid551636@id-551636.lymington.irccloud.com) (Quit: Connection closed for inactivity)
2025-03-05 21:15:54 +0100ljdarj(~Thunderbi@user/ljdarj) (Ping timeout: 244 seconds)
2025-03-05 21:15:54 +0100ljdarj1ljdarj
2025-03-05 21:18:36 +0100jmcantrell(~weechat@user/jmcantrell) (Ping timeout: 252 seconds)
2025-03-05 21:23:57 +0100sprotte24(~sprotte24@p200300d16f145200a11093ba77855b13.dip0.t-ipconnect.de)
2025-03-05 21:24:48 +0100ChaiTRex(~ChaiTRex@user/chaitrex) (Ping timeout: 264 seconds)
2025-03-05 21:26:29 +0100ChaiTRex(~ChaiTRex@user/chaitrex) ChaiTRex
2025-03-05 21:27:47 +0100 <haskellbridge> <Liamzee> hello
2025-03-05 21:27:57 +0100 <haskellbridge> <Liamzee> why am i getting an error that the RTS doesn't support multiple OS threads?
2025-03-05 21:28:05 +0100 <haskellbridge> <Liamzee> it's telling me to use ghc -threaded when linking
2025-03-05 21:28:34 +0100 <haskellbridge> <Liamzee> GHC options on my program: -Wall -rtsopts -with-rtsopts="-threaded" -threaded
2025-03-05 21:28:40 +0100 <haskellbridge> <Liamzee> M2 OSX
2025-03-05 21:29:10 +0100 <monochrom> Oh, -threaded is a compile-time flag, not runtime.
2025-03-05 21:29:20 +0100fp(~Thunderbi@89-27-29-68.bb.dnainternet.fi) (Remote host closed the connection)
2025-03-05 21:29:44 +0100 <monochrom> more precisely, link-time. When generating an exe, choose which RTS to include in the exe.
2025-03-05 21:30:50 +0100 <tomsmeding> Liamzee: remove that `-with-rtsopts="-threaded"`
2025-03-05 21:30:58 +0100 <tomsmeding> also the `-rtsopts` is unnecessary for just -N
2025-03-05 21:32:14 +0100zungi(~tory@user/andrewchawk) (Remote host closed the connection)
2025-03-05 21:32:35 +0100zungi(~tory@user/andrewchawk) andrewchawk
2025-03-05 21:33:10 +0100 <monochrom> Although, I get 0 error messages when I try verbatim `ghc -Wall -rtsopts -with-rtsopts="-threaded" -threaded c.hs` where c.hs is just "main = putStrLn"hi""
2025-03-05 21:33:41 +0100 <monochrom> Also, running the exe has no error, it just says hi.
2025-03-05 21:34:02 +0100 <tomsmeding> Liamzee: the -threaded must be on the _executable_, not on a library that happens to be a dependency of the executable -- just in case that is the problem
2025-03-05 21:34:26 +0100 <haskellbridge> <Liamzee> brick-tetris: Uncaught exception ghc-internal:GHC.Internal.IO.Exception.IOException:
2025-03-05 21:34:26 +0100 <haskellbridge> user error (RTS doesn't support multiple OS threads (use ghc -threaded when linking))
2025-03-05 21:34:48 +0100 <tomsmeding> post your cabal file?
2025-03-05 21:35:08 +0100 <tomsmeding> or the place where you're passing that -threaded
2025-03-05 21:35:23 +0100 <int-e> what is the -with-rtsopts="-threaded" for?
2025-03-05 21:35:30 +0100 <tomsmeding> being useless
2025-03-05 21:35:37 +0100 <monochrom> misunderstanding
2025-03-05 21:35:43 +0100 <int-e> I'm surprised the program doesn't choke on it tbh
2025-03-05 21:36:13 +0100 <haskellbridge> <Liamzee> okay, it seems to have been a problem with ghc-options in cabal, I have to set +RTS, then put in threaded and -N4 options
2025-03-05 21:36:39 +0100 <tomsmeding> Liamzee: that sounds highly suspicious and likely wrong; could you post your cabal file?
2025-03-05 21:37:09 +0100 <monochrom> Interesting. `./c +RTS -threaded` does not error out. Nor any prefix of "threaded". But `./c +RTS -dreaded` is an error.
2025-03-05 21:37:33 +0100 <monochrom> What magic is this that -thre is OK but -dreaded is not? :)
2025-03-05 21:38:59 +0100 <tomsmeding> monochrom: you now have files `hreaded`, `hre`, etc. in the current directory
2025-03-05 21:39:09 +0100 <tomsmeding> > -t[<file>] One-line GC statistics (if <file> omitted, uses stderr)
2025-03-05 21:39:22 +0100 <monochrom> OMG yes that's true.
2025-03-05 21:39:24 +0100 <tomsmeding> Liamzee: that goes for you too
2025-03-05 21:39:54 +0100 <monochrom> This is what's wrong with single letter options!
2025-03-05 21:39:57 +0100 <tomsmeding> nice bait-and-switch :p
2025-03-05 21:40:15 +0100 <tomsmeding> this is what's wrong with single-letter options _that take an argument that is attached to the option_
2025-03-05 21:40:18 +0100 <int-e> tomsmeding: lol, thanks
2025-03-05 21:42:10 +0100wootehfoot(~wootehfoo@user/wootehfoot) (Read error: Connection reset by peer)
2025-03-05 21:42:20 +0100sord937(~sord937@gateway/tor-sasl/sord937) (Quit: sord937)
2025-03-05 21:52:13 +0100alfiee(~alfiee@user/alfiee) alfiee
2025-03-05 21:56:38 +0100 <mauke> gcc -o2 main.c
2025-03-05 21:56:49 +0100alfiee(~alfiee@user/alfiee) (Ping timeout: 260 seconds)
2025-03-05 21:56:59 +0100superlink(~kontsikou@adsl-192.79.107.136.tellas.gr)
2025-03-05 21:57:26 +0100superlink29(~superlink@adsl-192.79.107.136.tellas.gr)
2025-03-05 21:57:55 +0100superlink29(~superlink@adsl-192.79.107.136.tellas.gr) (Client Quit)
2025-03-05 21:57:55 +0100merijn(~merijn@host-vr.cgnat-g.v4.dfn.nl) merijn
2025-03-05 21:58:48 +0100 <monochrom> oh heh
2025-03-05 22:02:26 +0100 <int-e> mauke: but "everyone" knows about -o :-)
2025-03-05 22:02:39 +0100merijn(~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 260 seconds)
2025-03-05 22:13:18 +0100merijn(~merijn@host-vr.cgnat-g.v4.dfn.nl) merijn
2025-03-05 22:17:57 +0100merijn(~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 265 seconds)
2025-03-05 22:18:43 +0100Smiles(uid551636@id-551636.lymington.irccloud.com) Smiles
2025-03-05 22:23:45 +0100peterbecich(~Thunderbi@syn-047-229-123-186.res.spectrum.com) peterbecich
2025-03-05 22:28:40 +0100merijn(~merijn@host-vr.cgnat-g.v4.dfn.nl) merijn
2025-03-05 22:33:11 +0100merijn(~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 244 seconds)
2025-03-05 22:33:58 +0100machinedgod(~machinedg@d108-173-18-100.abhsia.telus.net) machinedgod
2025-03-05 22:36:37 +0100michalz(~michalz@185.246.207.222) (Remote host closed the connection)
2025-03-05 22:36:40 +0100 <monochrom> Actually took me a minute or two to see it is not -O2 it is -o exename.
2025-03-05 22:37:45 +0100 <monochrom> Oooohhhh great trick question to put on exam! "John typed in `gcc -o2 main.c`, then can't find a.out, why?"
2025-03-05 22:37:57 +0100alfiee(~alfiee@user/alfiee) alfiee
2025-03-05 22:42:11 +0100alfiee(~alfiee@user/alfiee) (Ping timeout: 244 seconds)
2025-03-05 22:44:02 +0100merijn(~merijn@host-vr.cgnat-g.v4.dfn.nl) merijn
2025-03-05 22:47:42 +0100jmcantrell(~weechat@user/jmcantrell) jmcantrell
2025-03-05 22:48:23 +0100merijn(~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 244 seconds)
2025-03-05 22:50:48 +0100ljdarj1(~Thunderbi@user/ljdarj) ljdarj
2025-03-05 22:53:18 +0100ljdarj(~Thunderbi@user/ljdarj) (Ping timeout: 245 seconds)
2025-03-05 22:53:18 +0100ljdarj1ljdarj
2025-03-05 22:53:54 +0100 <mauke> worse is when you intend to use -o, but forget the argument: gcc -o *.c
2025-03-05 22:57:40 +0100 <haskellbridge> <Liamzee> or rather it was an issue requiring cabal clean, sigh
2025-03-05 22:57:51 +0100 <haskellbridge> <Liamzee> also, just curious, why don't Haskellers building frameworks use sum types more?
2025-03-05 22:58:34 +0100 <haskellbridge> <Liamzee> I'm looking at Brick, the interface could have been smoothed out by using a sum type with variants, possibly wrapping subtypes
2025-03-05 22:59:26 +0100merijn(~merijn@host-vr.cgnat-g.v4.dfn.nl) merijn
2025-03-05 22:59:36 +0100 <haskellbridge> <Liamzee> tbh at the very least, it'd create an issue with record field exceptions, unfortunately :(
2025-03-05 23:00:28 +0100 <haskellbridge> <sm> Liamzee which Brick api could have used a sum type ?
2025-03-05 23:03:28 +0100jespada(~jespada@r186-48-57-94.dialup.adsl.anteldata.net.uy) jespada
2025-03-05 23:04:01 +0100merijn(~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 248 seconds)
2025-03-05 23:04:24 +0100jespada(~jespada@r186-48-57-94.dialup.adsl.anteldata.net.uy) (Client Quit)
2025-03-05 23:05:37 +0100takuan(~takuan@d8D86B601.access.telenet.be) (Remote host closed the connection)
2025-03-05 23:06:06 +0100Unicorn_Princess(~Unicorn_P@user/Unicorn-Princess/x-3540542) (Remote host closed the connection)
2025-03-05 23:06:48 +0100 <haskellbridge> <Liamzee> there are multiple default mains
2025-03-05 23:07:23 +0100 <haskellbridge> <Liamzee> erm, multiple ways to call into brick, alterantive is to have one way, but have the variation be contained in the App API
2025-03-05 23:07:34 +0100 <haskellbridge> <Liamzee> erm, App type API
2025-03-05 23:08:25 +0100merijn(~merijn@host-vr.cgnat-g.v4.dfn.nl) merijn
2025-03-05 23:09:40 +0100 <haskellbridge> <Liamzee> probably my mistake, just thinking about it as a design space
2025-03-05 23:10:06 +0100 <haskellbridge> <sm> https://hackage.haskell.org/package/brick-2.8.2/docs/Brick-Main.html#v:defaultMain and friends eh
2025-03-05 23:10:48 +0100 <haskellbridge> <sm> generally I think haskell frameworks use sum types plenty
2025-03-05 23:11:49 +0100 <haskellbridge> <sm> he probably thought separate main functions for separate use cases was easier to use
2025-03-05 23:13:00 +0100merijn(~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 252 seconds)
2025-03-05 23:14:08 +0100peterbecich(~Thunderbi@syn-047-229-123-186.res.spectrum.com) (Ping timeout: 245 seconds)
2025-03-05 23:15:43 +0100mange(~user@user/mange) mange
2025-03-05 23:19:56 +0100fp(~Thunderbi@89-27-29-68.bb.dnainternet.fi) fp
2025-03-05 23:20:29 +0100visilii_(~visilii@85.172.77.105)
2025-03-05 23:23:47 +0100merijn(~merijn@host-vr.cgnat-g.v4.dfn.nl) merijn
2025-03-05 23:24:10 +0100visilii(~visilii@213.24.126.217) (Ping timeout: 265 seconds)
2025-03-05 23:24:41 +0100alfiee(~alfiee@user/alfiee) alfiee
2025-03-05 23:26:23 +0100Pozyomka(~pyon@user/pyon) (Quit: WeeChat 4.5.2)
2025-03-05 23:26:42 +0100machinedgod(~machinedg@d108-173-18-100.abhsia.telus.net) (Quit: leaving)
2025-03-05 23:27:05 +0100machinedgod(~machinedg@d108-173-18-100.abhsia.telus.net) machinedgod
2025-03-05 23:28:46 +0100vanishingideal(~vanishing@user/vanishingideal) (Ping timeout: 252 seconds)
2025-03-05 23:29:19 +0100alfiee(~alfiee@user/alfiee) (Ping timeout: 268 seconds)
2025-03-05 23:30:33 +0100 <haskellbridge> <Bowuigi> Implementation-wise it makes sense. Most of those are defined in terms of each other, so it's just abstracting boilerplate
2025-03-05 23:30:35 +0100merijn(~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 252 seconds)
2025-03-05 23:31:41 +0100chewybread(~chewybrea@user/chewybread) chewybread
2025-03-05 23:39:59 +0100Googulator(~Googulato@2a01-036d-0106-14b2-c443-5a96-b49d-1dd5.pool6.digikabel.hu) (Quit: Client closed)
2025-03-05 23:40:14 +0100Googulator(~Googulato@2a01-036d-0106-14b2-c443-5a96-b49d-1dd5.pool6.digikabel.hu)