Home liberachat/#haskell: Logs Calendar

Logs on 2022-03-26 (liberachat/#haskell)

00:00:53 <Sqaure> geekosaur, thanks. ill look that up
00:01:03 <toulene> what is the most popular way to learn haskell?
00:01:22 <toulene> sorry for the annoying question
00:01:42 × lavaman quits (~lavaman@c-174-63-118-52.hsd1.ma.comcast.net) (Remote host closed the connection)
00:01:55 lavaman joins (~lavaman@c-174-63-118-52.hsd1.ma.comcast.net)
00:03:28 <sm> toulene: there are a lot of ways to answer that :)
00:03:37 × Akiva quits (~Akiva@user/Akiva) (Ping timeout: 240 seconds)
00:05:27 ober_ joins (~ober@c-73-68-74-41.hsd1.ma.comcast.net)
00:05:43 × aliosablack quits (~chomwitt@94.66.60.177) (Ping timeout: 256 seconds)
00:07:59 × ober quits (~ober@c-73-68-74-41.hsd1.ma.comcast.net) (Ping timeout: 260 seconds)
00:09:59 ober__ joins (~ober@c-73-68-74-41.hsd1.ma.comcast.net)
00:11:24 × pnotequalnp quits (~kevin@user/pnotequalnp) (Ping timeout: 240 seconds)
00:11:56 szkl joins (uid110435@id-110435.uxbridge.irccloud.com)
00:12:40 × ober_ quits (~ober@c-73-68-74-41.hsd1.ma.comcast.net) (Ping timeout: 260 seconds)
00:14:31 × waleee quits (~waleee@2001:9b0:213:7200:cc36:a556:b1e8:b340) (Ping timeout: 260 seconds)
00:15:31 waleee joins (~waleee@2001:9b0:213:7200:cc36:a556:b1e8:b340)
00:15:36 jakalx parts (~jakalx@base.jakalx.net) (Error from remote client)
00:16:38 <toulene> i know there are a lot of ways hence i am undecided
00:16:46 <toulene> hard to choose
00:18:36 × sammelweis quits (~quassel@2601:401:8200:2d4c:bd9:d04c:7f69:eb10) (Ping timeout: 240 seconds)
00:19:27 ober_ joins (~ober@c-73-68-74-41.hsd1.ma.comcast.net)
00:19:35 sammelweis joins (~quassel@2601:401:8200:2d4c:bd9:d04c:7f69:eb10)
00:22:17 × Tuplanolla quits (~Tuplanoll@91-159-69-98.elisa-laajakaista.fi) (Quit: Leaving.)
00:22:28 <hololeap> choose a beginners book and once you think you understand the syntax well enough, start using haskell to get through some programming challenges e.g. advent of code, hackerrank, etc.
00:22:32 × ober__ quits (~ober@c-73-68-74-41.hsd1.ma.comcast.net) (Ping timeout: 272 seconds)
00:23:42 <hololeap> I also recommend using haskell-language-server for your editor because that will point out errors as you code in realtime, which might help the learning process
00:28:29 ober__ joins (~ober@c-73-68-74-41.hsd1.ma.comcast.net)
00:28:31 × waleee quits (~waleee@2001:9b0:213:7200:cc36:a556:b1e8:b340) (Ping timeout: 260 seconds)
00:29:31 waleee joins (~waleee@2001:9b0:213:7200:cc36:a556:b1e8:b340)
00:31:19 × ober_ quits (~ober@c-73-68-74-41.hsd1.ma.comcast.net) (Ping timeout: 260 seconds)
00:31:54 × gurkenglas quits (~gurkengla@dslb-178-012-018-212.178.012.pools.vodafone-ip.de) (Ping timeout: 252 seconds)
00:34:36 × waleee quits (~waleee@2001:9b0:213:7200:cc36:a556:b1e8:b340) (Ping timeout: 240 seconds)
00:35:50 waleee joins (~waleee@2001:9b0:213:7200:cc36:a556:b1e8:b340)
00:37:27 ober_ joins (~ober@c-73-68-74-41.hsd1.ma.comcast.net)
00:37:49 × lavaman quits (~lavaman@c-174-63-118-52.hsd1.ma.comcast.net) (Remote host closed the connection)
00:40:16 × ober__ quits (~ober@c-73-68-74-41.hsd1.ma.comcast.net) (Ping timeout: 272 seconds)
00:41:17 lainon joins (~lainon@2601:7c0:c500:4d20::2ff6)
00:41:21 × Guest8730 quits (~lainon@2601:7c0:c500:4d20::2ff6) (Quit: Leaving)
00:41:28 ober__ joins (~ober@c-73-68-74-41.hsd1.ma.comcast.net)
00:42:15 × nicbk quits (~nicbk@user/nicbk) (Ping timeout: 240 seconds)
00:43:55 × crazazy quits (~user@130.89.171.62) (Ping timeout: 260 seconds)
00:44:15 × ober_ quits (~ober@c-73-68-74-41.hsd1.ma.comcast.net) (Ping timeout: 256 seconds)
00:44:30 × lbseale quits (~ep1ctetus@user/ep1ctetus) (Quit: Leaving)
00:47:17 × waleee quits (~waleee@2001:9b0:213:7200:cc36:a556:b1e8:b340) (Ping timeout: 240 seconds)
00:48:40 waleee joins (~waleee@2001:9b0:213:7200:cc36:a556:b1e8:b340)
00:49:34 × tcard quits (~tcard@p2878075-ipngn18701hodogaya.kanagawa.ocn.ne.jp) (Quit: Leaving)
00:53:37 × alp quits (~alp@user/alp) (Ping timeout: 240 seconds)
00:53:47 <aviladev[m]> <toulene> "i know there are a lot of ways..." <- I started from the Learn You A Haskell book, it's being great so far.
00:54:14 tcard joins (~tcard@p2878075-ipngn18701hodogaya.kanagawa.ocn.ne.jp)
00:55:28 × ober__ quits (~ober@c-73-68-74-41.hsd1.ma.comcast.net) (Quit: Leaving)
01:00:37 merijn joins (~merijn@c-001-001-001.client.esciencecenter.eduvpn.nl)
01:03:23 × Pickchea quits (~private@user/pickchea) (Quit: Leaving)
01:04:57 jakalx joins (~jakalx@base.jakalx.net)
01:05:04 harveypwca joins (~harveypwc@2601:246:c180:a570:3828:d8:e523:3f67)
01:08:13 × geranim0 quits (~geranim0@modemcable242.171-178-173.mc.videotron.ca) (Remote host closed the connection)
01:08:32 cosimone joins (~user@2001:b07:ae5:db26:c24a:d20:4d91:1e20)
01:09:27 × ProfSimm quits (~ProfSimm@87.227.196.109) (Remote host closed the connection)
01:11:21 × albet70 quits (~xxx@2400:8902::f03c:92ff:fe60:98d8) (Remote host closed the connection)
01:12:57 × mvk quits (~mvk@2607:fea8:5cc3:7e00::7980) (Ping timeout: 240 seconds)
01:13:24 × waleee quits (~waleee@2001:9b0:213:7200:cc36:a556:b1e8:b340) (Ping timeout: 240 seconds)
01:14:39 waleee joins (~waleee@2001:9b0:213:7200:cc36:a556:b1e8:b340)
01:17:28 albet70 joins (~xxx@2400:8902::f03c:92ff:fe60:98d8)
01:19:52 × Unicorn_Princess quits (~Unicorn_P@93-103-228-248.dynamic.t-2.net) (Read error: Connection reset by peer)
01:20:10 Unicorn_Princess joins (~Unicorn_P@93-103-228-248.dynamic.t-2.net)
01:25:43 razetime joins (~quassel@117.254.34.132)
01:26:08 <abastro[m]> I heard that while LYAH looks childish in its cover, its explanation, while easier than alternatives, is still quite hard to grasp. Is this true?
01:26:18 <Sqaure> What would be bad with using GADTs like this for a traceable avaluation? https://paste.tomsmeding.com/6FKxcRh8
01:27:06 <Sqaure> will it break down for types with many parameters?
01:33:00 <Sqaure> easier to read : https://paste.tomsmeding.com/zlPScFMe
01:35:15 × merijn quits (~merijn@c-001-001-001.client.esciencecenter.eduvpn.nl) (Ping timeout: 256 seconds)
01:38:31 × zyklotomic quits (~ethan@res380d-128-61-85-225.res.gatech.edu) (Ping timeout: 260 seconds)
01:40:33 zyklotomic joins (~ethan@r4-128-61-90-5.res.gatech.edu)
01:42:21 lavaman joins (~lavaman@c-174-63-118-52.hsd1.ma.comcast.net)
01:42:43 × waleee quits (~waleee@2001:9b0:213:7200:cc36:a556:b1e8:b340) (Ping timeout: 260 seconds)
01:43:34 waleee joins (~waleee@2001:9b0:213:7200:cc36:a556:b1e8:b340)
01:43:36 × vglfr quits (~vglfr@46.96.132.108) (Ping timeout: 272 seconds)
01:52:41 deadmarshal_ joins (~deadmarsh@95.38.113.36)
01:56:57 × deadmarshal_ quits (~deadmarsh@95.38.113.36) (Ping timeout: 240 seconds)
02:00:51 × lavaman quits (~lavaman@c-174-63-118-52.hsd1.ma.comcast.net) (Remote host closed the connection)
02:01:03 lavaman joins (~lavaman@c-174-63-118-52.hsd1.ma.comcast.net)
02:08:49 chenqisu1 joins (~chenqisu1@183.217.201.88)
02:09:57 nicbk joins (~nicbk@user/nicbk)
02:10:47 [_] joins (~itchyjunk@user/itchyjunk/x-7353470)
02:11:11 pnotequalnp joins (~kevin@user/pnotequalnp)
02:11:31 Akiva joins (~Akiva@user/Akiva)
02:13:29 vglfr joins (~vglfr@46.96.132.108)
02:14:17 × [itchyjunk] quits (~itchyjunk@user/itchyjunk/x-7353470) (Ping timeout: 240 seconds)
02:31:29 justsomeguy joins (~justsomeg@user/justsomeguy)
02:36:17 × lainon quits (~lainon@2601:7c0:c500:4d20::2ff6) (Remote host closed the connection)
02:42:11 × jao quits (~jao@cpc103048-sgyl39-2-0-cust502.18-2.cable.virginm.net) (Remote host closed the connection)
02:46:36 × waleee quits (~waleee@2001:9b0:213:7200:cc36:a556:b1e8:b340) (Ping timeout: 240 seconds)
02:47:17 × mon_aaraj quits (~MonAaraj@user/mon-aaraj/x-4416475) (Ping timeout: 240 seconds)
02:47:43 jao joins (~jao@cpc103048-sgyl39-2-0-cust502.18-2.cable.virginm.net)
02:47:51 waleee joins (~waleee@2001:9b0:213:7200:cc36:a556:b1e8:b340)
02:49:38 mon_aaraj joins (~MonAaraj@user/mon-aaraj/x-4416475)
02:49:55 × nicbk quits (~nicbk@user/nicbk) (Ping timeout: 240 seconds)
02:52:53 × auri quits (~quassel@fsf/member/auri) (Quit: auri)
02:53:28 auri joins (~quassel@fsf/member/auri)
02:53:35 nicbk joins (~nicbk@user/nicbk)
02:54:04 × auri quits (~quassel@fsf/member/auri) (Client Quit)
02:57:35 [_] is now known as [itchyjunk]
02:58:10 × pretty_dumm_guy quits (trottel@gateway/vpn/protonvpn/prettydummguy/x-88029655) (Quit: WeeChat 3.4.1)
02:58:36 × vglfr quits (~vglfr@46.96.132.108) (Ping timeout: 240 seconds)
03:05:13 <mon_aaraj> I've been told LYAH isn't as good as the purple book, but I am not really quite sure
03:10:55 × justsomeguy quits (~justsomeg@user/justsomeguy) (Quit: WeeChat 3.4)
03:19:15 × lavaman quits (~lavaman@c-174-63-118-52.hsd1.ma.comcast.net) (Remote host closed the connection)
03:25:01 Macbethwin joins (~chargen@8.21.8.240)
03:26:34 <sm> toulene: would you like to read online ? read a paper book ? watch video ? listen to audio ? get free coaching in chat ? find a mentor ? pay for professional training ? get on-the-job training ?
03:27:09 yauhsien joins (~yauhsien@61-231-25-68.dynamic-ip.hinet.net)
03:27:27 × Chargen quits (~chargen@D964062A.static.ziggozakelijk.nl) (Ping timeout: 256 seconds)
03:27:57 <sm> or, learn by self-study ? discussion ? watching ? doing ?
03:28:40 <sm> I know you asked "most popular", if that's really what you want to know I'll attempt it :)
03:31:07 merijn joins (~merijn@c-001-001-001.client.esciencecenter.eduvpn.nl)
03:39:23 × jlamothe quits (~jlamothe@198.251.61.229) (Ping timeout: 260 seconds)
03:40:58 jlamothe joins (~jlamothe@198.251.61.229)
03:41:15 × waleee quits (~waleee@2001:9b0:213:7200:cc36:a556:b1e8:b340) (Ping timeout: 260 seconds)
03:42:13 waleee joins (~waleee@2001:9b0:213:7200:cc36:a556:b1e8:b340)
03:45:55 × Macbethwin quits (~chargen@8.21.8.240) (Ping timeout: 260 seconds)
03:54:09 dsrt^ joins (~dsrt@96-91-136-49-static.hfc.comcastbusiness.net)
03:58:31 × mon_aaraj quits (~MonAaraj@user/mon-aaraj/x-4416475) (Ping timeout: 260 seconds)
04:00:21 mon_aaraj joins (~MonAaraj@user/mon-aaraj/x-4416475)
04:00:22 × yauhsien quits (~yauhsien@61-231-25-68.dynamic-ip.hinet.net) (Read error: Connection reset by peer)
04:00:55 yauhsien joins (~yauhsien@61-231-25-68.dynamic-ip.hinet.net)
04:01:50 deadmarshal_ joins (~deadmarsh@95.38.113.36)
04:02:33 × boxscape_ quits (~boxscape_@p4ff0b60b.dip0.t-ipconnect.de) (Ping timeout: 252 seconds)
04:05:31 × merijn quits (~merijn@c-001-001-001.client.esciencecenter.eduvpn.nl) (Ping timeout: 260 seconds)
04:07:22 × Akiva quits (~Akiva@user/Akiva) (Ping timeout: 272 seconds)
04:08:05 <abastro[m]> I think I heard of a good monoid for computing `group`, but forgot it
04:08:45 <abastro[m]> By `group`, I mean something like [a, b, b, c, c, c, d] => [(a, 1), (b, 2), (c, 3), (d, 1)]
04:08:59 <abastro[m]> What is a good monoid for such a calculation?
04:10:51 × waleee quits (~waleee@2001:9b0:213:7200:cc36:a556:b1e8:b340) (Ping timeout: 256 seconds)
04:11:54 waleee joins (~waleee@2001:9b0:213:7200:cc36:a556:b1e8:b340)
04:18:58 × Natch quits (~natch@c-67bae255.014-297-73746f25.bbcust.telenor.se) (Remote host closed the connection)
04:21:26 × yauhsien quits (~yauhsien@61-231-25-68.dynamic-ip.hinet.net) (Remote host closed the connection)
04:21:44 vglfr joins (~vglfr@46.96.132.108)
04:22:07 yauhsien joins (~yauhsien@61-231-25-68.dynamic-ip.hinet.net)
04:24:21 Natch joins (~natch@c-67bae255.014-297-73746f25.bbcust.telenor.se)
04:30:55 × nicbk quits (~nicbk@user/nicbk) (Ping timeout: 240 seconds)
04:32:46 × yauhsien quits (~yauhsien@61-231-25-68.dynamic-ip.hinet.net) (Remote host closed the connection)
04:35:21 yauhsien joins (~yauhsien@61-231-25-68.dynamic-ip.hinet.net)
04:40:03 × yauhsien quits (~yauhsien@61-231-25-68.dynamic-ip.hinet.net) (Ping timeout: 260 seconds)
04:40:35 merijn joins (~merijn@c-001-001-001.client.esciencecenter.eduvpn.nl)
04:40:53 × waleee quits (~waleee@2001:9b0:213:7200:cc36:a556:b1e8:b340) (Ping timeout: 256 seconds)
04:41:57 waleee joins (~waleee@2001:9b0:213:7200:cc36:a556:b1e8:b340)
04:45:22 × merijn quits (~merijn@c-001-001-001.client.esciencecenter.eduvpn.nl) (Ping timeout: 272 seconds)
04:47:57 × pnotequalnp quits (~kevin@user/pnotequalnp) (Ping timeout: 240 seconds)
04:49:17 × vglfr quits (~vglfr@46.96.132.108) (Ping timeout: 240 seconds)
05:04:16 vysn joins (~vysn@user/vysn)
05:04:22 × deadmarshal_ quits (~deadmarsh@95.38.113.36) (Ping timeout: 272 seconds)
05:11:07 yauhsien joins (~yauhsien@61-231-25-68.dynamic-ip.hinet.net)
05:16:24 × jao quits (~jao@cpc103048-sgyl39-2-0-cust502.18-2.cable.virginm.net) (Ping timeout: 272 seconds)
05:22:42 × zmt00 quits (~zmt00@user/zmt00) (Quit: Leaving)
05:25:17 zmt00 joins (~zmt00@user/zmt00)
05:28:16 mbuf joins (~Shakthi@171.61.236.231)
05:28:37 × waleee quits (~waleee@2001:9b0:213:7200:cc36:a556:b1e8:b340) (Ping timeout: 240 seconds)
05:29:48 waleee joins (~waleee@2001:9b0:213:7200:cc36:a556:b1e8:b340)
05:32:06 mikoto-chan joins (~mikoto-ch@213.177.151.239)
05:37:51 cdman joins (~dcm@user/dmc/x-4369397)
05:39:24 × waleee quits (~waleee@2001:9b0:213:7200:cc36:a556:b1e8:b340) (Ping timeout: 240 seconds)
05:40:26 waleee joins (~waleee@2001:9b0:213:7200:cc36:a556:b1e8:b340)
05:42:13 × yauhsien quits (~yauhsien@61-231-25-68.dynamic-ip.hinet.net) (Read error: Connection reset by peer)
05:42:47 yauhsien joins (~yauhsien@61-231-25-68.dynamic-ip.hinet.net)
05:43:56 × yauhsien quits (~yauhsien@61-231-25-68.dynamic-ip.hinet.net) (Remote host closed the connection)
05:44:24 yauhsien joins (~yauhsien@61-231-25-68.dynamic-ip.hinet.net)
05:44:31 × Unicorn_Princess quits (~Unicorn_P@93-103-228-248.dynamic.t-2.net) (Remote host closed the connection)
05:48:08 gurkenglas joins (~gurkengla@dslb-178-012-018-212.178.012.pools.vodafone-ip.de)
06:06:51 × gurkenglas quits (~gurkengla@dslb-178-012-018-212.178.012.pools.vodafone-ip.de) (Ping timeout: 260 seconds)
06:06:55 bitmapper joins (uid464869@id-464869.lymington.irccloud.com)
06:28:54 × yauhsien quits (~yauhsien@61-231-25-68.dynamic-ip.hinet.net) (Remote host closed the connection)
06:31:25 yauhsien joins (~yauhsien@61-231-25-68.dynamic-ip.hinet.net)
06:35:33 takuan joins (~takuan@178-116-218-225.access.telenet.be)
06:35:37 × yauhsien quits (~yauhsien@61-231-25-68.dynamic-ip.hinet.net) (Ping timeout: 240 seconds)
06:41:17 merijn joins (~merijn@c-001-001-001.client.esciencecenter.eduvpn.nl)
06:46:37 × waleee quits (~waleee@2001:9b0:213:7200:cc36:a556:b1e8:b340) (Ping timeout: 240 seconds)
06:48:00 waleee joins (~waleee@2001:9b0:213:7200:cc36:a556:b1e8:b340)
06:52:02 × cdman quits (~dcm@user/dmc/x-4369397) (Ping timeout: 272 seconds)
06:59:41 × zebrag quits (~chris@user/zebrag) (Quit: Konversation terminated!)
07:09:35 × bitdex quits (~bitdex@gateway/tor-sasl/bitdex) (Ping timeout: 240 seconds)
07:14:45 × troydm quits (~troydm@host-176-37-124-197.b025.la.net.ua) (Ping timeout: 250 seconds)
07:16:02 yauhsien joins (~yauhsien@61-231-25-68.dynamic-ip.hinet.net)
07:16:06 × merijn quits (~merijn@c-001-001-001.client.esciencecenter.eduvpn.nl) (Ping timeout: 272 seconds)
07:18:33 acidjnk joins (~acidjnk@p200300d0c7049f68816ae2824fdd5aac.dip0.t-ipconnect.de)
07:19:00 cdman joins (~dcm@user/dmc/x-4369397)
07:20:21 × yauhsien quits (~yauhsien@61-231-25-68.dynamic-ip.hinet.net) (Ping timeout: 256 seconds)
07:25:43 × razetime quits (~quassel@117.254.34.132) (Ping timeout: 260 seconds)
07:28:27 vglfr joins (~vglfr@46.96.132.108)
07:29:35 <jackdk> abastro[m]: `MonoidalMap k (Sum v)`, using `Sum` from `Data.Monoid` and `MonoidalMap` from `monoidal-containers`
07:30:16 _dmc_ joins (~dcm@27.2.216.148)
07:30:16 <abastro[m]> Oh my, I should have said that
07:30:20 <abastro[m]> It is more like group
07:30:33 × cdman quits (~dcm@user/dmc/x-4369397) (Ping timeout: 256 seconds)
07:30:47 <abastro[m]> So, [a,a,a,b,a] => [(a,3), (b,1), (a,1)]
07:32:30 × eggplantade quits (~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net) (Remote host closed the connection)
07:37:38 aliosablack joins (~chomwitt@2a02:587:dc18:da00:eb71:868b:3400:4636)
07:38:16 jakalx parts (~jakalx@base.jakalx.net) (Error from remote client)
07:40:33 × _dmc_ quits (~dcm@27.2.216.148) (Quit: Leaving)
07:40:51 cdman joins (~dcm@user/dmc/x-4369397)
07:42:07 Quenty joins (uid14882@id-14882.helmsley.irccloud.com)
07:47:19 yauhsien joins (~yauhsien@61-231-25-68.dynamic-ip.hinet.net)
07:48:04 jakalx joins (~jakalx@base.jakalx.net)
07:49:58 bitdex joins (~bitdex@gateway/tor-sasl/bitdex)
07:50:55 × zyklotomic quits (~ethan@r4-128-61-90-5.res.gatech.edu) (Ping timeout: 260 seconds)
07:52:52 zyklotomic joins (~ethan@res380d-128-61-81-155.res.gatech.edu)
07:53:41 × [itchyjunk] quits (~itchyjunk@user/itchyjunk/x-7353470) (Remote host closed the connection)
07:56:38 razetime joins (~quassel@117.254.35.76)
07:56:45 × szkl quits (uid110435@id-110435.uxbridge.irccloud.com) (Quit: Connection closed for inactivity)
07:57:37 × stiell quits (~stiell@gateway/tor-sasl/stiell) (Remote host closed the connection)
07:57:59 stiell joins (~stiell@gateway/tor-sasl/stiell)
08:01:23 × img quits (~img@user/img) (Quit: ZNC 1.8.2 - https://znc.in)
08:01:39 img joins (~img@user/img)
08:02:05 gehmehgeh joins (~user@user/gehmehgeh)
08:02:35 × bitdex quits (~bitdex@gateway/tor-sasl/bitdex) (Ping timeout: 240 seconds)
08:18:07 × tzh quits (~tzh@c-24-21-73-154.hsd1.wa.comcast.net) (Quit: zzz)
08:24:42 Pickchea joins (~private@user/pickchea)
08:30:00 deadmarshal_ joins (~deadmarsh@95.38.113.36)
08:32:37 _ht joins (~quassel@231-169-21-31.ftth.glasoperator.nl)
08:33:13 eggplantade joins (~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net)
08:37:17 × eggplantade quits (~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net) (Ping timeout: 240 seconds)
08:44:15 × yauhsien quits (~yauhsien@61-231-25-68.dynamic-ip.hinet.net) (Remote host closed the connection)
08:45:45 × shailangsa quits (~shailangs@host165-120-169-51.range165-120.btcentralplus.com) (Ping timeout: 268 seconds)
08:49:35 namkeleser joins (~namkelese@101.175.155.55)
08:54:16 yauhsien joins (~yauhsien@61-231-25-68.dynamic-ip.hinet.net)
08:54:23 × vglfr quits (~vglfr@46.96.132.108) (Ping timeout: 260 seconds)
08:54:52 vglfr joins (~vglfr@37.73.58.115)
08:59:57 × deadmarshal_ quits (~deadmarsh@95.38.113.36) (Ping timeout: 240 seconds)
09:00:14 × phuegrvs[m] quits (~phuegrvsm@2001:470:69fc:105::1:65e4) (Quit: You have been kicked for being idle)
09:00:24 alp joins (~alp@user/alp)
09:00:24 × Morrow[m] quits (~morrowmma@2001:470:69fc:105::1d0) (Quit: You have been kicked for being idle)
09:00:54 karim joins (~karim@102.40.222.144)
09:01:39 jgeerds joins (~jgeerds@55d4548e.access.ecotel.net)
09:05:55 × chexum quits (~quassel@gateway/tor-sasl/chexum) (Ping timeout: 240 seconds)
09:06:10 merijn joins (~merijn@c-001-001-001.client.esciencecenter.eduvpn.nl)
09:10:35 chexum joins (~quassel@gateway/tor-sasl/chexum)
09:11:54 × chenqisu1 quits (~chenqisu1@183.217.201.88) (Quit: Leaving)
09:17:39 × jgeerds quits (~jgeerds@55d4548e.access.ecotel.net) (Ping timeout: 256 seconds)
09:25:08 Sgeo_ joins (~Sgeo@user/sgeo)
09:27:24 × Sgeo quits (~Sgeo@user/sgeo) (Ping timeout: 240 seconds)
09:28:35 shailangsa joins (~shailangs@host86-162-150-212.range86-162.btcentralplus.com)
09:28:40 <xerox> > M.toList . M.fromListWith (+) . map (\x -> (x,1)) $ "abcbacbca" -- abastro[m]
09:28:42 <lambdabot> [('a',3),('b',3),('c',3)]
09:34:36 × karim quits (~karim@102.40.222.144) (Ping timeout: 240 seconds)
09:34:39 × perrierjouet quits (~perrier-j@modemcable012.251-130-66.mc.videotron.ca) (Quit: WeeChat 3.4.1)
09:37:07 gurkenglas joins (~gurkengla@dslb-178-012-018-212.178.012.pools.vodafone-ip.de)
09:37:51 benin joins (~benin@183.82.24.110)
09:38:00 yosef36 joins (~yosefweis@2001:470:69fc:105::1:e501)
09:41:34 kuribas joins (~user@ptr-25vy0i9dlr6d4pgg05u.18120a2.ip6.access.telenet.be)
09:42:13 perrierjouet joins (~perrier-j@modemcable012.251-130-66.mc.videotron.ca)
09:45:43 × acidjnk quits (~acidjnk@p200300d0c7049f68816ae2824fdd5aac.dip0.t-ipconnect.de) (Ping timeout: 260 seconds)
09:49:35 Tuplanolla joins (~Tuplanoll@91-159-69-98.elisa-laajakaista.fi)
09:50:36 × Quenty quits (uid14882@id-14882.helmsley.irccloud.com) (Quit: Connection closed for inactivity)
09:53:57 × mikoto-chan quits (~mikoto-ch@213.177.151.239) (Ping timeout: 240 seconds)
09:56:55 × gdd quits (~gdd@129.199.146.230) (Ping timeout: 260 seconds)
09:57:44 × gehmehgeh quits (~user@user/gehmehgeh) (Quit: Leaving)
09:58:03 <kuribas> I am trying to "noobify" my code, but I am hesitating between Either and Exceptions.
09:58:18 <kuribas> Exceptions are easier to understand for outsiders, but I don't like that they are invisible in haskell.
09:58:35 <kuribas> "foo :: IO Int " does it throw an exception?
10:00:31 × wyrd quits (~wyrd@gateway/tor-sasl/wyrd) (Remote host closed the connection)
10:00:50 wyrd joins (~wyrd@gateway/tor-sasl/wyrd)
10:01:51 × hughjfchen quits (~hughjfche@vmi556545.contaboserver.net) (Quit: WeeChat 2.8)
10:01:52 × vglfr quits (~vglfr@37.73.58.115) (Read error: Connection reset by peer)
10:02:58 vglfr joins (~vglfr@37.73.58.115)
10:06:31 hughjfchen joins (~hughjfche@vmi556545.contaboserver.net)
10:09:47 × vglfr quits (~vglfr@37.73.58.115) (Ping timeout: 256 seconds)
10:10:17 Everything joins (~Everythin@37.115.210.35)
10:10:32 × econo quits (uid147250@user/econo) (Quit: Connection closed for inactivity)
10:11:36 × mon_aaraj quits (~MonAaraj@user/mon-aaraj/x-4416475) (Ping timeout: 252 seconds)
10:13:37 mon_aaraj joins (~MonAaraj@user/mon-aaraj/x-4416475)
10:16:40 <abastro[m]> <kuribas> ""foo :: IO Int " does it throw..." <- Google java checked exception criticism
10:17:25 <kuribas> I kind of like javas checked exceptions
10:17:48 × merijn quits (~merijn@c-001-001-001.client.esciencecenter.eduvpn.nl) (Ping timeout: 240 seconds)
10:17:53 <abastro[m]> Yea but (maybe sadly) many hated it
10:18:16 <kuribas> not surprisingly
10:18:16 <abastro[m]> And now they say result type is better because part of return type, not the function signature
10:18:28 mcgroin joins (~mcgroin@roc37-h01-176-170-197-243.dsl.sta.abo.bbox.fr)
10:24:53 <abastro[m]> Not surprising?
10:25:34 <kuribas> yeah, but then handling becomes painful without monads.
10:26:24 <abastro[m]> Result monad without the m-word tho
10:27:08 <abastro[m]> Anyway, for "noobify" I think you need to cater to many ppl's perception
10:29:46 dextaa_ joins (~dextaa@user/dextaa)
10:30:08 vglfr joins (~vglfr@37.73.58.115)
10:30:16 × shailangsa quits (~shailangs@host86-162-150-212.range86-162.btcentralplus.com) ()
10:32:23 × gurkenglas quits (~gurkengla@dslb-178-012-018-212.178.012.pools.vodafone-ip.de) (Ping timeout: 260 seconds)
10:32:37 <kuribas> yeah, then the mainstream solution would be custom syntax for handling errors
10:33:04 <abastro[m]> Eh, Result type isn't custom syntax isn't it
10:33:21 <kuribas> the type no.
10:33:38 <kuribas> But to handle it gracefully you'll need monadic bind.
10:33:47 × alp quits (~alp@user/alp) (Ping timeout: 260 seconds)
10:33:54 <abastro[m]> `.flatMap`
10:35:03 <kuribas> so do mainstream programmers chain .flatMaps?
10:35:36 <kuribas> Funny how people still end up with monads, despite a general consensus that they are "too academic".
10:36:38 <abastro[m]> Well, I mean
10:36:46 <abastro[m]> Mainstream is still just throwing unchecked exception.
10:37:10 <abastro[m]> Simply that some of them are saying that Result type is better than checked exception
10:38:43 <abastro[m]> But yea they began using map and filter at least
10:39:21 <kuribas> funny how functional idioms have been trinkling in other languages steadily.
10:40:17 <abastro[m]> Yea, think object-oriented idioms are coming into ours as well tho
10:40:34 <kuribas> are they?
10:41:22 <kuribas> haven't seen many, but then I probably actively avoid them...
10:41:40 <abastro[m]> Encapsulation, type&data grouping
10:41:45 × Sgeo_ quits (~Sgeo@user/sgeo) (Read error: Connection reset by peer)
10:42:05 <abastro[m]> I mean type&behavior grouping
10:42:19 <kuribas> records with functions?
10:42:31 <abastro[m]> Also row-type polymorphism I guess
10:42:57 <abastro[m]> I meant having a type and behavior on the type listed in proximity.
10:44:41 × _________ quits (~nobody@user/noodly) (Ping timeout: 256 seconds)
10:47:08 <abastro[m]> IIRC, one could do OOP in any FP language that is not haskell.
10:47:23 <kuribas> one can do it in haskell as well.
10:47:33 <kuribas> just closures are enough.
10:47:38 × vglfr quits (~vglfr@37.73.58.115) (Ping timeout: 272 seconds)
10:47:41 <Franciman> let over lambda pattern
10:47:43 <Franciman> amirite?
10:47:55 <kuribas> rite
10:48:22 <kuribas> the primary thing I don't like about OO is inheritance.
10:48:48 <Franciman> there are many articles explaining that it's not part of OO, but just an hack to gain reuse and GC friendliness
10:48:49 <kuribas> I find interfaces are much more flexible in adding functionality.
10:49:03 <Franciman> so you can do away
10:49:25 <kuribas> rigid class hierarchies make for rigid and hard to maintain code.
10:49:35 <Franciman> interfaces are gorg
10:49:47 <abastro[m]> Well some ppl are genuinely offputted by haskell's inability at inheritance tho
10:50:14 <kuribas> because it doesn't play well with type inference.
10:50:14 <Franciman> functions are very powerful organizing mechanism
10:50:50 × mcgroin quits (~mcgroin@roc37-h01-176-170-197-243.dsl.sta.abo.bbox.fr) (Remote host closed the connection)
10:51:31 ProfSimm joins (~ProfSimm@87.227.196.109)
10:53:05 zeenk joins (~zeenk@2a02:2f04:a110:7d00:2011:cfed:bad7:3c94)
10:53:10 xkuru joins (~xkuru@user/xkuru)
10:53:11 <abastro[m]> Anyway yeah, encapsulation is perhaps the crux of OOP ppl like. Problem is that it is usually encapsulation of local mutable state.
10:53:26 <abastro[m]> Haskell does not like local mutable state
10:53:37 <kuribas> You can use an IORef.
10:53:40 <Franciman> why, there is ST monad
10:53:43 <Franciman> for local mutable state
10:53:56 <Franciman> ah you would still retain referential trasparency
10:55:29 _________ joins (~nobody@user/noodly)
10:55:48 <kuribas> IMO haskell is the best imperative language :)
10:55:53 <kuribas> also the best dynamic language.
10:55:54 <abastro[m]> You can't have a state in ST monad which carries over multiple call
10:56:05 <Franciman> you are right
10:56:07 <Franciman> sorry
11:00:23 <abastro[m]> Btw personal grudge on IORef: laziness could get you into trouble
11:00:36 <Franciman> laziness is lol
11:00:38 <Franciman> how to put it
11:00:42 <Franciman> well it's lol
11:00:56 <Franciman> full of fake promises, but with a bunch of DAMN NEADO use cases
11:02:11 <kuribas> abastro[m]: your not using unsafePerformIO, do you? ;-)
11:02:54 <abastro[m]> Ofc not
11:03:10 <kuribas> Then how could lazyness have an effect on the IORef?
11:03:16 <kuribas> Or do you mean a space leak?
11:03:19 <abastro[m]> I mean, you'd usually not think of thunks from IORef
11:03:27 <abastro[m]> And that leads to performance degradation
11:03:33 <abastro[m]> Ofc I mean space leak
11:03:42 <abastro[m]> Oh right, there are other problems of laziness
11:03:53 <abastro[m]> But I don't mean those
11:04:45 × razetime quits (~quassel@117.254.35.76) (Ping timeout: 256 seconds)
11:04:57 <kuribas> It can also be an advantage, for example in a concurrency setting.
11:05:11 × _xor quits (~xor@74.215.232.169) (Quit: WeeChat 3.4)
11:05:13 <kuribas> You don't need to hold the MVar, because the lazy update is nearly instantanuous.
11:05:53 × mbuf quits (~Shakthi@171.61.236.231) (Ping timeout: 256 seconds)
11:06:55 <kuribas> abastro[m]: but note that the space leak is due to holding on to a value, not due to the nature of an IORef.
11:07:04 <kuribas> abastro[m]: you'ld have the same problem with StateT.
11:07:26 <kuribas> I think stateless systems are the way to go.
11:07:40 <kuribas> It will also help with reducing GC time.
11:07:53 <kuribas> Just use a database to persist data.
11:07:54 <abastro[m]> I mean, ppl simply expect IORef to be strict
11:07:59 <abastro[m]> But ofc it is not.
11:10:27 <abastro[m]> Sounds like using electric drill to change a lightbulb
11:11:41 shailangsa joins (~shailangs@host86-162-150-212.range86-162.btcentralplus.com)
11:11:57 <kuribas> the favour of IORef is that it is easy to use when you already have IO.
11:12:14 gdd joins (~gdd@129.199.146.230)
11:12:19 <kuribas> "StateT s IO" is redundant, also doesn't play well with exceptions.
11:14:05 vglfr joins (~vglfr@37.73.58.115)
11:15:08 mc47 joins (~mc47@xmonad/TheMC47)
11:15:37 <abastro[m]> Oh this discussion came from OOP
11:15:42 × vglfr quits (~vglfr@37.73.58.115) (Read error: Connection reset by peer)
11:15:55 vglfr joins (~vglfr@37.73.58.115)
11:16:12 <abastro[m]> What is the reason you think that OOP is considered important for many?
11:16:25 <abastro[m]> (For code structuring at large)
11:17:08 <kuribas> who does? I don't think that...
11:17:20 <geekosaur> I think a lot of it is that it's just what they learned. also that for many it was the first thing they encountered after C, with all its limitations
11:17:24 razetime joins (~quassel@117.254.34.132)
11:17:40 <geekosaur> (or BASIC, with all *its* limitations)
11:17:47 <abastro[m]> I mean, if you learn C and think for a while
11:18:04 <kuribas> Well, I think the original ideas work well on larger levels. Like immutable message passing, hidden state, concurrency, etc...
11:18:05 <abastro[m]> You would think that it would be cool to have encapsulating "classes"
11:18:13 <abastro[m]> Which hides the local state.
11:18:32 <kuribas> It just doesn't make sense to me to use message passing in order to "append a string", or "sum two numbers".
11:19:22 × pottsy quits (~pottsy@2400:4050:b560:3700:fe0:b422:790d:35f6) (Ping timeout: 265 seconds)
11:19:55 <kuribas> But having "ReaderT env IO" for large components involving state is fine IMO...
11:19:59 <kuribas> No need for classes.
11:20:00 <abastro[m]> Indeed, I hope no one does that either
11:20:10 <kuribas> abastro[m]: smalltalk :)
11:20:15 <abastro[m]> Wait does many ppl do that
11:20:18 <abastro[m]> Oh
11:20:20 <abastro[m]> I mean
11:20:36 <abastro[m]> Smalltalk was a trial, so what about e.g. Java
11:22:05 <kuribas> Most modern OO languages are just bastardisations.
11:22:19 <kuribas> like C++, C#, java, ...
11:22:33 × vysn quits (~vysn@user/vysn) (Ping timeout: 252 seconds)
11:24:03 <kuribas> At least smalltalk is conceptually consistent.
11:24:36 <abastro[m]> They are so popular though, and used for designing real software
11:26:46 <kuribas> that's not what I mean. They are bastardisations of the original OO principles.
11:27:16 <kuribas> objective C is closer to them.
11:27:49 × infinity0 quits (~infinity0@occupy.ecodis.net) (Remote host closed the connection)
11:28:26 infinity0 joins (~infinity0@occupy.ecodis.net)
11:29:05 <abastro[m]> I mean, if we were to recognize what OOP is, we should focus on how it is used
11:29:36 <abastro[m]> Btw I just found a material which grows my depression: https://www.quora.com/Why-didnt-Haskell-do-for-FP-what-Smalltalk-did-for-OOP?share=1
11:31:28 <kuribas> abastro[m]: yeah, for most people OOP is java, C#, or python
11:31:30 <Hecate> damn
11:31:34 <Hecate> I ain't reading this :D
11:32:17 <abastro[m]> I wish I did not
11:32:31 <kuribas> haskell is more like the common lisp of lazy functional languages.
11:32:38 <abastro[m]> Tho I mean, they could have valid logic and they might be right
11:33:22 <kuribas> haskell is not the only purely function language, but it is the canonical one.
11:34:19 <kuribas> hehe: "Actually I made up the term "object-oriented ", and I can tell you I did not have C++ in mind. ~ Alan Kay"
11:34:19 <kuribas>
11:36:18 <abastro[m]> I mean yea, but academics do not always have things right
11:36:35 <kuribas> for whatever "right" means.
11:36:47 × vglfr quits (~vglfr@37.73.58.115) (Ping timeout: 260 seconds)
11:36:49 <kuribas> But IMO academics is about exploring, not about "right".
11:37:19 <abastro[m]> Yep
11:37:30 <abastro[m]> Maybe Alan Key was wrong on what should be OOP
11:38:18 <geekosaur> keep in mind, for an example of that, that Kay may have made up the term but SIMULA was arguably the first language with what isnow called OOP
11:38:38 dut joins (~dut@user/dut)
11:39:10 <kuribas> I don't agree much with Alan Key, he is a bit of an ass by dismissing FP.
11:41:35 × tiferrei quits (~tiferrei@user/tiferrei) (Ping timeout: 240 seconds)
11:42:04 <kuribas> And I find the idea of comparing logical building blocks with biological cells a bit disingenious.
11:42:21 <kuribas> cells are incredibly complex, perhaps more complex than a whole computer.
11:42:44 <kuribas> The idea that you just make a computer language, and it "organically does the right thing", is very confused.
11:42:47 tiferrei joins (~tiferrei@user/tiferrei)
11:42:59 <kuribas> Still people love the "origanical" analogy.
11:43:19 <geekosaur> just cell walls are more complex than an entire computer, tbh
11:45:53 <abastro[m]> We can scale down to individual proteins then.. wait
11:46:56 <[exa]> depends on how you measure that, the complexity needed to keep the cells running is insanely astronomical, yet still you can't reasonably ask it for adding a few numbers together
11:47:03 <abastro[m]> (IIRC proteins usually only do one signaling/one reaction and carries only simple states)
11:49:16 <[exa]> haha no
11:49:41 <kuribas> [exa]: can't brain cells?
11:49:53 <abastro[m]> So that is better analogy for OOP then
11:50:04 <[exa]> there's a bit of bias in that, the proteins are so insanely tiny and dodgy that people are nowadays happy that they have at least 1 kinda function for some
11:50:12 mbuf joins (~Shakthi@110.225.247.221)
11:50:34 <abastro[m]> So OOP classes are like proteins
11:51:16 <[exa]> while it is clear that the functionality is literally open, everything dynamically reacts to a very open set of tiny changes everywhere
11:51:42 <[exa]> quantifying that with "internal" and "external" state is basically impossible
11:51:43 <abastro[m]> Which still does fine job at operating a cell
11:52:25 × mbuf quits (~Shakthi@110.225.247.221) (Remote host closed the connection)
11:52:38 <abastro[m]> I mean, e.g. DNAs have a bit of encapsulation
11:52:54 <[exa]> well
11:53:03 <[exa]> you can monkeypatch it with whatever chemistry you want
11:53:26 <[exa]> there's metagenomics, wild stuff that happens in non-coding sequences, ...
11:54:24 <abastro[m]> Yea, still encapsulates and "passes messages"
11:54:39 <[exa]> trying to make a correspondence to computer programs KINDA works because stuff really gets compiled somehow there, BUT people tend to underestimate the few billions of years of evolution that was randomly finding random solutions for random problems and encoding them in a random way to random places
11:55:05 <[exa]> which is the main driving force of biology, not some kind of fun tangible transcriptions
11:55:23 <abastro[m]> That's true. Though they also often assume that biological solution is great
11:55:36 <[exa]> yeah it survived™
11:56:24 <[exa]> anyway sorry I just wanted to share my opinion on how the comparisons between life and computers are kinda off-scale
11:56:40 deadmarshal_ joins (~deadmarsh@95.38.113.36)
11:57:21 <[exa]> btw re OOP, I found it useful to refer to actual OOP properties, a bit like message/agent-oriented programming and encapsulation-based programming, which are indeed 2 separate directions in OOP
11:58:51 <kuribas> [exa]: wouldn't the agent need to be encapsulated?
11:59:15 <kuribas> microservices is a bit look OOP, only in a clumsy way...
11:59:44 <abastro[m]> Did JS have private fields in the past
12:00:42 <[exa]> it's kinda more about the way you contain the complexity, imagine having a 10-stage data processing pipeline, and you can either represent it as wrapping 10 layers of "input chewing objects", or connecting 10 small objects together to send the messages
12:01:32 × xkuru quits (~xkuru@user/xkuru) (Read error: Connection reset by peer)
12:01:44 × deadmarshal_ quits (~deadmarsh@95.38.113.36) (Ping timeout: 272 seconds)
12:03:10 × mc47 quits (~mc47@xmonad/TheMC47) (Remote host closed the connection)
12:03:40 xkuru joins (~xkuru@user/xkuru)
12:07:47 × yauhsien quits (~yauhsien@61-231-25-68.dynamic-ip.hinet.net) (Remote host closed the connection)
12:08:22 yauhsien joins (~yauhsien@61-231-25-68.dynamic-ip.hinet.net)
12:09:46 × benin quits (~benin@183.82.24.110) (Quit: The Lounge - https://thelounge.chat)
12:09:50 <abastro[m]> Anyway there should be a reason why OOP is popular and fairing well now
12:09:55 × cosimone quits (~user@2001:b07:ae5:db26:c24a:d20:4d91:1e20) (Ping timeout: 260 seconds)
12:11:17 <abastro[m]> No way so many ppl are misled and became evangelist on those
12:11:27 <geekosaur> why? there may be no more reason than C becoming popular before OOP just because it wss more easily available than other languages
12:12:37 × yauhsien quits (~yauhsien@61-231-25-68.dynamic-ip.hinet.net) (Ping timeout: 240 seconds)
12:14:36 merijn joins (~merijn@c-001-001-001.client.esciencecenter.eduvpn.nl)
12:15:48 <abastro[m]> I'd say, C is a single language, but OOP is a whole paradigm
12:17:08 <geekosaur> is it, though? OOP looks a wholelot different in Java than it does in Python, which in turn is a whole lot different than C++, etc.
12:18:43 <geekosaur> and even if you ignore that, there are at least two different OOP paradigms, represented by Smalltalk vs. SIMULA
12:19:25 <abastro[m]> What is simula's oop
12:19:31 <geekosaur> actor model
12:20:12 bahamas joins (~lucian@84.232.140.158)
12:21:33 <nomagno> I don't see messages nor actors being used explicitly in any modern OOP language, honestly
12:24:06 <nomagno> Method calls will always be messages no matter the surrounding context I guess
12:24:59 yauhsien joins (~yauhsien@61-231-25-68.dynamic-ip.hinet.net)
12:26:31 <abastro[m]> Hmm, true
12:26:39 <geekosaur> "message" is more a conceptual view. You can view even C/Algol style programming as "message passing" with a very restrictive view of how messages associate with classes/types (and this is even used practically; see gtk+)
12:26:57 <abastro[m]> Method calls are somewhat unlike the image I get when I hear "message passing"
12:27:08 <abastro[m]> Btw I dislike how I can even find OOP folks dismissing FP in a reply in Bartosz's blog
12:27:22 <geekosaur> they're scared :)
12:28:31 <geekosaur> [26 10:39:21] <kuribas> funny how functional idioms have been trinkling in other languages steadily.
12:28:57 <nomagno> Not just idioms, many languages are solidly 25% functional at this point
12:29:01 <abastro[m]> Scared? What do you mean
12:30:11 <geekosaur> they're used to OOP think, but you have things like not-openly-called-monadic idioms trickling in to make exception handling easier, to use an earlier observation
12:30:18 machinedgod joins (~machinedg@24.105.81.50)
12:30:19 <kuribas> scared of the unknown likely.
12:30:30 <abastro[m]> Hmm, makes sense
12:30:33 <geekosaur> the rules are changing and of course people become scared when the rules start to change around them
12:30:36 <kuribas> or that they have to relearn how to program.
12:30:44 <maerwald> tomsmeding: https://imgur.com/YmMxtHE.png
12:30:46 <abastro[m]> Though I wonder if the reaction is from scare
12:31:02 <geekosaur> it'sa typical fear reaction
12:31:14 <abastro[m]> Hmmm
12:31:28 <geekosaur> pretty sure there's a chart from fear to acceptancemirroring the chart for grieving, somewhere
12:31:47 <abastro[m]> Also OOP folks have successful upcoming languages like Go
12:31:53 <abastro[m]> Wait is that more procedural
12:31:57 <nomagno> I'm lowkey only good at purely procedural&imperative thinking, not going to lie
12:32:01 <nomagno> Working on that
12:33:42 <abastro[m]> Maybe perspectives depend on how to classify rust
12:34:17 × bahamas quits (~lucian@84.232.140.158) (Ping timeout: 256 seconds)
12:35:28 <geekosaur> "classification" is another partof the problem (and why you get fear reactions here)
12:35:37 <geekosaur> people like to pigeonhole things
12:36:08 <geekosaur> then the holes start to leak, like FP concepts leaking into OOP languages and cross-paradigm languages like Rust appearing
12:37:54 <nomagno> Rust is procedural and imperative with functional and object-oriented constructs, but honestly not that many.
12:38:29 <nomagno> I don't like whatever that borrow-checker paradigm they invented is supposed to be, at all
12:39:04 <nomagno> I can't really read Rust code from most projects, it allows you to write abysmal code with its compiler guidance
12:39:41 <nomagno> Every project I've seen has been architecturally clean but its implementations have been less than admirable
12:39:45 zincy_ joins (~zincy@host86-160-236-152.range86-160.btcentralplus.com)
12:40:54 <kuribas> tbf, haskell allows you to write abysmal code.
12:41:16 <geekosaur> "you can write fortran in any language"
12:41:39 <maerwald> rust has overall lower readability, unless you're reading haskell type level code
12:41:42 <maerwald> then haskell is worse
12:41:57 <nomagno> Agreed there
12:42:05 <maerwald> but it's not really a problem in rust
12:42:20 <maerwald> it's just noisy and verbose, like C. You get used to it
12:42:42 <nomagno> Strangely enough I can deal with C no problem
12:43:09 <nomagno> But, like, I don't have a real interest in writing Rust, so it's tough getting up to speed enough to follow codebases around
12:43:22 <maerwald> then invest your time in something else :D
12:44:15 benin joins (~benin@183.82.24.110)
12:44:28 × hololeap quits (~hololeap@user/hololeap) (Remote host closed the connection)
12:44:31 <nomagno> Fair. I should probably continue getting familiar with Scheme, else I'll just keep whining recursiveness is scary forever!
12:46:15 hololeap joins (~hololeap@user/hololeap)
12:46:18 × geekosaur quits (~geekosaur@xmonad/geekosaur) (Remote host closed the connection)
12:47:25 bahamas joins (~lucian@84.232.140.158)
12:48:13 <abastro[m]> Well I mean, many people would consider rust more readable than haskell with its mathematical abstractions
12:49:14 × merijn quits (~merijn@c-001-001-001.client.esciencecenter.eduvpn.nl) (Ping timeout: 272 seconds)
12:49:27 <maerwald> it's for sure more pragmatic, although there were some forces pushing for more fancy features as well... I'm not following that closely anymore, but I'm guessing they left
12:49:59 <maerwald> probably for the better
12:50:31 × Everything quits (~Everythin@37.115.210.35) (Quit: leaving)
12:50:33 <maerwald> I don't believe in language evolution
12:51:13 <abastro[m]> I heard haskell got worse off due trying to integrate more features
12:51:21 <abastro[m]> That and aggressive refactoring
12:51:46 <exarkun> How would you measure something like "worse off"
12:51:46 <maerwald> I just think you're better off desiging a new language than retro-fitting toys onto an existing one. There may be exceptions.
12:51:48 × bahamas quits (~lucian@84.232.140.158) (Ping timeout: 240 seconds)
12:52:02 <exarkun> And after you did, how would you attribute changes to a cause like "trying to integrate more features"
12:52:26 <maerwald> But when you add stuff to anything, you're usually not considering the entirety of the design-space, but that tiny space that's open due to historical implementation decisions
12:52:33 <maerwald> how can that lead to something better? I don't know
12:52:37 <abastro[m]> Well I am not arguing for it, just that many people did think it was one of the biggest problems
12:53:05 <abastro[m]> Many I met argued that haskell is not a worthy language except for lab settings because it changes too frequently
12:53:15 geekosaur joins (~geekosaur@xmonad/geekosaur)
12:53:16 <maerwald> I can sympathize
12:53:36 <maerwald> I just use older compilers :D
12:53:53 <abastro[m]> Hugs?
12:54:04 <maerwald> ghc 8.10.7
12:55:37 <abastro[m]> How is 8.10.7 "Old"
12:55:49 <maerwald> 9.4 is coming soon, 9.6 is already planned
12:56:16 <abastro[m]> I mean, I found that even HLS does not work well on 9.0+
12:56:20 <abastro[m]> For now*
12:56:25 <maerwald> yeah, I don't bother either atm
12:56:30 <maerwald> but M1 users have to
12:56:40 <maerwald> because 8.10.7 doesn't get the native codegen
12:56:50 <abastro[m]> Usually the argument is that haskell as language has changed too much in 10 years
12:57:18 <abastro[m]> They(I guess enterprise ppl) say it is not production ready if it cannot compile a program from 10 years ago
12:58:00 <maerwald> there is https://github.com/haskellfoundation/stability
12:59:55 <abastro[m]> Yep, it is a great step forward
13:03:02 × zincy_ quits (~zincy@host86-160-236-152.range86-160.btcentralplus.com) (Remote host closed the connection)
13:06:41 × bitmapper quits (uid464869@id-464869.lymington.irccloud.com) (Quit: Connection closed for inactivity)
13:09:12 <abastro[m]> Hm I still did not find a `Monoid` which can do:
13:09:12 <abastro[m]> `[a, a, a, b, b, a, c, b]` => `[(a, 3), (b, 2), (a, 1), (c, 1), (b, 1)]`
13:11:35 <abastro[m]> Or well, I should better say, summarizing it as `((a, 3), 2 = max[2,1,1], (b, 1))`
13:12:42 <geekosaur> I'm missing why you would want a Monoid? (off the top of my head I don't see what mempty would be, unless the first element of the tuple is a Maybe)
13:12:54 <geekosaur> and it just looks like `group` to me
13:13:24 <abastro[m]> Yep, it is a group but I want a monoid for a reason
13:14:02 <abastro[m]> Basically, I want to built up the tree for the monoid calculation
13:14:26 <abastro[m]> Then change one leaf, which triggers update of the result in O(log n)
13:17:53 × namkeleser quits (~namkelese@101.175.155.55) (Quit: Client closed)
13:24:12 <abastro[m]> I got it nearly done, but I am struggling to make this datatype:
13:24:38 <abastro[m]> One representing `(a, numberOfOccurrence)`
13:24:57 <abastro[m]> Along with nil-like one for 0 occurrence
13:26:39 × zincy quits (~tom@2a00:23c8:970c:4801:5b6a:e81b:79dc:f684) (Remote host closed the connection)
13:30:11 bahamas joins (~lucian@84.232.140.158)
13:32:40 × tiferrei quits (~tiferrei@user/tiferrei) (Remote host closed the connection)
13:32:40 × jpds quits (~jpds@gateway/tor-sasl/jpds) (Remote host closed the connection)
13:32:40 × wyrd quits (~wyrd@gateway/tor-sasl/wyrd) (Remote host closed the connection)
13:32:40 × hololeap quits (~hololeap@user/hololeap) (Remote host closed the connection)
13:32:40 × stiell quits (~stiell@gateway/tor-sasl/stiell) (Remote host closed the connection)
13:32:40 × ChaiTRex quits (~ChaiTRex@user/chaitrex) (Remote host closed the connection)
13:32:55 tiferrei joins (~tiferrei@user/tiferrei)
13:32:55 wyrd joins (~wyrd@gateway/tor-sasl/wyrd)
13:33:02 jpds joins (~jpds@gateway/tor-sasl/jpds)
13:33:03 stiell joins (~stiell@gateway/tor-sasl/stiell)
13:34:07 hololeap joins (~hololeap@user/hololeap)
13:34:55 × bahamas quits (~lucian@84.232.140.158) (Ping timeout: 256 seconds)
13:35:12 ChaiTRex joins (~ChaiTRex@user/chaitrex)
13:38:09 × zeenk quits (~zeenk@2a02:2f04:a110:7d00:2011:cfed:bad7:3c94) (Quit: Konversation terminated!)
13:38:33 × yauhsien quits (~yauhsien@61-231-25-68.dynamic-ip.hinet.net) (Remote host closed the connection)
13:40:48 rtpg parts (sid443069@id-443069.ilkley.irccloud.com) (Konversation terminated!)
13:41:48 × Pickchea quits (~private@user/pickchea) (Ping timeout: 272 seconds)
13:41:57 × razetime quits (~quassel@117.254.34.132) (Read error: Connection reset by peer)
13:45:57 × dsrt^ quits (~dsrt@96-91-136-49-static.hfc.comcastbusiness.net) (Remote host closed the connection)
13:49:44 × dextaa_ quits (~dextaa@user/dextaa) (Remote host closed the connection)
13:56:24 × kuribas quits (~user@ptr-25vy0i9dlr6d4pgg05u.18120a2.ip6.access.telenet.be) (Quit: ERC (IRC client for Emacs 26.3))
14:02:41 × Maxdamantus quits (~Maxdamant@user/maxdamantus) (Ping timeout: 256 seconds)
14:09:03 yauhsien joins (~yauhsien@61-231-25-68.dynamic-ip.hinet.net)
14:13:48 × yauhsien quits (~yauhsien@61-231-25-68.dynamic-ip.hinet.net) (Ping timeout: 240 seconds)
14:18:37 Maxdamantus joins (~Maxdamant@user/maxdamantus)
14:21:47 mikoto-chan joins (~mikoto-ch@213.177.151.239)
14:24:37 × notzmv quits (~zmv@user/notzmv) (Ping timeout: 240 seconds)
14:32:25 × MironZ quits (~MironZ@nat-infra.ehlab.uk) (Quit: The Lounge - https://thelounge.chat)
14:33:55 MironZ joins (~MironZ@nat-infra.ehlab.uk)
14:39:00 × pranshukhandal quits (pranshukha@envs.net) (Quit: the lounge - https://webirc.envs.net)
14:39:00 × sus quits (zero@user/zeromomentum) (Quit: the lounge - https://webirc.envs.net)
14:39:26 pranshukhandal joins (pranshukha@envs.net)
14:39:34 sus joins (zero@user/zeromomentum)
14:43:16 seydar joins (~seydar@154-27-113-252.starry-inc.net)
14:43:59 zmt01 joins (~zmt00@user/zmt00)
14:44:36 × zmt00 quits (~zmt00@user/zmt00) (Ping timeout: 240 seconds)
14:44:52 <seydar> I'm trying to translate `(++) <$> Just "john" <*> Just "travolta"` into fmaps, but I'm really struggling. I can come up with `let a = fmap (++) (Just "john"); fmap a (Just "travolta")` but -- and this may shock you -- it doesn't work. What am I missing/misphrasing in my fmap construction?
14:45:04 bahamas joins (~lucian@84.232.140.158)
14:45:13 merijn joins (~merijn@c-001-001-001.client.esciencecenter.eduvpn.nl)
14:46:46 <[exa]> seydar: you need Applicatives to be able to actually combine the functor-ish "wrappers", just Functor is not sufficient to do this
14:46:47 <seydar> As per usual, now that I typed out my question into IRC, I think what I'm seeing is that I *can't* rewrite it with fmaps
14:47:26 <seydar> [exa]: and it's because I don't have access to the real component of `Just`, right? I'd have to be inside a function definition for that
14:48:05 <seydar> a :: Maybe ([Char] -> [Char]), thus it's not a candidate for the supplied function in fmap
14:48:11 <[exa]> not sure what does "access to the real component" mean but it might make sense
14:48:17 <abastro[m]> Hm, this is a bit hard to explain I think
14:48:37 <seydar> [exa]: what's the term for the `x` part of `Just x`?
14:48:40 <[exa]> it's nice to have a look at the types of map/fmap/<*>/>>= aligned next to each other, the intuition of what each of these can do is then pretty clean
14:48:49 <[exa]> lemme google
14:49:00 × pavonia quits (~user@user/siracusa) (Quit: Bye!)
14:49:17 × bahamas quits (~lucian@84.232.140.158) (Ping timeout: 240 seconds)
14:49:40 <abastro[m]> But yeah you can only deal with single `f a` with fmap, you cannot combine `f a` and `f b` and get some `f (a, b)` or something
14:49:55 alp joins (~alp@user/alp)
14:51:21 <seydar> thank you [exa], abastro[m]
14:51:25 × mon_aaraj quits (~MonAaraj@user/mon-aaraj/x-4416475) (Ping timeout: 256 seconds)
14:51:51 × n3t quits (~n3t@s45.mydevil.net) (Changing host)
14:51:51 n3t joins (~n3t@user/n3t)
14:53:16 <[exa]> seydar: https://paste.tomsmeding.com/9UMQd1Un I failed to google this so pastebinned
14:53:25 mon_aaraj joins (~MonAaraj@user/mon-aaraj/x-4416475)
14:53:49 <[exa]> btw the first Monad should be `Monad f`, whoops.
14:56:10 <[exa]> seydar: a fun little exercise is to see how the <*> and >>= are convertible to/from liftA2 and join, using fmap
14:57:08 <seydar> oh boy, i'm just getting into liftA2 now -- i'll give it a shot
14:58:23 <seydar> [exa]: wait, that's exactly what I was trying to do with converting (++) <$> Just "a" <*> Just "b" to fmap. I thought it couldn't be done?
14:58:42 <seydar> (since lifta2 is just f <$> a <*>)
14:58:46 <seydar> (since lifta2 is just f <$> a <*> b)8
14:58:55 <[exa]> you can do it ofcourse, but just `fmap` isn't sufficient. You need applicative tools to be able to combine the 2 Justs
14:58:56 <seydar> god dammit i'm not correcting my correction any further
14:59:05 <seydar> hm okay, i'll dig in
14:59:38 <[exa]> or you basically need to somehow reimplement the applicative yourself by patternmatching
14:59:46 <[exa]> which was not the task I guess. :D
15:00:17 <seydar> [exa]: yeah, i think the pattern-matching part was what I needed
15:00:50 <seydar> now that I'm actually trying to implement liftA2 in terms of fmap, it actually feels... easy? I'm prolly doing it wrong. stand by for pastebin
15:01:52 <seydar> ah. not so easy. running into the same issue as last time, where now my partially-applied function is wrapped in a functor
15:02:39 <[exa]> yap, you will eventually need to patternmatch on the 2 Maybes manually to be able to decide what to do with them
15:02:40 <geekosaur> right, you just hit the part that requires Applicative. liftA (or liftA1 if you like) is just fmap, but the higher ones need Applicative
15:03:43 <seydar> [exa]: and my implementation will be specific to the Maybe monad, right? I won't be able to generalize my implementation of liftA2 in terms of fmap?
15:03:49 pavonia joins (~user@user/siracusa)
15:04:09 <seydar> I'm guessing it's cheating to use `lift` in my definition of `liftA2` a la fmap?
15:04:25 <[exa]> yes, liftA2 literally can't be implemented in terms of fmap without either cheating or losing polymorphism
15:05:05 <seydar> "implement liftA2 in terms of fmap, they said. it'll be fun, they said"
15:05:25 <geekosaur> well, you'll certainly learn something,just not what you might have expected
15:05:44 <[exa]> like, there's a theoretical reason why functor is a superclass of applicative, which is a superclass of monad :]
15:06:25 <[exa]> technically, you may kinda look at this (esp. with simpler types like Maybe) as abstracting common kinds of patternmatches
15:07:19 <[exa]> Functor gives you a way to "pattermatch" { f (Just a) = doSomething a; f Nothing = Nothing }, only a single Maybe gets in there
15:07:41 <[exa]> Applicative does the patternmatch over 2 Maybes, like {f (Just a) (Just b) = ....}
15:08:04 bahamas joins (~lucian@84.232.140.158)
15:08:05 <[exa]> Monad patternmatches {f (Just (Just a)) = .....; ...}
15:09:22 <[exa]> (for the record, I forgot a Just$ in the functor part, before doSomething, but I hope the point is still visible)
15:10:19 <seydar> https://paste.tomsmeding.com/FwoTYOui
15:10:54 <seydar> i'm close, but my pattern-matching is inexhaustive (`liftA2' (:) (Just 3) (Just [4])` is my test case)
15:11:42 vglfr joins (~vglfr@37.73.58.115)
15:12:16 Topsi joins (~Tobias@dyndsl-095-033-022-251.ewe-ip-backbone.de)
15:15:55 × tubogram4 quits (~tubogram@user/tubogram) (Quit: See ya later!)
15:17:31 <Franciman> are you using adjoint functors in haskell?
15:17:37 <Franciman> if so, i'd like to watch them happen
15:18:23 × vglfr quits (~vglfr@37.73.58.115) (Ping timeout: 256 seconds)
15:19:36 × merijn quits (~merijn@c-001-001-001.client.esciencecenter.eduvpn.nl) (Ping timeout: 252 seconds)
15:20:10 tubogram4 joins (~tubogram@user/tubogram)
15:23:30 <maerwald[m]> Franciman: sup
15:23:56 <Franciman> ohy maerwald[m]
15:25:01 vysn joins (~vysn@user/vysn)
15:27:22 <seydar> Franciman: what are adjoint functors and how can i try to use them in a way that will be entertaining?
15:28:41 <Franciman> seydar: i was asking exactly to know the answer to your latter question
15:29:08 <Franciman> as per the former https://en.wikipedia.org/wiki/Adjoint_functors
15:33:14 deadmarshal_ joins (~deadmarsh@95.38.113.36)
15:33:23 × wolfshappen quits (~waff@irc.furworks.de) (Quit: later)
15:37:04 wolfshappen joins (~waff@irc.furworks.de)
15:39:00 × bahamas quits (~lucian@84.232.140.158) (Ping timeout: 240 seconds)
15:39:16 eggplantade joins (~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net)
15:43:24 × eggplantade quits (~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net) (Ping timeout: 240 seconds)
15:46:22 × cdman quits (~dcm@user/dmc/x-4369397) (Quit: Leaving)
15:47:15 tzh joins (~tzh@c-24-21-73-154.hsd1.or.comcast.net)
15:51:57 [itchyjunk] joins (~itchyjunk@user/itchyjunk/x-7353470)
15:53:29 <juri_> how alive is data parallel haskell?
15:54:21 Pickchea joins (~private@user/pickchea)
15:55:04 Unicorn_Princess joins (~Unicorn_P@93-103-228-248.dynamic.t-2.net)
15:55:08 <geekosaur> dead and removed from recent ghcs, iirc
15:56:10 × seydar quits (~seydar@154-27-113-252.starry-inc.net) (Quit: leaving)
15:56:20 <juri_> ah, thanks.
15:58:32 <geekosaur> if I recall the ghc side of things correctly, potentially it could go back in, but someone would have to commit to supporting it. as things were, it was getting in the way of maintaining ghc and nobody who understood it was supporting it
15:59:07 <juri_> not-it. i'd rather have the Herbie GHC plugin back.
15:59:33 <abastro[m]> What is data parallel haskell?
15:59:52 eggplantade joins (~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net)
16:02:39 <geekosaur> https://wiki.haskell.org/GHC/Data_Parallel_Haskell
16:03:14 <geekosaur> you have to use ghc7.x to get it
16:12:27 FragByte_ joins (~christian@user/fragbyte)
16:14:41 yauhsien joins (~yauhsien@61-231-25-68.dynamic-ip.hinet.net)
16:15:01 × FragByte quits (~christian@user/fragbyte) (Ping timeout: 240 seconds)
16:15:01 FragByte_ is now known as FragByte
16:15:04 boxscape_ joins (~boxscape_@p4ff0b60b.dip0.t-ipconnect.de)
16:17:21 troydm joins (~troydm@host-176-37-124-197.b025.la.net.ua)
16:19:30 × mon_aaraj quits (~MonAaraj@user/mon-aaraj/x-4416475) (Ping timeout: 272 seconds)
16:20:49 mon_aaraj joins (~MonAaraj@user/mon-aaraj/x-4416475)
16:31:20 <sm> g'day all. Can cabal build show just a count of packages remaining, without all the logging - like stack build --verbosity error ?
16:33:52 bitdex joins (~bitdex@gateway/tor-sasl/bitdex)
16:35:58 nicbk joins (~nicbk@user/nicbk)
16:36:08 notzmv joins (~zmv@user/notzmv)
16:36:12 × vysn quits (~vysn@user/vysn) (Ping timeout: 240 seconds)
16:41:41 × yauhsien quits (~yauhsien@61-231-25-68.dynamic-ip.hinet.net) (Remote host closed the connection)
16:48:08 × mikoto-chan quits (~mikoto-ch@213.177.151.239) (Quit: mikoto-chan)
16:48:22 mikoto-chan joins (~mikoto-ch@213.177.151.239)
16:50:33 razetime joins (~quassel@117.254.34.132)
16:51:58 × razetime quits (~quassel@117.254.34.132) (Client Quit)
16:52:14 rustacean joins (~quassel@117.254.34.132)
16:52:50 <rustacean> hello
16:53:17 <[exa]> o/
16:53:21 <rustacean> are there any guides on obfuscated haskell?
16:53:36 <maerwald> is that a dialect?
16:53:44 <Franciman> one could argue that regular haskell is already well obfuscated
16:53:47 <[exa]> like obfusacted C?
16:53:48 <Franciman> but i won't argue that
16:53:58 econo joins (uid147250@user/econo)
16:54:16 <rustacean> yes, akin to obfuscated C
16:54:39 <rustacean> like defining map as (<$>((:[])<$>))(=<<)
16:56:15 <[exa]> I don't recall anyone spending much time publicly with that, but ofcourse you can complicate anything to any level of complexity you want (cf. SK calculus & lambda equivalence)
16:56:39 × _ht quits (~quassel@231-169-21-31.ftth.glasoperator.nl) (Quit: No Ping reply in 180 seconds.)
16:56:43 <Franciman> looks regular haskell to me, rustacean
16:57:11 <rustacean> well then i would like some help with regular haskell then
16:57:34 <[exa]> Franciman: "resembles a tribal totem from 90deg angle" is now regular haskell :]
16:57:41 <Franciman> ^^
16:57:55 _ht joins (~quassel@231-169-21-31.ftth.glasoperator.nl)
16:58:34 <rustacean> i'd like to define foldl in a manner similar to this but i don't exactly understand the tribal totem myself
16:59:16 <Franciman> an obfuscated foldl i saw is defining foldl in terms of foldr
16:59:21 <rustacean> or reverse
16:59:23 <Franciman> but it is not as obfuscated as your example
16:59:26 <rustacean> interesting!
16:59:42 <[exa]> rustacean: the expression you have there is an ugly mess of tricks but you can see that the parts make sense, for example (:[]) is basically "make a singleton list", then there's 2 fmaps (aka <$>) that apparently apply it to the list making a (I'd say) kinda list of lists, and (=<<) may at that point be used as a concat
16:59:44 × zaquest quits (~notzaques@5.130.79.72) (Remote host closed the connection)
17:00:07 <[exa]> (because >>= for lists is concatMap)
17:00:24 <rustacean> indeed, what i'm wondering is how the recursion happens there
17:00:48 <[exa]> rustacean: it's in the fmaps and =<<
17:00:55 × nicbk quits (~nicbk@user/nicbk) (Ping timeout: 240 seconds)
17:01:03 <Franciman> iiuc the idea is to create a singleton for each element of the initial list
17:01:06 <[exa]> highly recommend to take the expression apart and check types of stuff, it helps a lot
17:01:12 <Franciman> then you use concatMap
17:01:21 <Franciman> to apply your function to each singleton and finally concat them
17:01:28 <Franciman> +1 [exa]
17:01:29 <[exa]> :t ((:[])<$>) -- for example, rustacean
17:01:30 <lambdabot> Functor f => f a -> f [a]
17:01:44 zaquest joins (~notzaques@5.130.79.72)
17:01:59 <rustacean> i see
17:02:16 <[exa]> and yeah the obvious trickery everywhere are the operator sections, (whatever <$>) is basically (\x -> whatever <$> x)
17:05:02 <Franciman> rustacean: http://wiki.haskell.org/Foldl_as_foldr
17:05:18 <Franciman> not sure it's what you want, but it is tricky
17:06:20 <[exa]> rustacean: ah one extra trick, the first `<$>` there actually works on functions, not lists
17:06:27 <rustacean> it is tricky, and funnier in pointfree
17:06:51 <[exa]> rustacean: easiest way to guess subexpression types btw is to use holes, try this in ghci:
17:06:51 <Franciman> point free can be nicely obfuscating
17:06:54 <[exa]> :t (\x -> (fmap::_) x ((:[])<$>))(=<<)
17:06:55 <lambdabot> (a -> b) -> [a] -> [b]
17:07:01 <Franciman> also contiunations
17:07:06 × orcus quits (~orcus@user/brprice) (Quit: ZNC 1.8.2 - https://znc.in)
17:07:06 × dispater quits (~dispater@user/brprice) (Quit: ZNC 1.8.2 - https://znc.in)
17:07:13 <[exa]> (it would also report how `fmap` specializes)
17:08:14 <rustacean> "To use the inferred type, enable PartialTypeSignatures" it says
17:08:23 <geekosaur> :t (\x -> ?fmap x ((:[])<$>))(=<<) -- another way to do it
17:08:25 <lambdabot> (?fmap::((a1 -> m b) -> m a1 -> m b) -> (f a2 -> f [a2]) -> t, Monad m, Functor f) => t
17:08:37 <geekosaur> but it reports a more general type
17:08:46 dispater joins (~dispater@user/brprice)
17:08:49 <[exa]> rustacean: there should be "Found type wildcard `_` standing for: ...."
17:09:16 <rustacean> standing for ‘(a1 -> b1) -> ((a -> b) -> a1) -> (a -> b) -> b1’ ah ok
17:09:17 orcus joins (~orcus@user/brprice)
17:11:06 <[exa]> rustacean: which is the fmap instance for `Functor ((->) (a -> b))`
17:12:52 <[exa]> spoiler: fmap for functions is equivalent to (.), so your totem simplifies to: (.((:[])<$>))(=<<)
17:15:07 × zyklotomic quits (~ethan@res380d-128-61-81-155.res.gatech.edu) (Ping timeout: 260 seconds)
17:15:45 merijn joins (~merijn@c-001-001-001.client.esciencecenter.eduvpn.nl)
17:17:11 zyklotomic joins (~ethan@res388d-128-61-91-192.res.gatech.edu)
17:18:31 <[exa]> rustacean: just following the typing rules and definitory substitutions, you'd eventually get to something like `totem fn = concatMap $ ((:[]) . fn)`, at which point it's a bit easier to see that the concat + (:[]) kinda cancels out, leaving just `map fn`
17:19:07 <[exa]> a good topic for a long ghci adventure tho.
17:19:30 <rustacean> my shallow haskell knowledge is still quivering at this
17:22:25 rond_ joins (~rond_@90.254.208.190)
17:23:02 fendor__ joins (~fendor@91.141.65.26.wireless.dyn.drei.com)
17:23:45 jakalx parts (~jakalx@base.jakalx.net) (Error from remote client)
17:25:51 × fendor_ quits (~fendor@91.141.68.132.wireless.dyn.drei.com) (Ping timeout: 260 seconds)
17:26:16 jakalx joins (~jakalx@base.jakalx.net)
17:28:57 × Pickchea quits (~private@user/pickchea) (Ping timeout: 256 seconds)
17:32:59 <[exa]> rustacean: writing obfuscated and hard-to-parse code should be avoided anyway, so I wouldn't worry. :D
17:33:31 <rustacean> yeah indeed, the book i'm reading is called "Real world haskell"
17:34:00 weekOldRoadkill joins (~weekOldRo@pool-108-50-225-254.nwrknj.fios.verizon.net)
17:34:04 <rustacean> but i am doing this as a one-off thing and i want to do it right (and maybe learn some forbidden knowledge along the way)
17:37:52 bahamas joins (~lucian@84.232.140.158)
17:38:49 <Sqaure> What would be using thing this GADT approach to create traceable evaluation expressions? Is there some obvious case in which it will break down? https://paste.tomsmeding.com/zlPScFMe
17:39:10 <Sqaure> What would be BAD*
17:45:42 pnotequalnp joins (~kevin@user/pnotequalnp)
17:50:42 × merijn quits (~merijn@c-001-001-001.client.esciencecenter.eduvpn.nl) (Ping timeout: 272 seconds)
17:52:02 fendor__ is now known as fendor
18:06:15 × alp quits (~alp@user/alp) (Ping timeout: 252 seconds)
18:07:44 × ix quits (~ix@2a02:8010:674f:0:d65d:64ff:fe52:5efe) (Quit: WeeChat 3.4)
18:07:54 ix joins (~ix@2a02:8010:674f:0:d65d:64ff:fe52:5efe)
18:09:26 × rond_ quits (~rond_@90.254.208.190) (Quit: Client closed)
18:09:43 × rustacean quits (~quassel@117.254.34.132) (Ping timeout: 260 seconds)
18:12:28 Sgeo joins (~Sgeo@user/sgeo)
18:14:45 Enrico63 joins (~Enrico63@81.109.143.226)
18:15:00 fef joins (~thedawn@user/thedawn)
18:16:37 × _ht quits (~quassel@231-169-21-31.ftth.glasoperator.nl) (Remote host closed the connection)
18:19:26 _ht joins (~quassel@231-169-21-31.ftth.glasoperator.nl)
18:19:49 × Enrico63 quits (~Enrico63@81.109.143.226) (Quit: Client closed)
18:29:01 × pavonia quits (~user@user/siracusa) (Quit: Bye!)
18:33:08 × deadmarshal_ quits (~deadmarsh@95.38.113.36) (Ping timeout: 272 seconds)
18:34:09 seydar joins (~seydar@154-27-113-252.starry-inc.net)
18:35:34 <seydar> I'm implementing lift2A in fmap for Maybe, but I'm getting a non-exhaustive pattern error. I think I'm missing something obvious: https://paste.tomsmeding.com/rK4RurLY
18:35:55 epolanski joins (uid312403@id-312403.helmsley.irccloud.com)
18:38:22 <[exa]> :t \ f a (Just x) -> fmap (flip x) (fmap f a) -- seydar: does the type of this match expectations?
18:38:23 <lambdabot> Functor f => (a1 -> b) -> f a1 -> Maybe (a2 -> b -> c) -> f (a2 -> c)
18:41:52 × ProfSimm quits (~ProfSimm@87.227.196.109) (Remote host closed the connection)
18:41:59 <seydar> [exa]: hm i guess not
18:42:12 ProfSimm joins (~ProfSimm@87.227.196.109)
18:42:33 <[exa]> the (fmap f a) is okay imo
18:42:51 <[exa]> gets you a `Maybe (b->c)`
18:43:12 <[exa]> you just need to throw the `x` to that function inside of Maybe
18:43:30 <[exa]> one nice hint how to do that:
18:43:41 <[exa]> > ($ 5) (1+)
18:43:42 <lambdabot> 6
18:43:51 <seydar> [exa]: but then doesn't x get used twice?
18:43:59 <[exa]> (translates to (1+) $ 5 which is (1+) 5 etc
18:44:01 <seydar> wait i think i misunderstand
18:44:25 <[exa]> seydar: no the `flip x` doesn't make much sense there because you can't assume that `x` is a function
18:44:48 califax joins (~califax@user/califx)
18:44:50 <seydar> oh, i thought that was the point -- i was assuming x wasn't a function
18:45:28 <[exa]> `x` in your case is literally just of type `b`, you can't do anything with it except for throwing it into `f` as a second argument
18:46:48 <[exa]> :t liftA2 -- just to be sure that we know what we're aiming at
18:46:49 <lambdabot> Applicative f => (a -> b -> c) -> f a -> f b -> f c
18:47:36 <seydar> do i have my arguments backwards?
18:48:28 <[exa]> no I guess they are okay, in fact just the (flip x) does a bit different flip than what you want
18:50:36 <[exa]> (see the hint with $ above)
18:50:45 <seydar> i'm having trouble understanding why flip isn't right: ((:) 3) [4] seems to be correct to me, but `flip [4] ((:) 3)` fails for me
18:51:14 <[exa]> continuing on what I posted before:
18:51:31 <[exa]> > ($ [4]) ((:) 3)
18:51:33 <lambdabot> [3,4]
18:51:35 <seydar> so switching (flip x) to ($ x) works, but i don't understand why
18:51:53 <[exa]> let's follow the types:
18:52:01 × weekOldRoadkill quits (~weekOldRo@pool-108-50-225-254.nwrknj.fios.verizon.net) (Quit: Leaving)
18:52:02 <seydar> ah well it appears i'm an idiot
18:52:07 <[exa]> :t \f a (Just x) -> fmap f a
18:52:08 <lambdabot> Functor f => (a1 -> b) -> f a1 -> Maybe a2 -> f b
18:52:10 <seydar> flip is simply not the right function
18:52:15 <seydar> because of the types, as you said
18:52:20 <seydar> :t flip
18:52:20 <lambdabot> (a -> b -> c) -> b -> a -> c
18:52:40 <[exa]> nah, the many kinds of flips are surprising
18:52:49 <seydar> :t ($)
18:52:50 <lambdabot> (a -> b) -> a -> b
18:52:55 × justOkay quits (~justache@user/justache) (Read error: Connection reset by peer)
18:53:07 <[exa]> the magic goes with the operator section there which kinda flips it for yourself
18:53:13 <[exa]> :t \x -> ($x)
18:53:14 <lambdabot> a -> (a -> b) -> b
18:53:56 justOkay joins (~justache@user/justache)
18:54:14 <[exa]> @pl \x f -> f x
18:54:14 <lambdabot> flip id
18:54:24 <[exa]> tada
18:55:01 × Igloo quits (~ian@matrix.chaos.earth.li) (Ping timeout: 250 seconds)
18:56:00 Igloo joins (~ian@matrix.chaos.earth.li)
18:57:08 <[exa]> anyway, the other way would be to do it in one `fmap`, you can flip your `f` so that it accepts `x` as the first argument, and then it's easy
19:00:34 <[exa]> > (`elem` [1,2,3]) 5 -- extra codegolfing hint
19:00:36 <lambdabot> False
19:05:10 × euandreh quits (~euandreh@2804:14c:33:9fe5:4042:4584:26e0:bc36) (Quit: WeeChat 3.4.1)
19:09:02 euandreh joins (~euandreh@2804:14c:33:9fe5:a3d9:5253:a1a8:660f)
19:10:52 <seydar> [exa]: beautiful trick, i should try that
19:11:13 <seydar> i guess i'm still confused about why my error was "non-exhaustive pattern matching" when i feel like it should've been a type mismatch
19:11:33 <seydar> (flip id x) works
19:11:52 <seydar> same with (`id` x)
19:12:20 <seydar> thank you [exa]! this has been super informative and i like the tricks i've learned!
19:15:02 × jespada quits (~jespada@cpc121022-nmal24-2-0-cust171.19-2.cable.virginm.net) (Ping timeout: 240 seconds)
19:16:44 lavaman joins (~lavaman@c-174-63-118-52.hsd1.ma.comcast.net)
19:17:33 <[exa]> seydar: np, it's actually from a pretty common bag of tricks that I don't know if it's written down somewhere
19:19:11 jespada joins (~jespada@cpc121022-nmal24-2-0-cust171.19-2.cable.virginm.net)
19:19:27 <[exa]> as an extra useful truth btw, it's good to notice that in this context `($)` is the same as `id` (in fact `($) = id` is a valid definition, though a bit too overly polymorphic)
19:21:18 <seydar> oh wow
19:23:25 × lavaman quits (~lavaman@c-174-63-118-52.hsd1.ma.comcast.net) (Remote host closed the connection)
19:23:39 lavaman joins (~lavaman@c-174-63-118-52.hsd1.ma.comcast.net)
19:23:47 × lavaman quits (~lavaman@c-174-63-118-52.hsd1.ma.comcast.net) (Remote host closed the connection)
19:27:00 × waleee quits (~waleee@2001:9b0:213:7200:cc36:a556:b1e8:b340) (Ping timeout: 240 seconds)
19:27:43 Pickchea joins (~private@user/pickchea)
19:36:01 alp joins (~alp@user/alp)
19:37:55 × jpds quits (~jpds@gateway/tor-sasl/jpds) (Ping timeout: 240 seconds)
19:38:57 × califax quits (~califax@user/califx) (Remote host closed the connection)
19:39:10 califax joins (~califax@user/califx)
19:39:17 × bahamas quits (~lucian@84.232.140.158) (Ping timeout: 240 seconds)
19:40:56 jpds joins (~jpds@gateway/tor-sasl/jpds)
19:41:37 acidjnk joins (~acidjnk@p200300d0c7049f68c1d0bc0d753b520f.dip0.t-ipconnect.de)
19:45:39 × seydar quits (~seydar@154-27-113-252.starry-inc.net) (Quit: leaving)
19:45:49 × acidjnk quits (~acidjnk@p200300d0c7049f68c1d0bc0d753b520f.dip0.t-ipconnect.de) (Ping timeout: 240 seconds)
19:46:33 merijn joins (~merijn@c-001-001-001.client.esciencecenter.eduvpn.nl)
19:47:55 × fef quits (~thedawn@user/thedawn) (Ping timeout: 240 seconds)
19:48:36 Jeanne-Kamikaze joins (~Jeanne-Ka@142.147.89.247)
19:48:36 × Jeanne-Kamikaze quits (~Jeanne-Ka@142.147.89.247) (Client Quit)
19:53:54 jao joins (~jao@cpc103048-sgyl39-2-0-cust502.18-2.cable.virginm.net)
19:58:38 × boxscape_ quits (~boxscape_@p4ff0b60b.dip0.t-ipconnect.de) (Ping timeout: 272 seconds)
20:11:01 × Lord_of_Life quits (~Lord@user/lord-of-life/x-2819915) (Ping timeout: 256 seconds)
20:12:03 Lord_of_Life joins (~Lord@user/lord-of-life/x-2819915)
20:15:46 simendsjo joins (~user@84.211.91.241)
20:21:24 ShalokShalom joins (~ShalokSha@2a02:1748:dd5e:7f60:b02d:5b89:5217:758a)
20:21:26 × merijn quits (~merijn@c-001-001-001.client.esciencecenter.eduvpn.nl) (Ping timeout: 272 seconds)
20:22:48 yauhsien joins (~yauhsien@61-231-25-68.dynamic-ip.hinet.net)
20:23:38 bahamas joins (~lucian@84.232.140.158)
20:25:29 <sm> would anyone feel like updating base64 for ghc 9.2 ? Possibly a small fix: https://github.com/emilypi/base64/issues/40
20:26:13 <sm> I suspect it will unlock a bunch of stuff in stackage nightly
20:27:38 <tomsmeding> maerwald: awesome work! Sorry for nonresponsiveness, will have a look tonight and perhaps tomorrow if I don't make it all
20:28:19 lavaman joins (~lavaman@c-174-63-118-52.hsd1.ma.comcast.net)
20:28:38 <maerwald> sm: that is already fixed in master
20:29:07 <sm> oh, thanks, I didn't realise
20:29:40 × bahamas quits (~lucian@84.232.140.158) (Ping timeout: 272 seconds)
20:30:15 <sm> what's Emily
20:30:21 × yauhsien quits (~yauhsien@61-231-25-68.dynamic-ip.hinet.net) (Ping timeout: 252 seconds)
20:30:24 <sm> 's nick, I wonder
20:31:11 × hololeap quits (~hololeap@user/hololeap) (Remote host closed the connection)
20:31:11 × tiferrei quits (~tiferrei@user/tiferrei) (Remote host closed the connection)
20:31:25 tiferrei joins (~tiferrei@user/tiferrei)
20:32:37 hololeap joins (~hololeap@user/hololeap)
20:33:29 mohy joins (~mohy@85-207-122-4.static.bluetone.cz)
20:33:58 × mohy quits (~mohy@85-207-122-4.static.bluetone.cz) (Client Quit)
20:34:11 mohy joins (~mohy@85-207-122-4.static.bluetone.cz)
20:35:57 × simendsjo quits (~user@84.211.91.241) (Ping timeout: 256 seconds)
20:38:16 × alp quits (~alp@user/alp) (Ping timeout: 245 seconds)
20:38:52 × ShalokShalom quits (~ShalokSha@2a02:1748:dd5e:7f60:b02d:5b89:5217:758a) (Quit: Client closed)
20:44:15 <janus> sm: try /whois tapas
20:44:44 <sm> thanks!
20:47:04 boxscape_ joins (~boxscape_@p4ff0b60b.dip0.t-ipconnect.de)
20:47:50 <tomsmeding> maerwald: was my code acceptable to work in :p
20:48:22 <tapas> sm: yo will you people chill? I have a life you know
20:48:33 <tapas> i'll have a release out this weekend
20:48:43 <hpc> nobody on irc has a life :P
20:50:34 <sm> uh.. sorry
20:50:35 <Hecate> agreed
20:52:02 × mohy quits (~mohy@85-207-122-4.static.bluetone.cz) (Quit: Leaving)
20:52:26 <boxscape_> % (proc x -> (| \(a, (s, ())) -> x |) "oeu")
20:52:26 <yahb> boxscape_: ; <interactive>:22:32: error:; * Variable not in scope: x; * Perhaps you meant `x' (line 22)
20:52:28 <boxscape_> perhaps I did
20:53:31 × dut quits (~dut@user/dut) (Ping timeout: 260 seconds)
20:54:04 <hpc> ... how?
20:54:43 <boxscape_> not sure
20:56:49 <sm> maerwald: ✔✔ GHC 9.2.2 latest,base-4.16.1.0 hls-powered <- what's this ?
20:57:00 <tomsmeding> the hls-powered?
20:57:04 <sm> yup
20:57:10 <tomsmeding> means that the ghcup-distributed HLS has support for that GHC
20:57:30 pavonia joins (~user@user/siracusa)
20:57:35 <tomsmeding> s/support/a working compiled binary/
20:57:58 <tomsmeding> oh, apparently not "the ghcup-distributed" but "the currently ghcup-installed"
20:58:09 <sm> cool. This is an HLS I just built and installed in place of ghcup's. I guess ideally I'd be seeing hls-powered for all my ghcs
20:58:27 <tomsmeding> ah, I put my self-compiled HLSs in a different directory :p
20:58:42 <maerwald> tomsmeding: there's `ghcup compile hls`
20:58:59 <sm> how do you ensure the right HLS gets invoked per project, tomsmeding
20:59:25 <tomsmeding> sm: I name them haskell-language-server-9.2.2, and then haskell-language-server-wrapper does the right thing :p
20:59:30 <maerwald> sm: there's `ghcup run --hls <ver> -- code .` :D
20:59:44 <tomsmeding> maerwald: I learned that after I was already doing it this way
20:59:53 <sm> man, these version dependencies always have been confusing and always will be confusing, even though ghcup is a boon
21:00:17 <maerwald> tomsmeding: well, but I think the point is that for supporting ghc 8.10.4 for example, you need to downgrade HLS
21:00:26 <maerwald> the vscode extension takes care of that for example
21:00:28 <sm> tomsmeding: any haskell-language-server-wrapper ? built with any ghc version ?
21:00:48 <maerwald> at least with official binaries
21:00:52 <tomsmeding> maerwald: ah right, then I'm fortunate that I'm only dealing with 8.10.7 and 9 onwards
21:01:01 <tomsmeding> sm: I _think_ so
21:01:24 <tomsmeding> the wrapper doesn't do very much, it just detects your project setup and then invokes haskell-language-server-<the inferred ghc version> AFAIK
21:01:58 <tomsmeding> (well, "just detects your project setup" is quite involved, of course, but then that's not really ghc-version bound)
21:02:10 <sm> and yet it's a 250M binary :)
21:02:26 <tomsmeding> haskell (tm)
21:02:43 <tomsmeding> well it links against most of the ide infrastructure to do the project setup detection thing probably
21:02:59 <sm> I notice my new haskell-language-server binary is only 400K though, that one must be dynamic
21:03:05 <maerwald> sm: there's your reason why no one uses Haskell in embedded :D
21:03:12 <maerwald> yeah
21:04:15 <tomsmeding> maerwald: O.o that lds-roller
21:04:29 <maerwald> tomsmeding: yeah, i copy pasted it from somewhere
21:04:35 <maerwald> real frontend engineering
21:04:39 <tomsmeding> did that somewhere have a license
21:04:41 <tomsmeding> :p yes
21:04:59 <maerwald> CC0
21:05:03 <tomsmeding> nice
21:05:05 <sm> I guess maybe haskell-language-server-wrapper-1.6.1.1 detects haskell-language-server-~1.6.1.1, and not haskell-language-server-~1.6.1.0
21:05:08 <maerwald> https://loading.io/css/
21:05:21 <maerwald> sm: no, anything with ~ is ghcup internal
21:05:38 waleee joins (~waleee@2001:9b0:213:7200:cc36:a556:b1e8:b340)
21:05:42 <sm> ah
21:06:39 × lavaman quits (~lavaman@c-174-63-118-52.hsd1.ma.comcast.net) (Ping timeout: 252 seconds)
21:09:04 <tomsmeding> maerwald: I'll try fixing my own review stuff
21:09:19 <maerwald> tomsmeding: the code was not too bad :p
21:09:27 <tomsmeding> no :p
21:09:41 <tomsmeding> though I don't have a /home/hasufell
21:09:51 <maerwald> you could create one
21:09:55 <tomsmeding> I _could_
21:09:56 × abhixec quits (~abhixec@c-67-169-139-16.hsd1.ca.comcast.net) (Quit: leaving)
21:09:58 <sm> why not tomsmeding
21:10:03 <tomsmeding> good question
21:10:13 × polyphem quits (~rod@2a02:810d:840:8754:224e:f6ff:fe5e:bc17) (Ping timeout: 250 seconds)
21:10:16 <tomsmeding> I guess I'd have to learn German first
21:11:43 × _ht quits (~quassel@231-169-21-31.ftth.glasoperator.nl) (Remote host closed the connection)
21:12:55 × bitdex quits (~bitdex@gateway/tor-sasl/bitdex) (Ping timeout: 240 seconds)
21:13:21 michalz joins (~michalz@185.246.204.107)
21:15:43 bitdex joins (~bitdex@gateway/tor-sasl/bitdex)
21:18:51 yauhsien joins (~yauhsien@61-231-25-68.dynamic-ip.hinet.net)
21:20:31 × Midjak quits (~Midjak@82.66.147.146) (Quit: This computer has gone to sleep)
21:21:37 dut joins (~dut@user/dut)
21:22:36 polyphem joins (~rod@2a02:810d:840:8754:224e:f6ff:fe5e:bc17)
21:22:57 × yauhsien quits (~yauhsien@61-231-25-68.dynamic-ip.hinet.net) (Ping timeout: 240 seconds)
21:23:01 gehmehgeh joins (~user@user/gehmehgeh)
21:26:01 × hololeap quits (~hololeap@user/hololeap) (Remote host closed the connection)
21:27:25 hololeap joins (~hololeap@user/hololeap)
21:29:44 <tomsmeding> maerwald: where did you get that dpkg-reconfigure command from
21:30:20 <maerwald> tomsmeding: from the internet, you know
21:30:32 <tomsmeding> "bash: dpkg-reconfigure: command not found"
21:30:48 shapr` joins (~user@pool-173-73-44-186.washdc.fios.verizon.net)
21:30:58 <geekosaur> what platform?
21:31:02 <tomsmeding> ubuntu 20.04
21:31:08 <maerwald> tomsmeding: debconf
21:31:33 <geekosaur> it's in /usr/sbin on my system
21:31:34 <tomsmeding> # apt install debconf && dpkg-reconfigure -> ... command not found
21:31:42 <tomsmeding> aaaah
21:31:45 <tomsmeding> geekosaur: thanks
21:31:55 <geekosaur> (also 20.04)
21:32:37 × shapr quits (~user@pool-173-73-44-186.washdc.fios.verizon.net) (Ping timeout: 256 seconds)
21:34:17 × takuan quits (~takuan@178-116-218-225.access.telenet.be) (Remote host closed the connection)
21:38:02 jgeerds joins (~jgeerds@55d4548e.access.ecotel.net)
21:42:51 alp joins (~alp@user/alp)
21:43:35 × wyrd quits (~wyrd@gateway/tor-sasl/wyrd) (Ping timeout: 240 seconds)
21:45:34 wyrd joins (~wyrd@gateway/tor-sasl/wyrd)
21:49:59 × mikoto-chan quits (~mikoto-ch@213.177.151.239) (Ping timeout: 260 seconds)
21:54:13 × shapr` quits (~user@pool-173-73-44-186.washdc.fios.verizon.net) (Remote host closed the connection)
21:54:26 shapr` joins (~user@pool-173-73-44-186.washdc.fios.verizon.net)
21:56:23 lavaman joins (~lavaman@c-174-63-118-52.hsd1.ma.comcast.net)
21:56:23 acidjnk joins (~acidjnk@p200300d0c7049f68c1d0bc0d753b520f.dip0.t-ipconnect.de)
21:58:07 <tomsmeding> maerwald: again thanks for all the work
22:05:46 shapr` is now known as shapr
22:16:31 × michalz quits (~michalz@185.246.204.107) (Remote host closed the connection)
22:16:49 AkechiShiro joins (~licht@user/akechishiro)
22:17:07 merijn joins (~merijn@c-001-001-001.client.esciencecenter.eduvpn.nl)
22:20:23 <maerwald> tomsmeding: are we seeing a beta release?
22:20:51 × jgeerds quits (~jgeerds@55d4548e.access.ecotel.net) (Ping timeout: 250 seconds)
22:24:21 × fendor quits (~fendor@91.141.65.26.wireless.dyn.drei.com) (Remote host closed the connection)
22:31:18 × fluxit quits (~fluxit@techsmix.net) (Quit: Bye!)
22:31:47 × lumberjack123 quits (~alMalsamo@gateway/tor-sasl/almalsamo) (Remote host closed the connection)
22:31:47 × hololeap quits (~hololeap@user/hololeap) (Remote host closed the connection)
22:32:08 lumberjack123 joins (~alMalsamo@gateway/tor-sasl/almalsamo)
22:33:22 hololeap joins (~hololeap@user/hololeap)
22:34:36 × lavaman quits (~lavaman@c-174-63-118-52.hsd1.ma.comcast.net) (Ping timeout: 240 seconds)
22:38:42 vysn joins (~vysn@user/vysn)
22:45:55 jakalx parts (~jakalx@base.jakalx.net) ()
22:47:23 jakalx joins (~jakalx@base.jakalx.net)
22:49:48 × vysn quits (~vysn@user/vysn) (Ping timeout: 240 seconds)
22:51:23 × merijn quits (~merijn@c-001-001-001.client.esciencecenter.eduvpn.nl) (Ping timeout: 256 seconds)
22:52:07 × gehmehgeh quits (~user@user/gehmehgeh) (Quit: Leaving)
23:03:34 × machinedgod quits (~machinedg@24.105.81.50) (Ping timeout: 272 seconds)
23:04:31 justsomeguy joins (~justsomeg@user/justsomeguy)
23:07:17 yauhsien joins (~yauhsien@61-231-25-68.dynamic-ip.hinet.net)
23:13:02 deadmarshal_ joins (~deadmarsh@95.38.230.121)
23:13:04 × yauhsien quits (~yauhsien@61-231-25-68.dynamic-ip.hinet.net) (Ping timeout: 272 seconds)
23:17:17 × deadmarshal_ quits (~deadmarsh@95.38.230.121) (Ping timeout: 240 seconds)
23:18:12 × sammelweis quits (~quassel@2601:401:8200:2d4c:bd9:d04c:7f69:eb10) (Ping timeout: 240 seconds)
23:29:45 × Pickchea quits (~private@user/pickchea) (Quit: Leaving)
23:31:14 × eggplantade quits (~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net) (Remote host closed the connection)
23:32:11 × Unicorn_Princess quits (~Unicorn_P@93-103-228-248.dynamic.t-2.net) (Ping timeout: 256 seconds)
23:32:19 gurkenglas joins (~gurkengla@dslb-178-012-018-212.178.012.pools.vodafone-ip.de)
23:33:07 Unicorn_Princess joins (~Unicorn_P@93-103-228-248.dynamic.t-2.net)
23:34:37 × acidjnk quits (~acidjnk@p200300d0c7049f68c1d0bc0d753b520f.dip0.t-ipconnect.de) (Ping timeout: 240 seconds)
23:35:16 sammelweis joins (~quassel@2601:401:8200:2d4c:bd9:d04c:7f69:eb10)
23:42:26 × alp quits (~alp@user/alp) (Ping timeout: 245 seconds)
23:47:36 mvk joins (~mvk@2607:fea8:5cc3:7e00::7980)
23:52:56 rawley joins (~rawley@216-197-141-102.nbfr.hsdb.sasknet.sk.ca)
23:57:11 × gurkenglas quits (~gurkengla@dslb-178-012-018-212.178.012.pools.vodafone-ip.de) (Read error: Connection reset by peer)
23:57:23 machinedgod joins (~machinedg@24.105.81.50)
23:59:20 DNH joins (~DNH@8.44.0.63)

All times are in UTC on 2022-03-26.