Home liberachat/#haskell: Logs Calendar

Logs on 2025-03-05 (liberachat/#haskell)

00:03:03 alfiee joins (~alfiee@user/alfiee)
00:03:49 × merijn quits (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 260 seconds)
00:07:19 × alfiee quits (~alfiee@user/alfiee) (Ping timeout: 260 seconds)
00:10:16 Sgeo joins (~Sgeo@user/sgeo)
00:14:36 merijn joins (~merijn@host-vr.cgnat-g.v4.dfn.nl)
00:16:21 × cyphase quits (~cyphase@user/cyphase) (Ping timeout: 248 seconds)
00:19:14 × merijn quits (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 252 seconds)
00:26:22 peterbecich joins (~Thunderbi@syn-047-229-123-186.res.spectrum.com)
00:29:59 merijn joins (~merijn@host-vr.cgnat-g.v4.dfn.nl)
00:34:37 × merijn quits (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 252 seconds)
00:39:11 machinedgod joins (~machinedg@d108-173-18-100.abhsia.telus.net)
00:39:22 <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?
00:39:55 <jle`> but simon states that the TChan does clean up itself (https://github.com/haskell/stm/issues/21)
00:40:10 × LainExperiments quits (~LainExper@user/LainExperiments) (Ping timeout: 240 seconds)
00:40:38 <jle`> or maybe i am misunderstanding what 'write' is used for
00:45:21 merijn joins (~merijn@host-vr.cgnat-g.v4.dfn.nl)
00:46:34 × xff0x quits (~xff0x@2405:6580:b080:900:9c0d:a18a:824d:47d5) (Ping timeout: 260 seconds)
00:48:09 × sprotte24 quits (~sprotte24@p200300d16f1cc100391369cbcf60a0c3.dip0.t-ipconnect.de) (Quit: Leaving)
00:48:09 × acidjnk_new quits (~acidjnk@p200300d6e7283f62f42219c1fddec46c.dip0.t-ipconnect.de) (Ping timeout: 268 seconds)
00:49:47 alfiee joins (~alfiee@user/alfiee)
00:50:17 yegorc parts (~yegorc@user/yegorc) (Leaving)
00:50:23 LainExperiments joins (~LainExper@user/LainExperiments)
00:50:33 × merijn quits (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 276 seconds)
00:52:43 <jle`> oh okay the write hole doesn't reference the duped chans, maybe that's it
00:54:04 × alfiee quits (~alfiee@user/alfiee) (Ping timeout: 252 seconds)
00:55:14 <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
01:00:44 merijn joins (~merijn@host-vr.cgnat-g.v4.dfn.nl)
01:01:33 myxos joins (~myxos@syn-065-028-251-121.res.spectrum.com)
01:05:04 × merijn quits (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 252 seconds)
01:16:05 merijn joins (~merijn@host-vr.cgnat-g.v4.dfn.nl)
01:23:18 × merijn quits (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 268 seconds)
01:23:18 × peterbecich quits (~Thunderbi@syn-047-229-123-186.res.spectrum.com) (Ping timeout: 268 seconds)
01:33:06 j1n37 joins (~j1n37@user/j1n37)
01:34:09 merijn joins (~merijn@host-vr.cgnat-g.v4.dfn.nl)
01:35:03 × poscat quits (~poscat@user/poscat) (Ping timeout: 252 seconds)
01:35:16 cyphase joins (~cyphase@user/cyphase)
01:35:51 alfiee joins (~alfiee@user/alfiee)
01:39:06 × merijn quits (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 265 seconds)
01:39:30 × cyphase quits (~cyphase@user/cyphase) (Ping timeout: 248 seconds)
01:39:56 poscat joins (~poscat@user/poscat)
01:40:33 × alfiee quits (~alfiee@user/alfiee) (Ping timeout: 265 seconds)
01:46:51 xff0x joins (~xff0x@fsb6a9491c.tkyc517.ap.nuro.jp)
01:47:13 × machinedgod quits (~machinedg@d108-173-18-100.abhsia.telus.net) (Ping timeout: 252 seconds)
01:49:32 merijn joins (~merijn@host-vr.cgnat-g.v4.dfn.nl)
01:51:23 × LainExperiments quits (~LainExper@user/LainExperiments) (Quit: Client closed)
01:53:50 × merijn quits (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 252 seconds)
01:54:03 fp joins (~Thunderbi@89-27-29-68.bb.dnainternet.fi)
01:54:16 × Tuplanolla quits (~Tuplanoll@91-159-69-59.elisa-laajakaista.fi) (Quit: Leaving.)
02:00:39 × fp quits (~Thunderbi@89-27-29-68.bb.dnainternet.fi) (Ping timeout: 260 seconds)
02:04:55 merijn joins (~merijn@host-vr.cgnat-g.v4.dfn.nl)
02:09:08 × merijn quits (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 244 seconds)
02:20:17 merijn joins (~merijn@host-vr.cgnat-g.v4.dfn.nl)
02:21:36 alfiee joins (~alfiee@user/alfiee)
02:24:14 × euphores quits (~SASL_euph@user/euphores) (Read error: Connection reset by peer)
02:24:37 × merijn quits (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 252 seconds)
02:25:48 × alfiee quits (~alfiee@user/alfiee) (Ping timeout: 245 seconds)
02:32:20 euphores joins (~SASL_euph@user/euphores)
02:32:21 × notdabs quits (~Owner@2600:1700:69cf:9000:3d02:fb32:31ee:6acc) (Read error: Connection reset by peer)
02:32:27 × ljdarj quits (~Thunderbi@user/ljdarj) (Quit: ljdarj)
02:34:25 hexreel joins (~hexreel@user/hexreel)
02:35:40 merijn joins (~merijn@host-vr.cgnat-g.v4.dfn.nl)
02:40:21 × merijn quits (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 248 seconds)
02:42:13 hexreel parts (~hexreel@user/hexreel) ()
02:51:02 merijn joins (~merijn@host-vr.cgnat-g.v4.dfn.nl)
02:51:29 Square joins (~Square@user/square)
02:55:20 × Square2 quits (~Square4@user/square) (Ping timeout: 244 seconds)
02:55:21 LainExperiments joins (~LainExper@user/LainExperiments)
02:56:04 × merijn quits (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 260 seconds)
03:05:40 × LainExperiments quits (~LainExper@user/LainExperiments) (Ping timeout: 240 seconds)
03:06:11 × tromp quits (~textual@2a02:a210:cba:8500:4189:9487:9abd:f78) (Ping timeout: 244 seconds)
03:06:36 merijn joins (~merijn@host-vr.cgnat-g.v4.dfn.nl)
03:07:29 tavare joins (~tavare@150.129.88.189)
03:07:29 × tavare quits (~tavare@150.129.88.189) (Changing host)
03:07:29 tavare joins (~tavare@user/tavare)
03:07:40 alfiee joins (~alfiee@user/alfiee)
03:07:58 × anjii quits (~user@177.47.220.78) (Quit: goodnight)
03:11:08 × merijn quits (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 244 seconds)
03:12:12 × alfiee quits (~alfiee@user/alfiee) (Ping timeout: 272 seconds)
03:16:51 cyphase joins (~cyphase@user/cyphase)
03:21:59 merijn joins (~merijn@host-vr.cgnat-g.v4.dfn.nl)
03:23:41 peterbecich joins (~Thunderbi@syn-047-229-123-186.res.spectrum.com)
03:26:20 × merijn quits (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 244 seconds)
03:27:24 × tavare quits (~tavare@user/tavare) (Ping timeout: 272 seconds)
03:28:29 × _xor quits (~xor@ip-66-42-132-175.dynamic.fuse.net) (Read error: Connection reset by peer)
03:28:47 tavare joins (~tavare@user/tavare)
03:31:14 × ystael quits (~ystael@user/ystael) (Ping timeout: 265 seconds)
03:34:03 _xor joins (~xor@ip-66-42-132-175.dynamic.fuse.net)
03:37:20 merijn joins (~merijn@host-vr.cgnat-g.v4.dfn.nl)
03:41:59 × merijn quits (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 252 seconds)
03:43:47 ljdarj joins (~Thunderbi@user/ljdarj)
03:45:32 bitdex joins (~bitdex@gateway/tor-sasl/bitdex)
03:47:48 bilegeek joins (~bilegeek@108.sub-174-228-98.myvzw.com)
03:49:02 ystael joins (~ystael@user/ystael)
03:52:44 merijn joins (~merijn@host-vr.cgnat-g.v4.dfn.nl)
03:53:24 alfiee joins (~alfiee@user/alfiee)
03:54:44 × messewix quits (~jmc@user/messewix) (Quit: Konversation terminated!)
03:54:49 × ystael quits (~ystael@user/ystael) (Ping timeout: 260 seconds)
03:57:44 × alfiee quits (~alfiee@user/alfiee) (Ping timeout: 260 seconds)
03:59:11 × merijn quits (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 244 seconds)
04:03:16 × peterbecich quits (~Thunderbi@syn-047-229-123-186.res.spectrum.com) (Ping timeout: 252 seconds)
04:04:06 × ljdarj quits (~Thunderbi@user/ljdarj) (Ping timeout: 265 seconds)
04:10:47 merijn joins (~merijn@host-vr.cgnat-g.v4.dfn.nl)
04:15:17 × merijn quits (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 248 seconds)
04:26:09 merijn joins (~merijn@host-vr.cgnat-g.v4.dfn.nl)
04:30:46 × merijn quits (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 252 seconds)
04:39:08 alfiee joins (~alfiee@user/alfiee)
04:41:32 merijn joins (~merijn@host-vr.cgnat-g.v4.dfn.nl)
04:43:36 × alfiee quits (~alfiee@user/alfiee) (Ping timeout: 252 seconds)
04:45:48 × merijn quits (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 245 seconds)
04:47:48 Guest42 joins (~Guest42@220-233-36-23.ip4.exetel.com.au)
04:50:20 × aforemny quits (~aforemny@i577BEE31.versanet.de) (Ping timeout: 244 seconds)
04:51:18 aforemny joins (~aforemny@2001:9e8:6ce5:d00:19b4:f9fd:f481:8f07)
04:53:13 × Guest42 quits (~Guest42@220-233-36-23.ip4.exetel.com.au) (Quit: Client closed)
04:56:55 merijn joins (~merijn@host-vr.cgnat-g.v4.dfn.nl)
05:01:12 × merijn quits (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 252 seconds)
05:01:14 × j1n37 quits (~j1n37@user/j1n37) (Read error: Connection reset by peer)
05:04:33 j1n37 joins (~j1n37@user/j1n37)
05:06:22 × j1n37 quits (~j1n37@user/j1n37) (Read error: Connection reset by peer)
05:07:11 j1n37 joins (~j1n37@user/j1n37)
05:07:45 × hgolden quits (~hgolden@2603:8000:9d00:3ed1:6ff3:8389:b901:6363) (Remote host closed the connection)
05:08:41 × j1n37 quits (~j1n37@user/j1n37) (Read error: Connection reset by peer)
05:10:12 hgolden joins (~hgolden@2603:8000:9d00:3ed1:6ff3:8389:b901:6363)
05:12:17 merijn joins (~merijn@host-vr.cgnat-g.v4.dfn.nl)
05:12:52 j1n37 joins (~j1n37@user/j1n37)
05:14:38 × j1n37 quits (~j1n37@user/j1n37) (Read error: Connection reset by peer)
05:16:35 × merijn quits (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 252 seconds)
05:17:44 j1n37 joins (~j1n37@user/j1n37)
05:18:47 × j1n37 quits (~j1n37@user/j1n37) (Read error: Connection reset by peer)
05:23:22 j1n37 joins (~j1n37@user/j1n37)
05:26:12 alfiee joins (~alfiee@user/alfiee)
05:27:39 merijn joins (~merijn@host-vr.cgnat-g.v4.dfn.nl)
05:28:25 × jmcantrell quits (~weechat@user/jmcantrell) (Quit: WeeChat 4.5.2)
05:28:27 jmcantrell_ is now known as jmcantrell
05:30:38 × alfiee quits (~alfiee@user/alfiee) (Ping timeout: 244 seconds)
05:32:22 × merijn quits (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 252 seconds)
05:35:06 peterbecich joins (~Thunderbi@syn-047-229-123-186.res.spectrum.com)
05:38:17 Square2 joins (~Square4@user/square)
05:39:23 michalz joins (~michalz@185.246.207.222)
05:40:07 × tavare quits (~tavare@user/tavare) (Remote host closed the connection)
05:41:02 merijn joins (~merijn@host-vr.cgnat-g.v4.dfn.nl)
05:41:45 × Square quits (~Square@user/square) (Ping timeout: 276 seconds)
05:45:25 × merijn quits (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 248 seconds)
05:47:39 takuan joins (~takuan@d8D86B601.access.telenet.be)
05:56:26 merijn joins (~merijn@host-vr.cgnat-g.v4.dfn.nl)
06:00:08 × vanishingideal quits (~vanishing@user/vanishingideal) (Remote host closed the connection)
06:00:49 × merijn quits (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 248 seconds)
06:11:49 merijn joins (~merijn@host-vr.cgnat-g.v4.dfn.nl)
06:11:55 alfiee joins (~alfiee@user/alfiee)
06:16:11 <c_wraith> anyone know why hsc2hs would be genrating blank files on windows?
06:16:19 × merijn quits (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 244 seconds)
06:16:22 × alfiee quits (~alfiee@user/alfiee) (Ping timeout: 252 seconds)
06:21:52 <c_wraith> or even where to find its log when run by cabal?
06:22:49 vanishingideal joins (~vanishing@user/vanishingideal)
06:26:15 × bilegeek quits (~bilegeek@108.sub-174-228-98.myvzw.com) (Quit: Leaving)
06:27:12 merijn joins (~merijn@host-vr.cgnat-g.v4.dfn.nl)
06:32:15 × merijn quits (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 268 seconds)
06:32:48 ljdarj joins (~Thunderbi@user/ljdarj)
06:42:35 merijn joins (~merijn@host-vr.cgnat-g.v4.dfn.nl)
06:45:37 CiaoSen joins (~Jura@2a02:8071:64e1:7180:4e50:ddff:fe9b:8922)
06:49:10 × merijn quits (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 244 seconds)
06:51:59 × peterbecich quits (~Thunderbi@syn-047-229-123-186.res.spectrum.com) (Ping timeout: 268 seconds)
06:57:59 alfiee joins (~alfiee@user/alfiee)
07:00:37 merijn joins (~merijn@host-vr.cgnat-g.v4.dfn.nl)
07:03:00 × alfiee quits (~alfiee@user/alfiee) (Ping timeout: 276 seconds)
07:05:36 × merijn quits (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 276 seconds)
07:11:22 × Lord_of_Life quits (~Lord@user/lord-of-life/x-2819915) (Ping timeout: 252 seconds)
07:11:38 × sam113101 quits (~sam@modemcable220.199-203-24.mc.videotron.ca) (Ping timeout: 265 seconds)
07:12:09 <kilolympus> c_wraith, are you able to run e.g. cabal exec -- hsc2hs ?
07:12:16 <kilolympus> maybe that can help debug stuff
07:12:20 Lord_of_Life joins (~Lord@user/lord-of-life/x-2819915)
07:15:59 merijn joins (~merijn@host-vr.cgnat-g.v4.dfn.nl)
07:20:10 × merijn quits (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 244 seconds)
07:20:54 × ljdarj quits (~Thunderbi@user/ljdarj) (Ping timeout: 260 seconds)
07:26:13 × CiaoSen quits (~Jura@2a02:8071:64e1:7180:4e50:ddff:fe9b:8922) (Ping timeout: 248 seconds)
07:28:00 CiaoSen joins (~Jura@ip-037-201-240-075.um10.pools.vodafone-ip.de)
07:30:02 sam113101 joins (~sam@modemcable220.199-203-24.mc.videotron.ca)
07:31:22 merijn joins (~merijn@host-vr.cgnat-g.v4.dfn.nl)
07:33:44 sord937 joins (~sord937@gateway/tor-sasl/sord937)
07:35:53 × merijn quits (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 244 seconds)
07:38:51 × vanishingideal quits (~vanishing@user/vanishingideal) (Ping timeout: 252 seconds)
07:40:50 vanishingideal joins (~vanishing@user/vanishingideal)
07:42:01 merijn joins (~merijn@host-vr.cgnat-g.v4.dfn.nl)
07:43:24 alfiee joins (~alfiee@user/alfiee)
07:46:51 × merijn quits (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 252 seconds)
07:48:06 × alfiee quits (~alfiee@user/alfiee) (Ping timeout: 268 seconds)
07:51:00 × Sgeo quits (~Sgeo@user/sgeo) (Read error: Connection reset by peer)
07:51:41 × j1n37 quits (~j1n37@user/j1n37) (Ping timeout: 244 seconds)
07:52:40 j1n37 joins (~j1n37@user/j1n37)
07:53:34 × ft quits (~ft@p3e9bc68d.dip0.t-ipconnect.de) (Quit: leaving)
07:54:27 × zungi quits (~tory@user/andrewchawk) (Remote host closed the connection)
07:56:09 zungi joins (~tory@user/andrewchawk)
07:57:24 merijn joins (~merijn@host-vr.cgnat-g.v4.dfn.nl)
08:00:00 × caconym quits (~caconym@user/caconym) (Quit: bye)
08:00:53 caconym joins (~caconym@user/caconym)
08:01:58 × merijn quits (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 252 seconds)
08:10:51 × weary-traveler quits (~user@user/user363627) (Remote host closed the connection)
08:22:17 zmt01 joins (~zmt00@user/zmt00)
08:22:38 evgeny joins (~Shaeto@94.25.234.254)
08:24:29 × zmt00 quits (~zmt00@user/zmt00) (Ping timeout: 268 seconds)
08:30:08 alfiee joins (~alfiee@user/alfiee)
08:34:33 × alfiee quits (~alfiee@user/alfiee) (Ping timeout: 245 seconds)
08:40:17 merijn joins (~merijn@77.242.116.146)
08:41:07 × kmein quits (~weechat@user/kmein) (Quit: ciao kakao)
08:43:11 kmein joins (~weechat@user/kmein)
08:44:05 × CiaoSen quits (~Jura@ip-037-201-240-075.um10.pools.vodafone-ip.de) (Ping timeout: 244 seconds)
08:45:59 Unicorn_Princess joins (~Unicorn_P@user/Unicorn-Princess/x-3540542)
08:46:08 CiaoSen joins (~Jura@2a02:8071:64e1:7180:4e50:ddff:fe9b:8922)
08:55:41 Smiles joins (uid551636@id-551636.lymington.irccloud.com)
08:56:31 machinedgod joins (~machinedg@d108-173-18-100.abhsia.telus.net)
09:11:15 × merijn quits (~merijn@77.242.116.146) (Ping timeout: 244 seconds)
09:12:08 acidjnk_new joins (~acidjnk@p200300d6e7283f53f42219c1fddec46c.dip0.t-ipconnect.de)
09:15:34 merijn joins (~merijn@77.242.116.146)
09:16:33 alfiee joins (~alfiee@user/alfiee)
09:20:33 × alfiee quits (~alfiee@user/alfiee) (Ping timeout: 244 seconds)
09:20:48 × merijn quits (~merijn@77.242.116.146) (Ping timeout: 272 seconds)
09:22:25 × mceresa quits (~mceresa@user/mceresa) (Ping timeout: 248 seconds)
09:22:35 mceresa joins (~mceresa@user/mceresa)
09:29:50 merijn joins (~merijn@77.242.116.146)
09:35:51 kuribas joins (~user@ip-188-118-57-242.reverse.destiny.be)
09:36:39 × tzh quits (~tzh@c-76-115-131-146.hsd1.or.comcast.net) (Quit: zzz)
09:40:23 × merijn quits (~merijn@77.242.116.146) (Ping timeout: 245 seconds)
09:41:17 __monty__ joins (~toonn@user/toonn)
09:44:17 × yuuta quits (~YuutaW@2404:f4c0:f9c3:502::100:17b7) (Ping timeout: 248 seconds)
09:45:27 chele joins (~chele@user/chele)
09:47:35 YuutaW joins (~YuutaW@2404:f4c0:f9c3:502::100:17b7)
09:50:03 × xff0x quits (~xff0x@fsb6a9491c.tkyc517.ap.nuro.jp) (Ping timeout: 252 seconds)
09:53:47 merijn joins (~merijn@77.242.116.146)
10:02:16 alfiee joins (~alfiee@user/alfiee)
10:03:36 tabaqui1 joins (~root@87.200.129.102)
10:03:50 × gmg quits (~user@user/gehmehgeh) (Remote host closed the connection)
10:06:38 × alfiee quits (~alfiee@user/alfiee) (Ping timeout: 252 seconds)
10:18:23 Digitteknohippie joins (~user@user/digit)
10:19:28 × Digit quits (~user@user/digit) (Ping timeout: 252 seconds)
10:22:22 × anpad quits (~pandeyan@user/anpad) (Quit: ZNC 1.8.2 - https://znc.in)
10:22:33 × merijn quits (~merijn@77.242.116.146) (Ping timeout: 244 seconds)
10:23:30 × Digitteknohippie quits (~user@user/digit) (Ping timeout: 272 seconds)
10:23:47 anpad joins (~pandeyan@user/anpad)
10:24:44 × econo_ quits (uid147250@id-147250.tinside.irccloud.com) (Quit: Connection closed for inactivity)
10:32:50 × Unicorn_Princess quits (~Unicorn_P@user/Unicorn-Princess/x-3540542) (Remote host closed the connection)
10:33:39 × cyphase quits (~cyphase@user/cyphase) (Remote host closed the connection)
10:34:48 euouae joins (~euouae@user/euouae)
10:35:01 <euouae> Hello, what does `class (Stream s, MonadPlus m) => MonadParsec e s m | m -> e s where ` mean? In particular the | character there.
10:35:15 merijn joins (~merijn@77.242.116.146)
10:35:24 <tomsmeding> euouae: https://downloads.haskell.org/ghc/latest/docs/users_guide/exts/functional_dependencies.html#extension-FunctionalDependencies
10:40:00 × merijn quits (~merijn@77.242.116.146) (Ping timeout: 252 seconds)
10:41:26 cyphase joins (~cyphase@user/cyphase)
10:42:18 ubert joins (~Thunderbi@2a02:8109:ab8a:5a00:42eb:c7e6:6d02:7a65)
10:42:19 × euouae quits (~euouae@user/euouae) (Read error: Connection reset by peer)
10:42:57 × Square2 quits (~Square4@user/square) (Remote host closed the connection)
10:43:33 Square2 joins (~Square4@user/square)
10:45:19 euouae joins (~euouae@user/euouae)
10:45:32 xff0x joins (~xff0x@2405:6580:b080:900:65a4:3374:7c1f:492b)
10:46:28 <euouae> It seems that functional dependencies are hints to the type system?
10:47:10 <euouae> and perhaps constraint in terms of what new instances can be added
10:47:44 <euouae> so in the case of MonadParsec, e,s are uniquely determined by m?
10:48:08 × cyphase quits (~cyphase@user/cyphase) (Quit: cyphase.com)
10:49:00 alfiee joins (~alfiee@user/alfiee)
10:49:13 <mauke> yes
10:49:21 merijn joins (~merijn@77.242.116.146)
10:50:35 <euouae> great thank you
10:51:42 × Square2 quits (~Square4@user/square) (Ping timeout: 244 seconds)
10:53:39 × alfiee quits (~alfiee@user/alfiee) (Ping timeout: 260 seconds)
10:54:11 cyphase joins (~cyphase@user/cyphase)
11:03:52 × cyphase quits (~cyphase@user/cyphase) (Quit: cyphase.com)
11:05:26 Digit joins (~user@user/digit)
11:06:39 × Digit quits (~user@user/digit) (Remote host closed the connection)
11:06:57 × xff0x quits (~xff0x@2405:6580:b080:900:65a4:3374:7c1f:492b) (Ping timeout: 248 seconds)
11:07:51 cyphase joins (~cyphase@user/cyphase)
11:08:59 × CiaoSen quits (~Jura@2a02:8071:64e1:7180:4e50:ddff:fe9b:8922) (Ping timeout: 260 seconds)
11:09:21 × merijn quits (~merijn@77.242.116.146) (Ping timeout: 276 seconds)
11:09:33 CiaoSen joins (~Jura@ip-037-201-240-075.um10.pools.vodafone-ip.de)
11:09:39 digitteknohippie joins (~user@user/digit)
11:11:14 × zmt01 quits (~zmt00@user/zmt00) (Ping timeout: 248 seconds)
11:11:44 × cyphase quits (~cyphase@user/cyphase) (Client Quit)
11:13:28 digitteknohippie is now known as Digit
11:14:25 cyphase joins (~cyphase@user/cyphase)
11:15:26 × cyphase quits (~cyphase@user/cyphase) (Client Quit)
11:20:29 cyphase joins (~cyphase@user/cyphase)
11:21:25 × cyphase quits (~cyphase@user/cyphase) (Client Quit)
11:21:47 iteratee_ joins (~kyle@162.218.222.207)
11:22:25 × iteratee quits (~kyle@162.218.222.207) (Read error: Connection reset by peer)
11:25:12 cyphase joins (~cyphase@user/cyphase)
11:26:45 califax_ joins (~califax@user/califx)
11:27:12 × califax quits (~califax@user/califx) (Ping timeout: 264 seconds)
11:27:59 califax_ is now known as califax
11:31:19 merijn joins (~merijn@77.242.116.146)
11:32:48 × cyphase quits (~cyphase@user/cyphase) (Quit: cyphase.com)
11:34:24 alfiee joins (~alfiee@user/alfiee)
11:38:52 × alfiee quits (~alfiee@user/alfiee) (Ping timeout: 272 seconds)
11:39:09 cyphase joins (~cyphase@user/cyphase)
11:47:40 absence_ is now known as absence
11:49:28 fp joins (~Thunderbi@89-27-29-68.bb.dnainternet.fi)
11:55:33 × CiaoSen quits (~Jura@ip-037-201-240-075.um10.pools.vodafone-ip.de) (Ping timeout: 244 seconds)
12:09:09 xff0x joins (~xff0x@2405:6580:b080:900:1bc3:e66f:477:1057)
12:17:29 ystael joins (~ystael@user/ystael)
12:20:29 alfiee joins (~alfiee@user/alfiee)
12:23:22 × Googulator quits (~Googulato@80-95-93-248.pool.digikabel.hu) (Quit: Client closed)
12:23:54 Googulator joins (~Googulato@80-95-93-248.pool.digikabel.hu)
12:24:36 × alfiee quits (~alfiee@user/alfiee) (Ping timeout: 252 seconds)
12:30:32 × hughjfchen quits (~hughjfche@vmi2417424.contaboserver.net) (Ping timeout: 268 seconds)
12:32:12 jespada joins (~jespada@2800:a4:22da:e400:b167:8181:c13f:cb54)
12:46:13 × eL_Bart0 quits (eL_Bart0@dietunichtguten.org) (Ping timeout: 245 seconds)
13:02:28 × gentauro quits (~gentauro@user/gentauro) (Ping timeout: 272 seconds)
13:02:43 gentauro joins (~gentauro@user/gentauro)
13:03:07 Square2 joins (~Square4@user/square)
13:04:15 × mange quits (~user@user/mange) (Quit: Zzz...)
13:06:53 alfiee joins (~alfiee@user/alfiee)
13:09:51 zmt00 joins (~zmt00@user/zmt00)
13:11:04 forell_ joins (~forell@host-178-216-90-220.sta.tvknaszapraca.pl)
13:11:19 × alfiee quits (~alfiee@user/alfiee) (Ping timeout: 260 seconds)
13:11:26 × forell quits (~forell@user/forell) (Ping timeout: 252 seconds)
13:22:03 × fp quits (~Thunderbi@89-27-29-68.bb.dnainternet.fi) (Ping timeout: 245 seconds)
13:35:33 × Googulator quits (~Googulato@80-95-93-248.pool.digikabel.hu) (Quit: Client closed)
13:35:58 Googulator joins (~Googulato@2a01-036d-0106-14b2-c443-5a96-b49d-1dd5.pool6.digikabel.hu)
13:36:24 × evgeny quits (~Shaeto@94.25.234.254) (Ping timeout: 260 seconds)
13:38:03 evgeny joins (~Shaeto@94.25.234.181)
13:38:06 × pavonia quits (~user@user/siracusa) (Quit: Bye!)
13:42:12 × zungi quits (~tory@user/andrewchawk) (Ping timeout: 264 seconds)
13:47:21 zungi joins (~tory@user/andrewchawk)
13:52:18 alfiee joins (~alfiee@user/alfiee)
13:56:40 × alfiee quits (~alfiee@user/alfiee) (Ping timeout: 244 seconds)
13:57:12 × bitdex quits (~bitdex@gateway/tor-sasl/bitdex) (Ping timeout: 264 seconds)
14:02:36 × ChaiTRex quits (~ChaiTRex@user/chaitrex) (Ping timeout: 264 seconds)
14:08:15 <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`)?
14:08:47 <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.
14:08:51 <tomsmeding> of course, you can also define Reader directly as `newtype Reader r a = Reader (r -> a)`
14:09:18 <euouae> Oh, that's slick right
14:09:43 <euouae> so when people say the reader monad is useful, do they mean ReaderT?
14:09:47 <euouae> for the most part?
14:10:00 <tomsmeding> usually, but not necessarily
14:10:20 <mauke> > join (+) 3
14:10:21 <lambdabot> 6
14:10:33 <tomsmeding> _just_ a Reader is not particularly useful, the cost of the monadic syntax is higher than what it gives you
14:10:41 <tomsmeding> disregarding pointfree tricks
14:10:44 <euouae> > :t join
14:10:46 <lambdabot> <hint>:1:1: error: parse error on input ‘:’
14:10:46 tomsmeding looks askance at mauke
14:10:50 <tomsmeding> :t join
14:10:51 <lambdabot> Monad m => m (m a) -> m a
14:11:16 <euouae> ah what, I didn't realize you used the -> monad instance to diagonalize +
14:11:21 ChaiTRex joins (~ChaiTRex@user/chaitrex)
14:11:21 <tomsmeding> % :t join @((->) r)
14:11:21 <yahb2> <interactive>:1:13: error: [GHC-76037] ; Not in scope: type variable ‘r’
14:11:25 <tomsmeding> % :t join @((->) Int)
14:11:25 <yahb2> join @((->) Int) ; :: Monad ((->) Int) => (Int -> (Int -> a)) -> Int -> a
14:12:19 <euouae> tomsmeding: and is there a difference between mapReader and >>=?
14:12:27 <euouae> In using one or the other I mea
14:12:54 <mauke> :t mapReader
14:12:55 <lambdabot> (a -> b) -> Reader r a -> Reader r b
14:13:10 <mauke> oh, that's fmap
14:13:17 <mauke> >>= is fmap + join
14:13:29 <euouae> Ah yeah I forgot to say that I was using pure . too
14:13:39 <euouae> Right, so mapReader is just a specialized fmap?
14:13:41 <mauke> join undoes pure
14:13:47 <mauke> yeah
14:13:56 <euouae> Right! thank you
14:14:03 <mauke> > ((!!) =<< show) 0
14:14:05 <lambdabot> '0'
14:14:37 euouae shies away from the brain teasers and goes back into his studies
14:15:35 <mauke> :-)
14:18:05 <tomsmeding> ((!!) =<< show) 0 = (\r -> (!!) (show r) r) 0 = show 0 !! 0
14:21:09 <mauke> (=<<): the other S
14:24:14 × Googulator quits (~Googulato@2a01-036d-0106-14b2-c443-5a96-b49d-1dd5.pool6.digikabel.hu) (Quit: Client closed)
14:24:28 Googulator joins (~Googulato@80-95-93-248.pool.digikabel.hu)
14:35:10 × ystael quits (~ystael@user/ystael) (Quit: Lost terminal)
14:38:02 alfiee joins (~alfiee@user/alfiee)
14:42:22 × alfiee quits (~alfiee@user/alfiee) (Ping timeout: 252 seconds)
14:46:18 gmg joins (~user@user/gehmehgeh)
14:49:23 CiaoSen joins (~Jura@2a02:8071:64e1:7180:4e50:ddff:fe9b:8922)
14:55:11 ystael joins (~ystael@user/ystael)
14:56:21 <haskellbridge> <mauke> E
14:59:19 fp joins (~Thunderbi@89-27-29-68.bb.dnainternet.fi)
15:05:23 × Googulator quits (~Googulato@80-95-93-248.pool.digikabel.hu) (Quit: Client closed)
15:05:47 Googulator joins (~Googulato@2a01-036d-0106-14b2-c443-5a96-b49d-1dd5.pool6.digikabel.hu)
15:07:23 ash3en joins (~Thunderbi@2a03:7846:b6eb:101:93ac:a90a:da67:f207)
15:09:25 × vulpine quits (xfnw@user/meow/xfnw) (Quit: Connection reset by purr)
15:09:54 vulpine joins (xfnw@user/meow/xfnw)
15:13:50 Unicorn_Princess joins (~Unicorn_P@user/Unicorn-Princess/x-3540542)
15:21:21 × vanishingideal quits (~vanishing@user/vanishingideal) (Ping timeout: 268 seconds)
15:23:07 vanishingideal joins (~vanishing@user/vanishingideal)
15:25:26 alfiee joins (~alfiee@user/alfiee)
15:29:40 × alfiee quits (~alfiee@user/alfiee) (Ping timeout: 252 seconds)
15:30:01 lucasEsc joins (~lucasEsc@181.110.191.164)
15:30:34 × jespada quits (~jespada@2800:a4:22da:e400:b167:8181:c13f:cb54) (Quit: My Mac has gone to sleep. ZZZzzz…)
15:35:52 × son0p quits (~ff@2800:e6:4000:d723:c181:4205:f2b1:437a) (Ping timeout: 244 seconds)
15:37:43 × sabathan quits (~sabathan@amarseille-159-1-12-107.w86-203.abo.wanadoo.fr) (Read error: Connection reset by peer)
15:38:41 × ash3en quits (~Thunderbi@2a03:7846:b6eb:101:93ac:a90a:da67:f207) (Quit: ash3en)
15:39:03 ash3en joins (~Thunderbi@2a03:7846:b6eb:101:93ac:a90a:da67:f207)
15:40:47 × ash3en quits (~Thunderbi@2a03:7846:b6eb:101:93ac:a90a:da67:f207) (Client Quit)
15:41:08 ash3en joins (~Thunderbi@2a03:7846:b6eb:101:93ac:a90a:da67:f207)
15:41:48 sabathan joins (~sabathan@amarseille-159-1-12-107.w86-203.abo.wanadoo.fr)
15:44:38 jespada joins (~jespada@2800:a4:22da:e400:b167:8181:c13f:cb54)
15:45:13 notdabs joins (~Owner@2600:1700:69cf:9000:d900:e64:5cae:a17e)
15:45:45 × evgeny quits (~Shaeto@94.25.234.181) (Quit: WeeChat 4.1.1)
15:50:46 × lucasEsc quits (~lucasEsc@181.110.191.164) (Quit: Client closed)
15:52:37 × euphores quits (~SASL_euph@user/euphores) (Quit: Leaving.)
15:57:44 euphores joins (~SASL_euph@user/euphores)
16:02:28 hughjfchen joins (~hughjfche@vmi2417424.contaboserver.net)
16:04:08 × iteratee_ quits (~kyle@162.218.222.207) (Ping timeout: 252 seconds)
16:06:12 × ChaiTRex quits (~ChaiTRex@user/chaitrex) (Ping timeout: 264 seconds)
16:11:30 alfiee joins (~alfiee@user/alfiee)
16:13:18 × Square2 quits (~Square4@user/square) (Ping timeout: 245 seconds)
16:15:39 × alfiee quits (~alfiee@user/alfiee) (Ping timeout: 244 seconds)
16:15:52 × jespada quits (~jespada@2800:a4:22da:e400:b167:8181:c13f:cb54) (Quit: My Mac has gone to sleep. ZZZzzz…)
16:16:14 × merijn quits (~merijn@77.242.116.146) (Ping timeout: 268 seconds)
16:17:28 × acidjnk_new quits (~acidjnk@p200300d6e7283f53f42219c1fddec46c.dip0.t-ipconnect.de) (Ping timeout: 268 seconds)
16:18:09 merijn joins (~merijn@77.242.116.146)
16:18:34 chexum joins (~quassel@gateway/tor-sasl/chexum)
16:18:45 wildtrees joins (~user@pool-108-26-34-85.syrcny.east.verizon.net)
16:28:19 × vanishingideal quits (~vanishing@user/vanishingideal) (Remote host closed the connection)
16:31:24 <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.
16:33:44 <tomsmeding> kaol: type parameters are, in a certain sense, just additional arguments to your function
16:33:52 <tomsmeding> :t map
16:33:53 <lambdabot> (a -> b) -> [a] -> [b]
16:34:09 <tomsmeding> in that view, `map` has 4 arguments: `a`, `b`, a function of type `a -> b`, and a list `[a]`
16:34:47 <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
16:35:08 <tomsmeding> but you can _pass_ them manually!
16:35:18 <tomsmeding> % :set -XTypeApplications
16:35:18 <yahb2> <no output>
16:35:22 <tomsmeding> % :set -fprint-explicit-foralls
16:35:22 <yahb2> <no output>
16:35:25 <tomsmeding> % :t map
16:35:25 <yahb2> map :: forall a b. (a -> b) -> [a] -> [b]
16:35:47 <tomsmeding> with -fprint-explicit-foralls, GHC also prints those additional "arguments" even if it normally wouldn't
16:35:50 <tomsmeding> % :t map @Int
16:35:50 <yahb2> map @Int :: forall b. (Int -> b) -> [Int] -> [b]
16:35:55 <tomsmeding> % :t map @Int @Float
16:35:55 <yahb2> map @Int @Float :: (Int -> Float) -> [Int] -> [Float]
16:36:10 <tomsmeding> you can see me passing types to the `a` and `b` type arguments of `map`
16:36:45 <kaol> So my forall made the "a" visible inside the function body and @a used it?
16:36:55 <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
16:36:58 <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
16:37:31 <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
16:37:41 <tomsmeding> normally, in Haskell2010, there's no way to refer to those type arguments
16:38:10 <tomsmeding> ScopedTypeVariables changes that, but only if you bind your type arguments explicitly using `forall` in the type signature
16:38:31 <tomsmeding> does that help? :)
16:38:57 <tomsmeding> kaol: so yes, the forall made the "a" visible inside the function body; that @a used it, yes
16:40:02 <kaol> I think I understand. This is one of those things you'd have to ask me again in a week.
16:40:19 × merijn quits (~merijn@77.242.116.146) (Ping timeout: 260 seconds)
16:42:13 <kaol> Another related thing I'm curious about: Why's ScopedTypeVariables the extension that makes something like let a :: Int = read "123" work?
16:42:49 <tomsmeding> hysterical raisins
16:43:16 <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`
16:43:29 <tomsmeding> those type ascriptions bound `a` and `b` just like a `forall` would
16:43:37 <tomsmeding> but this is enabled only with ScopedTypeVariables, again
16:43:54 <tomsmeding> `let a :: Int = ...` is just a special case of this
16:44:43 ft joins (~ft@p3e9bc68d.dip0.t-ipconnect.de)
16:44:50 <dminuoso> Everything about ScopedTypeVariables is a bit smelly.
16:45:14 <kaol> What's the difference between ScopedTypeVariables forall and RankNTypes forall?
16:45:25 <dminuoso> It would have been more consistent to allow `let a :: Int = ...` even without the extension.
16:45:25 <tomsmeding> completely unrelated
16:45:29 <tomsmeding> they just happen to share the same keyword
16:45:47 <kaol> Apply directly to the forehead.
16:46:16 <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.)
16:46:17 <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)
16:46:47 <dminuoso> kaol: There's nothing about forall, except that the authors trying to increase compatibility with a bunch of hackage libraries.
16:46:59 __jmcantrell__ joins (~weechat@user/jmcantrell)
16:47:07 jmcantrell is now known as Guest5227
16:47:08 __jmcantrell__ is now known as jmcantrell
16:47:17 <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.
16:47:49 <tomsmeding> well, they could have used a different keyword so that existing uses even with ExplicitForall didn't change meaning
16:47:49 <dminuoso> Tying this into an ExplicitForall is one of the stranger parts that seems to have no fundamentally good reason behind it
16:48:09 <tomsmeding> it could even be useful to be able to mark _some_ type variables as being in scope, and others not
16:48:16 <dminuoso> Personally, I would prefer if ScopedTypeVariables just brought them into scope, even without forall.
16:48:18 <tomsmeding> the new -XTypeAbstractions allows you to do the latter, at least
16:48:18 <dminuoso> Done!
16:49:06 srazkvt joins (~sarah@user/srazkvt)
16:50:07 jespada joins (~jespada@2800:a4:22da:e400:b167:8181:c13f:cb54)
16:50:57 <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.
16:51:51 <dminuoso> kaol: What do you mean by new names?
16:51:56 <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
16:52:13 <tomsmeding> and that GHC has no good reason to prefer one particular instantiation over another
16:52:29 <tomsmeding> if you have type families in the picture, then non-injective type families can result in this
16:52:39 <tomsmeding> GHC doesn't just complain willy-nilly ;)
16:53:59 × j1n37 quits (~j1n37@user/j1n37) (Ping timeout: 252 seconds)
16:54:06 <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.
16:54:07 <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.
16:54:15 <dminuoso> ^- see previous message
16:54:27 <dminuoso> Or rather, its not exactly alpha renaming either
16:54:34 <dminuoso> It's following generalization rules
16:54:44 <kaol> I think I'm starting to understand but I'm saying that GHC could offer more help in its error message.
16:54:49 j1n37 joins (~j1n37@user/j1n37)
16:54:49 <tomsmeding> kaol: do you have a code snippet so that we're talking about the same thing?
16:54:53 <dminuoso> Take a look at Hindley Milner to get a better understanding
16:54:58 <kaol> It's generally pretty good about suggesting extensions to make code work.
16:55:04 <dminuoso> kaol: I dont think there's much we can do in a HM type of inference.
16:55:23 <dminuoso> kaol: GHC tries its best to give you context
16:55:25 <dminuoso> e.g. it might say
16:55:37 <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)
16:55:56 <dminuoso> So if you read the entirety, then `a0` is a type that GHC has in its inference at *that* particular point.
16:55:58 × tomsmeding quits (~tomsmedin@static.21.109.88.23.clients.your-server.de) (Quit: ZNC 1.9.1 - https://znc.in)
16:56:31 iteratee joins (~kyle@208.97.58.241)
16:56:46 <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.
16:56:54 alfiee joins (~alfiee@user/alfiee)
16:59:36 tomsmeding joins (~tomsmedin@static.21.109.88.23.clients.your-server.de)
17:00:45 <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 ;)
17:01:09 × alfiee quits (~alfiee@user/alfiee) (Ping timeout: 260 seconds)
17:03:27 <dminuoso> kaol: Another thing is, with "in the body" - GHC has to figure out whether that's actually the case! It does not know.
17:03:31 × CiaoSen quits (~Jura@2a02:8071:64e1:7180:4e50:ddff:fe9b:8922) (Ping timeout: 252 seconds)
17:04:45 <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
17:05:21 <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`
17:05:38 <dminuoso> So it builds up a bunch of things like
17:05:57 <dminuoso> f :: MyTypeClass a => T a
17:06:02 <dminuoso> 1 :: Num a0 => a0
17:06:12 <dminuoso> T :: ...something sensible here...
17:06:30 <dminuoso> And then it unifies according to HM rules.
17:06:55 <dminuoso> Which requires giving `1` that type here
17:07:25 <dminuoso> Remember, GHC does not just take your type signatures for granted, it actually type checks whether what you just claimed is actually true.
17:08:13 <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
17:08:30 <dminuoso> We pay that price to get more expressiveness
17:09:15 <euouae> It could *still* provide better diagnostics.
17:09:24 <dminuoso> In this particular case, Im not sure how.
17:09:39 <dminuoso> GHC cannot, ahead of time, know that a0 will be the same as a from the outer type signature.
17:09:40 <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"
17:09:46 <dminuoso> It would require type checking to know that, the very thing that failed.
17:10:00 <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
17:10:04 <dminuoso> Well, the dignostic tells you how and why it came up with a0 in trivial cases.
17:10:16 <euouae> It's not that the errors are entirely unparseable, it's just that they require more expertise to understand. Right?
17:10:45 <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)
17:10:47 <dminuoso> Probable fix: use a type annotation to specify what `a0' should be.
17:10:50 <dminuoso> These potential instances exist:
17:10:53 <dminuoso> ....
17:11:08 <dminuoso> If you think this can be reworded to be more explicit, feel free to make a pull request.
17:11:16 <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
17:11:27 <tomsmeding> the diagnostics are _already_ epics with how long they are
17:11:36 <dminuoso> You just have to spend the time to read them.
17:11:53 <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
17:12:15 <tomsmeding> euouae: "it's not evident that it is type checking at all" -- what else would it be?
17:12:19 <dminuoso> I dont think the diagnostic here is overly erbose, or lacking details.
17:12:36 <dminuoso> It's telling you precisly what happened, where it happened, and comes with sensible suggestions
17:12:41 <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.
17:12:41 <tomsmeding> I think pointing to hindley-milner is the job of a haskell tutorial, not GHC type errors
17:12:47 <dminuoso> Of course, if you employ type level trickery or generally not have any type signatures... well yes.
17:12:49 <dminuoso> We cant help you.
17:13:03 <dminuoso> Like if servant blows up, you are on your own.
17:13:10 <tomsmeding> I'm not saying GHC type errors are not unclear sometimes!
17:13:22 <dminuoso> But thats not an issue of GHC, but rather a servant design problem.
17:13:39 <dminuoso> (If you insist on employing this type machinery, your users will have to suffer)
17:13:54 <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
17:14:00 <dminuoso> optics is one of the few libraries that manages to hide type trickery behind simple user facing type errors
17:14:42 <euouae> tomsmeding: yeah but you could mention a few basic ones that newbies would make
17:15:00 <euouae> perhaps by annotating types and/or functions so that the compiler can make the suggestion when a certain pattern is matched. IDK.
17:15:12 <euouae> type error pattern
17:15:20 <euouae> I'm sort of coming up with this as I go. I haven't thought of it too much.
17:15:38 <tomsmeding> many people have suggested such things, and if you have a good idea, please do suggest it!
17:15:40 <dminuoso> type error slicing is perhaps one of those things that could be a helpful thing.
17:15:57 <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
17:15:58 <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.
17:16:26 <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.
17:16:33 <dminuoso> Because I dont know how to do it myself.
17:16:39 <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?
17:17:11 <tomsmeding> dminuoso: is type error slicing this idea where you get just the inconsistent path of constraints between two things that the user specified?
17:17:24 <tomsmeding> instead of only the wrong position, or the whole function, that is?
17:18:12 × zungi quits (~tory@user/andrewchawk) (Ping timeout: 264 seconds)
17:18:59 <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
17:19:20 <tomsmeding> (if you just write "123", then it could be that there is a Num instance for `m Int`!)
17:19:47 <tomsmeding> > 123 :: Data.Monoid.Sum Int
17:19:48 <lambdabot> Sum {getSum = 123}
17:19:53 <kaol> I should look into making a self contained example of the thing I ran into. But I'm afraid it's not today.
17:19:57 <tomsmeding> here, that's an 123 of type `m Int`, just not a monad m
17:21:22 <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
17:21:52 <tomsmeding> right
17:22:05 <euouae> I think it was introduced here <https://www.sciencedirect.com/science/article/pii/S016764230400005X>
17:22:37 <euouae> oh no, it seems that it's something different:
17:22:45 × srazkvt quits (~sarah@user/srazkvt) (Quit: Konversation terminated!)
17:22:55 <tomsmeding> nah looks similar
17:22:59 <euouae> a slice is a set of program points. the type error slice is all the program points that contributed to the type error.
17:23:33 srazkvt joins (~sarah@user/srazkvt)
17:23:35 <tomsmeding> strip away as many parts of your function as possible so that the result still exhibits the type error
17:23:50 <tomsmeding> may be helpful to see what exactly the reasoning is that the compiler is doing
17:24:09 tzh joins (~tzh@c-76-115-131-146.hsd1.or.comcast.net)
17:24:18 × kuribas quits (~user@ip-188-118-57-242.reverse.destiny.be) (Remote host closed the connection)
17:27:07 <euouae> yeah I had more of a heuristics approach for certain common errors that newbies do
17:27:45 <tomsmeding> euouae: here's motivation for learning more haskell: learn enough so that you can add this in GHC yourself :)
17:29:10 <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
17:29:29 <tomsmeding> sounds like a decent way :)
17:29:52 <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
17:30:20 <euouae> oh like iterative and such?
17:30:29 <tomsmeding> yes
17:30:51 <tomsmeding> you _can_, but you'll hate haskell because you don't get to see the kinds of code where it shines
17:31:09 <tomsmeding> part of the fun is learning how to solve the same problem, but in a different way
17:33:45 <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."
17:34:27 <tomsmeding> heck, if you want to write `while :: (a -> Bool) -> (a -> a) -> a -> a` that implements a poor man's while loop, please do!
17:34:35 <tomsmeding> just avoid writing everything in IO
17:34:52 <kaol> fix is lovely.
17:35:18 <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)
17:35:57 zungi joins (~tory@user/andrewchawk)
17:37:01 <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 ?
17:37:52 <srazkvt> i see gitlib hasn't had an update on hackage since 2023
17:43:45 <srazkvt> nvm, 2021
17:43:53 <dminuoso> tomsmeding: Not sure what you mean by inconsistent path of constraints.
17:44:28 <tomsmeding> dminuoso: subset of the constraints, that will necessarily form some kind of tree structure (I guess not just path), that exhibit the constradiction
17:44:59 <dminuoso> What's the adjective "inconsistent" doing there?
17:46:38 <tomsmeding> Well, there was a type error, right?
17:46:53 <tomsmeding> If the constraints were all consistent with each other, there would be no type error.
17:46:58 alfiee joins (~alfiee@user/alfiee)
17:47:17 son0p joins (~ff@2800:e6:4000:d723:c181:4205:f2b1:437a)
17:47:28 <dminuoso> Oh okay. Then yeah, though "constraints" probably does not mean typeclass type of constraints here.
17:48:00 <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.
17:48:21 <tomsmeding> Ah indeed, I was thinking of the constraint-solving approach to type checkinf
17:48:26 <tomsmeding> *checking
17:48:26 <davean> srazkvt: I wrote an implimentation of git in Haskell which is rather fast. For my use cases it beats the official git implimentation
17:49:09 acidjnk_new joins (~acidjnk@p200300d6e7283f5311bd92edfda65283.dip0.t-ipconnect.de)
17:50:20 <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.
17:51:01 × alfiee quits (~alfiee@user/alfiee) (Ping timeout: 244 seconds)
17:51:32 <tomsmeding> "incorrect type information" in the abstract sounds like a bug -- they're overselling a little bit there
17:51:54 × chele quits (~chele@user/chele) (Remote host closed the connection)
17:52:01 <srazkvt> davean: oh interesting, is it public ? i'd like to have a look at it if so
17:52:35 <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
17:52:46 <dminuoso> tomsmeding: Well, it depends on how you look at it.
17:53:05 <dminuoso> tomsmeding: When GHC blows up in line #a while the actual error is line #b ...
17:53:19 <tomsmeding> the claims that GHC makes are still correct, even if unhelpful
17:53:33 <davean> The actual error is both places
17:53:35 <tomsmeding> anyway this is arguing semantics
17:53:56 <davean> The error is them not matching
17:53:57 <dminuoso> It may also relate to some SML implementations, I am not sure.
17:54:20 <davean> You can pick a location you can make more minimal changes in terms of code to bring into alignment
17:55:04 <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.
17:55:17 <dminuoso> To the point that this could even be a guided process
17:55:25 <tomsmeding> right
17:55:59 <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 :)
17:56:10 <tomsmeding> but I have a rough idea from the discussion here and that's good enough for me now
17:59:14 <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)
18:11:31 × srazkvt quits (~sarah@user/srazkvt) (Quit: Konversation terminated!)
18:12:21 × fp quits (~Thunderbi@89-27-29-68.bb.dnainternet.fi) (Ping timeout: 265 seconds)
18:13:10 Tuplanolla joins (~Tuplanoll@91-159-69-59.elisa-laajakaista.fi)
18:15:24 wootehfoot joins (~wootehfoo@user/wootehfoot)
18:20:55 vgtw_ joins (~vgtw@user/vgtw)
18:21:04 × vgtw quits (~vgtw@user/vgtw) (Ping timeout: 260 seconds)
18:27:01 bilegeek joins (~bilegeek@2600:1008:b050:b561:2843:58a0:b048:fc36)
18:28:14 × vgtw_ quits (~vgtw@user/vgtw) (Ping timeout: 252 seconds)
18:33:01 alfiee joins (~alfiee@user/alfiee)
18:35:43 vgtw joins (~vgtw@user/vgtw)
18:37:03 × alfiee quits (~alfiee@user/alfiee) (Ping timeout: 245 seconds)
18:37:52 × Googulator quits (~Googulato@2a01-036d-0106-14b2-c443-5a96-b49d-1dd5.pool6.digikabel.hu) (Quit: Client closed)
18:38:15 Googulator joins (~Googulato@2a01-036d-0106-14b2-c443-5a96-b49d-1dd5.pool6.digikabel.hu)
18:39:11 × jespada quits (~jespada@2800:a4:22da:e400:b167:8181:c13f:cb54) (Quit: My Mac has gone to sleep. ZZZzzz…)
18:39:58 × machinedgod quits (~machinedg@d108-173-18-100.abhsia.telus.net) (Ping timeout: 252 seconds)
18:40:15 × fun-safe-math quits (~fun-safe-@2601:1c2:1b7f:801f:26d6:a094:aa3b:66cd) (Quit: No Ping reply in 180 seconds.)
18:41:30 fun-safe-math joins (~fun-safe-@2601:1c2:1b7f:801f:e1d3:88d5:3ff2:2f10)
18:46:43 p3n joins (~p3n@2a00:19a0:3:7c:0:d9c6:7cf6:1)
18:47:49 × ubert quits (~Thunderbi@2a02:8109:ab8a:5a00:42eb:c7e6:6d02:7a65) (Quit: ubert)
18:48:54 × jmcantrell quits (~weechat@user/jmcantrell) (Ping timeout: 276 seconds)
18:49:13 × Googulator quits (~Googulato@2a01-036d-0106-14b2-c443-5a96-b49d-1dd5.pool6.digikabel.hu) (Quit: Client closed)
18:49:39 Googulator joins (~Googulato@2a01-036d-0106-14b2-c443-5a96-b49d-1dd5.pool6.digikabel.hu)
18:55:00 × _xor quits (~xor@ip-66-42-132-175.dynamic.fuse.net) (Ping timeout: 252 seconds)
18:55:12 ljdarj joins (~Thunderbi@user/ljdarj)
19:02:39 _xor joins (~xor@ip-66-42-132-175.dynamic.fuse.net)
19:03:32 peterbecich joins (~Thunderbi@syn-047-229-123-186.res.spectrum.com)
19:07:06 weary-traveler joins (~user@user/user363627)
19:08:40 vanishingideal joins (~vanishing@user/vanishingideal)
19:09:39 bilegeek_ joins (~bilegeek@2600:1008:b09d:26e1:5113:f5a5:f05a:228d)
19:11:19 bilegeek__ joins (~bilegeek@2600:1008:b06f:f975:a471:7a4:18e0:46c)
19:12:03 × bilegeek quits (~bilegeek@2600:1008:b050:b561:2843:58a0:b048:fc36) (Ping timeout: 245 seconds)
19:13:36 jespada joins (~jespada@r186-48-57-94.dialup.adsl.anteldata.net.uy)
19:14:09 × bilegeek_ quits (~bilegeek@2600:1008:b09d:26e1:5113:f5a5:f05a:228d) (Ping timeout: 260 seconds)
19:14:28 × ash3en quits (~Thunderbi@2a03:7846:b6eb:101:93ac:a90a:da67:f207) (Read error: Connection reset by peer)
19:14:39 ash3en joins (~Thunderbi@2a03:7846:b6eb:101:93ac:a90a:da67:f207)
19:16:12 × bilegeek__ quits (~bilegeek@2600:1008:b06f:f975:a471:7a4:18e0:46c) (Ping timeout: 276 seconds)
19:16:20 × vanishingideal quits (~vanishing@user/vanishingideal) (Quit: leaving)
19:16:48 vanishingideal joins (~vanishing@user/vanishingideal)
19:17:19 jmcantrell joins (~weechat@user/jmcantrell)
19:18:45 alfiee joins (~alfiee@user/alfiee)
19:19:05 <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
19:20:23 × hgolden quits (~hgolden@2603:8000:9d00:3ed1:6ff3:8389:b901:6363) (Remote host closed the connection)
19:23:04 × alfiee quits (~alfiee@user/alfiee) (Ping timeout: 260 seconds)
19:23:20 hgolden joins (~hgolden@2603:8000:9d00:3ed1:6ff3:8389:b901:6363)
19:24:20 × peterbecich quits (~Thunderbi@syn-047-229-123-186.res.spectrum.com) (Quit: peterbecich)
19:24:52 peterbecich joins (~Thunderbi@syn-047-229-123-186.res.spectrum.com)
19:29:34 j0lol joins (~j0lol@132.145.17.236)
19:29:58 ChaiTRex joins (~ChaiTRex@user/chaitrex)
19:40:28 × peterbecich quits (~Thunderbi@syn-047-229-123-186.res.spectrum.com) (Ping timeout: 252 seconds)
19:45:12 × zungi quits (~tory@user/andrewchawk) (Ping timeout: 264 seconds)
19:55:11 fp joins (~Thunderbi@89-27-29-68.bb.dnainternet.fi)
20:00:01 × caconym quits (~caconym@user/caconym) (Quit: bye)
20:00:44 caconym joins (~caconym@user/caconym)
20:02:01 × sabathan quits (~sabathan@amarseille-159-1-12-107.w86-203.abo.wanadoo.fr) (Read error: Connection reset by peer)
20:05:09 alfiee joins (~alfiee@user/alfiee)
20:05:31 sabathan joins (~sabathan@amarseille-159-1-12-107.w86-203.abo.wanadoo.fr)
20:05:34 SlackCoder joins (~SlackCode@64-94-63-8.ip.weststar.net.ky)
20:10:06 × olivial quits (~benjaminl@user/benjaminl) (Read error: Connection reset by peer)
20:10:09 × alfiee quits (~alfiee@user/alfiee) (Ping timeout: 276 seconds)
20:10:21 olivial joins (~benjaminl@user/benjaminl)
20:11:15 zungi joins (~tory@user/andrewchawk)
20:11:52 × ash3en quits (~Thunderbi@2a03:7846:b6eb:101:93ac:a90a:da67:f207) (Quit: ash3en)
20:14:00 × jespada quits (~jespada@r186-48-57-94.dialup.adsl.anteldata.net.uy) (Quit: My Mac has gone to sleep. ZZZzzz…)
20:14:10 ljdarj1 joins (~Thunderbi@user/ljdarj)
20:14:45 × Smiles quits (uid551636@id-551636.lymington.irccloud.com) (Quit: Connection closed for inactivity)
20:15:54 × ljdarj quits (~Thunderbi@user/ljdarj) (Ping timeout: 244 seconds)
20:15:54 ljdarj1 is now known as ljdarj
20:18:36 × jmcantrell quits (~weechat@user/jmcantrell) (Ping timeout: 252 seconds)
20:23:57 sprotte24 joins (~sprotte24@p200300d16f145200a11093ba77855b13.dip0.t-ipconnect.de)
20:24:48 × ChaiTRex quits (~ChaiTRex@user/chaitrex) (Ping timeout: 264 seconds)
20:26:29 ChaiTRex joins (~ChaiTRex@user/chaitrex)
20:27:47 <haskellbridge> <Liamzee> hello
20:27:57 <haskellbridge> <Liamzee> why am i getting an error that the RTS doesn't support multiple OS threads?
20:28:05 <haskellbridge> <Liamzee> it's telling me to use ghc -threaded when linking
20:28:34 <haskellbridge> <Liamzee> GHC options on my program: -Wall -rtsopts -with-rtsopts="-threaded" -threaded
20:28:40 <haskellbridge> <Liamzee> M2 OSX
20:29:10 <monochrom> Oh, -threaded is a compile-time flag, not runtime.
20:29:20 × fp quits (~Thunderbi@89-27-29-68.bb.dnainternet.fi) (Remote host closed the connection)
20:29:44 <monochrom> more precisely, link-time. When generating an exe, choose which RTS to include in the exe.
20:30:50 <tomsmeding> Liamzee: remove that `-with-rtsopts="-threaded"`
20:30:58 <tomsmeding> also the `-rtsopts` is unnecessary for just -N
20:32:14 × zungi quits (~tory@user/andrewchawk) (Remote host closed the connection)
20:32:35 zungi joins (~tory@user/andrewchawk)
20:33:10 <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""
20:33:41 <monochrom> Also, running the exe has no error, it just says hi.
20:34:02 <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
20:34:26 <haskellbridge> <Liamzee> brick-tetris: Uncaught exception ghc-internal:GHC.Internal.IO.Exception.IOException:
20:34:26 <haskellbridge> user error (RTS doesn't support multiple OS threads (use ghc -threaded when linking))
20:34:48 <tomsmeding> post your cabal file?
20:35:08 <tomsmeding> or the place where you're passing that -threaded
20:35:23 <int-e> what is the -with-rtsopts="-threaded" for?
20:35:30 <tomsmeding> being useless
20:35:37 <monochrom> misunderstanding
20:35:43 <int-e> I'm surprised the program doesn't choke on it tbh
20:36:13 <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
20:36:39 <tomsmeding> Liamzee: that sounds highly suspicious and likely wrong; could you post your cabal file?
20:37:09 <monochrom> Interesting. `./c +RTS -threaded` does not error out. Nor any prefix of "threaded". But `./c +RTS -dreaded` is an error.
20:37:33 <monochrom> What magic is this that -thre is OK but -dreaded is not? :)
20:38:59 <tomsmeding> monochrom: you now have files `hreaded`, `hre`, etc. in the current directory
20:39:09 <tomsmeding> > -t[<file>] One-line GC statistics (if <file> omitted, uses stderr)
20:39:22 <monochrom> OMG yes that's true.
20:39:24 <tomsmeding> Liamzee: that goes for you too
20:39:54 <monochrom> This is what's wrong with single letter options!
20:39:57 <tomsmeding> nice bait-and-switch :p
20:40:15 <tomsmeding> this is what's wrong with single-letter options _that take an argument that is attached to the option_
20:40:18 <int-e> tomsmeding: lol, thanks
20:42:10 × wootehfoot quits (~wootehfoo@user/wootehfoot) (Read error: Connection reset by peer)
20:42:20 × sord937 quits (~sord937@gateway/tor-sasl/sord937) (Quit: sord937)
20:52:13 alfiee joins (~alfiee@user/alfiee)
20:56:38 <mauke> gcc -o2 main.c
20:56:49 × alfiee quits (~alfiee@user/alfiee) (Ping timeout: 260 seconds)
20:56:59 superlink joins (~kontsikou@adsl-192.79.107.136.tellas.gr)
20:57:26 superlink29 joins (~superlink@adsl-192.79.107.136.tellas.gr)
20:57:55 × superlink29 quits (~superlink@adsl-192.79.107.136.tellas.gr) (Client Quit)
20:57:55 merijn joins (~merijn@host-vr.cgnat-g.v4.dfn.nl)
20:58:48 <monochrom> oh heh
21:02:26 <int-e> mauke: but "everyone" knows about -o :-)
21:02:39 × merijn quits (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 260 seconds)
21:13:18 merijn joins (~merijn@host-vr.cgnat-g.v4.dfn.nl)
21:17:57 × merijn quits (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 265 seconds)
21:18:43 Smiles joins (uid551636@id-551636.lymington.irccloud.com)
21:23:45 peterbecich joins (~Thunderbi@syn-047-229-123-186.res.spectrum.com)
21:28:40 merijn joins (~merijn@host-vr.cgnat-g.v4.dfn.nl)
21:33:11 × merijn quits (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 244 seconds)
21:33:58 machinedgod joins (~machinedg@d108-173-18-100.abhsia.telus.net)
21:36:37 × michalz quits (~michalz@185.246.207.222) (Remote host closed the connection)
21:36:40 <monochrom> Actually took me a minute or two to see it is not -O2 it is -o exename.
21:37:45 <monochrom> Oooohhhh great trick question to put on exam! "John typed in `gcc -o2 main.c`, then can't find a.out, why?"
21:37:57 alfiee joins (~alfiee@user/alfiee)
21:42:11 × alfiee quits (~alfiee@user/alfiee) (Ping timeout: 244 seconds)
21:44:02 merijn joins (~merijn@host-vr.cgnat-g.v4.dfn.nl)
21:47:42 jmcantrell joins (~weechat@user/jmcantrell)
21:48:23 × merijn quits (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 244 seconds)
21:50:48 ljdarj1 joins (~Thunderbi@user/ljdarj)
21:53:18 × ljdarj quits (~Thunderbi@user/ljdarj) (Ping timeout: 245 seconds)
21:53:18 ljdarj1 is now known as ljdarj
21:53:54 <mauke> worse is when you intend to use -o, but forget the argument: gcc -o *.c
21:57:40 <haskellbridge> <Liamzee> or rather it was an issue requiring cabal clean, sigh
21:57:51 <haskellbridge> <Liamzee> also, just curious, why don't Haskellers building frameworks use sum types more?
21:58:34 <haskellbridge> <Liamzee> I'm looking at Brick, the interface could have been smoothed out by using a sum type with variants, possibly wrapping subtypes
21:59:26 merijn joins (~merijn@host-vr.cgnat-g.v4.dfn.nl)
21:59:36 <haskellbridge> <Liamzee> tbh at the very least, it'd create an issue with record field exceptions, unfortunately :(
22:00:28 <haskellbridge> <sm> Liamzee which Brick api could have used a sum type ?
22:03:28 jespada joins (~jespada@r186-48-57-94.dialup.adsl.anteldata.net.uy)
22:04:01 × merijn quits (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 248 seconds)
22:04:24 × jespada quits (~jespada@r186-48-57-94.dialup.adsl.anteldata.net.uy) (Client Quit)
22:05:37 × takuan quits (~takuan@d8D86B601.access.telenet.be) (Remote host closed the connection)
22:06:06 × Unicorn_Princess quits (~Unicorn_P@user/Unicorn-Princess/x-3540542) (Remote host closed the connection)
22:06:48 <haskellbridge> <Liamzee> there are multiple default mains
22:07:23 <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
22:07:34 <haskellbridge> <Liamzee> erm, App type API
22:08:25 merijn joins (~merijn@host-vr.cgnat-g.v4.dfn.nl)
22:09:40 <haskellbridge> <Liamzee> probably my mistake, just thinking about it as a design space
22:10:06 <haskellbridge> <sm> https://hackage.haskell.org/package/brick-2.8.2/docs/Brick-Main.html#v:defaultMain and friends eh
22:10:48 <haskellbridge> <sm> generally I think haskell frameworks use sum types plenty
22:11:49 <haskellbridge> <sm> he probably thought separate main functions for separate use cases was easier to use
22:13:00 × merijn quits (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 252 seconds)
22:14:08 × peterbecich quits (~Thunderbi@syn-047-229-123-186.res.spectrum.com) (Ping timeout: 245 seconds)
22:15:43 mange joins (~user@user/mange)
22:19:56 fp joins (~Thunderbi@89-27-29-68.bb.dnainternet.fi)
22:20:29 visilii_ joins (~visilii@85.172.77.105)
22:23:47 merijn joins (~merijn@host-vr.cgnat-g.v4.dfn.nl)
22:24:10 × visilii quits (~visilii@213.24.126.217) (Ping timeout: 265 seconds)
22:24:41 alfiee joins (~alfiee@user/alfiee)
22:26:23 × Pozyomka quits (~pyon@user/pyon) (Quit: WeeChat 4.5.2)
22:26:42 × machinedgod quits (~machinedg@d108-173-18-100.abhsia.telus.net) (Quit: leaving)
22:27:05 machinedgod joins (~machinedg@d108-173-18-100.abhsia.telus.net)
22:28:46 × vanishingideal quits (~vanishing@user/vanishingideal) (Ping timeout: 252 seconds)
22:29:19 × alfiee quits (~alfiee@user/alfiee) (Ping timeout: 268 seconds)
22:30:33 <haskellbridge> <Bowuigi> Implementation-wise it makes sense. Most of those are defined in terms of each other, so it's just abstracting boilerplate
22:30:35 × merijn quits (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 252 seconds)
22:31:41 chewybread joins (~chewybrea@user/chewybread)
22:39:59 × Googulator quits (~Googulato@2a01-036d-0106-14b2-c443-5a96-b49d-1dd5.pool6.digikabel.hu) (Quit: Client closed)
22:40:14 Googulator joins (~Googulato@2a01-036d-0106-14b2-c443-5a96-b49d-1dd5.pool6.digikabel.hu)
22:41:30 <monochrom> I made the 'gcc -o main.c' mistake once.
22:41:50 merijn joins (~merijn@host-vr.cgnat-g.v4.dfn.nl)
22:42:14 <monochrom> Actually it was more like "gcc main.c -o main.c', the 2nd ".c" was because tab-completion.
22:43:06 <monochrom> Eventually, my solution was to write a short Makefile (or even, short shell script).
22:44:09 × Googulator quits (~Googulato@2a01-036d-0106-14b2-c443-5a96-b49d-1dd5.pool6.digikabel.hu) (Client Quit)
22:44:23 Googulator joins (~Googulato@2a01-036d-0106-14b2-c443-5a96-b49d-1dd5.pool6.digikabel.hu)
22:45:34 <monochrom> I haven't used or looked at any frameworks. But I'm happy that in unix, Handler is a sum type: Default, Ignore, Catch, CatchOnce, etc.
22:45:58 × fp quits (~Thunderbi@89-27-29-68.bb.dnainternet.fi) (Ping timeout: 268 seconds)
22:46:11 × Ranhir quits (~Ranhir@157.97.53.139) (Quit: KVIrc 5.0.0 Aria http://www.kvirc.net/)
22:46:48 × merijn quits (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 276 seconds)
22:46:50 <jackdk> monochrom: for single-file C programs, `make foo` often gets you there because of the enormous pile of implicit rules
22:47:35 <monochrom> In general, you have to ask yourself the open-vs-closed question: Can the user add more cases? Then it pretty much determines whether it's a sum type or a polymorphic type.
22:47:54 × chewybread quits (~chewybrea@user/chewybread) (Remote host closed the connection)
22:48:28 <monochrom> But I want -O2 and I am too "lazy" (read on) to enter "CFLAGS=-O2 make foo" so I write a full-blown Makefile haha.
22:48:43 chewybread joins (~chewybrea@user/chewybread)
22:48:56 <monochrom> 5 seconds of "CFLAGS=-O2" can be saved by 5 minutes of writing an overblown Makefile :)
22:52:10 × troydm quits (~troydm@user/troydm) (Quit: What is Hope? That all of your wishes and all of your dreams come true? To turn back time because things were not supposed to happen like that (C) Rau Le Creuset)
22:52:31 bilegeek joins (~bilegeek@2600:1008:b017:2c77:ca70:bd87:7736:a8da)
22:53:00 pavonia joins (~user@user/siracusa)
22:54:48 × tabaqui1 quits (~root@87.200.129.102) (Ping timeout: 252 seconds)
22:57:14 merijn joins (~merijn@host-vr.cgnat-g.v4.dfn.nl)
23:02:02 × chewybread quits (~chewybrea@user/chewybread) (Remote host closed the connection)
23:02:14 × merijn quits (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 260 seconds)
23:02:16 chewybread joins (~chewybrea@2601:984:201:3890:e8b7:6266:44dc:64)
23:02:16 × chewybread quits (~chewybrea@2601:984:201:3890:e8b7:6266:44dc:64) (Changing host)
23:02:16 chewybread joins (~chewybrea@user/chewybread)
23:03:40 × byte quits (~mu@user/byte) (Quit: Leaving)
23:06:34 fp joins (~Thunderbi@89-27-29-68.bb.dnainternet.fi)
23:06:52 user363627 joins (~user@user/user363627)
23:07:17 × chewybread quits (~chewybrea@user/chewybread) (Remote host closed the connection)
23:07:38 chewybread joins (~chewybrea@2601:984:201:3890:e8b7:6266:44dc:64)
23:07:39 × chewybread quits (~chewybrea@2601:984:201:3890:e8b7:6266:44dc:64) (Changing host)
23:07:39 chewybread joins (~chewybrea@user/chewybread)
23:10:05 alfiee joins (~alfiee@user/alfiee)
23:11:30 × weary-traveler quits (~user@user/user363627) (Ping timeout: 276 seconds)
23:12:03 byte joins (~mu@user/byte)
23:12:18 × chewybread quits (~chewybrea@user/chewybread) (Remote host closed the connection)
23:12:37 merijn joins (~merijn@host-vr.cgnat-g.v4.dfn.nl)
23:12:44 chewybread joins (~chewybrea@user/chewybread)
23:13:21 × zlqrvx quits (~zlqrvx@user/zlqrvx) (Quit: %quit%)
23:14:57 × alfiee quits (~alfiee@user/alfiee) (Ping timeout: 268 seconds)
23:17:25 × merijn quits (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 268 seconds)
23:20:38 <haskellbridge> <Liamzee> tbh i feel like the problem with Haskell frameworks is that, while yeah, you can get Brick to just work with simpleMain or some other thing, the problem is that the distance between "default options" and "write my own options" is too big
23:21:02 <haskellbridge> <Liamzee> I DON'T want to add vty to imports list in order to forge an attr map thing
23:21:35 <haskellbridge> <Liamzee> it's like at this point I want objects and sum types, i.e, it's nice to be able to customize
23:21:57 <haskellbridge> <Liamzee> but it's also nice to just stick to defaults
23:23:27 <haskellbridge> <sm> I don't quite understand
23:24:08 <haskellbridge> <sm> are you saying, too many things require adding a package and a bunch of imports, and you'd rather have a richer standard library built in or near by ?
23:26:42 × xacktm quits (xacktm@user/xacktm) (Quit: fBNC - https://bnc4free.com)
23:27:19 <haskellbridge> <Liamzee> https://hackage.haskell.org/package/brick-2.8.2/docs/Brick-Main.html
23:27:43 × Smiles quits (uid551636@id-551636.lymington.irccloud.com) (Quit: Connection closed for inactivity)
23:27:59 merijn joins (~merijn@host-vr.cgnat-g.v4.dfn.nl)
23:28:22 <haskellbridge> <Liamzee> the only two things i really need are app draw and app handle event
23:29:01 <haskellbridge> <Liamzee> app choose cursor got a lambda, namely: _ _ -> Nothing
23:30:01 <haskellbridge> <Liamzee> what i mean is that framework interfaces should be built more around defaults, then the option to overwrite the defaults
23:30:10 <haskellbridge> <sm> many frameworks provide a defaultConfig, maybe brick could use more of that
23:30:42 × j1n37 quits (~j1n37@user/j1n37) (Read error: Connection reset by peer)
23:30:48 <haskellbridge> <sm> but I don't see where it's needed, since it provided simple entry points instead
23:31:43 <haskellbridge> <sm> but it sounds like they weren't quite ergonomic for you
23:32:28 × merijn quits (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 245 seconds)
23:33:52 j1n37 joins (~j1n37@user/j1n37)
23:34:41 × chewybread quits (~chewybrea@user/chewybread) (Ping timeout: 248 seconds)
23:35:32 <haskellbridge> <Liamzee> well, here's a problem with forging an attrmap via vty, i had it set to ^>= 6.3
23:36:14 <haskellbridge> <Liamzee> brick had it set to ^>= 6.0
23:36:53 <haskellbridge> <Liamzee> cabal crashed, had to change vty requirements
23:37:01 <haskellbridge> <Liamzee> erm, cabal wouldn't let me compile
23:39:04 <haskellbridge> <Liamzee> sorry for whinging
23:41:34 <haskellbridge> <sm> it's ok to complain, what what are you complaining about :)
23:41:40 <haskellbridge> <sm> but what
23:42:04 <haskellbridge> <sm> ergonomics of developing with haskell in general ?
23:42:16 Sgeo joins (~Sgeo@user/sgeo)
23:43:21 merijn joins (~merijn@host-vr.cgnat-g.v4.dfn.nl)
23:43:26 <haskellbridge> <Liamzee> I mean that frameworks often are, Haskellers are used to it, pick it up quickly, but aren't the most user friendly
23:43:41 <haskellbridge> <Liamzee> with a framework the first step i try to get to is "runs with user-modifiable defaults"
23:43:54 <haskellbridge> <Liamzee> like, with Monomer, I tried to figure out the minimum program that would run under it
23:44:29 <haskellbridge> <Liamzee> then the next step is to start modifying the minimum program to do what i need
23:47:57 × merijn quits (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 252 seconds)
23:50:01 peterbecich joins (~Thunderbi@syn-047-229-123-186.res.spectrum.com)
23:50:58 chewybread joins (~chewybrea@user/chewybread)
23:51:47 xacktm joins (xacktm@user/xacktm)
23:52:01 × __monty__ quits (~toonn@user/toonn) (Quit: leaving)
23:52:34 krei-se- joins (~krei-se@p3ee0fd57.dip0.t-ipconnect.de)
23:53:02 <haskellbridge> <Liamzee> monomer has a similar problem in that they've chosen not to package fonts with the program
23:53:12 <monochrom> I am not convinced that it is not also the same issue with all frameworks for all domains in all languages.
23:53:45 × krei-se quits (~krei-se@p200300f1cf3232002411defffe902013.dip0.t-ipconnect.de) (Ping timeout: 252 seconds)
23:54:24 × Googulator quits (~Googulato@2a01-036d-0106-14b2-c443-5a96-b49d-1dd5.pool6.digikabel.hu) (Quit: Client closed)
23:54:41 Googulator joins (~Googulato@2a01-036d-0106-14b2-c443-5a96-b49d-1dd5.pool6.digikabel.hu)
23:54:57 <haskellbridge> <sm> so, libs and tools aren't always usable ? I think noone will disagree with you
23:55:24 × chewybread quits (~chewybrea@user/chewybread) (Ping timeout: 252 seconds)
23:55:28 alfiee joins (~alfiee@user/alfiee)
23:55:52 <haskellbridge> <sm> that's normal with free things developed in someone's spare time.. but also there's a culture/norms of UX that are weaker or different in haskell compared to other ecosystems
23:55:59 <haskellbridge> <sm> eg, ruby
23:56:25 <haskellbridge> <sm> it's hard to fix that retroactively
23:58:43 merijn joins (~merijn@host-vr.cgnat-g.v4.dfn.nl)

All times are in UTC on 2025-03-05.