Home liberachat/#haskell: Logs Calendar

Logs on 2025-12-02 (liberachat/#haskell)

00:00:39 × Anarchos quits (~Anarchos@91-161-254-16.subs.proxad.net) (Remote host closed the connection)
00:02:25 × merijn quits (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 244 seconds)
00:09:39 × peterbecich quits (~Thunderbi@172.222.148.214) (Ping timeout: 244 seconds)
00:13:38 merijn joins (~merijn@host-vr.cgnat-g.v4.dfn.nl)
00:18:10 × merijn quits (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 265 seconds)
00:19:36 × xff0x quits (~xff0x@2405:6580:b080:900:b802:6ec:1472:e908) (Ping timeout: 252 seconds)
00:20:21 xff0x joins (~xff0x@2405:6580:b080:900:1046:a27d:1c08:c893)
00:20:45 × CiaoSen quits (~Jura@2a02:8071:64e1:da0:5a47:caff:fe78:33db) (Ping timeout: 245 seconds)
00:21:09 × humasect quits (~humasect@dyn-192-249-132-90.nexicom.net) (Remote host closed the connection)
00:27:55 × pavonia quits (~user@user/siracusa) (Ping timeout: 240 seconds)
00:29:03 merijn joins (~merijn@host-vr.cgnat-g.v4.dfn.nl)
00:33:15 × merijn quits (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 240 seconds)
00:33:26 pavonia joins (~user@user/siracusa)
00:39:47 merijn joins (~merijn@host-vr.cgnat-g.v4.dfn.nl)
00:40:00 humasect joins (~humasect@dyn-192-249-132-90.nexicom.net)
00:40:13 Anarchos joins (~Anarchos@91-161-254-16.subs.proxad.net)
00:41:26 × yin quits (~zero@user/zero) (Remote host closed the connection)
00:43:18 yin joins (~zero@user/zero)
00:44:38 × merijn quits (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 260 seconds)
00:52:14 × xff0x quits (~xff0x@2405:6580:b080:900:1046:a27d:1c08:c893) (Ping timeout: 260 seconds)
00:52:47 szkl joins (uid110435@id-110435.uxbridge.irccloud.com)
00:54:39 user363627 joins (~user@user/user363627)
00:55:11 merijn joins (~merijn@host-vr.cgnat-g.v4.dfn.nl)
00:57:25 × weary-traveler quits (~user@user/user363627) (Ping timeout: 245 seconds)
00:59:19 × merijn quits (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 240 seconds)
01:10:32 merijn joins (~merijn@host-vr.cgnat-g.v4.dfn.nl)
01:14:51 × merijn quits (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 244 seconds)
01:21:10 omidmash2 joins (~omidmash@user/omidmash)
01:23:01 × omidmash quits (~omidmash@user/omidmash) (Ping timeout: 244 seconds)
01:23:01 omidmash2 is now known as omidmash
01:25:55 merijn joins (~merijn@host-vr.cgnat-g.v4.dfn.nl)
01:30:33 × merijn quits (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 252 seconds)
01:32:59 peterbecich joins (~Thunderbi@172.222.148.214)
01:35:18 × ttybitnik quits (~ttybitnik@user/wolper) (Quit: Fading out...)
01:36:10 × humasect quits (~humasect@dyn-192-249-132-90.nexicom.net) (Quit: Leaving...)
01:40:46 × Googulator60 quits (~Googulato@2a01-036d-0106-4ad8-d9ec-010d-f188-ffcb.pool6.digikabel.hu) (Quit: Client closed)
01:40:54 Googulator60 joins (~Googulato@2a01-036d-0106-4ad8-d9ec-010d-f188-ffcb.pool6.digikabel.hu)
01:41:19 merijn joins (~merijn@host-vr.cgnat-g.v4.dfn.nl)
01:45:43 × merijn quits (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 240 seconds)
01:54:31 xff0x joins (~xff0x@fsb6a9491c.tkyc517.ap.nuro.jp)
01:56:51 merijn joins (~merijn@host-vr.cgnat-g.v4.dfn.nl)
02:01:15 × merijn quits (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 244 seconds)
02:10:49 Googulator68 joins (~Googulato@2a01-036d-0106-4ad8-d9ec-010d-f188-ffcb.pool6.digikabel.hu)
02:11:17 × Googulator60 quits (~Googulato@2a01-036d-0106-4ad8-d9ec-010d-f188-ffcb.pool6.digikabel.hu) (Quit: Client closed)
02:11:44 × trickard quits (~trickard@cpe-85-98-47-163.wireline.com.au) (Read error: Connection reset by peer)
02:12:07 trickard_ joins (~trickard@cpe-85-98-47-163.wireline.com.au)
02:12:14 merijn joins (~merijn@host-vr.cgnat-g.v4.dfn.nl)
02:16:35 × merijn quits (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 240 seconds)
02:25:34 × peterbecich quits (~Thunderbi@172.222.148.214) (Ping timeout: 260 seconds)
02:25:46 × Anarchos quits (~Anarchos@91-161-254-16.subs.proxad.net) (Quit: Vision[]: i've been blurred!)
02:27:37 merijn joins (~merijn@host-vr.cgnat-g.v4.dfn.nl)
02:32:32 × merijn quits (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 265 seconds)
02:40:32 Square joins (~Square@user/square)
02:40:40 × Googulator68 quits (~Googulato@2a01-036d-0106-4ad8-d9ec-010d-f188-ffcb.pool6.digikabel.hu) (Quit: Client closed)
02:40:45 Googulator45 joins (~Googulato@2a01-036d-0106-4ad8-d9ec-010d-f188-ffcb.pool6.digikabel.hu)
02:43:00 merijn joins (~merijn@host-vr.cgnat-g.v4.dfn.nl)
02:45:37 × Googulator45 quits (~Googulato@2a01-036d-0106-4ad8-d9ec-010d-f188-ffcb.pool6.digikabel.hu) (Client Quit)
02:45:54 Googulator45 joins (~Googulato@2a01-036d-0106-4ad8-d9ec-010d-f188-ffcb.pool6.digikabel.hu)
02:49:45 × merijn quits (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 252 seconds)
02:50:44 dhs joins (~dhs@user/dhscholb)
02:58:03 × Lord_of_Life quits (~Lord@user/lord-of-life/x-2819915) (Quit: Laa shay'a waqi'un moutlaq bale kouloun moumkine)
03:00:50 peterbecich joins (~Thunderbi@172.222.148.214)
03:01:03 merijn joins (~merijn@host-vr.cgnat-g.v4.dfn.nl)
03:02:02 × szkl quits (uid110435@id-110435.uxbridge.irccloud.com) (Quit: Connection closed for inactivity)
03:05:20 × merijn quits (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 245 seconds)
03:06:01 × pabs3 quits (~pabs3@user/pabs3) (Ping timeout: 250 seconds)
03:06:51 pabs3 joins (~pabs3@user/pabs3)
03:08:46 × sefidel quits (~sefidel@user/sefidel) (Remote host closed the connection)
03:09:35 × peterbecich quits (~Thunderbi@172.222.148.214) (Ping timeout: 240 seconds)
03:09:51 sefidel joins (~sefidel@user/sefidel)
03:10:42 × Googulator45 quits (~Googulato@2a01-036d-0106-4ad8-d9ec-010d-f188-ffcb.pool6.digikabel.hu) (Quit: Client closed)
03:10:49 Googulator66 joins (~Googulato@2a01-036d-0106-4ad8-d9ec-010d-f188-ffcb.pool6.digikabel.hu)
03:16:26 merijn joins (~merijn@host-vr.cgnat-g.v4.dfn.nl)
03:20:55 × merijn quits (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 240 seconds)
03:22:27 spew joins (~spew@user/spew)
03:23:20 mvk joins (~mvk@2607:fea8:5c9d:ee00::7e89)
03:23:20 × mvk quits (~mvk@2607:fea8:5c9d:ee00::7e89) (Client Quit)
03:29:44 × td_ quits (~td@i53870926.versanet.de) (Ping timeout: 240 seconds)
03:31:38 td_ joins (~td@i53870902.versanet.de)
03:31:48 merijn joins (~merijn@host-vr.cgnat-g.v4.dfn.nl)
03:36:20 × merijn quits (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 265 seconds)
03:38:59 Lord_of_Life joins (~Lord@user/lord-of-life/x-2819915)
03:40:42 × Googulator66 quits (~Googulato@2a01-036d-0106-4ad8-d9ec-010d-f188-ffcb.pool6.digikabel.hu) (Quit: Client closed)
03:40:46 Googulator5 joins (~Googulato@2a01-036d-0106-4ad8-d9ec-010d-f188-ffcb.pool6.digikabel.hu)
03:47:11 merijn joins (~merijn@host-vr.cgnat-g.v4.dfn.nl)
03:50:28 × omidmash quits (~omidmash@user/omidmash) (Quit: The Lounge - https://thelounge.chat)
03:51:24 × merijn quits (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 244 seconds)
03:51:55 × sindu quits (~sindu@2.148.32.207.tmi.telenormobil.no) (Ping timeout: 244 seconds)
03:54:58 omidmash joins (~omidmash@user/omidmash)
04:00:43 peterbecich joins (~Thunderbi@172.222.148.214)
04:01:30 hsw joins (~hsw@112-104-86-252.adsl.dynamic.seed.net.tw)
04:02:35 merijn joins (~merijn@host-vr.cgnat-g.v4.dfn.nl)
04:06:56 × merijn quits (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 240 seconds)
04:18:04 merijn joins (~merijn@host-vr.cgnat-g.v4.dfn.nl)
04:20:38 × Googulator5 quits (~Googulato@2a01-036d-0106-4ad8-d9ec-010d-f188-ffcb.pool6.digikabel.hu) (Quit: Client closed)
04:20:45 Googulator70 joins (~Googulato@2a01-036d-0106-4ad8-d9ec-010d-f188-ffcb.pool6.digikabel.hu)
04:22:52 × hsw quits (~hsw@112-104-86-252.adsl.dynamic.seed.net.tw) (Remote host closed the connection)
04:23:12 hsw joins (~hsw@112-104-86-252.adsl.dynamic.seed.net.tw)
04:24:14 × spew quits (~spew@user/spew) (Quit: nyaa~)
04:24:54 × merijn quits (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 252 seconds)
04:31:09 merijn joins (~merijn@host-vr.cgnat-g.v4.dfn.nl)
04:35:20 × merijn quits (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 240 seconds)
04:37:32 merijn joins (~merijn@host-vr.cgnat-g.v4.dfn.nl)
04:41:44 × merijn quits (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 240 seconds)
04:50:28 × Googulator70 quits (~Googulato@2a01-036d-0106-4ad8-d9ec-010d-f188-ffcb.pool6.digikabel.hu) (Quit: Client closed)
04:50:39 Googulator70 joins (~Googulato@2a01-036d-0106-4ad8-d9ec-010d-f188-ffcb.pool6.digikabel.hu)
04:52:53 merijn joins (~merijn@host-vr.cgnat-g.v4.dfn.nl)
04:54:02 × trickard_ quits (~trickard@cpe-85-98-47-163.wireline.com.au) (Read error: Connection reset by peer)
04:56:42 trickard_ joins (~trickard@cpe-85-98-47-163.wireline.com.au)
04:57:26 × merijn quits (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 244 seconds)
05:02:04 Guest5 joins (~Guest5@c-67-164-2-23.hsd1.ca.comcast.net)
05:02:21 × Guest5 quits (~Guest5@c-67-164-2-23.hsd1.ca.comcast.net) (Client Quit)
05:02:35 iqubic joins (~sophia@2601:602:9203:1660:dd83:8e66:bfcb:8c1e)
05:04:40 × ezzieyguywuf quits (~Unknown@user/ezzieyguywuf) (Ping timeout: 246 seconds)
05:06:42 ezzieyguywuf joins (~Unknown@user/ezzieyguywuf)
05:06:55 × peterbecich quits (~Thunderbi@172.222.148.214) (Ping timeout: 250 seconds)
05:08:16 merijn joins (~merijn@host-vr.cgnat-g.v4.dfn.nl)
05:12:35 × merijn quits (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 240 seconds)
05:13:51 trickard_ is now known as trickard
05:19:04 karenw joins (~karenw@user/karenw)
05:23:40 merijn joins (~merijn@host-vr.cgnat-g.v4.dfn.nl)
05:27:05 <Leary> zoil: Let me quote myself: "There is a kind-of workaround for `Read`-like cases by taking a singleton as a constraint and matching on it, but then you have to supply that singleton constraint everywhere instead."
05:27:29 × trickard quits (~trickard@cpe-85-98-47-163.wireline.com.au) (Read error: Connection reset by peer)
05:27:42 trickard_ joins (~trickard@cpe-85-98-47-163.wireline.com.au)
05:28:08 × merijn quits (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 260 seconds)
05:29:52 <Leary> However, if you have multiple such cases, the same singleton constraint will cover all of them. Further, these constraints often useful in and of themselves.
05:30:42 <Leary> are often*
05:31:05 trickard_ is now known as trickard
05:39:03 merijn joins (~merijn@host-vr.cgnat-g.v4.dfn.nl)
05:43:21 michalz joins (~michalz@185.246.207.221)
05:43:36 × merijn quits (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 256 seconds)
05:44:02 Square2 joins (~Square4@user/square)
05:46:55 × Square quits (~Square@user/square) (Ping timeout: 240 seconds)
05:54:26 merijn joins (~merijn@host-vr.cgnat-g.v4.dfn.nl)
05:55:42 <iqubic> Um... This is a strange LSP error. It looks like applying hlint code refactoring doesn't work on GHC 9.10
05:55:47 <iqubic> 2025-12-02T05:54:01.159312Z | Error | hlint: Internal Error: Exception in plugin PluginId "hlint" while processing SMethod_CodeActionResolve: Cannot apply refactoring: apply-refact does not work on GHC 9.10
05:57:00 <iqubic> And now my LSP just exited!
05:58:55 × merijn quits (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 240 seconds)
06:00:14 <iqubic> https://dpaste.alwaysdata.org/2T0oxtWG
06:00:53 <iqubic> I'm not sure if any of you know enough about the Haskell LSP to help me here.
06:07:04 takuan joins (~takuan@d8D86B9E9.access.telenet.be)
06:09:59 merijn joins (~merijn@host-vr.cgnat-g.v4.dfn.nl)
06:12:06 <iqubic> From what I can tell, this seems to be an issue with HLint, GHC 9.10.3, and NixOS.
06:12:13 <iqubic> https://github.com/haskell/haskell-language-server/issues/4674
06:13:15 × haritz quits (~hrtz@user/haritz) (Quit: ZNC 1.8.2+deb3.1+deb12u1 - https://znc.in)
06:14:49 × merijn quits (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 260 seconds)
06:22:08 × bliminse quits (~bliminse@user/bliminse) (Quit: leaving)
06:24:05 bliminse joins (~bliminse@user/bliminse)
06:25:22 merijn joins (~merijn@host-vr.cgnat-g.v4.dfn.nl)
06:29:45 × merijn quits (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 252 seconds)
06:38:30 merijn joins (~merijn@host-vr.cgnat-g.v4.dfn.nl)
06:42:55 × merijn quits (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 240 seconds)
06:44:30 divlamir_ joins (~divlamir@user/divlamir)
06:45:07 × divlamir quits (~divlamir@user/divlamir) (Ping timeout: 246 seconds)
06:45:28 divlamir_ is now known as divlamir
06:50:44 × Googulator70 quits (~Googulato@2a01-036d-0106-4ad8-d9ec-010d-f188-ffcb.pool6.digikabel.hu) (Quit: Client closed)
06:50:52 Googulator29 joins (~Googulato@2a01-036d-0106-4ad8-d9ec-010d-f188-ffcb.pool6.digikabel.hu)
06:53:20 × Lord_of_Life quits (~Lord@user/lord-of-life/x-2819915) (Quit: Laa shay'a waqi'un moutlaq bale kouloun moumkine)
06:53:52 merijn joins (~merijn@host-vr.cgnat-g.v4.dfn.nl)
06:58:25 × merijn quits (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 246 seconds)
07:04:31 × X-Scale quits (~ARM@6.67.114.89.rev.vodafone.pt) (Ping timeout: 240 seconds)
07:09:16 merijn joins (~merijn@host-vr.cgnat-g.v4.dfn.nl)
07:12:15 Lord_of_Life joins (~Lord@user/lord-of-life/x-2819915)
07:12:40 tromp joins (~textual@2001:1c00:3487:1b00:4073:6a24:b181:8b56)
07:16:04 × merijn quits (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 260 seconds)
07:16:12 × chexum quits (~quassel@gateway/tor-sasl/chexum) (Quit: No Ping reply in 180 seconds.)
07:16:28 chexum joins (~quassel@gateway/tor-sasl/chexum)
07:19:30 × annamalai quits (~annamalai@2409:4042:4dc2:f11::9e8a:e814) (Remote host closed the connection)
07:20:43 × Googulator29 quits (~Googulato@2a01-036d-0106-4ad8-d9ec-010d-f188-ffcb.pool6.digikabel.hu) (Quit: Client closed)
07:20:50 Googulator29 joins (~Googulato@2a01-036d-0106-4ad8-d9ec-010d-f188-ffcb.pool6.digikabel.hu)
07:22:14 annamalai joins (~annamalai@157.32.222.111)
07:23:09 × annamalai quits (~annamalai@157.32.222.111) (Remote host closed the connection)
07:23:40 annamalai joins (~annamalai@157.32.222.111)
07:27:19 merijn joins (~merijn@host-vr.cgnat-g.v4.dfn.nl)
07:27:50 × annamalai quits (~annamalai@157.32.222.111) (Ping timeout: 245 seconds)
07:29:42 × hc quits (~hc@mail.hce.li) (Remote host closed the connection)
07:31:30 annamalai joins (~annamalai@157.32.222.111)
07:31:35 × merijn quits (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 245 seconds)
07:32:50 × vgtw quits (~vgtw@user/vgtw) (Ping timeout: 245 seconds)
07:34:44 × marinelli quits (~weechat@gateway/tor-sasl/marinelli) (Ping timeout: 272 seconds)
07:36:30 marinelli joins (~weechat@gateway/tor-sasl/marinelli)
07:39:01 peterbecich joins (~Thunderbi@172.222.148.214)
07:39:30 merijn joins (~merijn@host-vr.cgnat-g.v4.dfn.nl)
07:41:19 × simplystuart quits (~simplystu@c-75-75-152-164.hsd1.pa.comcast.net) (Ping timeout: 244 seconds)
07:41:34 hc joins (~hc@mail.hce.li)
07:42:55 × Pixi quits (~Pixi@user/pixi) (Ping timeout: 240 seconds)
07:44:07 × merijn quits (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 264 seconds)
07:44:28 simplystuart joins (~simplystu@c-75-75-152-164.hsd1.pa.comcast.net)
07:45:47 Pixi joins (~Pixi@user/pixi)
07:50:43 × Googulator29 quits (~Googulato@2a01-036d-0106-4ad8-d9ec-010d-f188-ffcb.pool6.digikabel.hu) (Quit: Client closed)
07:50:49 Googulator32 joins (~Googulato@2a01-036d-0106-4ad8-d9ec-010d-f188-ffcb.pool6.digikabel.hu)
07:51:05 × hc quits (~hc@mail.hce.li) (Remote host closed the connection)
07:51:43 lucabtz joins (~lucabtz@user/lucabtz)
07:51:55 hc joins (~hc@mail.hce.li)
07:55:50 merijn joins (~merijn@host-vr.cgnat-g.v4.dfn.nl)
07:56:02 sord937 joins (~sord937@gateway/tor-sasl/sord937)
07:56:40 × annamalai quits (~annamalai@157.32.222.111) (Remote host closed the connection)
07:57:12 annamalai joins (~annamalai@157.32.222.111)
08:00:43 × merijn quits (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 265 seconds)
08:20:35 × Googulator32 quits (~Googulato@2a01-036d-0106-4ad8-d9ec-010d-f188-ffcb.pool6.digikabel.hu) (Quit: Client closed)
08:20:42 Googulator22 joins (~Googulato@2a01-036d-0106-4ad8-d9ec-010d-f188-ffcb.pool6.digikabel.hu)
08:23:52 YouDontKnowMe joins (~YouDontKn@2a06:3040:11:610::d101)
08:26:12 × YouDontKnowMe quits (~YouDontKn@2a06:3040:11:610::d101) (Client Quit)
08:26:38 × karenw quits (~karenw@user/karenw) (Ping timeout: 260 seconds)
08:34:40 <lucabtz> there is no string splitting in base?
08:39:34 × DetourNetworkUK quits (~DetourNet@user/DetourNetworkUK) (Ping timeout: 246 seconds)
08:41:06 × trickard quits (~trickard@cpe-85-98-47-163.wireline.com.au) (Read error: Connection reset by peer)
08:41:19 trickard_ joins (~trickard@cpe-85-98-47-163.wireline.com.au)
08:41:56 <Rembane> lucabtz: There's span and break and partition and take and drop and takeWhile and dropWhile
08:43:45 × emmanuelux quits (~emmanuelu@user/emmanuelux) (Remote host closed the connection)
08:44:22 × peterbecich quits (~Thunderbi@172.222.148.214) (Ping timeout: 256 seconds)
08:50:10 <dminuoso> 21:18:59 tomsmeding │ it seems the theme of today is "words mean different things to different people"
08:50:42 Googulator31 joins (~Googulato@2a01-036d-0106-4ad8-d9ec-010d-f188-ffcb.pool6.digikabel.hu)
08:50:43 × Googulator22 quits (~Googulato@2a01-036d-0106-4ad8-d9ec-010d-f188-ffcb.pool6.digikabel.hu) (Quit: Client closed)
08:50:47 <dminuoso> Human language is messy, imprecise and under constant change.
08:51:56 <dminuoso> Heck, if you just go through pure math publications, you see so many conflicting notation styles or conflicting terminology choices... its best to not dwell on what people call things and just be able to adjust your reference frame in a discussion...
08:52:20 <dminuoso> Especially when its people from different fields/languages/paradigms...
08:55:39 merijn joins (~merijn@77.242.116.146)
09:02:54 <lucabtz> Rembane yeah i made one with takeWhile and dropWhile
09:03:54 fp1 joins (~Thunderbi@2001:708:20:1406::1370)
09:04:46 × merijn quits (~merijn@77.242.116.146) (Ping timeout: 256 seconds)
09:04:59 × Inline quits (~inlinE@2001-4dd3-7fc8-0-2be-fec0-ba58-7d11.ipv6dyn.netcologne.de) (Remote host closed the connection)
09:05:18 Inline joins (~inlinE@2001-4dd3-7fc8-0-2be-fec0-ba58-7d11.ipv6dyn.netcologne.de)
09:05:31 × Sgeo quits (~Sgeo@user/sgeo) (Read error: Connection reset by peer)
09:09:30 × tzh quits (~tzh@c-76-115-131-146.hsd1.or.comcast.net) (Quit: zzz)
09:10:02 × dhs quits (~dhs@user/dhscholb) ()
09:10:37 <chromoblob> dminuoso: mind sharing which IRC client you use? interesting
09:14:45 merijn joins (~merijn@77.242.116.146)
09:17:25 × trickard_ quits (~trickard@cpe-85-98-47-163.wireline.com.au) (Read error: Connection reset by peer)
09:17:39 trickard_ joins (~trickard@cpe-85-98-47-163.wireline.com.au)
09:20:43 × Googulator31 quits (~Googulato@2a01-036d-0106-4ad8-d9ec-010d-f188-ffcb.pool6.digikabel.hu) (Quit: Client closed)
09:20:45 Googulator22 joins (~Googulato@2a01-036d-0106-4ad8-d9ec-010d-f188-ffcb.pool6.digikabel.hu)
09:21:23 Lycurgus joins (~juan@user/Lycurgus)
09:23:39 kuribas joins (~user@2a02:1808:d1:d243:9821:bd8c:f208:7dc)
09:24:49 <kuribas> Funny how haskell makes easy things harder sometimes. I have a list of items, and I need to produce another list, but flatten it (so like a list monad). But I also want to have some state variable.
09:25:23 <Lycurgus> wrong lang 4 state
09:25:37 <Lycurgus> easy state anywho
09:25:39 <merijn> kuribas: That just sounds like scanl + flatten?
09:25:52 <kuribas> So I could: 1) use traverse on the list, using an inner state monad, then flatten. 2) make a list and state monad. 3) do an explicit tail recursive loop.
09:25:55 chele joins (~chele@user/chele)
09:26:08 <kuribas> :t scanl
09:26:09 <Lycurgus> state u dont even think about hardly
09:26:10 <lambdabot> (b -> a -> b) -> b -> [a] -> [b]
09:26:54 <kuribas> Concretely, I want to generate some SQL query, but I need to generate aliases for tables, like alias1, alias2 (the state).
09:27:17 <Axman6> or mapAccumL/R
09:27:46 <kuribas> Funny, one of my colleages went to university in Glasgow, she never did haskell because it was to complicated...
09:27:53 <kuribas> But she is doing clojure now.
09:29:10 DetourNetworkUK joins (DetourNetw@user/DetourNetworkUK)
09:32:02 <sprout> I just wrote a foldl_with_state in Egel
09:32:09 <sprout> not everything has to be a monad
09:32:20 <Axman6> that definitely sounds like mapAccumL to me ...
09:32:23 <Axman6> :t mapAccumL
09:32:25 <lambdabot> Traversable t => (s -> a -> (s, b)) -> s -> t a -> (s, t b)
09:32:34 × kuribas quits (~user@2a02:1808:d1:d243:9821:bd8c:f208:7dc) (Ping timeout: 260 seconds)
09:33:11 <Lycurgus> hs is a wonderment in that it managed to become quite practically while going full on ivory tower dont give a damn if u think it's a ball breaker
09:33:22 <Lycurgus> *quite practical
09:34:07 <dminuoso> chromoblob: Weechat.
09:34:22 <lucabtz> i ended up doing like this Rembane https://paste.tomsmeding.com/gp5xEGzv
09:34:37 <Lycurgus> the type sig circle jerks being a prime epiphenomon of that
09:34:47 <sprout> Axman6: yah, that must be the same thing
09:35:49 × DetourNetworkUK quits (DetourNetw@user/DetourNetworkUK) (Read error: Connection reset by peer)
09:36:49 DetourNetworkUK joins (DetourNetw@user/DetourNetworkUK)
09:38:08 × merijn quits (~merijn@77.242.116.146) (Ping timeout: 240 seconds)
09:39:14 merijn joins (~merijn@77.242.116.146)
09:49:29 vgtw joins (~vgtw@user/vgtw)
09:50:47 Googulator26 joins (~Googulato@2a01-036d-0106-4ad8-d9ec-010d-f188-ffcb.pool6.digikabel.hu)
09:50:47 × Googulator22 quits (~Googulato@2a01-036d-0106-4ad8-d9ec-010d-f188-ffcb.pool6.digikabel.hu) (Quit: Client closed)
09:55:08 kuribas joins (~user@ip-188-118-57-242.reverse.destiny.be)
09:55:42 <kuribas> :t mapAccumL
09:55:43 <lambdabot> Traversable t => (s -> a -> (s, b)) -> s -> t a -> (s, t b)
09:56:23 <kuribas> I can make a transformer, but "StateT [] s a" would not work, as it trows away state.
09:56:41 <kuribas> Maybe ListT done right: ListT (State s) a
09:58:15 × vgtw quits (~vgtw@user/vgtw) (Ping timeout: 240 seconds)
09:58:56 <kuribas> or easier : concat $ runState $ traverse (state $ \s -> [...]) l
09:59:26 vgtw joins (~vgtw@user/vgtw)
10:03:06 <kuribas> :t ListT
10:03:08 <lambdabot> error: [GHC-88464]
10:03:08 <lambdabot> Data constructor not in scope: ListT
10:03:08 <lambdabot> Suggested fix: Perhaps use ‘List’ (imported from Control.Lens)
10:03:42 × fp1 quits (~Thunderbi@2001:708:20:1406::1370) (Ping timeout: 252 seconds)
10:06:23 <kuribas> :t \f l -> concat $ flip runState 1 $ traverse (State . f) l
10:06:25 <lambdabot> error: [GHC-01928]
10:06:25 <lambdabot> • Illegal term-level use of the type constructor ‘State’
10:06:25 <lambdabot> • imported from ‘Control.Monad.State’ at /home/lambda/.lambdabot/State/L.hs:65:1-26
10:07:27 <kuribas> lambdabot: It's a type synonym ...
10:08:38 comerijn joins (~merijn@77.242.116.146)
10:10:13 × Lycurgus quits (~juan@user/Lycurgus) (Quit: alsoknownas.renjuan.org ( juan@acm.org ))
10:10:55 × merijn quits (~merijn@77.242.116.146) (Ping timeout: 240 seconds)
10:11:47 <kuribas> Isn't ListT done right a logic monad?
10:12:04 kritzefitz parts (~kritzefit@debian/kritzefitz) ()
10:12:40 × chromoblob quits (~chromoblo@user/chromob1ot1c) (Read error: Connection reset by peer)
10:13:45 chromoblob joins (~chromoblo@user/chromob1ot1c)
10:14:27 <tomsmeding> :t \f l -> concat $ flip runState 1 $ traverse (state . f) l
10:14:29 <lambdabot> (Traversable t, Num [a1]) => (a2 -> [a1] -> (b, [a1])) -> t a2 -> [a1]
10:15:24 <kuribas> tomsmeding: https://hackage.haskell.org/package/mtl-2.3.1/docs/Control-Monad-State-Lazy.html#t:State
10:15:46 <tomsmeding> oh your were complaining about "type constructor"
10:15:56 × marinelli quits (~weechat@gateway/tor-sasl/marinelli) (Remote host closed the connection)
10:16:02 <kuribas> ah wait, it's StateT ...
10:16:06 <kuribas> sorry...
10:16:18 marinelli joins (~weechat@gateway/tor-sasl/marinelli)
10:16:41 <kuribas> :t \f l -> concat $ flip runState 1 $ traverse (StateT . f) l
10:16:42 <lambdabot> (Num [a1], Traversable t) => (a2 -> [a1] -> Identity (b, [a1])) -> t a2 -> [a1]
10:16:44 × vgtw quits (~vgtw@user/vgtw) (Ping timeout: 244 seconds)
10:16:58 <tomsmeding> kuribas: I don't see how ListT is relevant here, but then I don't really understand your usecase yet; ListT is for nondeterminism
10:17:16 <tomsmeding> or "cartesian product of the possibilities"
10:17:46 <kuribas> tomsmeding: I just wanted to use bind (>>=), but with a monad stack. Like a list comprehension with state.
10:18:14 <tomsmeding> is it that you want to loop over a list with some state, and while doing so, generate values to be stored in a returned list at the end?
10:18:14 CiaoSen joins (~Jura@2a02:8071:64e1:da0:5a47:caff:fe78:33db)
10:18:24 <kuribas> yeah
10:18:43 <tomsmeding> this? https://paste.tomsmeding.com/r70Fuwb3
10:19:10 <kuribas> tomsmeding: yes :)
10:19:21 <tomsmeding> instantiate m to State and roll
10:20:06 <tomsmeding> note the swap because mapAccumL and runState do not agree on which part of the pair should go which way :p
10:20:37 × Googulator26 quits (~Googulato@2a01-036d-0106-4ad8-d9ec-010d-f188-ffcb.pool6.digikabel.hu) (Quit: Client closed)
10:20:47 Googulator26 joins (~Googulato@2a01-036d-0106-4ad8-d9ec-010d-f188-ffcb.pool6.digikabel.hu)
10:21:00 vgtw joins (~vgtw@user/vgtw)
10:22:13 <tomsmeding> uh, no, don't instantiate m to State
10:22:21 <tomsmeding> the state is already there, lol
10:22:45 <tomsmeding> anyway this is a function that I needed at some point and couldn't find in the standard libraries
10:24:19 <kuribas> Another interesting solution would be to use coroutines, and have one routine for generating the tables aliases.
10:24:34 × xff0x quits (~xff0x@fsb6a9491c.tkyc517.ap.nuro.jp) (Ping timeout: 246 seconds)
10:24:43 acidjnk joins (~acidjnk@p200300d6e71719443da791614ae70cbb.dip0.t-ipconnect.de)
10:24:45 <tomsmeding> and 'send out' the aliases to the coroutine via a channel?
10:25:15 <kuribas> yes
10:25:35 <kuribas> I just feel like all of this is more complicated than equivalent python.
10:25:59 <tomsmeding> my knowledge of funny programming languages is not large enough to be able to point to which one, but I feel like there's a language where this would be the "neat" solution
10:26:06 <tomsmeding> I don't think it's Haskell :p
10:27:22 × vgtw quits (~vgtw@user/vgtw) (Ping timeout: 246 seconds)
10:29:42 <kuribas> python would be something like this: https://gist.github.com/kuribas/bfeb96b35699d6a4f64b50f4732d62b9
10:30:24 vgtw joins (~vgtw@user/vgtw)
10:30:56 <tomsmeding> I see you haven't been programming python recently with the syntax errors, but otherwise yes :p
10:31:05 <tomsmeding> although the 'break' may be tricky
10:31:18 <kuribas> actually I have
10:31:31 <tomsmeding> (= instead of ==, elif instead of else if)
10:31:38 <kuribas> elif is valid python
10:31:42 <tomsmeding> is it?
10:31:51 <tomsmeding> oh right
10:32:04 <tomsmeding> then what's github's syntax highlighter up about
10:32:15 <kuribas> I forgot a colon.
10:32:23 <tomsmeding> oh
10:37:15 × vgtw quits (~vgtw@user/vgtw) (Ping timeout: 240 seconds)
10:37:35 × comerijn quits (~merijn@77.242.116.146) (Ping timeout: 240 seconds)
10:37:35 vgtw joins (~vgtw@user/vgtw)
10:38:39 <Leary> kuribas: How about `foldA :: (Foldable t, Applicative f, Monoid b) => (a -> f b) -> t a -> f b; foldA f = getAp . foldMap (Ap . f)`? `f` can be `State s`, `b` can be a list ...
10:38:49 <Leary> Or flip the args and call it `forA`, even better.
10:39:43 × tromp quits (~textual@2001:1c00:3487:1b00:4073:6a24:b181:8b56) (Quit: My iMac has gone to sleep. ZZZzzz…)
10:40:19 haritz joins (~hrtz@140.228.70.141)
10:40:19 × haritz quits (~hrtz@140.228.70.141) (Changing host)
10:40:19 haritz joins (~hrtz@user/haritz)
10:42:46 trickard_ is now known as trickard
10:44:25 <kuribas> foldmap?
10:45:42 <Leary> Yes, `foldMap`. It sure doesn't sound like you need `traverse`.
10:45:47 dhil joins (~dhil@5.151.29.141)
10:46:02 tromp joins (~textual@2001:1c00:3487:1b00:4073:6a24:b181:8b56)
10:49:49 <kuribas> :t ala
10:49:51 <lambdabot> (Functor f, Rewrapping s t) => (Unwrapped s -> s) -> ((Unwrapped t -> t) -> f s) -> f (Unwrapped s)
10:50:30 <kuribas> :t alaf Ap foldMap
10:50:32 <lambdabot> k1} {a}. (Foldable t, Monoid (Ap g b)) => (a -> g b) -> t a -> g b
10:50:34 merijn joins (~merijn@77.242.116.146)
10:50:50 × Googulator26 quits (~Googulato@2a01-036d-0106-4ad8-d9ec-010d-f188-ffcb.pool6.digikabel.hu) (Quit: Client closed)
10:50:51 Googulator56 joins (~Googulato@2a01-036d-0106-4ad8-d9ec-010d-f188-ffcb.pool6.digikabel.hu)
10:51:46 <kuribas> :t alaf StateT traverse
10:51:48 <lambdabot> (Traversable t, Monad m') => (a -> s' -> m' (a', s')) -> t a -> s' -> m' (t a', s')
11:05:38 <kuribas> :t alaf state traverse
11:05:40 <lambdabot> (Unwrapped (m (t b)) ~ (s -> (t b, s)), Rewrapped (m b) (m (t b)), Rewrapped (m (t b)) (m b), MonadState s m, Traversable t) => (a -> Unwrapped (m b)) -> t a -> Unwrapped (m (t b))
11:06:53 <kuribas> I have a haskell script that I made for my own use. But there may be interest, though like not haskell :-(
11:07:08 <kuribas> I could 1) dockerize it, 2) rewrite in python/clojure/...
11:08:40 × energizer quits (~energizer@user/energizer) (Quit: ZNC 1.7.0+deb0+xenial1 - https://znc.in)
11:10:22 poscat0x04 joins (~poscat@user/poscat)
11:11:02 energizer joins (~energizer@user/energizer)
11:11:15 × poscat quits (~poscat@user/poscat) (Ping timeout: 240 seconds)
11:11:36 wbooze joins (~wbooze@cgn-195-14-217-157.nc.de)
11:15:32 × trickard quits (~trickard@cpe-85-98-47-163.wireline.com.au) (Read error: Connection reset by peer)
11:15:47 trickard_ joins (~trickard@cpe-85-98-47-163.wireline.com.au)
11:16:40 × wbooze quits (~wbooze@cgn-195-14-217-157.nc.de) (Quit: Leaving)
11:17:50 wbooze joins (~wbooze@cgn-195-14-217-157.nc.de)
11:20:42 × Googulator56 quits (~Googulato@2a01-036d-0106-4ad8-d9ec-010d-f188-ffcb.pool6.digikabel.hu) (Quit: Client closed)
11:20:49 Googulator7 joins (~Googulato@2a01-036d-0106-4ad8-d9ec-010d-f188-ffcb.pool6.digikabel.hu)
11:22:36 xff0x joins (~xff0x@2405:6580:b080:900:b577:52ee:470:5943)
11:27:25 × merijn quits (~merijn@77.242.116.146) (Ping timeout: 245 seconds)
11:35:24 <kuribas> Is there a corouting library that can allow you to take arbitrary routines as argument?
11:35:45 <kuribas> Instead of "x <- await", "x <- await routineA".
11:36:52 ttybitnik joins (~ttybitnik@user/wolper)
11:39:06 <kuribas> conduit can only await from a single source
11:51:55 <kuribas> Maybe just a ST or IO monad, with Streamly or ListT stored into IORefs.
11:54:52 × Inline quits (~inlinE@2001-4dd3-7fc8-0-2be-fec0-ba58-7d11.ipv6dyn.netcologne.de) (Ping timeout: 246 seconds)
11:56:54 merijn joins (~merijn@77.242.116.146)
11:58:04 Digitteknohippie is now known as Digit
12:03:29 Inline joins (~inlinE@2001-4dd3-7fc8-0-c092-91dd-c569-3f74.ipv6dyn.netcologne.de)
12:03:29 × trickard_ quits (~trickard@cpe-85-98-47-163.wireline.com.au) (Read error: Connection reset by peer)
12:06:12 trickard_ joins (~trickard@cpe-85-98-47-163.wireline.com.au)
12:11:52 humasect joins (~humasect@dyn-192-249-132-90.nexicom.net)
12:14:14 × trickard_ quits (~trickard@cpe-85-98-47-163.wireline.com.au) (Read error: Connection reset by peer)
12:16:05 × confusedalex quits (~confuseda@user/confusedalex) (Remote host closed the connection)
12:17:04 × humasect quits (~humasect@dyn-192-249-132-90.nexicom.net) (Ping timeout: 260 seconds)
12:17:10 trickard_ joins (~trickard@cpe-85-98-47-163.wireline.com.au)
12:18:06 comerijn joins (~merijn@77.242.116.146)
12:20:31 × trickard_ quits (~trickard@cpe-85-98-47-163.wireline.com.au) (Read error: Connection reset by peer)
12:20:35 × merijn quits (~merijn@77.242.116.146) (Ping timeout: 240 seconds)
12:27:25 × tromp quits (~textual@2001:1c00:3487:1b00:4073:6a24:b181:8b56) (Quit: My iMac has gone to sleep. ZZZzzz…)
12:27:28 trickard_ joins (~trickard@cpe-85-98-47-163.wireline.com.au)
12:29:55 × comerijn quits (~merijn@77.242.116.146) (Ping timeout: 245 seconds)
12:29:56 <[exa]> kuribas: what do you mean with arbitrary
12:32:38 <[exa]> ah like, choose what routine to wait for at a given point
12:34:49 × trickard_ quits (~trickard@cpe-85-98-47-163.wireline.com.au) (Read error: Connection reset by peer)
12:35:27 <[exa]> seems like conduit really can't, there's no space for that in the data structure... https://hackage-content.haskell.org/package/conduit-1.3.6.1/docs/src/Data.Conduit.Internal.Pipe.html#Pipe
12:36:12 <[exa]> with Streaming this is pretty simple (you can unpack multiple sources yourself) but streaming is much less coroutine-ish
12:37:40 × Inline quits (~inlinE@2001-4dd3-7fc8-0-c092-91dd-c569-3f74.ipv6dyn.netcologne.de) (Ping timeout: 265 seconds)
12:38:06 trickard_ joins (~trickard@cpe-85-98-47-163.wireline.com.au)
12:39:29 merijn joins (~merijn@77.242.116.146)
12:48:00 <lucabtz> (spoiler advent of code) someone wants to comment my solution so i can improve https://paste.tomsmeding.com/0wThIO6g
12:48:07 × merijn quits (~merijn@77.242.116.146) (Ping timeout: 240 seconds)
12:50:15 × AlexZenon quits (~alzenon@85.174.183.216) (Quit: ;-)
12:51:37 × AlexNoo quits (~AlexNoo@85.174.183.216) (Quit: Leaving)
12:54:20 merijn joins (~merijn@77.242.116.146)
12:55:42 Anarchos joins (~Anarchos@91-161-254-16.subs.proxad.net)
12:56:10 <kuribas> [exa]: arbitrary number or types of streams.
12:57:11 <kuribas> Now that I think of it (ListT IO) or (ListT (ST s)), stored in a IORef or STRef makes for an excelent coroutine.
12:57:54 <[exa]> yeah, if you don't mind losing the safety net of the streaming library around it it's IMO quite the way to go
12:58:52 <[exa]> anyway I did this recently with streaming (few days back in scrollback), it's essentially this idea, except without the unnecessary ioref
12:59:58 <kuribas> [exa]: you mean exceptions?
13:00:37 <[exa]> yeah partially exceptions and partially having to watch who's doing what with the global ioref
13:01:40 <Rembane> lucabtz: I like that one! Nice!
13:02:14 <lucabtz> Rembane thanks
13:02:19 <lucabtz> part 2 is a bit slow
13:02:40 <lucabtz> wait or you mean the split i posted earlier
13:02:43 <[exa]> lucabtz: not sure how much I'd spoil here if I give hints... but have you considered pre-splitting the numbers on input and looking at them like at pairs of intervals?
13:02:48 <Rembane> lucabtz: I meant the split! :)
13:03:13 <[exa]> lucabtz: in which case you should be able to avoid scanning through the whole range
13:03:19 <kuribas> [exa]: would bracket help?
13:03:29 <[exa]> kuribas: probably
13:03:34 × trickard_ quits (~trickard@cpe-85-98-47-163.wireline.com.au) (Read error: Connection reset by peer)
13:03:45 <[exa]> kuribas: sec, I'll show a piece of code that does something similar with streaming
13:03:47 trickard_ joins (~trickard@cpe-85-98-47-163.wireline.com.au)
13:04:27 <kuribas> Streaming, ListT and Streamly all look similar.
13:04:36 <[exa]> kuribas: https://paste.tomsmeding.com/L7EFsnUc
13:04:37 <kuribas> ListT seems simpler, while Streamly is focussed on performance.
13:07:23 <[exa]> man, streamly is huge
13:08:03 Enrico63 joins (~Enrico63@host-212-171-79-170.pool212171.interbusiness.it)
13:08:07 X-Scale joins (~ARM@6.67.114.89.rev.vodafone.pt)
13:09:01 <lucabtz> Rembane thanks, i replace takeWhile and dropWhile with break which seemed more appropriate
13:09:24 <Rembane> lucabtz: Yeah, and it should be faster, but I haven't measured.
13:09:35 trickard_ is now known as trickard
13:09:55 <lucabtz> i suppose it can do two operations at once right
13:10:14 <[exa]> yeah it saves 1 list walk
13:10:41 <lucabtz> [exa] im not sure exactly what you mean
13:10:53 <[exa]> lucabtz: with the 1 list walk, or with the above hint?
13:11:06 <lucabtz> no the hint, the list walk i understand
13:11:40 <[exa]> okay so if I read the code right, you're taking all the numbers one by one, cut them in half and compare the halves, right?
13:11:58 <lucabtz> yep
13:12:10 <[exa]> <possible spoilers start>
13:12:15 <lucabtz> i must say though the part cutting them in half is not slow
13:12:26 <lucabtz> its the other part which is slow
13:13:16 <lucabtz> tbh i havent measured but you have it basically instantly
13:13:38 <lucabtz> if you want you can pm me to avoid the spoilers!
13:13:45 <[exa]> ah ok
13:17:02 AlexNoo joins (~AlexNoo@85.174.183.216)
13:18:03 __monty__ joins (~toonn@user/toonn)
13:20:13 <kuribas> [exa]: how does conduit take care of exceptions?
13:21:21 × adamCS quits (~adamCS@70.19.85.77) (Remote host closed the connection)
13:23:25 <[exa]> no clue tbh
13:30:46 AlexZenon joins (~alzenon@85.174.183.216)
13:36:38 × trickard quits (~trickard@cpe-85-98-47-163.wireline.com.au) (Read error: Connection reset by peer)
13:39:19 trickard_ joins (~trickard@cpe-85-98-47-163.wireline.com.au)
13:41:05 adamCS joins (~adamCS@70.19.85.77)
13:43:30 <ski> @type let mapAccumLM :: (Traversable t,Monad m) => (s -> a -> m (s,b)) -> s -> t a -> m (s,t b); mapAccumLM f s0 = fmap swap . flip runStateT s0 . traverse (StateT . (fmap swap .) . flip f) in mapAccumLM -- `mapAccumLM' ~= `traverse' on `StateT'
13:43:33 <lambdabot> (Traversable t, Monad m) => (s -> a -> m (s, b)) -> s -> t a -> m (s, t b)
13:54:07 tromp joins (~textual@2001:1c00:3487:1b00:4073:6a24:b181:8b56)
13:54:52 sindu joins (~sindu@2.148.32.207.tmi.telenormobil.no)
13:57:09 × adamCS quits (~adamCS@70.19.85.77) (Remote host closed the connection)
13:58:55 adamCS joins (~adamCS@70.19.85.77)
14:10:45 × Googulator7 quits (~Googulato@2a01-036d-0106-4ad8-d9ec-010d-f188-ffcb.pool6.digikabel.hu) (Quit: Client closed)
14:10:51 Googulator13 joins (~Googulato@2a01-036d-0106-4ad8-d9ec-010d-f188-ffcb.pool6.digikabel.hu)
14:11:24 × tt123160 quits (~tt1231@2603:6010:8700:4a81:a4f6:acff:fe95:3803) (Ping timeout: 260 seconds)
14:18:22 × machinedgod quits (~machinedg@d75-159-126-101.abhsia.telus.net) (Remote host closed the connection)
14:23:49 × pavonia quits (~user@user/siracusa) (Quit: Bye!)
14:30:16 × merijn quits (~merijn@77.242.116.146) (Ping timeout: 246 seconds)
14:35:44 × user363627 quits (~user@user/user363627) (Remote host closed the connection)
14:40:33 merijn joins (~merijn@77.242.116.146)
14:43:07 × Googulator13 quits (~Googulato@2a01-036d-0106-4ad8-d9ec-010d-f188-ffcb.pool6.digikabel.hu) (Quit: Client closed)
14:47:26 <kuribas> There is something true about haskell making hard things easy, and easy things hard.
14:49:45 <merijn> kuribas: conduit just assumes you use ResourceT
14:49:52 <merijn> (for exception handling)
14:50:43 <kuribas> merijn: So I can just use this over IO or ST ?
14:52:11 <merijn> Generally you'd use `ResourceT IO` or similar as base for conduit
14:53:19 <kuribas> I mean I can use this over ListT or Streamly
14:54:31 × CiaoSen quits (~Jura@2a02:8071:64e1:da0:5a47:caff:fe78:33db) (Ping timeout: 255 seconds)
15:00:59 tt123160 joins (~tt1231@2603:6010:8700:4a81:a4f6:acff:fe95:3803)
15:09:31 vanishingideal joins (~vanishing@user/vanishingideal)
15:10:36 <kuribas> tomsmeding: the ListT version would look something like this (untested) https://gist.github.com/kuribas/bfeb96b35699d6a4f64b50f4732d62b9
15:13:18 <tomsmeding> kuribas: I don't see any ListT?
15:13:24 <tomsmeding> oh
15:14:07 <kuribas> tomsmeding: fromFoldable and fromList
15:14:36 <kuribas> ah input should be "fromFoldable input"
15:15:09 <tomsmeding> and where fromList is toList?
15:15:10 <kuribas> hmm, missing a "lift".
15:15:53 <kuribas> right, sorry...
15:15:58 <tomsmeding> kuribas: are you sure you're not confusing ListT for a writer monad?
15:16:56 <kuribas> tomsmeding: That would mean another monad in the stack, no?
15:17:27 <tomsmeding> isn't what you are trying to do, outputting lists of things at various points in the computation, and then at the end you want the concatenated list of all of those?
15:17:31 <tomsmeding> that's what a writer monad does
15:17:34 <tomsmeding> that's not what ListT does
15:18:20 <kuribas> I mean, this is concatMap, with effects, no?
15:18:28 <tomsmeding> oh but the `col <- input` does do the mapping
15:18:35 <tomsmeding> _right_
15:18:37 <tomsmeding> okay I get it now
15:18:45 <tomsmeding> please don't use ListT for this
15:18:59 <tomsmeding> it creates entirely the wrong intuition for what you're trying to do
15:19:12 <tomsmeding> :t concatMapM
15:19:14 <lambdabot> error: [GHC-88464]
15:19:14 <lambdabot> Variable not in scope: concatMapM
15:19:14 <lambdabot> Suggested fix:
15:19:32 <tomsmeding> meh it's not in base
15:19:32 <kuribas> I suppose the mapAccumL is easier to understand.
15:20:06 <tomsmeding> or execWriterT (mapM_ _ input) []
15:20:44 <tomsmeding> the problem with writer is that it just <>'s your lists, and probably in the wrong order, so you're going to get O(n^2) behaviour
15:20:57 <tomsmeding> but DList or an Endo wrapper or something else can fix that
15:21:04 <kuribas> yeah
15:21:05 <merijn> There was an optimised writer somewhere too
15:21:17 <tomsmeding> merijn: that's just for strictness, if you mean Control.Monad.Trans.Writer.CPS
15:21:29 <tomsmeding> it still can't do better than just using <> on your things
15:21:39 <tomsmeding> if your <> is expensive, you're out of luck
15:22:02 <tomsmeding> (C.M.T.Writer.CPS is just a state monad)
15:22:04 <merijn> I was thinking something like Chronicle or seomthing?
15:22:12 <kuribas> Hmm right, ListT cannot be used for coroutines.
15:22:24 <merijn> something existed that was a better Writter beyond just strict :p
15:22:31 <tomsmeding> this thing? https://hackage.haskell.org/package/monad-chronicle-1.1/docs/Control-Monad-Chronicle.html#t:ChronicleT
15:22:44 <tomsmeding> looks like <>
15:23:29 <tomsmeding> I guess you can bake the Endo trick in the monad to re-associate the <> calls if you want, but then that would work only for monoids that want to associate to the right
15:23:42 <tomsmeding> I don't think you can fix this problem in general, it depends on the particular complexity of your <>
15:25:34 <tomsmeding> if you know that the monoid will be some kind of list, you can optimise with a mutable vector, for example
15:25:40 <tomsmeding> (if you really want)
15:26:14 machinedgod joins (~machinedg@d75-159-126-101.abhsia.telus.net)
15:26:48 <kuribas> tomsmeding: actually I _can_ use ListT for this, why don't you like it?
15:27:15 <tomsmeding> because ListT "means" that you're doing nondeterminism and you want all possible results, and that's very much not what you're doing
15:27:31 <tomsmeding> yes, it does work (probably)
15:28:05 <tomsmeding> I guess if you add a comment it's fine :p
15:28:16 <kuribas> tomsmeding: I can do readIORef, then uncons, that will not be nondeterministic.
15:28:24 <tomsmeding> but I would seriously consider `fmap concat . forM`
15:28:55 <tomsmeding> if all you're doing is looping over a list and concatenating the results
15:29:02 Square joins (~Square@user/square)
15:29:31 RMSBach is now known as RSBach
15:29:36 <kuribas> tomsmeding: but you just showed WriterT is inefficient?
15:29:45 <tomsmeding> kuribas: I'm not talking about actual randomness, I'm talking about "let's throw a die, let's throw another one, add the two results, and see what answers we get"
15:29:49 <tomsmeding> "pure nondeterminism"
15:29:56 <tomsmeding> that's what I think when I see ListT
15:30:04 <kuribas> tomsmeding: yes, but that's actually what I wanted here.
15:30:22 <tomsmeding> kuribas: my fmap concat . forM does not use WriterT
15:30:27 <kuribas> Except you want the concat to be explicit?
15:30:40 <tomsmeding> I mean, my dislike of ListT here is subjective :p
15:30:53 <tomsmeding> it's okay if you disagree
15:31:02 <kuribas> Sure, this is overcomplication for this usecase, I fully agree :)
15:31:17 <kuribas> I just wanted to explore ListT and ST monad.
15:31:49 <kuribas> But this would be bad production code.
15:32:34 × Square2 quits (~Square4@user/square) (Ping timeout: 246 seconds)
15:32:35 × chromoblob quits (~chromoblo@user/chromob1ot1c) (Ping timeout: 240 seconds)
15:32:48 <tomsmeding> under the moniker of "I want to see how this stuff works" suddenly a whole lot of things become fair game :)
15:32:55 chromoblob joins (~chromoblo@user/chromob1ot1c)
15:33:02 <tomsmeding> please go forth and add more monads
15:33:45 <kuribas> This just proves my point that something simple becomes complex in haskell, and suddenly opens a hole world of abstractions to get lost in.
15:33:51 <kuribas> But it's fun :)
15:34:06 <tomsmeding> yes
15:35:01 <kuribas> But when you actually need streaming, constant space algorithms without manual plumbing, suddenly the haskell becomes way more elegant than equivalent java.
15:35:06 <kuribas> Which we actually have here.
15:35:41 <kuribas> So easy to write a SAX parser in haskell without callback hell.
15:35:55 <tomsmeding> because of laziness?
15:36:25 <kuribas> because of monadic abstractions.
15:36:54 Sgeo joins (~Sgeo@user/sgeo)
15:41:43 × chromoblob quits (~chromoblo@user/chromob1ot1c) (Read error: Connection reset by peer)
15:42:02 chromoblob joins (~chromoblo@user/chromob1ot1c)
15:49:23 trickard_ is now known as trickard
15:50:33 <kuribas> I've been wanting to port my SAX parser to rust, which has a monad macro.
15:50:55 × vanishingideal quits (~vanishing@user/vanishingideal) (Ping timeout: 240 seconds)
15:52:55 × Pozyomka quits (~pyon@user/pyon) (Quit: bbl)
15:53:15 humasect joins (~humasect@dyn-192-249-132-90.nexicom.net)
15:54:46 Pozyomka joins (~pyon@user/pyon)
16:05:09 × polykernel quits (~polykerne@user/polykernel) (Ping timeout: 260 seconds)
16:09:29 × Square quits (~Square@user/square) (Ping timeout: 250 seconds)
16:11:52 × trickard quits (~trickard@cpe-85-98-47-163.wireline.com.au) (Read error: Connection reset by peer)
16:14:06 × Enrico63 quits (~Enrico63@host-212-171-79-170.pool212171.interbusiness.it) (Quit: Client closed)
16:14:38 trickard_ joins (~trickard@cpe-85-98-47-163.wireline.com.au)
16:15:24 × chromoblob quits (~chromoblo@user/chromob1ot1c) (Ping timeout: 244 seconds)
16:15:51 chromoblob joins (~chromoblo@user/chromob1ot1c)
16:20:01 × chromoblob quits (~chromoblo@user/chromob1ot1c) (Ping timeout: 255 seconds)
16:20:24 pr1sm joins (~pr1sm@2600:1000:b115:c9f2:64b7:10e9:a90c:5331)
16:25:04 × trickard_ quits (~trickard@cpe-85-98-47-163.wireline.com.au) (Read error: Connection reset by peer)
16:25:45 × pr1sm quits (~pr1sm@2600:1000:b115:c9f2:64b7:10e9:a90c:5331) (Ping timeout: 245 seconds)
16:26:11 <haskellbridge> <Zemyla> Is there a module for semi-ordered hashmaps, ones that require (Ord k, Hashable k), and as such have O(log n) worst-case performance?
16:26:38 pr1sm joins (~pr1sm@24.91.163.31)
16:27:45 trickard_ joins (~trickard@cpe-85-98-47-163.wireline.com.au)
16:28:13 trickard_ is now known as trickard
16:30:24 <merijn> Is that a thing?
16:30:45 <merijn> What's k there? (i.e. is the Hashable even worth it?)
16:32:13 <lucabtz> k is the key i suppose
16:33:04 <merijn> lucabtz: Yes, but what type do you expect that makes it worth to include Hashable over just `Ord k`?
16:33:48 <merijn> Regular Map already has O(log N) worst case, so the only reason not to use that if you expect K to have some expensive comparison
16:33:53 <lucabtz> i suppose it makes it constant time with no collisions and log n with collisions
16:33:56 × pr1sm quits (~pr1sm@24.91.163.31) (Remote host closed the connection)
16:34:32 <c_wraith> yeah, its a way of handling collisions that guarantees you'll never have an O(n) breakdown
16:34:41 <lucabtz> yeah
16:34:51 × lucabtz quits (~lucabtz@user/lucabtz) (Remote host closed the connection)
16:35:03 × trickard quits (~trickard@cpe-85-98-47-163.wireline.com.au) (Read error: Connection reset by peer)
16:36:27 <merijn> c_wraith: I'm not convinced that buys you anything over just straight up Map
16:38:17 trickard_ joins (~trickard@cpe-85-98-47-163.wireline.com.au)
16:40:53 <c_wraith> I mean, unordered-containers is generally faster than containers.
16:41:50 <c_wraith> (the higher branching factor of a HAMT over a binary tree is significant)
16:42:45 <merijn> c_wraith: I mean, that's entirely dependent on workload, key type, and access pattern
16:43:48 <merijn> Not to mention the question whether that's even the hot part of your code
16:49:01 <merijn> Which pretty much brings us back to the initial question of "what's your key type and what makes you expect it's worth it to include Hashable over Ord"
16:49:16 Anarchos parts (~Anarchos@91-161-254-16.subs.proxad.net) ()
16:51:49 <c_wraith> I rarely use unordered containers, for reasons of wanting to minimize dependencies and that collection performance usually doesn't matter. But whenever I've benchmarked my own code, it usually is faster. I just don't think it's enough faster to be worthwhile.
16:51:52 <haskellbridge> <loonycyborg> Constant time is still faster than logarithmic :P
16:52:26 <c_wraith> both constant time for hash tables and logarithmic time for binary trees are lies, of course
16:52:40 <haskellbridge> <loonycyborg> I think both unordered and ordered containers should be part of base
16:52:56 <haskellbridge> <loonycyborg> so people wouldn't have issues like above
16:54:11 chromoblob joins (~chromoblo@user/chromob1ot1c)
16:54:51 <c_wraith> like, unordered-containers uses a HAMT instead of an array, because mutation forces you into an unpleasant API. That's a very fast data structure, but it's sure not O(1) for anything
16:55:16 <c_wraith> But it doesn't really matter that it's not O(1), because hashing isn't O(1) anyway, and never has been
16:56:00 <c_wraith> If you want to hash n values into O(n) buckets, you need to look at O(log n) bits of each value
16:57:06 <haskellbridge> <loonycyborg> On the other hand it's just matter of putting it to .cabal file and many other packages already use them so they're pretty much guaranteed to be pulled in..
16:57:45 <merijn> looncyborg: Counter point: Since base changes requires new GHC releases they're slow to become widely available
16:58:00 <merijn> Now that could theoretically be fixed by decoupling base from GHC
16:58:19 <merijn> but that idea has been floating around since 2007 and still hasn't happened, so I would rather not hold my breath
16:58:24 <c_wraith> but by way of fairness, a binary tree is only O(log n) for stuff if comparisons are O(1), which is equally impossible
16:58:40 × tromp quits (~textual@2001:1c00:3487:1b00:4073:6a24:b181:8b56) (Ping timeout: 245 seconds)
16:59:09 <c_wraith> I don't know why schools teach both of those data structures so poorly.
16:59:18 <merijn> c_wraith: I mean, for something like Int they are (given the completely broken big O model)
16:59:28 <merijn> Then again if you have int, just use a PATRICIA tree
16:59:45 <c_wraith> if you have Int, everything is O(1), because it's a fixed-size domain
16:59:50 <merijn> c_wraith: Jokes on you, most schools don't teach either at all
16:59:53 <merijn> :p
16:59:55 <haskellbridge> <loonycyborg> Does it even make sense to use O notation for comparisons? Like they explicitly involve only two items, not entire list
17:00:14 <haskellbridge> <loonycyborg> And O is about how it scales with list length
17:00:42 <merijn> loonycyborg: Don't get me started on my usual rant of big O barely making sense at all in the real world :p
17:01:37 <haskellbridge> <loonycyborg> It makes as much sense as any other approximation
17:02:24 <haskellbridge> <loonycyborg> Just need to remember that it only says how algorithm scales with number of items in container
17:02:38 <haskellbridge> <loonycyborg> even O(1) can be dog slow
17:02:41 <merijn> loonycyborg: My complaint is that it doesn't even do that :p
17:02:47 × trickard_ quits (~trickard@cpe-85-98-47-163.wireline.com.au) (Ping timeout: 250 seconds)
17:02:50 <merijn> Or rather, it can be arbitrarily far off
17:02:57 <c_wraith> loonycyborg: to some extent. the number of distinct keys puts a lower bound on the comparison time. If you have 2^64 keys in your structure, at least 2^63 of them must have a common prefix of 63 bits, by the pigeonhole principle
17:03:11 trickard_ joins (~trickard@cpe-85-98-47-163.wireline.com.au)
17:03:31 × sord937 quits (~sord937@gateway/tor-sasl/sord937) (Quit: sord937)
17:03:36 <merijn> c_wraith: Don't you mean 2^64 - 2^63 must have the same prefix?
17:03:54 <merijn> Wait, I guess that's the same?
17:04:02 <c_wraith> Actually it's way too early for me to trust my ability to do numbers.
17:04:11 <merijn> It's way to late to trust mine :p
17:04:25 <merijn> c_wraith: Logically speaking only 2 keys will share a 2^63 prefix, no?
17:04:40 <merijn> c_wraith: The one where the last bit is 0 and the one where the last bit is 1?
17:04:44 Enrico63 joins (~Enrico63@host-212-171-79-170.pool212171.interbusiness.it)
17:05:15 × humasect quits (~humasect@dyn-192-249-132-90.nexicom.net) (Remote host closed the connection)
17:05:18 <c_wraith> I think you're right. But it does mean *some* comparison will take time has a lower bound determined by the number of distinct keys. that's the part I was looking for.
17:05:21 <merijn> 2^63 share a 1 bit prefix :p
17:05:24 <haskellbridge> <loonycyborg> I'm not sure why it matters what they share, they all had to be compared anyway for things to be correct :P
17:06:03 <merijn> It's also not true, since integers aren't compared 1 bit at a time :p
17:06:17 <c_wraith> Which is why I usually talk about strings instead of integers
17:06:43 <c_wraith> because that's when it actually is possible for n to go to infinity anyway
17:06:58 <c_wraith> (we're still pretending we have infinite memory)
17:09:05 <haskellbridge> <loonycyborg> Though it can be hard to picture everything that happens at low level
17:09:06 <haskellbridge> <loonycyborg> cpu adds lots of own optimizations too
17:09:07 <haskellbridge> <loonycyborg> in some cases things might be even free but you'd need to know details very well to take advantage of that
17:10:26 <__monty__> Clearly we need to approach JavaScript's tiny dependency culture.
17:11:06 <haskellbridge> <loonycyborg> Like modern cpus have lot of redundant execution units but not all code ends up using them to the full.
17:11:26 <merijn> __monty__: No, we should have "tiny dependency with minimal transitive footprint" unlike JS which is "tiny dependency with massive transitive footprint" :p
17:12:24 <__monty__> We're limited in our footprints by the unique dependency constraint at least.
17:12:26 <haskellbridge> <loonycyborg> You can have small transitive footprint only if most widely used things (like containers and unordered-containers) are in base
17:12:55 <__monty__> (I'm a base minimalist.)
17:13:38 × kuribas quits (~user@ip-188-118-57-242.reverse.destiny.be) (Remote host closed the connection)
17:17:12 <dutchie> containers is a dependency of the ghc library so I guess it's pretty much everywhere
17:17:20 <dutchie> ( https://downloads.haskell.org/ghc/9.12.1/docs/users_guide/9.12.1-notes.html#included-libraries )
17:18:18 Inline joins (~inlinE@2001-4dd3-7fc8-0-434a-a4b1-7362-b14b.ipv6dyn.netcologne.de)
17:18:58 × merijn quits (~merijn@77.242.116.146) (Ping timeout: 255 seconds)
17:19:54 tromp joins (~textual@2001:1c00:3487:1b00:40c9:191b:e4f:324a)
17:20:01 vanishingideal joins (~vanishing@user/vanishingideal)
17:29:17 <fgarcia> yes i think work has gone into compilers to get them to detect and optimize for emberassingly parallel operations. some things are difficult to do that for so there will still be a longer wait for some tasks
17:33:08 peterbecich joins (~Thunderbi@172.222.148.214)
17:37:49 LooksForFuture joins (~LooksForF@5.74.168.135)
17:37:55 × gawen quits (~gawen@user/gawen) (Quit: cya)
17:38:36 <LooksForFuture> Good resources for learning Haskell for a C programmer?
17:39:33 × LooksForFuture quits (~LooksForF@5.74.168.135) (Client Quit)
17:40:59 weary-traveler joins (~user@user/user363627)
17:42:34 × Enrico63 quits (~Enrico63@host-212-171-79-170.pool212171.interbusiness.it) (Quit: Client closed)
17:43:47 gawen joins (~gawen@user/gawen)
17:51:17 × ttybitnik quits (~ttybitnik@user/wolper) (Remote host closed the connection)
17:51:36 target_i joins (~target_i@user/target-i/x-6023099)
17:51:47 <absentia> LooksForFuture: patience
17:51:56 <absentia> he's definitely a zoomer
17:53:16 user363627 joins (~user@user/user363627)
17:54:03 <mauke> gotta be quick when looking for the future
17:54:47 × weary-traveler quits (~user@user/user363627) (Ping timeout: 250 seconds)
17:59:01 ttybitnik joins (~ttybitnik@user/wolper)
18:02:47 × tromp quits (~textual@2001:1c00:3487:1b00:40c9:191b:e4f:324a) (Quit: My iMac has gone to sleep. ZZZzzz…)
18:03:33 × vanishingideal quits (~vanishing@user/vanishingideal) (Remote host closed the connection)
18:05:54 × yin quits (~zero@user/zero) (Ping timeout: 260 seconds)
18:08:55 yin joins (~zero@user/zero)
18:11:14 merijn joins (~merijn@host-vr.cgnat-g.v4.dfn.nl)
18:11:49 ljdarj joins (~Thunderbi@user/ljdarj)
18:16:30 × merijn quits (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 252 seconds)
18:16:34 tromp joins (~textual@2001:1c00:3487:1b00:40c9:191b:e4f:324a)
18:17:30 Googulator joins (~Googulato@85-238-68-117.pool.digikabel.hu)
18:18:37 × peterbecich quits (~Thunderbi@172.222.148.214) (Ping timeout: 250 seconds)
18:21:56 × wootehfoot quits (~wootehfoo@user/wootehfoot) (Read error: Connection reset by peer)
18:22:40 ec joins (~ec@gateway/tor-sasl/ec)
18:22:56 × ljdarj quits (~Thunderbi@user/ljdarj) (Ping timeout: 256 seconds)
18:25:01 tzh joins (~tzh@c-76-115-131-146.hsd1.or.comcast.net)
18:25:22 CiaoSen joins (~Jura@2a02:8071:64e1:da0:5a47:caff:fe78:33db)
18:26:16 wickedjargon joins (~user@207.194.126.29)
18:26:50 × wickedjargon quits (~user@207.194.126.29) (Remote host closed the connection)
18:27:02 merijn joins (~merijn@host-vr.cgnat-g.v4.dfn.nl)
18:27:54 wickedjargon joins (~user@207.194.126.29)
18:31:52 × merijn quits (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 255 seconds)
18:42:50 merijn joins (~merijn@host-vr.cgnat-g.v4.dfn.nl)
18:44:46 × gawen quits (~gawen@user/gawen) (Quit: cya)
18:49:30 × merijn quits (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 245 seconds)
18:50:31 gawen joins (~gawen@user/gawen)
18:58:06 × wickedjargon quits (~user@207.194.126.29) (Remote host closed the connection)
19:00:53 merijn joins (~merijn@host-vr.cgnat-g.v4.dfn.nl)
19:01:03 × tromp quits (~textual@2001:1c00:3487:1b00:40c9:191b:e4f:324a) (Quit: My iMac has gone to sleep. ZZZzzz…)
19:03:58 wickedjargon joins (~user@207.194.126.29)
19:05:48 × merijn quits (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 244 seconds)
19:10:38 <monochrom> It may not be economically viable for authors to write a "haskell for c people" book.
19:11:42 × chele quits (~chele@user/chele) (Remote host closed the connection)
19:13:09 × califax quits (~califax@user/califx) (Remote host closed the connection)
19:14:21 califax joins (~califax@user/califx)
19:16:40 merijn joins (~merijn@host-vr.cgnat-g.v4.dfn.nl)
19:21:24 × merijn quits (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 252 seconds)
19:27:06 × califax quits (~califax@user/califx) (Remote host closed the connection)
19:28:33 califax joins (~califax@user/califx)
19:29:54 × Lord_of_Life quits (~Lord@user/lord-of-life/x-2819915) (Ping timeout: 260 seconds)
19:31:59 Lord_of_Life joins (~Lord@user/lord-of-life/x-2819915)
19:32:17 × califax quits (~califax@user/califx) (Remote host closed the connection)
19:32:28 merijn joins (~merijn@host-vr.cgnat-g.v4.dfn.nl)
19:37:29 × merijn quits (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 260 seconds)
19:39:06 tromp joins (~textual@2001:1c00:3487:1b00:40c9:191b:e4f:324a)
19:39:12 humasect joins (~humasect@dyn-192-249-132-90.nexicom.net)
19:39:58 califax joins (~califax@user/califx)
19:41:56 <juri_> as a C people... C people can be converted. ex-linux-kernel ex-apache now-fulltime-haskeller. there is life after understanding floating point in binary operations.
19:43:54 × humasect quits (~humasect@dyn-192-249-132-90.nexicom.net) (Ping timeout: 260 seconds)
19:46:46 <tomsmeding> (my first serious programming language was C)
19:47:37 <tomsmeding> (but I guess I didn't get far enough in that to really count as a "C people")
19:48:13 merijn joins (~merijn@host-vr.cgnat-g.v4.dfn.nl)
19:48:25 <tomsmeding> having a solid understanding of how a processor works, and how compilers work for languages that are less distant from said processor's design (like C), is honestly a very good basis to start learning haskell from
19:48:58 <tomsmeding> you're less fazed by why some things are magically faster than others, because it's generally not magic at all
19:49:15 karenw joins (~karenw@user/karenw)
19:49:22 × tromp quits (~textual@2001:1c00:3487:1b00:40c9:191b:e4f:324a) (Quit: My iMac has gone to sleep. ZZZzzz…)
19:49:51 <tomsmeding> and it's rather evident how laziness, while useful for some design patterns, is not the basis of a high-performance algorithm
19:50:23 tomsmeding thinks of the cute pattern of doing dynamic programming with laziness, by letting the dynamic-programming array be self-referential
19:51:04 × tomboy65 quits (~tomboy64@user/tomboy64) (Read error: Connection reset by peer)
19:51:10 tomboy64 joins (~tomboy64@user/tomboy64)
19:51:43 × gawen quits (~gawen@user/gawen) (Quit: cya)
19:52:51 <geekosaur> I spent a couple decades writing C
19:52:55 × merijn quits (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 244 seconds)
19:53:43 <Franciman> geekosaur: how did you switch to haskell?
19:55:30 × wickedjargon quits (~user@207.194.126.29) (Remote host closed the connection)
19:57:30 <geekosaur> in a slightly roundabout way: I discovered SML/NJ while working at Carnegie Mellon, then Haskell shortly afterward, then Spencer Janssen asked about Haskell folks who knew enough X11 to make xmonad work right. And while all I;d really done of Haskell at that point was the "Gentle Introduction" (not a lot of other Haskell resources around those days) I know X11 pretty well
19:57:58 <geekosaur> So I learned practical Haskell by reading the xmonad code base while teaching Spencer how to do ICCCM right 🙂
19:58:32 <tomsmeding> that kind of mutual teaching relationship is really cool
19:58:50 tromp joins (~textual@2001:1c00:3487:1b00:40c9:191b:e4f:324a)
19:59:00 <geekosaur> oh, also Don Stewart
19:59:08 <geekosaur> so I had a couple of good mentors
19:59:12 gawen joins (~gawen@user/gawen)
20:01:46 <geekosaur> (The ICCCM describes the client side of the specification, but at the time about the only documentation for the server/window manager side of it was the twm source code)
20:02:01 pavonia joins (~user@user/siracusa)
20:03:08 trickard_ is now known as trickard
20:04:03 merijn joins (~merijn@host-vr.cgnat-g.v4.dfn.nl)
20:08:43 × merijn quits (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 246 seconds)
20:10:03 <EvanR> tomsmeding, meanwhile speculative execution is like anti-laziness
20:10:18 <EvanR> execute everything, more than you thought you needed to
20:10:37 <monochrom> My point is more about the size of the 3rd-order-niche intersection of 3 niches: C, Haskell, being sufficiently incompetent such that normal Haskell books are not enough, it has to be "haskell for c programmers" spoonfeeding.
20:10:37 <EvanR> even if it's provably unnecessary
20:10:41 × Googulator quits (~Googulato@85-238-68-117.pool.digikabel.hu) (Quit: Client closed)
20:10:44 Googulator95 joins (~Googulato@85-238-68-117.pool.digikabel.hu)
20:11:13 <tomsmeding> :D
20:12:50 <Rembane> That sounds like hard realtime systems
20:14:19 <absentia> > I know X11 pretty well
20:14:21 <absentia> holy shit...
20:14:22 <lambdabot> Data constructor not in scope: I :: t0 -> t1 -> t2 -> t3 -> tVariable not in...
20:14:29 <absentia> oops
20:16:58 × gmg quits (~user@user/gehmehgeh) (Quit: Leaving)
20:17:41 merijn joins (~merijn@host-vr.cgnat-g.v4.dfn.nl)
20:22:16 × merijn quits (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 244 seconds)
20:30:20 causal joins (~eric@50.46.156.145)
20:31:03 vanishingideal joins (~vanishing@user/vanishingideal)
20:33:13 merijn joins (~merijn@host-vr.cgnat-g.v4.dfn.nl)
20:34:49 jmcantrell_ joins (~weechat@user/jmcantrell)
20:38:09 × merijn quits (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 250 seconds)
20:49:02 merijn joins (~merijn@host-vr.cgnat-g.v4.dfn.nl)
20:51:43 × wbooze quits (~wbooze@cgn-195-14-217-157.nc.de) (Ping timeout: 244 seconds)
20:51:54 polykernel joins (~polykerne@user/polykernel)
20:53:35 × merijn quits (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 240 seconds)
20:55:11 × Miroboru quits (~myrvoll@84.215.250.50) (Quit: Lost terminal)
20:57:13 merijn joins (~merijn@host-vr.cgnat-g.v4.dfn.nl)
20:58:12 polykernel_ joins (~polykerne@user/polykernel)
21:00:35 × polykernel quits (~polykerne@user/polykernel) (Ping timeout: 240 seconds)
21:00:35 polykernel_ is now known as polykernel
21:01:44 × merijn quits (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 240 seconds)
21:12:28 Anarchos joins (~Anarchos@91-161-254-16.subs.proxad.net)
21:12:55 merijn joins (~merijn@host-vr.cgnat-g.v4.dfn.nl)
21:17:33 × merijn quits (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 244 seconds)
21:18:43 merijn joins (~merijn@host-vr.cgnat-g.v4.dfn.nl)
21:21:03 <haskellbridge> <sm> geekosaur nice!
21:21:13 <haskellbridge> <sm> I wonder what you were making in the C years
21:22:27 <geekosaur> database apps in the early years, then mostly porting and maintenance, then OpenAFS kernel module work
21:24:07 <geekosaur> that said, I was doing more than C the whole time, ranging from COBOL(!) and various "4GL" database languages to Perl and a bit of Tcl/Tk (I think I'm still credited for contributions to Exmh)
21:24:48 <geekosaur> JNOS/Linux (major porting effort from Windows, but a fairly limited audience: amateur radio TCP/IP)
21:25:59 × merijn quits (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 260 seconds)
21:26:51 <geekosaur> if there are any older U Manchester folks in channel: I wrote UnAxcess. many of the internet refs have it wrong, claiming I was at various universities that in fact got it from the old Usenet net.sources newsgroup
21:30:12 ouilemur joins (~jgmerritt@user/ouilemur)
21:36:44 merijn joins (~merijn@host-vr.cgnat-g.v4.dfn.nl)
21:40:55 × merijn quits (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 240 seconds)
21:47:10 <haskellbridge> <loonycyborg> Did you do anything wayland in addition to X11?
21:49:23 <haskellbridge> <sm> cool cool
21:52:08 merijn joins (~merijn@host-vr.cgnat-g.v4.dfn.nl)
21:55:54 lambda_gibbon joins (~lambda_gi@2603:7080:ee00:37d8:11e:138e:d914:c117)
21:56:44 × absentia quits (~henricus@user/institor) (K-Lined)
21:56:55 × merijn quits (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 240 seconds)
21:57:16 <geekosaur> nope
21:57:26 × takuan quits (~takuan@d8D86B9E9.access.telenet.be) (Remote host closed the connection)
21:57:49 <geekosaur> I, uh, disagree with a number of decisions they made
21:58:37 <geekosaur> not that I would at all recommend sticking with how X11 works; it was suitable for 1980s engineering workstations but not at all so for modern video hardware
21:59:30 × dhil quits (~dhil@5.151.29.141) (Ping timeout: 245 seconds)
22:00:12 <geekosaur> and X11 has a lot of horrid hacks to make it semifunctional on modern video
22:07:34 <haskellbridge> <loonycyborg> Is there a modern window system you're happier with than with wayland?
22:07:55 merijn joins (~merijn@host-vr.cgnat-g.v4.dfn.nl)
22:08:37 <geekosaur> Apple's ore Graphics is pretty good, at least from the client end and ignoring that it's closed source
22:08:44 <geekosaur> *Core
22:09:29 <geekosaur> (and that it's Apple)
22:11:41 <geekosaur> Wayland devs made some decisions about global event handling that are similar to IBM's Workplace Shell. And have thereby run into several of the same failure modes. Those who refuse to learn from history are doomed to repeat it.
22:12:50 × merijn quits (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 244 seconds)
22:12:57 × trickard quits (~trickard@cpe-85-98-47-163.wireline.com.au) (Read error: Connection reset by peer)
22:13:10 trickard_ joins (~trickard@cpe-85-98-47-163.wireline.com.au)
22:18:39 <haskellbridge> <loonycyborg> I don't know much about those details but.. In general no technical decision should be considered in vacuum
22:19:41 merijn joins (~merijn@host-vr.cgnat-g.v4.dfn.nl)
22:20:45 <haskellbridge> <loonycyborg> Like any strategy that fails in one place is good fit for another.
22:24:15 × merijn quits (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 240 seconds)
22:24:26 × gentauro quits (~gentauro@user/gentauro) (Quit: leaving)
22:24:59 × tromp quits (~textual@2001:1c00:3487:1b00:40c9:191b:e4f:324a) (Quit: My iMac has gone to sleep. ZZZzzz…)
22:25:04 × trickard_ quits (~trickard@cpe-85-98-47-163.wireline.com.au) (Read error: Connection reset by peer)
22:25:18 trickard_ joins (~trickard@cpe-85-98-47-163.wireline.com.au)
22:26:39 gentauro joins (~gentauro@user/gentauro)
22:28:36 tcard_ joins (~tcard@2400:4051:5801:7500:cf17:befc:ff82:5303)
22:29:05 × tcard quits (~tcard@2400:4051:5801:7500:cf17:befc:ff82:5303) (Read error: Connection reset by peer)
22:29:47 tromp joins (~textual@2001:1c00:3487:1b00:40c9:191b:e4f:324a)
22:35:29 merijn joins (~merijn@host-vr.cgnat-g.v4.dfn.nl)
22:38:04 confusedalex joins (~confuseda@user/confusedalex)
22:40:07 × merijn quits (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 240 seconds)
22:42:00 trickard_ is now known as trickard
22:46:07 × polykernel quits (~polykerne@user/polykernel) (Ping timeout: 255 seconds)
22:46:31 polykernel joins (~polykerne@user/polykernel)
22:50:55 × trickard quits (~trickard@cpe-85-98-47-163.wireline.com.au) (Ping timeout: 240 seconds)
22:51:16 merijn joins (~merijn@host-vr.cgnat-g.v4.dfn.nl)
22:51:23 trickard_ joins (~trickard@cpe-85-98-47-163.wireline.com.au)
22:51:30 × michalz quits (~michalz@185.246.207.221) (Remote host closed the connection)
22:56:04 × merijn quits (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 256 seconds)
22:57:49 × karenw quits (~karenw@user/karenw) (Ping timeout: 255 seconds)
23:00:07 × __monty__ quits (~toonn@user/toonn) (Quit: leaving)
23:00:29 × lambda_gibbon quits (~lambda_gi@2603:7080:ee00:37d8:11e:138e:d914:c117) (Ping timeout: 260 seconds)
23:03:23 gorignak joins (~gorignak@user/gorignak)
23:04:30 × vanishingideal quits (~vanishing@user/vanishingideal) (Ping timeout: 245 seconds)
23:06:19 vanishingideal joins (~vanishing@user/vanishingideal)
23:07:03 merijn joins (~merijn@host-vr.cgnat-g.v4.dfn.nl)
23:10:33 trickard_ is now known as trickard
23:11:44 × merijn quits (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 244 seconds)
23:12:02 × target_i quits (~target_i@user/target-i/x-6023099) (Quit: leaving)
23:19:44 Miroboru joins (~myrvoll@84.215.250.50)
23:22:50 merijn joins (~merijn@host-vr.cgnat-g.v4.dfn.nl)
23:24:46 × trickard quits (~trickard@cpe-85-98-47-163.wireline.com.au) (Read error: Connection reset by peer)
23:24:59 trickard_ joins (~trickard@cpe-85-98-47-163.wireline.com.au)
23:26:56 × tromp quits (~textual@2001:1c00:3487:1b00:40c9:191b:e4f:324a) (Quit: My iMac has gone to sleep. ZZZzzz…)
23:27:51 × merijn quits (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 244 seconds)
23:38:38 merijn joins (~merijn@host-vr.cgnat-g.v4.dfn.nl)
23:41:14 <iqubic> Is there a list of Haskell code style things I should know about, like how many spaces to indent things and what have you?
23:43:04 humasect joins (~humasect@dyn-192-249-132-90.nexicom.net)
23:43:20 × merijn quits (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 240 seconds)
23:43:44 trickard_ is now known as trickard
23:43:57 bitdex joins (~bitdex@gateway/tor-sasl/bitdex)
23:44:30 × jmcantrell_ quits (~weechat@user/jmcantrell) (Ping timeout: 245 seconds)
23:47:58 peterbecich joins (~Thunderbi@172.222.148.214)
23:48:13 × humasect quits (~humasect@dyn-192-249-132-90.nexicom.net) (Ping timeout: 255 seconds)
23:50:22 <geekosaur> in terms of style, the closest thing to a standard is what various code formatters do — but ormolu, fourmolu, stylish-haskell, brittany (now defunct, I think), etc. all have different opinions
23:52:27 <iqubic> Is there anywhere I can go to see what they all do? Is there a comparison anywhere?
23:54:22 merijn joins (~merijn@host-vr.cgnat-g.v4.dfn.nl)
23:58:57 <EvanR> I looked at ormolu's output and it didn't match my expectations of style
23:59:01 × merijn quits (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 246 seconds)
23:59:14 <iqubic> EvanR: What do you use?
23:59:31 <EvanR> nothing
23:59:55 <iqubic> I see.

All times are in UTC on 2025-12-02.