2022/05/08

2022-05-08 00:00:42 +0200Topsi1(~Topsi@dyndsl-095-033-088-174.ewe-ip-backbone.de)
2022-05-08 00:00:50 +0200coot(~coot@213.134.190.95) (Quit: coot)
2022-05-08 00:02:51 +0200abiss27(~abiss27@user/abiss) (Remote host closed the connection)
2022-05-08 00:03:17 +0200kenran(~kenran@200116b82b033700e957299332b778d2.dip.versatel-1u1.de) (Quit: WeeChat info:version)
2022-05-08 00:03:19 +0200Topsi(~Topsi@dyndsl-095-033-088-174.ewe-ip-backbone.de) (Ping timeout: 256 seconds)
2022-05-08 00:08:58 +0200kimjetwav(~user@2607:fea8:2362:b400:897f:4fc4:a1cd:a588)
2022-05-08 00:09:32 +0200CiaoSen(~Jura@p200300c95732ec002a3a4dfffe84dbd5.dip0.t-ipconnect.de) (Quit: CiaoSen)
2022-05-08 00:10:30 +0200unit73e(~emanuel@2001:818:e8dd:7c00:32b5:c2ff:fe6b:5291)
2022-05-08 00:11:41 +0200ub(~Thunderbi@p548c8d44.dip0.t-ipconnect.de)
2022-05-08 00:11:41 +0200ubert(~Thunderbi@p200300ecdf158805d084dc17279015c6.dip0.t-ipconnect.de) (Remote host closed the connection)
2022-05-08 00:11:41 +0200ububert
2022-05-08 00:17:34 +0200tromp(~textual@dhcp-077-249-230-040.chello.nl) (Quit: My iMac has gone to sleep. ZZZzzz…)
2022-05-08 00:19:09 +0200__monty__(~toonn@user/toonn) (Quit: leaving)
2022-05-08 00:22:24 +0200gehmehgeh(~user@user/gehmehgeh) (Quit: Leaving)
2022-05-08 00:23:21 +0200shailangsa_(~shailangs@host86-186-127-233.range86-186.btcentralplus.com) (Remote host closed the connection)
2022-05-08 00:24:31 +0200king_gs(~Thunderbi@2806:103e:29:99f9:ca77:e08e:3816:239e) (Remote host closed the connection)
2022-05-08 00:25:49 +0200king_gs(~Thunderbi@2806:103e:29:99f9:ca77:e08e:3816:239e)
2022-05-08 00:26:16 +0200whatsupdoc(uid509081@id-509081.hampstead.irccloud.com)
2022-05-08 00:40:19 +0200 <seydar> great news: built the blurhash decode and it appears to work perfectly! generated png is different from the C version and is literally half the size... but I assume that's because of the image libraries used
2022-05-08 00:41:13 +0200jinsun__(~jinsun@user/jinsun) (Read error: Connection reset by peer)
2022-05-08 00:41:54 +0200jinsun(~jinsun@user/jinsun)
2022-05-08 00:47:56 +0200seydar(~seydar@154-27-113-252.starry-inc.net) (Quit: leaving)
2022-05-08 00:49:19 +0200fendor_(~fendor@77.119.200.1.wireless.dyn.drei.com)
2022-05-08 00:52:09 +0200fendor(~fendor@178.165.198.115.wireless.dyn.drei.com) (Ping timeout: 256 seconds)
2022-05-08 00:59:50 +0200zebrag(~chris@user/zebrag)
2022-05-08 01:01:00 +0200abiss27(~abiss27@user/abiss)
2022-05-08 01:01:44 +0200 <sm> \o/
2022-05-08 01:01:48 +0200stackdroid18(~stackdroi@user/stackdroid)
2022-05-08 01:01:59 +0200jgeerds(~jgeerds@d53604b0.access.ecotel.net) (Ping timeout: 240 seconds)
2022-05-08 01:02:30 +0200Tuplanolla(~Tuplanoll@91-159-68-39.elisa-laajakaista.fi) (Quit: Leaving.)
2022-05-08 01:04:48 +0200shailangsa(~shailangs@host86-186-127-233.range86-186.btcentralplus.com)
2022-05-08 01:26:42 +0200Feuermagier(~Feuermagi@user/feuermagier) (Remote host closed the connection)
2022-05-08 01:26:47 +0200Topsi1(~Topsi@dyndsl-095-033-088-174.ewe-ip-backbone.de) (Read error: Connection reset by peer)
2022-05-08 01:30:44 +0200gpncarl(~gpncarl@120.244.220.74)
2022-05-08 01:31:34 +0200werneta(~werneta@70-142-214-115.lightspeed.irvnca.sbcglobal.net) (Ping timeout: 250 seconds)
2022-05-08 01:32:20 +0200raehik(~raehik@cpc95906-rdng25-2-0-cust156.15-3.cable.virginm.net) (Ping timeout: 248 seconds)
2022-05-08 01:35:05 +0200stevenxl(~stevenxl@174.128.182.150) (Quit: leaving)
2022-05-08 01:35:21 +0200gpncarl(~gpncarl@120.244.220.74) (Ping timeout: 276 seconds)
2022-05-08 01:36:25 +0200[itchyjunk](~itchyjunk@user/itchyjunk/x-7353470) (Ping timeout: 260 seconds)
2022-05-08 01:37:43 +0200machinedgod(~machinedg@24.105.81.50) (Ping timeout: 246 seconds)
2022-05-08 01:38:04 +0200Techcable(~Techcable@user/Techcable) (Remote host closed the connection)
2022-05-08 01:39:37 +0200Techcable(~Techcable@user/Techcable)
2022-05-08 01:39:57 +0200[itchyjunk](~itchyjunk@user/itchyjunk/x-7353470)
2022-05-08 01:45:57 +0200mmhat(~mmh@2001:4090:a246:8072:ee08:6bff:fe09:5315) (Quit: WeeChat 3.5)
2022-05-08 01:49:25 +0200unit73e(~emanuel@2001:818:e8dd:7c00:32b5:c2ff:fe6b:5291) (Remote host closed the connection)
2022-05-08 01:49:44 +0200eggplantade(~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net) (Remote host closed the connection)
2022-05-08 01:51:53 +0200chomwitt(~chomwitt@2a02:587:dc19:d600:88e2:8613:1b70:14d7) (Ping timeout: 248 seconds)
2022-05-08 02:02:05 +0200king_gs(~Thunderbi@2806:103e:29:99f9:ca77:e08e:3816:239e) (Ping timeout: 260 seconds)
2022-05-08 02:02:21 +0200king_gs(~Thunderbi@187.201.220.53)
2022-05-08 02:04:44 +0200zeenk(~zeenk@2a02:2f04:a004:9b00:1efc:c1cf:378d:8b3d) (Quit: Konversation terminated!)
2022-05-08 02:06:23 +0200hueso(~root@user/hueso) (Ping timeout: 256 seconds)
2022-05-08 02:07:51 +0200xff0x(~xff0x@om126254226100.33.openmobile.ne.jp)
2022-05-08 02:09:41 +0200wroathe(~wroathe@206-55-188-8.fttp.usinternet.com)
2022-05-08 02:09:41 +0200wroathe(~wroathe@206-55-188-8.fttp.usinternet.com) (Changing host)
2022-05-08 02:09:41 +0200wroathe(~wroathe@user/wroathe)
2022-05-08 02:10:51 +0200hueso(~root@user/hueso)
2022-05-08 02:14:12 +0200malinoskj290645(~malinoskj@c-69-138-223-33.hsd1.va.comcast.net) (Ping timeout: 240 seconds)
2022-05-08 02:14:50 +0200eggplantade(~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net)
2022-05-08 02:14:59 +0200FinnElija(~finn_elij@user/finn-elija/x-0085643) (Remote host closed the connection)
2022-05-08 02:15:22 +0200FinnElija(~finn_elij@user/finn-elija/x-0085643)
2022-05-08 02:24:01 +0200Feuermagier(~Feuermagi@user/feuermagier)
2022-05-08 02:45:27 +0200srz(~srz@181.228.49.93) (Ping timeout: 260 seconds)
2022-05-08 02:47:39 +0200jargon(~jargon@174-22-206-112.phnx.qwest.net)
2022-05-08 02:51:50 +0200malinoskj290645(~malinoskj@c-69-138-223-33.hsd1.va.comcast.net)
2022-05-08 02:53:47 +0200gurkenglas(~gurkengla@dslb-084-057-085-111.084.057.pools.vodafone-ip.de) (Ping timeout: 240 seconds)
2022-05-08 02:56:27 +0200machinedgod(~machinedg@24.105.81.50)
2022-05-08 02:57:30 +0200king_gs(~Thunderbi@187.201.220.53) (Ping timeout: 260 seconds)
2022-05-08 02:57:31 +0200malinoskj290645(~malinoskj@c-69-138-223-33.hsd1.va.comcast.net) (Ping timeout: 246 seconds)
2022-05-08 03:03:44 +0200stackdroid18(~stackdroi@user/stackdroid) (Quit: hasta la vista... tchau!)
2022-05-08 03:04:00 +0200tromp(~textual@dhcp-077-249-230-040.chello.nl)
2022-05-08 03:07:39 +0200tromp(~textual@dhcp-077-249-230-040.chello.nl) (Client Quit)
2022-05-08 03:07:40 +0200stackdroid18(14094@user/stackdroid)
2022-05-08 03:08:35 +0200srz(~srz@181.228.49.93)
2022-05-08 03:09:45 +0200takuan(~takuan@178-116-218-225.access.telenet.be)
2022-05-08 03:22:11 +0200jollygood2(www-data@2607:5300:60:8be::1) (Quit: CGI:IRC)
2022-05-08 03:32:06 +0200king_gs(~Thunderbi@187.201.220.53)
2022-05-08 03:35:29 +0200andrey__(~andrey@p200300dbcf3ea70066ff5d38847dda5c.dip0.t-ipconnect.de)
2022-05-08 03:38:12 +0200andrey_(~andrey@p200300dbcf2f4300665626c49851c8d7.dip0.t-ipconnect.de) (Ping timeout: 248 seconds)
2022-05-08 03:42:20 +0200werneta(~werneta@70-142-214-115.lightspeed.irvnca.sbcglobal.net)
2022-05-08 03:47:10 +0200srz_(~srz@179.36.126.172)
2022-05-08 03:50:05 +0200srz(~srz@181.228.49.93) (Ping timeout: 256 seconds)
2022-05-08 03:51:07 +0200king_gs(~Thunderbi@187.201.220.53) (Read error: Connection reset by peer)
2022-05-08 03:52:24 +0200king_gs(~Thunderbi@2806:103e:29:99f9:ca77:e08e:3816:239e)
2022-05-08 03:54:32 +0200modnar(~modnar@shell.sonic.net) (Ping timeout: 260 seconds)
2022-05-08 03:57:06 +0200modnar(~modnar@shell.sonic.net)
2022-05-08 03:57:18 +0200kaph(~kaph@net-2-42-128-205.cust.vodafonedsl.it) (Read error: Connection reset by peer)
2022-05-08 03:57:42 +0200modnar(~modnar@shell.sonic.net) (Remote host closed the connection)
2022-05-08 04:12:53 +0200FinnElija(~finn_elij@user/finn-elija/x-0085643) (Killed (NickServ (Forcing logout FinnElija -> finn_elija)))
2022-05-08 04:12:53 +0200finn_elija(~finn_elij@user/finn-elija/x-0085643)
2022-05-08 04:12:53 +0200finn_elijaFinnElija
2022-05-08 04:17:32 +0200joo-_(~joo-_@fsf/member/joo--) (Ping timeout: 272 seconds)
2022-05-08 04:18:14 +0200wroathe(~wroathe@user/wroathe) (Read error: Connection reset by peer)
2022-05-08 04:18:53 +0200joo-_(~joo-_@87-49-44-29-mobile.dk.customer.tdc.net)
2022-05-08 04:18:53 +0200joo-_(~joo-_@87-49-44-29-mobile.dk.customer.tdc.net) (Changing host)
2022-05-08 04:18:53 +0200joo-_(~joo-_@fsf/member/joo--)
2022-05-08 04:19:04 +0200wroathe(~wroathe@206-55-188-8.fttp.usinternet.com)
2022-05-08 04:19:04 +0200wroathe(~wroathe@206-55-188-8.fttp.usinternet.com) (Changing host)
2022-05-08 04:19:04 +0200wroathe(~wroathe@user/wroathe)
2022-05-08 04:23:28 +0200yauhsien(~yauhsien@61-231-26-70.dynamic-ip.hinet.net)
2022-05-08 04:25:40 +0200waleee(~waleee@2001:9b0:213:7200:cc36:a556:b1e8:b340) (Ping timeout: 248 seconds)
2022-05-08 04:26:55 +0200AlexNoo_(~AlexNoo@178.34.162.228)
2022-05-08 04:28:41 +0200AlexZenon(~alzenon@178.34.163.12) (Ping timeout: 248 seconds)
2022-05-08 04:29:13 +0200pretty_dumm_guy(trottel@gateway/vpn/protonvpn/prettydummguy/x-88029655) (Ping timeout: 246 seconds)
2022-05-08 04:29:55 +0200Alex_test(~al_test@178.34.163.12) (Ping timeout: 246 seconds)
2022-05-08 04:30:19 +0200AlexNoo(~AlexNoo@178.34.163.12) (Ping timeout: 256 seconds)
2022-05-08 04:31:21 +0200yauhsien(~yauhsien@61-231-26-70.dynamic-ip.hinet.net) (Ping timeout: 252 seconds)
2022-05-08 04:34:19 +0200Alex_test(~al_test@178.34.162.228)
2022-05-08 04:34:26 +0200AlexZenon(~alzenon@178.34.162.228)
2022-05-08 04:37:27 +0200king_gs(~Thunderbi@2806:103e:29:99f9:ca77:e08e:3816:239e) (Quit: king_gs)
2022-05-08 04:53:33 +0200td_(~td@94.134.91.63) (Ping timeout: 256 seconds)
2022-05-08 04:53:51 +0200FinnElija(~finn_elij@user/finn-elija/x-0085643) (Remote host closed the connection)
2022-05-08 04:54:15 +0200FinnElija(~finn_elij@user/finn-elija/x-0085643)
2022-05-08 04:55:08 +0200td_(~td@94.134.91.69)
2022-05-08 05:00:00 +0200jao(~jao@211.68.17.95.dynamic.jazztel.es) (Ping timeout: 260 seconds)
2022-05-08 05:00:08 +0200stackdroid18(14094@user/stackdroid) (Quit: hasta la vista... tchau!)
2022-05-08 05:04:15 +0200abiss27(~abiss27@user/abiss) (Quit: hasta la vista... tchau!)
2022-05-08 05:05:42 +0200FinnElija(~finn_elij@user/finn-elija/x-0085643) (Remote host closed the connection)
2022-05-08 05:06:02 +0200FinnElija(~finn_elij@user/finn-elija/x-0085643)
2022-05-08 05:06:03 +0200FinnElija(~finn_elij@user/finn-elija/x-0085643) (Remote host closed the connection)
2022-05-08 05:06:26 +0200FinnElija(~finn_elij@user/finn-elija/x-0085643)
2022-05-08 05:07:30 +0200tommd(~tommd@97-120-26-41.ptld.qwest.net)
2022-05-08 05:08:12 +0200notzmv(~zmv@user/notzmv) (Ping timeout: 252 seconds)
2022-05-08 05:09:31 +0200khumba(~khumba@user/khumba)
2022-05-08 05:11:22 +0200notzmv(~zmv@user/notzmv)
2022-05-08 05:11:48 +0200russruss(~russruss@my.russellmcc.com) (Ping timeout: 240 seconds)
2022-05-08 05:13:45 +0200nate1(~nate@98.45.169.16)
2022-05-08 05:14:15 +0200srz_(~srz@179.36.126.172) (Quit: Leaving)
2022-05-08 05:16:21 +0200Codaraxis__(~Codaraxis@user/codaraxis) (Quit: Leaving)
2022-05-08 05:17:48 +0200russruss(~russruss@my.russellmcc.com)
2022-05-08 05:21:47 +0200xkuru(~xkuru@user/xkuru) (Read error: Connection reset by peer)
2022-05-08 05:29:46 +0200machinedgod(~machinedg@24.105.81.50) (Ping timeout: 246 seconds)
2022-05-08 05:30:58 +0200yauhsien(~yauhsien@61-231-26-70.dynamic-ip.hinet.net)
2022-05-08 05:32:31 +0200zebrag(~chris@user/zebrag) (Quit: Konversation terminated!)
2022-05-08 05:33:00 +0200nattiestnate(~nate@202.138.250.10)
2022-05-08 05:33:29 +0200jargon(~jargon@174-22-206-112.phnx.qwest.net) (Quit: Nini.. ZZzz...)
2022-05-08 05:33:53 +0200wroathe(~wroathe@user/wroathe) (Read error: Connection reset by peer)
2022-05-08 05:34:18 +0200wroathe(~wroathe@206-55-188-8.fttp.usinternet.com)
2022-05-08 05:34:18 +0200wroathe(~wroathe@206-55-188-8.fttp.usinternet.com) (Changing host)
2022-05-08 05:34:18 +0200wroathe(~wroathe@user/wroathe)
2022-05-08 05:35:10 +0200khumba(~khumba@user/khumba) ()
2022-05-08 05:44:33 +0200tommd(~tommd@97-120-26-41.ptld.qwest.net) (Ping timeout: 256 seconds)
2022-05-08 05:48:28 +0200zaquest(~notzaques@5.130.79.72) (Remote host closed the connection)
2022-05-08 05:50:20 +0200nattiestnate(~nate@202.138.250.10) (Quit: WeeChat 3.5)
2022-05-08 05:51:11 +0200zaquest(~notzaques@5.130.79.72)
2022-05-08 05:52:55 +0200kaph(~kaph@net-2-42-128-205.cust.vodafonedsl.it)
2022-05-08 05:55:19 +0200Kaiepi(~Kaiepi@156.34.47.253) (Ping timeout: 246 seconds)
2022-05-08 05:55:27 +0200xff0x(~xff0x@om126254226100.33.openmobile.ne.jp) (Read error: Connection reset by peer)
2022-05-08 05:59:31 +0200notzmv(~zmv@user/notzmv) (Ping timeout: 246 seconds)
2022-05-08 06:01:42 +0200notzmv(~zmv@user/notzmv)
2022-05-08 06:08:36 +0200notzmv(~zmv@user/notzmv) (Ping timeout: 248 seconds)
2022-05-08 06:11:34 +0200xff0x(~xff0x@om126254226100.33.openmobile.ne.jp)
2022-05-08 06:19:20 +0200rekahsoft(~rekahsoft@cpe001b21a2fd89-cm64777ddc63a0.cpe.net.cable.rogers.com)
2022-05-08 06:20:52 +0200nate1(~nate@98.45.169.16) (Ping timeout: 246 seconds)
2022-05-08 06:27:30 +0200rekahsoft(~rekahsoft@cpe001b21a2fd89-cm64777ddc63a0.cpe.net.cable.rogers.com) (Remote host closed the connection)
2022-05-08 06:30:28 +0200yauhsien(~yauhsien@61-231-26-70.dynamic-ip.hinet.net) (Ping timeout: 248 seconds)
2022-05-08 06:33:11 +0200rekahsoft(~rekahsoft@cpe001b21a2fd89-cm64777ddc63a0.cpe.net.cable.rogers.com)
2022-05-08 06:36:25 +0200mbuf(~Shakthi@122.174.202.44)
2022-05-08 06:39:28 +0200rekahsoft(~rekahsoft@cpe001b21a2fd89-cm64777ddc63a0.cpe.net.cable.rogers.com) (Remote host closed the connection)
2022-05-08 06:39:50 +0200rekahsoft(~rekahsoft@cpe001b21a2fd89-cm64777ddc63a0.cpe.net.cable.rogers.com)
2022-05-08 06:45:07 +0200coot(~coot@2a02:a310:e241:1b00:ec1a:e9df:79ac:66ba)
2022-05-08 06:46:38 +0200king_gs(~Thunderbi@2806:103e:29:99f9:ca77:e08e:3816:239e)
2022-05-08 06:46:57 +0200Unicorn_Princess(~Unicorn_P@93-103-228-248.dynamic.t-2.net) (Remote host closed the connection)
2022-05-08 07:11:58 +0200wroathe(~wroathe@user/wroathe) (Ping timeout: 246 seconds)
2022-05-08 07:13:01 +0200melas(~melas@172.77.31.247) (Ping timeout: 246 seconds)
2022-05-08 07:16:07 +0200bahamas(~lucian@84.232.141.55)
2022-05-08 07:25:15 +0200Guest61(~Guest61@14.173.62.239)
2022-05-08 07:27:05 +0200 <Guest61> @help
2022-05-08 07:27:11 +0200 <Guest61> list
2022-05-08 07:27:15 +0200 <Guest61> @list
2022-05-08 07:27:16 +0200 <lambdabot> What module? Try @listmodules for some ideas.
2022-05-08 07:27:20 +0200 <Guest61> @listmodules
2022-05-08 07:27:20 +0200 <lambdabot> activity base bf check compose dice dict djinn dummy elite eval filter free fresh haddock help hoogle instances irc karma localtime metar more oeis offlineRC pl pointful poll pretty quote search
2022-05-08 07:27:20 +0200 <lambdabot> seen slap source spell system tell ticker todo topic type undo unlambda unmtl version where
2022-05-08 07:27:41 +0200 <Guest61> @pl \xs n -> take n xs ==> flip take
2022-05-08 07:27:42 +0200 <lambdabot> flip flip (flip take) . ((==>) .) . flip take
2022-05-08 07:28:25 +0200Kaiepi(~Kaiepi@156.34.47.253)
2022-05-08 07:29:16 +0200 <Guest61> @pl \fn1 fn2 a1 a2 -> fn1 (fn2 a1) (fn2 a2)
2022-05-08 07:29:16 +0200 <lambdabot> join . ((flip . ((.) .)) .) . (.)
2022-05-08 07:29:53 +0200 <Guest61> @pl \fn2 a1 a2 -> (fn2 a1) (fn2 a2)
2022-05-08 07:29:53 +0200 <lambdabot> flip =<< ((.) .)
2022-05-08 07:30:30 +0200 <elmyr> @src (.)
2022-05-08 07:30:30 +0200 <lambdabot> (f . g) x = f (g x)
2022-05-08 07:30:49 +0200 <elmyr> Day 1 of checking if lambdabot is back to Caleskell.
2022-05-08 07:31:08 +0200elmyr(sid3438@user/dy) (Quit: Updating details, brb)
2022-05-08 07:31:17 +0200elmyr(sid3438@user/dy)
2022-05-08 07:33:24 +0200xff0x(~xff0x@om126254226100.33.openmobile.ne.jp) (Read error: Connection reset by peer)
2022-05-08 07:40:45 +0200harveypwca(~harveypwc@2601:246:c180:a570:3828:d8:e523:3f67) (Quit: Leaving)
2022-05-08 07:45:33 +0200whatsupdoc(uid509081@id-509081.hampstead.irccloud.com) (Quit: Connection closed for inactivity)
2022-05-08 07:48:03 +0200king_gs(~Thunderbi@2806:103e:29:99f9:ca77:e08e:3816:239e) (Remote host closed the connection)
2022-05-08 07:48:21 +0200king_gs(~Thunderbi@2806:103e:29:99f9:ca77:e08e:3816:239e)
2022-05-08 07:49:24 +0200bahamas(~lucian@84.232.141.55) (Ping timeout: 248 seconds)
2022-05-08 07:49:45 +0200rekahsoft(~rekahsoft@cpe001b21a2fd89-cm64777ddc63a0.cpe.net.cable.rogers.com) (Ping timeout: 276 seconds)
2022-05-08 07:51:19 +0200Guest27(~Guest27@78.173.53.235)
2022-05-08 07:51:31 +0200 <Guest27> hello
2022-05-08 07:52:01 +0200Guest27(~Guest27@78.173.53.235) (Client Quit)
2022-05-08 08:05:56 +0200Kaiepi(~Kaiepi@156.34.47.253) (Ping timeout: 248 seconds)
2022-05-08 08:06:04 +0200melas(~melas@172.77.31.247)
2022-05-08 08:09:03 +0200tromp(~textual@dhcp-077-249-230-040.chello.nl)
2022-05-08 08:09:21 +0200Kaiepi(~Kaiepi@156.34.47.253)
2022-05-08 08:17:06 +0200 <ski> elmyr : you should be checking `type' rather than `src', for that
2022-05-08 08:18:51 +0200tromp(~textual@dhcp-077-249-230-040.chello.nl) (Quit: My iMac has gone to sleep. ZZZzzz…)
2022-05-08 08:20:51 +0200Pickchea(~private@user/pickchea)
2022-05-08 08:21:45 +0200notzmv(~zmv@user/notzmv)
2022-05-08 08:23:34 +0200littlebobeep(~alMalsamo@gateway/tor-sasl/almalsamo) (Ping timeout: 240 seconds)
2022-05-08 08:29:57 +0200chomwitt(~chomwitt@2a02:587:dc19:d600:24ae:3716:1088:6d4d)
2022-05-08 08:37:55 +0200tromp(~textual@dhcp-077-249-230-040.chello.nl)
2022-05-08 08:39:17 +0200gehmehgeh(~user@user/gehmehgeh)
2022-05-08 08:40:54 +0200littlebobeep(~alMalsamo@gateway/tor-sasl/almalsamo)
2022-05-08 08:43:01 +0200img(~img@user/img) (Quit: ZNC 1.8.2 - https://znc.in)
2022-05-08 08:43:18 +0200img(~img@user/img)
2022-05-08 08:49:15 +0200jmdaemon(~jmdaemon@user/jmdaemon) (Ping timeout: 260 seconds)
2022-05-08 08:50:24 +0200random-jellyfish(~random-je@user/random-jellyfish)
2022-05-08 08:54:03 +0200wootehfoot(~wootehfoo@user/wootehfoot)
2022-05-08 08:55:48 +0200kenran(~kenran@200116b82be152003bcf840303205486.dip.versatel-1u1.de)
2022-05-08 08:56:33 +0200king_gs(~Thunderbi@2806:103e:29:99f9:ca77:e08e:3816:239e) (Remote host closed the connection)
2022-05-08 08:57:52 +0200king_gs(~Thunderbi@2806:103e:29:99f9:ca77:e08e:3816:239e)
2022-05-08 08:58:55 +0200bahamas(~lucian@84.232.141.55)
2022-05-08 09:03:46 +0200 <tomsmeding> What was the deal with (.) earlier then
2022-05-08 09:06:15 +0200yauhsien(~yauhsien@61-231-26-70.dynamic-ip.hinet.net)
2022-05-08 09:11:23 +0200yauhsien(~yauhsien@61-231-26-70.dynamic-ip.hinet.net) (Ping timeout: 256 seconds)
2022-05-08 09:14:24 +0200f-a(f2a@f2a.jujube.ircnow.org) ()
2022-05-08 09:17:40 +0200wootehfoot(~wootehfoo@user/wootehfoot) (Read error: Connection reset by peer)
2022-05-08 09:17:50 +0200yauhsien(~yauhsien@61-231-26-70.dynamic-ip.hinet.net)
2022-05-08 09:18:51 +0200kaph(~kaph@net-2-42-128-205.cust.vodafonedsl.it) (Ping timeout: 260 seconds)
2022-05-08 09:22:02 +0200whatsupdoc(uid509081@id-509081.hampstead.irccloud.com)
2022-05-08 09:23:37 +0200notzmv(~zmv@user/notzmv) (Ping timeout: 248 seconds)
2022-05-08 09:26:59 +0200yauhsien(~yauhsien@61-231-26-70.dynamic-ip.hinet.net) (Remote host closed the connection)
2022-05-08 09:27:47 +0200yauhsien(~yauhsien@61-231-26-70.dynamic-ip.hinet.net)
2022-05-08 09:29:12 +0200xff0x(~xff0x@om126254226100.33.openmobile.ne.jp)
2022-05-08 09:31:21 +0200wootehfoot(~wootehfoo@user/wootehfoot)
2022-05-08 09:33:06 +0200melas(~melas@172.77.31.247) (Ping timeout: 276 seconds)
2022-05-08 09:39:06 +0200notzmv(~zmv@user/notzmv)
2022-05-08 09:46:30 +0200 <c_wraith> :t (\f g -> pure f =<< g) `asTypeOf` (.) -- tomsmeding
2022-05-08 09:46:31 +0200 <lambdabot> (a -> b) -> (a -> a) -> a -> b
2022-05-08 09:47:05 +0200 <tomsmeding> c_wraith: so, fmap?
2022-05-08 09:47:10 +0200 <c_wraith> I commented that `pure f =<< g' is a very long walk to reimplement (.)
2022-05-08 09:47:30 +0200 <tomsmeding> Ah, now I remember people saying that lambdabot had (.) = fmap at some point :)
2022-05-08 09:47:47 +0200 <c_wraith> yep. that was the "caleskell" being referred to
2022-05-08 09:47:53 +0200 <tomsmeding> Right
2022-05-08 09:50:01 +0200 <tomsmeding> So fmap and (<<<) both generalise (.), I wonder if those are incompatible
2022-05-08 09:50:29 +0200MoC(~moc@user/moc)
2022-05-08 09:50:37 +0200 <c_wraith> :t (>>>) `asTypeOf` fmap
2022-05-08 09:50:38 +0200 <lambdabot> (a -> a) -> (a -> a) -> a -> a
2022-05-08 09:50:44 +0200 <c_wraith> err
2022-05-08 09:50:48 +0200 <c_wraith> :t (<<<) `asTypeOf` fmap
2022-05-08 09:50:50 +0200 <lambdabot> (b -> c) -> (a -> b) -> a -> c
2022-05-08 09:51:10 +0200 <c_wraith> between the two of them, every polytypic variable in the other is monomorphized
2022-05-08 09:51:11 +0200Hash(~Hash@hey.howstoned.ru) (Read error: Connection reset by peer)
2022-05-08 09:51:18 +0200 <tomsmeding> You'd need an fmap' that takes a 'cat a b' as the function argument
2022-05-08 09:51:24 +0200 <tomsmeding> But that makes no sense for some functors
2022-05-08 09:51:48 +0200 <tomsmeding> So they are indeed incompatible generalisations
2022-05-08 09:52:55 +0200MoC(~moc@user/moc) (Read error: Connection reset by peer)
2022-05-08 09:52:59 +0200notzmv(~zmv@user/notzmv) (Ping timeout: 240 seconds)
2022-05-08 09:53:04 +0200MoC_(~moc@user/moc)
2022-05-08 09:53:21 +0200[itchyjunk](~itchyjunk@user/itchyjunk/x-7353470) (Read error: Connection reset by peer)
2022-05-08 09:53:45 +0200 <tomsmeding> Hm, `class Category cat => CFunctor cat f where fmap :: cat a b -> cat (f a) (f b)` maybe, with `type Functor = CFunctor (->)`
2022-05-08 09:53:47 +0200Hash(~Hash@hey.howstoned.ru)
2022-05-08 09:56:07 +0200notzmv(~zmv@user/notzmv)
2022-05-08 09:56:35 +0200 <tomsmeding> Hm, then you'd want `instance CFunctor cat (cat c)` but not sure whether that can work in general
2022-05-08 09:58:40 +0200cigsender(~cigsender@cpe5c7d7db831c8-cm5c7d7db831c6.cpe.net.cable.rogers.com) (Ping timeout: 260 seconds)
2022-05-08 09:59:22 +0200MoC_MoC
2022-05-08 10:01:04 +0200cigsender(~cigsender@cpe5c7d7db831c8-cm5c7d7db831c6.cpe.net.cable.rogers.com)
2022-05-08 10:05:27 +0200Tuplanolla(~Tuplanoll@91-159-68-39.elisa-laajakaista.fi)
2022-05-08 10:07:20 +0200kmein(~weechat@user/kmein) (Quit: ciao kakao)
2022-05-08 10:07:53 +0200Pickchea(~private@user/pickchea) (Ping timeout: 248 seconds)
2022-05-08 10:07:57 +0200kmein(~weechat@user/kmein)
2022-05-08 10:08:00 +0200werneta(~werneta@70-142-214-115.lightspeed.irvnca.sbcglobal.net) (Ping timeout: 260 seconds)
2022-05-08 10:08:36 +0200xff0x(~xff0x@om126254226100.33.openmobile.ne.jp) (Ping timeout: 248 seconds)
2022-05-08 10:09:01 +0200qy(~ix@2a02:8010:674f:0:d65d:64ff:fe52:5efe) (Quit: WeeChat 3.4)
2022-05-08 10:10:07 +0200ix(~ix@2a02:8010:674f:0:d65d:64ff:fe52:5efe)
2022-05-08 10:10:36 +0200xff0x(~xff0x@om126254226100.33.openmobile.ne.jp)
2022-05-08 10:11:10 +0200mikoto-chan(~mikoto-ch@213.177.151.239)
2022-05-08 10:13:40 +0200_ht(~quassel@231-169-21-31.ftth.glasoperator.nl)
2022-05-08 10:15:57 +0200zeenk(~zeenk@2a02:2f04:a004:9b00:1efc:c1cf:378d:8b3d)
2022-05-08 10:25:40 +0200tromp(~textual@dhcp-077-249-230-040.chello.nl) (Quit: My iMac has gone to sleep. ZZZzzz…)
2022-05-08 10:29:01 +0200bahamas(~lucian@84.232.141.55) (Ping timeout: 246 seconds)
2022-05-08 10:30:55 +0200bahamas(~lucian@84.232.141.55)
2022-05-08 10:31:21 +0200notzmv(~zmv@user/notzmv) (Ping timeout: 248 seconds)
2022-05-08 10:33:14 +0200kimjetwav(~user@2607:fea8:2362:b400:897f:4fc4:a1cd:a588) (Ping timeout: 250 seconds)
2022-05-08 10:35:52 +0200bahamas(~lucian@84.232.141.55) (Ping timeout: 260 seconds)
2022-05-08 10:39:17 +0200tzh(~tzh@c-24-21-73-154.hsd1.or.comcast.net) (Quit: zzz)
2022-05-08 10:43:25 +0200notzmv(~zmv@user/notzmv)
2022-05-08 10:48:40 +0200yauhsien(~yauhsien@61-231-26-70.dynamic-ip.hinet.net) (Remote host closed the connection)
2022-05-08 10:49:32 +0200yauhsien(~yauhsien@61-231-26-70.dynamic-ip.hinet.net)
2022-05-08 10:53:15 +0200jakalx(~jakalx@base.jakalx.net) ()
2022-05-08 10:53:57 +0200yauhsien(~yauhsien@61-231-26-70.dynamic-ip.hinet.net) (Ping timeout: 256 seconds)
2022-05-08 10:55:01 +0200king_gs(~Thunderbi@2806:103e:29:99f9:ca77:e08e:3816:239e) (Quit: king_gs)
2022-05-08 10:55:38 +0200yauhsien(~yauhsien@61-231-26-70.dynamic-ip.hinet.net)
2022-05-08 11:02:34 +0200 <mikoto-chan> how do I install libmpd with cabal?
2022-05-08 11:02:38 +0200 <mikoto-chan> I get a weird error
2022-05-08 11:02:47 +0200 <mikoto-chan> Cannot build the executables in the package libmpd because it does not
2022-05-08 11:02:50 +0200 <mikoto-chan> contain any executables
2022-05-08 11:06:31 +0200 <maerwald[m]> mikoto-chan: the library?
2022-05-08 11:10:34 +0200 <mikoto-chan> maerwald[m]: --lib :|
2022-05-08 11:12:04 +0200 <mikoto-chan> can I ask questions about xmobar here?
2022-05-08 11:12:26 +0200 <mikoto-chan> the mpd plugin isn't exactly working
2022-05-08 11:12:33 +0200 <mikoto-chan> do I need to use the system-wide daemon?
2022-05-08 11:13:14 +0200 <mikoto-chan> yes seems like it
2022-05-08 11:13:22 +0200jakalx(~jakalx@base.jakalx.net)
2022-05-08 11:17:26 +0200gehmehgeh(~user@user/gehmehgeh) (Remote host closed the connection)
2022-05-08 11:17:26 +0200FinnElija(~finn_elij@user/finn-elija/x-0085643) (Remote host closed the connection)
2022-05-08 11:17:48 +0200FinnElija(~finn_elij@user/finn-elija/x-0085643)
2022-05-08 11:18:08 +0200gehmehgeh(~user@user/gehmehgeh)
2022-05-08 11:19:43 +0200gabriel_sevecek(~gabriel@188-167-229-200.dynamic.chello.sk) (Quit: WeeChat 3.5)
2022-05-08 11:20:22 +0200gabriel_sevecek(~gabriel@188-167-229-200.dynamic.chello.sk)
2022-05-08 11:26:40 +0200bahamas(~lucian@84.232.141.55)
2022-05-08 11:29:47 +0200gabriel_sevecek(~gabriel@188-167-229-200.dynamic.chello.sk) (Ping timeout: 240 seconds)
2022-05-08 11:30:28 +0200 <AndreasK> I have a possible stupid question. Is `cabal install cabal-install` supposed to work?
2022-05-08 11:31:06 +0200 <AndreasK> And if the answer is yes, which ghc versions are supposed to build the latest version that way?
2022-05-08 11:32:35 +0200bahamas(~lucian@84.232.141.55) (Ping timeout: 260 seconds)
2022-05-08 11:33:30 +0200 <AndreasK> I guess it just doesn'T support building with 9.2 yet
2022-05-08 11:34:25 +0200jpds(~jpds@gateway/tor-sasl/jpds) (Remote host closed the connection)
2022-05-08 11:34:41 +0200econo(uid147250@user/econo) (Quit: Connection closed for inactivity)
2022-05-08 11:34:47 +0200jpds(~jpds@gateway/tor-sasl/jpds)
2022-05-08 11:37:08 +0200coot(~coot@2a02:a310:e241:1b00:ec1a:e9df:79ac:66ba) (Quit: coot)
2022-05-08 11:39:10 +0200tromp(~textual@dhcp-077-249-230-040.chello.nl)
2022-05-08 11:49:25 +0200Sgeo(~Sgeo@user/sgeo) (Read error: Connection reset by peer)
2022-05-08 11:52:36 +0200jespada(~jespada@146.70.119.114) (Ping timeout: 248 seconds)
2022-05-08 11:53:34 +0200littlebobeep(~alMalsamo@gateway/tor-sasl/almalsamo) (Ping timeout: 240 seconds)
2022-05-08 11:54:18 +0200jespada(~jespada@cpc121022-nmal24-2-0-cust171.19-2.cable.virginm.net)
2022-05-08 11:58:23 +0200 <AndreasK> Or 9.0
2022-05-08 12:10:22 +0200flupe(~baboum@radon.sbi.re)
2022-05-08 12:11:42 +0200coot(~coot@213.134.190.95)
2022-05-08 12:16:57 +0200wootehfoot(~wootehfoo@user/wootehfoot) (Read error: Connection reset by peer)
2022-05-08 12:22:10 +0200Vajb(~Vajb@hag-jnsbng11-58c3a8-176.dhcp.inet.fi) (Read error: Connection reset by peer)
2022-05-08 12:22:56 +0200Vajb(~Vajb@2001:999:400:9bc1:d5dd:7e53:33b:56)
2022-05-08 12:24:28 +0200AlexNoo_AlexNoo
2022-05-08 12:24:43 +0200oxide(~lambda@user/oxide)
2022-05-08 12:25:38 +0200yauhsien(~yauhsien@61-231-26-70.dynamic-ip.hinet.net) (Remote host closed the connection)
2022-05-08 12:26:50 +0200yauhsien(~yauhsien@61-231-26-70.dynamic-ip.hinet.net)
2022-05-08 12:28:35 +0200xff0x(~xff0x@om126254226100.33.openmobile.ne.jp) (Read error: Connection reset by peer)
2022-05-08 12:29:15 +0200oxide(~lambda@user/oxide) (Ping timeout: 276 seconds)
2022-05-08 12:31:08 +0200oxide(~lambda@user/oxide)
2022-05-08 12:31:59 +0200yauhsien(~yauhsien@61-231-26-70.dynamic-ip.hinet.net) (Ping timeout: 256 seconds)
2022-05-08 12:35:25 +0200 <maerwald> AndreasK: it works sometimes
2022-05-08 12:36:15 +0200whatsupdoc(uid509081@id-509081.hampstead.irccloud.com) (Quit: Connection closed for inactivity)
2022-05-08 12:37:00 +0200 <AndreasK> As far as I can tell it should work with 8.10 but on this box my oldest GHC is 9.0.1
2022-05-08 12:38:54 +0200xff0x(~xff0x@om126254226100.33.openmobile.ne.jp)
2022-05-08 12:39:56 +0200littlebobeep(~alMalsamo@gateway/tor-sasl/almalsamo)
2022-05-08 12:41:14 +0200zeenk(~zeenk@2a02:2f04:a004:9b00:1efc:c1cf:378d:8b3d) (Quit: Konversation terminated!)
2022-05-08 12:42:01 +0200Guest61(~Guest61@14.173.62.239) (Quit: Client closed)
2022-05-08 12:43:41 +0200melas(~melas@172.77.31.247)
2022-05-08 12:44:06 +0200gurkenglas(~gurkengla@dslb-084-057-085-111.084.057.pools.vodafone-ip.de)
2022-05-08 12:45:52 +0200frost(~frost@user/frost)
2022-05-08 12:48:36 +0200cyphase(~cyphase@user/cyphase) (Ping timeout: 248 seconds)
2022-05-08 12:50:06 +0200Lord_of_Life_(~Lord@user/lord-of-life/x-2819915)
2022-05-08 12:50:27 +0200cyphase(~cyphase@user/cyphase)
2022-05-08 12:50:35 +0200Lord_of_Life(~Lord@user/lord-of-life/x-2819915) (Ping timeout: 256 seconds)
2022-05-08 12:50:59 +0200 <maerwald> AndreasK: can you install 8.10?
2022-05-08 12:52:19 +0200 <AndreasK> Yes. But I think I will just download a 3.6 binary instead.
2022-05-08 12:52:50 +0200Lord_of_Life_Lord_of_Life
2022-05-08 12:53:53 +0200MoC(~moc@user/moc) (Quit: Konversation terminated!)
2022-05-08 13:00:12 +0200MajorBiscuit(~MajorBisc@c-001-007-017.client.tudelft.eduvpn.nl)
2022-05-08 13:05:47 +0200kaph(~kaph@net-2-42-128-205.cust.vodafonedsl.it)
2022-05-08 13:05:55 +0200jakalx(~jakalx@base.jakalx.net) (Disconnected: Replaced by new connection)
2022-05-08 13:05:56 +0200jakalx(~jakalx@base.jakalx.net)
2022-05-08 13:08:47 +0200eggplantade(~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net) (Remote host closed the connection)
2022-05-08 13:18:16 +0200pretty_dumm_guy(trottel@gateway/vpn/protonvpn/prettydummguy/x-88029655)
2022-05-08 13:27:07 +0200fendor_(~fendor@77.119.200.1.wireless.dyn.drei.com) (Remote host closed the connection)
2022-05-08 13:28:30 +0200asivitz(uid178348@id-178348.tinside.irccloud.com) (Quit: Connection closed for inactivity)
2022-05-08 13:28:39 +0200ubert1(~Thunderbi@p200300ecdf158841296f298839ed6584.dip0.t-ipconnect.de)
2022-05-08 13:40:07 +0200 <dminuoso> I have a bunch of `IO T` where T has Monoid, is some shorter version of `fmap mconcat <$> sequence [a, b, c]`?
2022-05-08 13:40:17 +0200xaotuk(~sasha@net234-32-245-109.mbb.telenor.rs)
2022-05-08 13:40:45 +0200oxide(~lambda@user/oxide) (Ping timeout: 276 seconds)
2022-05-08 13:46:23 +0200 <[exa]> dminuoso: `fold` with Ap? https://hackage.haskell.org/package/base-4.16.1.0/docs/Data-Monoid.html#g:6
2022-05-08 13:47:28 +0200oxide(~lambda@user/oxide)
2022-05-08 13:49:40 +0200 <dminuoso> [exa]: Mmm ah yes, I think thats what I was looking for. Not convinced this is better.
2022-05-08 13:50:42 +0200 <[exa]> :t getAp . fold . fmap Ap
2022-05-08 13:50:44 +0200 <lambdabot> forall k (t :: * -> *) (f :: k -> *) (a :: k). (Foldable t, Monoid (Ap f a), Functor t) => t (f a) -> f a
2022-05-08 13:51:20 +0200 <[exa]> would get competitive if there'd be some kind of `foldVia Ap` :D
2022-05-08 13:51:33 +0200 <dminuoso> Well that'
2022-05-08 13:51:37 +0200 <dminuoso> Well that's `ala` territory.
2022-05-08 13:51:53 +0200 <dminuoso> :t ala
2022-05-08 13:51:54 +0200 <lambdabot> (Functor f, Rewrapped s t, Rewrapped t s) => (Unwrapped s -> s) -> ((Unwrapped t -> t) -> f s) -> f (Unwrapped s)
2022-05-08 13:51:57 +0200 <[exa]> true
2022-05-08 13:52:22 +0200 <[exa]> is there a rewrapper?
2022-05-08 13:52:39 +0200 <dminuoso> rewrapper?
2022-05-08 13:53:28 +0200 <dminuoso> :t overF
2022-05-08 13:53:29 +0200 <lambdabot> error:
2022-05-08 13:53:30 +0200 <lambdabot> • Variable not in scope: overF
2022-05-08 13:53:30 +0200 <lambdabot> • Perhaps you meant one of these:
2022-05-08 13:55:39 +0200 <[exa]> :t al Ap foldMap
2022-05-08 13:55:40 +0200 <lambdabot> error:
2022-05-08 13:55:40 +0200 <lambdabot> • Variable not in scope:
2022-05-08 13:55:40 +0200 <lambdabot> al :: (f0 a0 -> Ap f0 a0) -> ((a1 -> m0) -> t0 a1 -> m0) -> t
2022-05-08 13:55:45 +0200 <[exa]> too much `a`
2022-05-08 13:55:59 +0200 <[exa]> :t ala Ap foldMap
2022-05-08 13:56:01 +0200 <lambdabot> forall k1 (t :: * -> *) (g :: k1 -> *) (b :: k1). (Foldable t, Monoid (Ap g b)) => t (g b) -> g b
2022-05-08 13:56:27 +0200 <[exa]> still I like the sequence one better :]
2022-05-08 13:56:31 +0200 <dminuoso> > ala Ap foldMap [pure [1,2] :: IO [Int], pure [3,4]]
2022-05-08 13:56:33 +0200 <lambdabot> <IO [Int]>
2022-05-08 13:56:47 +0200 <dminuoso> You use this if you have your coworkers.
2022-05-08 13:56:50 +0200 <dminuoso> s/have/hate/
2022-05-08 13:57:07 +0200 <dminuoso> And ideally you use not `newtypes` but `lens` for it.
2022-05-08 13:57:22 +0200 <dminuoso> (definitely not coercible-utils)
2022-05-08 13:58:01 +0200 <[exa]> :]
2022-05-08 13:58:34 +0200littlebobeep(~alMalsamo@gateway/tor-sasl/almalsamo) (Ping timeout: 240 seconds)
2022-05-08 14:00:04 +0200melas(~melas@172.77.31.247) (Ping timeout: 246 seconds)
2022-05-08 14:01:23 +0200 <[Leary]> dminuoso: Isn't it just "fold"? We have Monoid a => Monoid (IO a).
2022-05-08 14:04:42 +0200juri__juri_
2022-05-08 14:08:36 +0200ubert1(~Thunderbi@p200300ecdf158841296f298839ed6584.dip0.t-ipconnect.de) (Ping timeout: 248 seconds)
2022-05-08 14:09:29 +0200eggplantade(~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net)
2022-05-08 14:12:48 +0200 <[exa]> [Leary]: something needs to tell it how to fold the applicatives
2022-05-08 14:13:22 +0200 <[exa]> ah for IO that could work, yes
2022-05-08 14:13:35 +0200 <[exa]> cool.
2022-05-08 14:14:15 +0200eggplantade(~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net) (Ping timeout: 260 seconds)
2022-05-08 14:14:49 +0200tromp(~textual@dhcp-077-249-230-040.chello.nl) (Quit: My iMac has gone to sleep. ZZZzzz…)
2022-05-08 14:15:53 +0200littlebobeep(~alMalsamo@gateway/tor-sasl/almalsamo)
2022-05-08 14:20:06 +0200yauhsien(~yauhsien@61-231-26-70.dynamic-ip.hinet.net)
2022-05-08 14:20:36 +0200mikoto-chan(~mikoto-ch@213.177.151.239) (Ping timeout: 240 seconds)
2022-05-08 14:21:24 +0200tromp(~textual@dhcp-077-249-230-040.chello.nl)
2022-05-08 14:22:45 +0200mikoto-chan(~mikoto-ch@213.177.151.239)
2022-05-08 14:30:04 +0200coot(~coot@213.134.190.95) (Quit: coot)
2022-05-08 14:30:14 +0200coot(~coot@213.134.190.95)
2022-05-08 14:39:16 +0200gurkenglas(~gurkengla@dslb-084-057-085-111.084.057.pools.vodafone-ip.de) (Ping timeout: 246 seconds)
2022-05-08 14:40:48 +0200xkuru(~xkuru@user/xkuru)
2022-05-08 14:45:31 +0200dextaa4(~dextaa@user/dextaa)
2022-05-08 14:56:43 +0200machinedgod(~machinedg@24.105.81.50)
2022-05-08 14:59:30 +0200Lycurgus(~juan@user/Lycurgus)
2022-05-08 15:01:28 +0200raym(~raym@user/raym) (Ping timeout: 250 seconds)
2022-05-08 15:02:10 +0200littlebobeep(~alMalsamo@gateway/tor-sasl/almalsamo) (Remote host closed the connection)
2022-05-08 15:02:15 +0200raym(~raym@user/raym)
2022-05-08 15:02:35 +0200littlebobeep(~alMalsamo@gateway/tor-sasl/almalsamo)
2022-05-08 15:04:07 +0200xff0x(~xff0x@om126254226100.33.openmobile.ne.jp) (Ping timeout: 246 seconds)
2022-05-08 15:05:55 +0200waleee(~waleee@2001:9b0:213:7200:cc36:a556:b1e8:b340)
2022-05-08 15:06:14 +0200AlexZenon(~alzenon@178.34.162.228) (Ping timeout: 250 seconds)
2022-05-08 15:07:22 +0200xff0x(~xff0x@om126254226100.33.openmobile.ne.jp)
2022-05-08 15:10:30 +0200AlexZenon(~alzenon@178.34.162.228)
2022-05-08 15:27:35 +0200MoC(~moc@user/moc)
2022-05-08 15:29:07 +0200waleee(~waleee@2001:9b0:213:7200:cc36:a556:b1e8:b340) (Ping timeout: 240 seconds)
2022-05-08 15:29:34 +0200bahamas(~lucian@84.232.141.55)
2022-05-08 15:33:54 +0200shapr(~user@pool-173-73-44-186.washdc.fios.verizon.net)
2022-05-08 15:39:29 +0200tochicool(~tochicool@user/tochicool)
2022-05-08 15:40:13 +0200Simon98(~Simon@ipbcc036f5.dynamic.kabel-deutschland.de)
2022-05-08 15:40:29 +0200 <Simon98> Hello there! Is there a list of adjustments that I can make with :set in GHCI?
2022-05-08 15:41:12 +0200 <Simon98> Also im looking for a :set action that was called something with ...morpho... or so and I think it would specify the :t outputs and not always just say "Num". Do you know how it is called?
2022-05-08 15:41:12 +0200 <geekosaur> https://downloads.haskell.org/ghc/9.0.2/docs/html/users_guide/ghci.html#the-set-and-seti-commands
2022-05-08 15:41:37 +0200 <Simon98> Ahh I think it was XNoMonomorphismRestriction
2022-05-08 15:41:42 +0200 <Simon98> Thanks geekosaur
2022-05-08 15:42:08 +0200 <geekosaur> you may be thinking of :set -XMonomorphismRestriction, but it won't affect :t directly like that
2022-05-08 15:42:26 +0200 <geekosaur> types donb't get defaulted until applied
2022-05-08 15:42:59 +0200 <Simon98> what do you mean by that last line?
2022-05-08 15:43:16 +0200 <geekosaur> you need a fully applied expression for monomorphization to happen
2022-05-08 15:43:36 +0200 <Simon98> And also the link: There are indeed some things that work with :set, but it doesn't look like a complete list or so. Or is there simply no complete list since there can be new :set specifications added or so?
2022-05-08 15:44:03 +0200nut(~haskellfi@roc37-h01-176-170-197-243.dsl.sta.abo.bbox.fr)
2022-05-08 15:44:24 +0200 <geekosaur> :set also allows any ghc option at https://downloads.haskell.org/ghc/9.0.2/docs/html/users_guide/flags.html that is marked Dynamic
2022-05-08 15:45:08 +0200 <geekosaur> and any extension selectable with -X, of which I don't think there's a single compact list
2022-05-08 15:45:10 +0200 <Simon98> what does marked Dynamic mean?
2022-05-08 15:45:29 +0200 <Simon98> I see, no -X list
2022-05-08 15:45:42 +0200 <geekosaur> the link I gave you is a table of options, whether an option is dynamic or not is listed in the third column of the table
2022-05-08 15:46:47 +0200 <geekosaur> you can get a full list of -X options with `ghc --supported-extensions`
2022-05-08 15:47:05 +0200 <geekosaur> (sadly, with no documentation. but you can then search the manual)
2022-05-08 15:47:33 +0200 <Simon98> Wow, there are a lot
2022-05-08 15:47:45 +0200 <Simon98> I wonder what all of them do haha
2022-05-08 15:47:57 +0200 <Simon98> Another question:
2022-05-08 15:50:24 +0200 <Simon98> I'm new to Haskell and there just seem to be some huge differences to other, more common languages like Java or JavaScript. Not just regarding the programming paradigma but also with things like this :set and so on.
2022-05-08 15:50:25 +0200 <Simon98> Do you know if there are big software branches or industries out there where Haskell is used a lot or where it might even be the standard or are most of the problems that occur in the major branches just solved more easily with other languages?
2022-05-08 15:51:00 +0200 <Lycurgus> yes
2022-05-08 15:51:15 +0200 <Simon98> Ok, great that you know it! What would it be?
2022-05-08 15:52:23 +0200 <Lycurgus> it?
2022-05-08 15:52:48 +0200 <Lycurgus> TIOBE might be what ur lookin for
2022-05-08 15:53:39 +0200bahamas(~lucian@84.232.141.55) (Ping timeout: 260 seconds)
2022-05-08 15:53:44 +0200 <Simon98> Yeah so Haskell is pretty low there. But still, are there branches where it is de facto standard? Due to whatever reason?
2022-05-08 15:54:16 +0200 <Lycurgus> No
2022-05-08 15:54:22 +0200 <maerwald[m]> Most of industry doesn't solve problems, but needs just another iteration of the same thing
2022-05-08 15:54:35 +0200 <maerwald[m]> Languages don't matter to them, but engineers do
2022-05-08 15:54:49 +0200 <Lycurgus> although it's cachet in academe was very high, but peaked in the last decade imo
2022-05-08 15:54:56 +0200 <Simon98> What do you mean by your first line mearwald?
2022-05-08 15:55:09 +0200 <maerwald[m]> And engineers think everything is about programming languages
2022-05-08 15:55:29 +0200 <Lycurgus> this channel for example has about half its population of a decade ago
2022-05-08 15:56:01 +0200 <Simon98> Why would you say is it popular in academia? (at least at my uni)
2022-05-08 15:56:01 +0200 <hpc> that's not a very good measure, that entire population loss is explained by the freenode debacle
2022-05-08 15:56:22 +0200 <Lycurgus> what maerwald[m] is referring to is a character of modern IT that is different from it's youth
2022-05-08 15:56:44 +0200 <Lycurgus> which is that IT became competent but dull
2022-05-08 15:56:53 +0200 <Lycurgus> real innovation dried up
2022-05-08 15:56:56 +0200 <Simon98> But why another iteration of the same thing?
2022-05-08 15:57:15 +0200 <maerwald[m]> To me, engineering would spend 60% of the time on specifications, then come up with the most constrained language (or DSL) possible that can be checked against the spec and doesn't require overly smart programmers.
2022-05-08 15:58:02 +0200 <Lycurgus> mostly because IT became a multi trillion dollar industry
2022-05-08 15:58:02 +0200 <Simon98> This is how you would like it to be or how you think it currently is?
2022-05-08 15:58:56 +0200 <Lycurgus> Simon98, you should address individuals as such when using first person
2022-05-08 15:58:56 +0200 <Simon98> Isn't IT one of the biggest innovators currently? Yet alone due to its size as Lycurgus says
2022-05-08 15:59:13 +0200 <maerwald[m]> But currently everyone likes turing complete general purpose languages and is interested in more expressivity, not less.
2022-05-08 15:59:14 +0200 <Lycurgus> i just said it wasn't
2022-05-08 16:00:26 +0200causal(~user@50.35.83.177) (Quit: WeeChat 3.5)
2022-05-08 16:00:31 +0200 <Simon98> Yeah, you're right. Maybe I'm surprised that it's not
2022-05-08 16:00:40 +0200 <ProofTechnique> Is there an established name for `f :: Functor f => f (a -> b, c -> d) -> f (a -> c -> (b, d)) = fmap (curry . uncurry bimap)`?
2022-05-08 16:02:39 +0200 <ProofTechnique> IT is incredibly stagnant. It's just "here are all the business problems of decades ago, but now do it on someone else's infrastructure and bigger". All the "new" work is in crypto and that's literally worse than nothing.
2022-05-08 16:03:07 +0200 <Simon98> Interesting, now I get it
2022-05-08 16:03:16 +0200 <Simon98> But why is crypto a problem in your opinion?
2022-05-08 16:03:30 +0200 <darkling> Yeah, I'm fed up of different ways to do RPC.
2022-05-08 16:03:58 +0200 <maerwald[m]> Crypto is (technically) one of the biggest challenges. But no one knows what business problems it sovles
2022-05-08 16:04:08 +0200 <ProofTechnique> Environmental impact, governance, lack of utility.
2022-05-08 16:04:26 +0200 <maerwald[m]> ProofTechnique: environmental impact?
2022-05-08 16:04:34 +0200 <ProofTechnique> It's just a very fancy way to create private currency, which has always been bad
2022-05-08 16:05:00 +0200 <maerwald[m]> You're aware that proof of stake has basically no significant environmental impact?
2022-05-08 16:05:22 +0200 <ProofTechnique> Cool, let me know when _anyone_ that matters is using PoS
2022-05-08 16:05:29 +0200 <maerwald[m]> Cardano
2022-05-08 16:05:31 +0200 <ProofTechnique> I'm sure ETH will do it any day now
2022-05-08 16:05:48 +0200Lycurgus(~juan@user/Lycurgus) (Quit: Exeunt)
2022-05-08 16:05:51 +0200 <tochicool> any way to get GHC to deduce the right constraint without pattern matching on the constructor? https://paste.tomsmeding.com/hxyLAkke
2022-05-08 16:06:01 +0200 <maerwald[m]> The biggest blockchain written in Haskell
2022-05-08 16:06:08 +0200 <Simon98> Cardano?
2022-05-08 16:06:09 +0200 <ProofTechnique> It's a fancy way to make private money, which is actively corrosive to democratic control of society
2022-05-08 16:06:10 +0200 <maerwald[m]> Seems you're not informed
2022-05-08 16:06:36 +0200bahamas(~lucian@84.232.141.55)
2022-05-08 16:06:40 +0200 <ProofTechnique> I'm incredibly aware of Cardano
2022-05-08 16:06:43 +0200 <maerwald[m]> I think that's as much BS as anything else about money and banks
2022-05-08 16:07:02 +0200 <ProofTechnique> I'm so excited to see how the neocolonialism in Africa pans out
2022-05-08 16:07:10 +0200 <ski> tochicool : i think, no
2022-05-08 16:07:25 +0200 <tochicool> :( why not?
2022-05-08 16:08:05 +0200 <maerwald[m]> ProofTechnique: I'm not into crypto, I just think most of the criticism is hypocritical
2022-05-08 16:08:29 +0200 <ski> i don't think there's any "you've exhausted all other cases, so it must correspond to the remaining case", while not matching on a GADT data constructor
2022-05-08 16:08:38 +0200 <ProofTechnique> Crypto does not solve any problem except how to part fools from their money and how to make the already exploitative relations of capitalism _even less regulated_
2022-05-08 16:09:42 +0200 <ProofTechnique> To be clear, I'm also against banks, but my preferred solution is to dismantle banks, not create dozens of hyper-exploitative bank-fiefs
2022-05-08 16:11:02 +0200 <Simon98> ProofTechnique Can you think of at least one major usecase for crypto?
2022-05-08 16:11:05 +0200 <maerwald[m]> Seems all very shallow critique to me, but you have some sympathies with https://github.com/sdiehl/popping-the-crypto-bubble
2022-05-08 16:11:07 +0200 <ProofTechnique> There are none
2022-05-08 16:11:37 +0200 <tochicool> ski: i see, thanks. i hoped it might be possible as ghc can do smarter things than that. would be really helpful if you had a lot of constructors with the same index.
2022-05-08 16:11:42 +0200eggplantade(~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net)
2022-05-08 16:12:18 +0200 <maerwald[m]> People also thought the radio or TV is going to end the world as we know it
2022-05-08 16:12:32 +0200nut(~haskellfi@roc37-h01-176-170-197-243.dsl.sta.abo.bbox.fr) (Ping timeout: 250 seconds)
2022-05-08 16:12:46 +0200 <ProofTechnique> Radio didn't use the entire electrical output of the Netherlands
2022-05-08 16:13:35 +0200 <tochicool> it's harder to see the benefits of bitcoin from the first world
2022-05-08 16:13:37 +0200 <maerwald[m]> Neither does proof of stake
2022-05-08 16:13:47 +0200 <maerwald[m]> You're being deliberately imprecise
2022-05-08 16:15:03 +0200 <ski> tochicool : a somewhat similar example to this would be `Right x >>= k = k x; e >>= _ = e', where we'd like `e' to bound to have type `forall a. Either e a' (where `k :: a -> Either e b'), so that it can be used at type `Either e b'
2022-05-08 16:15:48 +0200eggplantade(~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net) (Ping timeout: 240 seconds)
2022-05-08 16:16:10 +0200 <ski> @src Either (>>=)
2022-05-08 16:16:10 +0200 <lambdabot> Left l >>= _ = Left l
2022-05-08 16:16:10 +0200 <lambdabot> Right r >>= k = k r
2022-05-08 16:16:25 +0200 <ski> (note the annoying code repetition)
2022-05-08 16:16:58 +0200 <ProofTechnique> Then make an actual point instead of just complaining that I'm not sufficiently deferential to the claims of known con artists
2022-05-08 16:17:24 +0200hpc. o O ( are lisp programmers... cons artists? )
2022-05-08 16:17:48 +0200ccntrq(~Thunderbi@2a01:c22:8c0e:ad00:ca80:eae8:cb5b:57af)
2022-05-08 16:17:55 +0200 <ProofTechnique> More of a used `car` salesperson
2022-05-08 16:18:28 +0200 <hpc> never bring a lisp programmer to a party, they'll defun it
2022-05-08 16:19:41 +0200 <tochicool> ski : yes that is annoying. are there any planned extensions the type system to help with this or is there some fundamental reason why this isn't supported?
2022-05-08 16:20:49 +0200 <ski> neither, afai aware
2022-05-08 16:21:42 +0200ccntrq1(~Thunderbi@dynamic-095-112-198-016.95.112.pool.telefonica.de)
2022-05-08 16:21:48 +0200ccntrq(~Thunderbi@2a01:c22:8c0e:ad00:ca80:eae8:cb5b:57af) (Ping timeout: 240 seconds)
2022-05-08 16:21:49 +0200ccntrq1ccntrq
2022-05-08 16:21:56 +0200wroathe(~wroathe@206-55-188-8.fttp.usinternet.com)
2022-05-08 16:21:56 +0200wroathe(~wroathe@206-55-188-8.fttp.usinternet.com) (Changing host)
2022-05-08 16:21:56 +0200wroathe(~wroathe@user/wroathe)
2022-05-08 16:22:49 +0200 <ski> (i think the problem i sketched, at least, could probably be speced and implemented without *too* much trouble (although it might turn out to be more involved than expected, of course) .. but, in any case, it would be a complication, and so people would be asking whether it's worth it, compared to how much/often people would benefit from it)
2022-05-08 16:23:00 +0200hiredman(~hiredman@frontier1.downey.family) (Ping timeout: 248 seconds)
2022-05-08 16:23:40 +0200 <ski> (for the GADT one, it's not as clear to me how one'd want this to behave, systematically. but then i've not pondered this before, either)
2022-05-08 16:24:02 +0200Unicorn_Princess(~Unicorn_P@93-103-228-248.dynamic.t-2.net)
2022-05-08 16:24:07 +0200hiredman(~hiredman@frontier1.downey.family)
2022-05-08 16:27:16 +0200Guest9113(~Guest91@84-75-254-89.dclient.hispeed.ch)
2022-05-08 16:28:27 +0200yauhsien(~yauhsien@61-231-26-70.dynamic-ip.hinet.net) (Remote host closed the connection)
2022-05-08 16:28:45 +0200 <Simon98> If I have a function like: allSame a b c = (a==b && a==c) && (c==b) with allSame :: Eq a => a -> a -> a -> Bool
2022-05-08 16:28:45 +0200 <Simon98> Can someone explain to me what each arrow exactly stands for?
2022-05-08 16:29:03 +0200 <Simon98> Ahhh
2022-05-08 16:29:27 +0200 <Simon98> No
2022-05-08 16:29:33 +0200 <Simon98> But the a stands for Bool
2022-05-08 16:29:51 +0200 <ski> no
2022-05-08 16:30:01 +0200 <Simon98> Crap
2022-05-08 16:30:03 +0200 <Simon98> Right
2022-05-08 16:30:33 +0200 <Simon98> A stands for the type that my a b c have. But if they have different types?
2022-05-08 16:30:39 +0200 <Simon98> a*
2022-05-08 16:31:44 +0200 <hpc> if they have different types, you can't use (==) with them
2022-05-08 16:31:48 +0200 <geekosaur> they can't
2022-05-08 16:31:49 +0200 <ski> allSame :: Eq a => a -> a -> a -> Bool
2022-05-08 16:31:51 +0200 <ski> -- params&result ^ a ^ b ^ c ^ result
2022-05-08 16:31:59 +0200 <hpc> > "five" == 5 -- not valid
2022-05-08 16:32:00 +0200 <lambdabot> error:
2022-05-08 16:32:00 +0200 <lambdabot> • No instance for (Num [Char]) arising from the literal ‘5’
2022-05-08 16:32:00 +0200 <lambdabot> • In the second argument of ‘(==)’, namely ‘5’
2022-05-08 16:32:32 +0200 <ski> also, `(==)' ought to be symmetric and transitive, so you should be able to remove one of the equality checks
2022-05-08 16:32:49 +0200yauhsien(~yauhsien@61-231-26-70.dynamic-ip.hinet.net)
2022-05-08 16:33:20 +0200 <ski> `a' is the type of the three values that are being compared for equality. the `->'s come after each parameter/argument type. the result type comes last
2022-05-08 16:34:25 +0200bontaq(~user@ool-45779fe5.dyn.optonline.net) (Ping timeout: 256 seconds)
2022-05-08 16:34:30 +0200nut(~haskellfi@roc37-h01-176-170-197-243.dsl.sta.abo.bbox.fr)
2022-05-08 16:34:40 +0200 <Simon98> So e. g. allSame 1 2 3
2022-05-08 16:34:41 +0200 <Simon98> is basically
2022-05-08 16:34:41 +0200 <Simon98> Eq a => 1 -> 2 -> 3 -> false
2022-05-08 16:34:42 +0200 <Simon98> ?
2022-05-08 16:34:52 +0200 <ski> the `=>' arrow separates the constraint context (to the left) from the usual (parameter and result types) signature. `Eq a' is a constraint that says that you can only use this operation (`allSame'), in case the argument type `a' is an instance of the type class `Eq', which is the case if it supports equality (checking) (`(==)' and `(/=)')
2022-05-08 16:34:57 +0200 <ski> no
2022-05-08 16:35:15 +0200 <ski> if `1',`2',`3' there have type `Integer', then, for this call to `allSame', `a' becomes `Integer'
2022-05-08 16:35:18 +0200 <ski> iow
2022-05-08 16:35:20 +0200 <Simon98> What do i use for the first a? And where does the "Eq" come from? Is it like "Eq a => a -> a -> a -> Bool" is the description for each "==" comparison?
2022-05-08 16:35:21 +0200 <ski> allSame :: Eq a => a -> a -> a -> Bool
2022-05-08 16:35:22 +0200 <ski> becomes
2022-05-08 16:35:33 +0200 <ski> allSame :: Eq Integer => Integer -> Integer -> Integer -> Bool
2022-05-08 16:35:47 +0200 <ski> but since `Eq Integer' holds, it's a known fact, this simplifies to just
2022-05-08 16:35:52 +0200 <ski> allSame :: Integer -> Integer -> Integer -> Bool
2022-05-08 16:36:21 +0200 <ski> (which then gives the actual type used for this call to `allSame')
2022-05-08 16:36:52 +0200 <ski> the `Eq a' constraint comes because you're calling `(==)', which has type `Eq a => a -> a -> Bool'
2022-05-08 16:37:24 +0200 <ski> you can only do equality checking on values of a type that supports equality checking (a type that is an instance of `Eq')
2022-05-08 16:38:03 +0200 <Simon98> very interesting
2022-05-08 16:38:10 +0200 <Simon98> but wait
2022-05-08 16:38:10 +0200 <tomsmeding> Read `Eq a => a -> a -> Bool` like "if `Eq a` holds, then this has type `a -> a -> Bool`"
2022-05-08 16:38:31 +0200 <tomsmeding> Or, well, that's one way to read it, at least
2022-05-08 16:38:47 +0200 <ski> so, for that to work, either (a) you need to use some particular type (that is known to be an instance of `Eq'), like `Integer', or `[(String,Bool)]' or something; or (b) you can delegate the responsibility for ensuring that `a' is in `Eq', which is what your current `allSame' does (because it has `Eq a' as a constraint in *its* type signature)
2022-05-08 16:39:03 +0200bahamas(~lucian@84.232.141.55) (Ping timeout: 256 seconds)
2022-05-08 16:39:13 +0200 <Simon98> But what do you mean with "if `Eq a` holds"? Holds what?
2022-05-08 16:39:26 +0200 <geekosaur> different usage of "holds"
2022-05-08 16:39:37 +0200 <geekosaur> try "if a is a type that has an Eq instance"
2022-05-08 16:39:44 +0200 <ski> "`Eq a' holds" is a brief way to say "`a' is an instance of `Eq'" or "there is an `Eq a' instance"
2022-05-08 16:40:23 +0200 <ski> `Eq Integer' holds, because, somewhere in the base library, there is a declaration
2022-05-08 16:40:29 +0200 <ski> instance Eq Integer
2022-05-08 16:40:29 +0200 <ski> where
2022-05-08 16:40:36 +0200 <ski> ... == ... = ...
2022-05-08 16:40:39 +0200 <ski> ... /= ... = ...
2022-05-08 16:40:39 +0200 <geekosaur> importantly, only *types* are typeclass instances, not values
2022-05-08 16:40:52 +0200 <Simon98> Instead of "is an instance of" could also be said: "a is an object of something that inherits from the class Eq" or so?
2022-05-08 16:41:15 +0200 <ski> that declaration gives the actual implementation (the code) that will be run, when calling `(==)' and `(/=)' on `Integer's
2022-05-08 16:41:22 +0200 <geekosaur> typeclasses are not OOP
2022-05-08 16:41:29 +0200yauhsien(~yauhsien@61-231-26-70.dynamic-ip.hinet.net) (Ping timeout: 248 seconds)
2022-05-08 16:41:31 +0200 <Simon98> Ah right
2022-05-08 16:41:38 +0200 <ski> Simon98 : no, `a' is not an object (objects are values). `a' is a type
2022-05-08 16:41:48 +0200wroathe(~wroathe@user/wroathe) (Ping timeout: 260 seconds)
2022-05-08 16:41:50 +0200 <ski> `a' doesn't exist at run-time
2022-05-08 16:42:02 +0200 <ski> (instances do, though)
2022-05-08 16:42:56 +0200 <Simon98> Ohhh, but ´a` (lets say, it's Integer in our example) is not just in instance of Eq but also of many other classes (?) like Num, right?
2022-05-08 16:43:03 +0200 <Simon98> or maybe not "many" but still
2022-05-08 16:43:05 +0200 <[exa]> Simon98: the intuition from OOP "traits" is kinda useful, but there are significant differences from the common OOP use. Most notably, typeclasses aren't objects but actual predicates, a bit more like c++ concepts
2022-05-08 16:43:08 +0200 <tomsmeding> Simon98: don't get confused by the _type_ `a` being called the same as the first _argument_ to the function, also called `a`
2022-05-08 16:43:15 +0200 <tomsmeding> They're completely different things
2022-05-08 16:43:21 +0200 <ski> Simon98 : sure, yes
2022-05-08 16:44:11 +0200 <ski> (it might be helpful to rename the parameters to say `x',`y',`z', to avoid confusing them with the type variables in the type signature)
2022-05-08 16:44:43 +0200 <Simon98> tomsmeding Ohhh, right
2022-05-08 16:45:01 +0200 <Simon98> ski Ohh, I'll try that
2022-05-08 16:45:08 +0200 <Simon98> So helpful all of you guys, thanks a lot !
2022-05-08 16:45:17 +0200 <Simon98> So:
2022-05-08 16:45:23 +0200 <ski> (eventually, you get used to the distinction, and then the name-punning can be useful)
2022-05-08 16:45:59 +0200skistill doesn't like punning a type constructor with a data constructor, though
2022-05-08 16:46:00 +0200nut(~haskellfi@roc37-h01-176-170-197-243.dsl.sta.abo.bbox.fr) (Ping timeout: 276 seconds)
2022-05-08 16:46:19 +0200 <ski> (i guess, partially, because the scope of those are not local)
2022-05-08 16:47:21 +0200 <Simon98> If I understand correctly now, "allSame :: Eq a => a -> a -> a -> Bool" is not an description of what the function "allSame" actually does (you could just guess that it does comparation) but it is just an description (or a guideline?) of the Types used and part of that function?
2022-05-08 16:47:43 +0200bitdex(~bitdex@gateway/tor-sasl/bitdex)
2022-05-08 16:49:34 +0200 <Simon98> ski Hmm, the renaming didn't work as expected: Prelude> allSame x y z = (x==y && y==z)
2022-05-08 16:49:35 +0200 <Simon98> allSame :: Eq a => a -> a -> a -> Bool
2022-05-08 16:50:14 +0200 <[exa]> Simon98: yes, a "description of the admissible types" would work. If you know C++, in C++ it would be something like `template<typename a> bool allSame(a, a, a);`
2022-05-08 16:51:33 +0200 <[exa]> Simon98: btw try removing the `&& y==z` part from the comparison and see what happens with the type.
2022-05-08 16:52:13 +0200 <ski> Simon98 : why didn't you expect that ?
2022-05-08 16:52:27 +0200ccntrq(~Thunderbi@dynamic-095-112-198-016.95.112.pool.telefonica.de) (Remote host closed the connection)
2022-05-08 16:52:29 +0200 <ski> (it looks like the result you got would be what i would expect ..)
2022-05-08 16:52:47 +0200 <ski> the parameter (values) are `x',`y',`z'. their common type is `a'
2022-05-08 16:52:59 +0200 <[exa]> Simon98: for comparison again, c++ version for your unexpected result is: `template<typename a> allSame(a x, a y, a z) {...}`
2022-05-08 16:53:20 +0200skiidly wonders whether Simon98 even has seen C++
2022-05-08 16:53:33 +0200 <[exa]> ah.
2022-05-08 16:54:04 +0200bitdex(~bitdex@gateway/tor-sasl/bitdex) (Ping timeout: 240 seconds)
2022-05-08 16:54:25 +0200 <ski> (asking, not insinuating)
2022-05-08 16:55:05 +0200 <[exa]> as usual, I didn't really read much of scrollback. :]
2022-05-08 16:55:51 +0200nate1(~nate@98.45.169.16)
2022-05-08 16:59:41 +0200ski. o O (: hindsight, what's that ? :)
2022-05-08 16:59:42 +0200 <Simon98> [exa] I'm not familiar with C++ but your notation reminds me of Java Generics
2022-05-08 17:00:20 +0200 <ski> yea, in Java, it'd be `<a> allSame(a x,a y,a z) { ... }', iirc
2022-05-08 17:00:21 +0200 <Simon98> Why is there sometimes a * before your name ski and your Name is not before the time?
2022-05-08 17:00:23 +0200 <Simon98> in the chat
2022-05-08 17:00:31 +0200 <Simon98> Ohhhhhhhhhhhhh
2022-05-08 17:00:33 +0200tromp(~textual@dhcp-077-249-230-040.chello.nl) (Quit: My iMac has gone to sleep. ZZZzzz…)
2022-05-08 17:00:36 +0200skiglances around nervously
2022-05-08 17:00:41 +0200 <ski> it's called an ACTION
2022-05-08 17:00:44 +0200 <Simon98> So it can somehow be compared to Java Generics?
2022-05-08 17:00:47 +0200 <ski> try entering the following :
2022-05-08 17:00:52 +0200nate1(~nate@98.45.169.16) (Ping timeout: 260 seconds)
2022-05-08 17:00:57 +0200 <ski> /me nods and smiles
2022-05-08 17:01:39 +0200 <Simon98> ski it confused me because of what you said here "(it might be helpful to rename the parameters to say `x',`y',`z', to avoid confusing them with the type variables in the type signature)", but now I get it (was thinking in a wrong way
2022-05-08 17:01:43 +0200 <Simon98> )
2022-05-08 17:01:53 +0200Simon98nods and smiles
2022-05-08 17:01:56 +0200 <Simon98> hahahaha
2022-05-08 17:02:05 +0200Simon98finds that nice
2022-05-08 17:02:13 +0200 <ski> it's typically used to describe something you're doing, or else describe some property of yourself (in *third* person, mind !) .. i also often use it for various associations i get and things i'm reminded of
2022-05-08 17:03:42 +0200 <Simon98> [exa] I tried it and look what happened: allSameX :: Eq a => a -> a -> p -> Bool
2022-05-08 17:03:43 +0200 <Simon98> So p can be z different type then x and y? But doesn't that disagree with the Eq restriction of only comparing same types?
2022-05-08 17:04:11 +0200 <ski> anyway, using type variables (begins with lower case (or `_')) in a type signature, indicates parametric polymorphism (which is called "generics", in e.g. Java). the initial `<typename a>' / `<a>' part can (usually) be elided in Haskell, but you can also spell it out explicitly as `forall a. '
2022-05-08 17:04:21 +0200 <ski> allSame :: forall a. Eq a => a -> a -> a -> Bool
2022-05-08 17:05:56 +0200 <ski> (you'll need to enable at least `ExplicitForAll' to be able to do that. there are a couple of more extensions that actually let you do *more* with `forall' than merely being explicit, rather than eliding a `forall' (letting the implementation implicitly insert it at the start, right after the `::'))
2022-05-08 17:07:22 +0200 <ski> Simon98 : yes, the type of `x' is `a' and the type of `y' is also `a', in that signature. but the type of `z' is `p', which is a distinct type variable, because `z' is not compared (for equality) with `x' nor `y', and so there's no need to assume it needs to have the same type, and so the implementation inferred a distinct type variable as its type (and for some reason happened to call that `p')
2022-05-08 17:07:58 +0200 <ski> "So p can be z different type then x and y?" -- right. "But doesn't that disagree with the Eq restriction of only comparing same types?" -- no, because you removed the comparision of `z' with one of `x' and `y'
2022-05-08 17:08:22 +0200 <ski> (specifically `y', i see above)
2022-05-08 17:09:36 +0200 <Simon98> I see, thank you!
2022-05-08 17:09:46 +0200 <Simon98> Why do you think the letter "p" was used?
2022-05-08 17:09:51 +0200 <ski> @type (==)
2022-05-08 17:09:53 +0200 <lambdabot> Eq a => a -> a -> Bool
2022-05-08 17:09:57 +0200 <ski> hm
2022-05-08 17:10:03 +0200 <ski> dunno
2022-05-08 17:10:40 +0200 <geekosaur> that has to do with the guts of the typechecker, which generally aren't introspectable
2022-05-08 17:11:01 +0200 <geekosaur> it tends to pick "t" or "p" in recent versions
2022-05-08 17:11:20 +0200 <ski> (sometimes it picks up a type variable name from a particular type variable name in an explicit type signature of an operation that is used, involving the type variable with it)
2022-05-08 17:12:25 +0200random-jellyfish(~random-je@user/random-jellyfish) (Quit: Client closed)
2022-05-08 17:12:39 +0200bitdex(~bitdex@gateway/tor-sasl/bitdex)
2022-05-08 17:14:02 +0200uam(uid360535@id-360535.hampstead.irccloud.com)
2022-05-08 17:14:49 +0200 <[exa]> Simon98: a _p_arameter type, perhaps. The names of the variables don't really matter.
2022-05-08 17:15:12 +0200Pickchea(~private@user/pickchea)
2022-05-08 17:15:20 +0200 <Simon98> And another thing: Let's stay with " allSameX :: Eq a => a -> a -> p -> Bool"
2022-05-08 17:15:20 +0200 <Simon98> Are the arrows also actually meaning "flow" or something? Because that would not make sense.
2022-05-08 17:15:21 +0200 <Simon98> With the "allSame :: Eq a(0) => a(1) -> a(2) -> a(3) -> Bool" [I added the numbers] I could have imagined that we do one comparison and then the a(1) yet again will be type a(2) and with the next comparison it will stlil be a(3).
2022-05-08 17:15:21 +0200 <Simon98> But actually not even that makes sense since after one comparison they would already be Booleans instead of Integers
2022-05-08 17:15:51 +0200 <Simon98> [exa] how do you do the underlining?
2022-05-08 17:16:09 +0200 <[exa]> put underscores around, many clients will render it right
2022-05-08 17:16:14 +0200 <[exa]> (mine does not tbh... :D )
2022-05-08 17:16:16 +0200 <Simon98> I don't know why the name linking does not work sometimes. I typed "[e" then pressed tab and then enter or so
2022-05-08 17:16:31 +0200 <Simon98> _p_
2022-05-08 17:16:43 +0200 <[exa]> also the [ in my nick is not very popular with client software. I should get rid of it. :D
2022-05-08 17:17:02 +0200 <Simon98> Ahh. In my case it looks like doubleUnderline then p underlined then another double underline
2022-05-08 17:17:06 +0200agumonkey(~user@88.163.231.79)
2022-05-08 17:17:20 +0200 <[exa]> anyway, regarding the "flow" -- (->) is the actual type of a haskell function, and we technically only have 1-parameter functions
2022-05-08 17:17:40 +0200 <[exa]> so if you'd really print the allSame type as-is, you'd get something like:
2022-05-08 17:17:59 +0200 <[exa]> `a -> (a -> (a -> Bool))`
2022-05-08 17:18:10 +0200 <[exa]> (I omitted the Eq)
2022-05-08 17:18:15 +0200 <yushyin> with decent clients you can write ex<tab> and it will become [exa]
2022-05-08 17:19:11 +0200 <[exa]> Simon98: the logic behind the parenthesization is that basically you feed the function parameters, and it becomes to something simpler and simpler, until it eventually becomes the Bool (which is not a function type, so you can't feed it parameters)
2022-05-08 17:19:34 +0200 <Simon98> So in practice it could be `Integer -> (Integer -> (Integer -> Bool))`
2022-05-08 17:19:37 +0200 <[exa]> yes
2022-05-08 17:19:47 +0200 <Simon98> waaaaaaait
2022-05-08 17:20:01 +0200 <Simon98> could you please also formulate it as math functions? with f(a) ?
2022-05-08 17:20:01 +0200 <[exa]> Illustration:
2022-05-08 17:20:30 +0200 <hpc> in that notation it'd be like saying f(a)(b)(c)
2022-05-08 17:20:39 +0200 <[exa]> ah yes, in the usual prefix notation, you'd write a single-parameter function not as `a->b` but as `(->) a b`
2022-05-08 17:21:08 +0200 <[exa]> (compare with `1+2` vs `(+) 1 2` vs `plus(1,2)` from other languages)
2022-05-08 17:21:20 +0200 <hpc> and in fact it's that exact notation in a lot of other languages where you can attempt such things
2022-05-08 17:21:52 +0200 <hpc> although then it's really tedious, you have to write stuff like f = function(a){return function(b){return function(c){...}}}
2022-05-08 17:22:53 +0200 <hpc> ^ is javascript, if you want to pop into an f12 console and try it out
2022-05-08 17:22:54 +0200 <[exa]> :t let allSame a b c = a==b && b==c in (allSame, allSame 1, allSame 1 2, allSame 1 2 3)
2022-05-08 17:22:56 +0200 <lambdabot> (Eq a1, Eq a2, Eq a3, Num a2, Num a3) => (a1 -> a1 -> a1 -> Bool, a2 -> a2 -> Bool, a3 -> Bool, Bool)
2022-05-08 17:23:36 +0200 <Simon98> what is the prefix notation again in "allSame a b c = a==b && b==c"?
2022-05-08 17:23:51 +0200agumonkey(~user@88.163.231.79) (Remote host closed the connection)
2022-05-08 17:23:52 +0200 <Simon98> and hpc
2022-05-08 17:24:18 +0200 <Simon98> and hpc why would you put a type class (=a) in a function and not the actual value? (f(a)(b)(c))
2022-05-08 17:25:16 +0200hgolden(~hgolden2@cpe-172-251-233-141.socal.res.rr.com)
2022-05-08 17:25:20 +0200frost(~frost@user/frost) (Ping timeout: 252 seconds)
2022-05-08 17:26:23 +0200 <[exa]> Simon98: where's the typeclass?
2022-05-08 17:26:24 +0200 <geekosaur> > let allSame a b c = a == b && b == c in allSame "foo" "foo" "foo" -- works for any type with an Eq instance, not just Integer
2022-05-08 17:26:25 +0200 <lambdabot> True
2022-05-08 17:26:44 +0200 <hpc> those were the values
2022-05-08 17:26:47 +0200pavonia(~user@user/siracusa) (Quit: Bye!)
2022-05-08 17:26:49 +0200 <hpc> pretend i wrote f(x)(y)(z) :P
2022-05-08 17:27:34 +0200 <Simon98> can this _function_ *in* _function applications_ be paraphrased to *use* _function_ *with* _function applications_ for me to better understand it?
2022-05-08 17:30:11 +0200 <Simon98> I get the latter parenthesis (good example!) but why are there 5 elements in the first parenthesis?
2022-05-08 17:30:12 +0200 <Simon98> (Eq a1, Eq a2, Eq a3, Num a2, Num a3) => (a1 -> a1 -> a1 -> Bool, a2 -> a2 -> Bool, a3 -> Bool, Bool)
2022-05-08 17:30:47 +0200coot(~coot@213.134.190.95) (Quit: coot)
2022-05-08 17:30:54 +0200 <[exa]> Simon98: it actually needs to describe a lot of constraints in the returned types, so there they are:
2022-05-08 17:30:54 +0200 <geekosaur> because each call is considered separately
2022-05-08 17:30:55 +0200haskell_apprenti(~haskell_a@cpe-74-71-248-39.nyc.res.rr.com)
2022-05-08 17:32:00 +0200 <[exa]> in order, `Eq a1` ensures that the types of the parameters of the first `allSame` are comparable, similarly for `Eq a2` and `Eq a3`. Fully applied `allSame 1 2 3` doesn't need any constraint because it just returns Bool, no matter what.
2022-05-08 17:32:10 +0200 <Simon98> hpc but what should " f(x)(y)(z) " mean?
2022-05-08 17:32:11 +0200 <Simon98> Like f(x,y,z) or h(g(f(x))) with f(x) = y and g(y) = z would make sense for me but your notation not
2022-05-08 17:32:46 +0200eggplantade(~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net)
2022-05-08 17:32:54 +0200 <[exa]> Then `Num a2` is there because I already put `1` into `allSame 1`, and `1` can stand as any numeric type. So it tells you an extra information that you must put in other arguments as numeric too -- for example you couldn't do `allSame 1 "whatevs"`
2022-05-08 17:33:06 +0200 <[exa]> (similar for Num a3)
2022-05-08 17:33:36 +0200 <Simon98> ahh, thanks [exa]
2022-05-08 17:33:52 +0200 <Simon98> and how would you paraphrase the "=>" here?
2022-05-08 17:33:58 +0200tromp(~textual@dhcp-077-249-230-040.chello.nl)
2022-05-08 17:34:08 +0200 <[exa]> haha, tricky
2022-05-08 17:35:14 +0200 <Simon98> :)
2022-05-08 17:35:38 +0200 <haskell_apprenti> question: I'm going through Haskell programming from first principles, in the book they say a function with the signature blahFunc :: b -> String totally throws away its first argument and is effectively a constant value of type String. Can't we define a toString method that works for every type? I find it hard to reason about saying a function has
2022-05-08 17:35:39 +0200 <haskell_apprenti> to be a particular function due to its type signature
2022-05-08 17:35:44 +0200 <[exa]> it's an actual implication, given you have an `a` that satisfies the `Eq`, you can assume that your type is a->a->...
2022-05-08 17:36:34 +0200 <geekosaur> haskell_apprenti, what would toString be for a function?
2022-05-08 17:36:42 +0200 <Simon98> wow
2022-05-08 17:36:58 +0200 <Simon98> Is the "=>" in Haskell syntax always an actual implication?
2022-05-08 17:37:00 +0200 <geekosaur> remember, Haskell is compiled, it does not have the source code available, especially for a typeclass method like (+)
2022-05-08 17:37:01 +0200 <[exa]> haskell_apprenti: "for every type" is hard. Do you know what custom-defined type am I going to send you in 5 minutes from now?
2022-05-08 17:37:47 +0200 <haskell_apprenti> doesn't all data need some kind of text representation to be viewed on a screen though?
2022-05-08 17:38:15 +0200 <[exa]> haskell_apprenti: that implies that you already know something about the type. That would be `blahFunc :: HasBitRepresentation b => b->String`
2022-05-08 17:39:04 +0200 <haskell_apprenti> don't all types need a data declaration though? so theoretically you can print that, since that's common to all types. just for the sake of argument
2022-05-08 17:39:20 +0200 <Simon98> And is one implication here sufficient ((Eq a1, Eq a2, Eq a3, Num a2, Num a3) => (a1 -> a1 -> a1 -> Bool, a2 -> a2 -> Bool, a3 -> Bool, Bool)) because you put the function applications all in one parenthesis ((allSame, allSame 1, allSame 1 2, allSame 1 2 3)) and therefore to make it work everything has to meet the requirements at a time?
2022-05-08 17:39:42 +0200 <[exa]> haskell_apprenti: yes, there's actually a typeclass for that too (Generic). But still if you use it, you have to declare it.
2022-05-08 17:40:24 +0200 <[exa]> Simon98: yes, it's 1 big type with 1 big sets of "conditions", so only a single => is required in between
2022-05-08 17:40:29 +0200Guest9113(~Guest91@84-75-254-89.dclient.hispeed.ch) (Quit: Client closed)
2022-05-08 17:40:40 +0200ski. o O ( no underscores )
2022-05-08 17:41:01 +0200 <ski> haskell_apprenti : types that are primitive doesn't need `data' or `newtype' declarations
2022-05-08 17:41:20 +0200 <[exa]> Simon98: you can definitely try for isolated (partial) calls of allSame in your ghci, with different argument types. It should become quite intuitive once you play with it for some time
2022-05-08 17:41:58 +0200 <ski> e.g. `(->)' .. or, an implementation could have `Char',`Int',`Integer',`Float',`Double',`Array',`IO',`IORef' all be primitive, as well
2022-05-08 17:43:55 +0200 <ski> @type let foo x = (typeOf x,cast x :: Maybe String) in foo
2022-05-08 17:43:57 +0200 <lambdabot> Typeable a => a -> (TypeRep, Maybe String)
2022-05-08 17:43:59 +0200 <ski> > let foo x = (typeOf x,cast x :: Maybe String) in foo False
2022-05-08 17:44:01 +0200 <lambdabot> (Bool,Nothing)
2022-05-08 17:44:06 +0200 <ski> > let foo x = (typeOf x,cast x :: Maybe String) in foo "True"
2022-05-08 17:44:08 +0200 <lambdabot> ([Char],Just "True")
2022-05-08 17:44:51 +0200 <haskell_apprenti> [exa] geekosaur I think I understand thinking about it more, thanks
2022-05-08 17:45:24 +0200 <geekosaur> now, we do have a typeclass for what you've been talking about: Show
2022-05-08 17:45:30 +0200Simon98(~Simon@ipbcc036f5.dynamic.kabel-deutschland.de) (Quit: Client closed)
2022-05-08 17:45:31 +0200 <geekosaur> and your toString is show
2022-05-08 17:45:51 +0200 <[exa]> haskell_apprenti: btw the "some kind of representation exists" doesn't really hold in haskell programs. Stuff may be easily erased before it reaches runtime, and there are actual definition-less types (`data Void`)
2022-05-08 17:45:53 +0200 <geekosaur> but again you must declare that you're using it
2022-05-08 17:46:42 +0200 <ski> haskell_apprenti : you can use `Typeable', if you want to do type casting stuff. `Generic' to actually do introspect stuff on how the type was declared
2022-05-08 17:47:03 +0200xff0x(~xff0x@om126254226100.33.openmobile.ne.jp) (Ping timeout: 256 seconds)
2022-05-08 17:47:34 +0200 <ski> (well, i'd rather say that `Void' has a collection of data constructors .. it just happens to be the empty collection)
2022-05-08 17:49:03 +0200pretty_dumm_guy(trottel@gateway/vpn/protonvpn/prettydummguy/x-88029655) (Ping timeout: 276 seconds)
2022-05-08 17:49:04 +0200Vajb(~Vajb@2001:999:400:9bc1:d5dd:7e53:33b:56) (Read error: Connection reset by peer)
2022-05-08 17:49:14 +0200Vajb(~Vajb@hag-jnsbng11-58c3a8-176.dhcp.inet.fi)
2022-05-08 17:49:35 +0200 <ski> haskell_apprenti : anyway .. what you might see as an annoyance here is actually a boon, in the sense that it allows one to reason about, infer stronger properties (things an operation definitely *can't* do), solely by inspecting its type signature. this is called "parametricity". parametric polymorphism in Haskell enjoys this. parametric polymorphism (called "generics") in e.g. Jave doesn't, because of
2022-05-08 17:49:41 +0200 <ski> `instanceof' and up-casting (and methods on `Object')
2022-05-08 17:51:00 +0200 <haskell_apprenti> I don't find it annoying, I'm just interested in the theory of why its definitely true that a particular type signature must have a certain type implentation
2022-05-08 17:51:26 +0200 <haskell_apprenti> like id be interested if there are proofs about it written somewhere if anyone could point me to that
2022-05-08 17:51:36 +0200 <ski> e.g. if you see `foo :: (a -> Maybe b) -> [a] -> [b]', you *know* that `foo' can't itself inspect the `a' elements of the list, but can only pass them on to the callback, which is also the only place where the `b' elements in the output could possibly come from (apart from using `undefined' & `error' & `Control.Exception.throw', or infinite loops)
2022-05-08 17:51:45 +0200 <haskell_apprenti> sorry not type implementation, concrete function implemenetation
2022-05-08 17:52:18 +0200 <ski> @free bar :: Int -> [a] -> [a]
2022-05-08 17:52:18 +0200 <lambdabot> $map f . bar x = bar x . $map f
2022-05-08 17:52:54 +0200 <ski> this is a "free theorem", that says that it doesn't matter if you map some function `f' to the elements of the list, before or after you call `bar', since `bar' definitely won't look at, or change, the elements
2022-05-08 17:53:20 +0200 <ski> (and this relies on parametricity)
2022-05-08 17:53:31 +0200 <ski> @help free
2022-05-08 17:53:31 +0200 <lambdabot> free <ident>. Generate theorems for free
2022-05-08 17:54:01 +0200 <ski> @free transpose
2022-05-08 17:54:03 +0200 <lambdabot> $map ($map f) . transpose = transpose . $map ($map f)
2022-05-08 17:54:11 +0200 <ski> @free concat :: [[a]] -> [a]
2022-05-08 17:54:12 +0200 <lambdabot> $map f . concat = concat . $map ($map f)
2022-05-08 17:55:49 +0200 <haskell_apprenti> ski don't understand the @ free thing
2022-05-08 17:56:30 +0200 <ski> @free reverse
2022-05-08 17:56:31 +0200 <lambdabot> $map f . reverse = reverse . $map f
2022-05-08 17:56:34 +0200 <haskell_apprenti> I feel like what you're saying though is since its parametrically polymorphic, the only thing we could do that will work with all types is pass it through eg identity
2022-05-08 17:56:54 +0200 <haskell_apprenti> and the extension of that eg with list of types, pass through list of types
2022-05-08 17:57:14 +0200 <ski> it says `$map' instead of `map', since it's assuming a generic mapping. but they should be the same. so read that as claiming
2022-05-08 17:57:23 +0200 <ski> map f . reverse = reverse . map f
2022-05-08 17:57:39 +0200 <ski> is a true law/equality/equation (for every function `f')
2022-05-08 17:57:57 +0200 <ski> or, expanding (putting in an explicit argument), this says that
2022-05-08 17:58:05 +0200 <ski> (map f . reverse) xs = (reverse . map f) xs
2022-05-08 17:58:11 +0200 <ski> (for every `f' and every list `xs')
2022-05-08 17:58:28 +0200 <ski> which is the same (by the definition of function composition, `(.)')
2022-05-08 17:58:40 +0200 <ski> map f (reverse xs) = reverse (map f xs)
2022-05-08 17:58:49 +0200 <[exa]> haskell_apprenti: that's true, the only non-crashing function with type `a->a` is id. The only other thing you can do in haskell is to crash it with `undefined`.
2022-05-08 17:58:57 +0200 <haskell_apprenti> ski  think i need the ELI5 version
2022-05-08 17:59:21 +0200 <ski> and now this is explicitly saying that if you reverse `xs', and then `map' `f' on every element of the reversed list, then that's the same as first mapping `f' on `xs', and then reversing the mapped list
2022-05-08 17:59:27 +0200 <haskell_apprenti> [exa] is that proven formally somewhere
2022-05-08 17:59:53 +0200 <[exa]> yes
2022-05-08 18:00:10 +0200 <ski> haskell_apprenti : do you understand the last version of the equation, above ?
2022-05-08 18:00:21 +0200 <ski> (with my attempted elucidation of it)
2022-05-08 18:00:45 +0200 <ski> btw, you could perhaps try checking "Theorems for free!" by Philip Wadler in 1989-09 at <https://homepages.inf.ed.ac.uk/wadler/topics/parametricity.html#free>
2022-05-08 18:01:23 +0200 <haskell_apprenti> [exa] can you point me to where that is proven
2022-05-08 18:01:35 +0200 <haskell_apprenti> ski yes I think I understand that last version thanks
2022-05-08 18:01:41 +0200 <[exa]> yes, trying to find it written somewhere
2022-05-08 18:02:01 +0200 <[exa]> (likely the Wadler's paper above will contain the intuition too)
2022-05-08 18:02:02 +0200 <haskell_apprenti> ski I understand the statement of the theorem, but how do we know its true
2022-05-08 18:02:28 +0200 <ski> the previous versions are merely fancy (so-called, "pointless") ways to express the same thing (using composition / function pipeline, instead)
2022-05-08 18:03:50 +0200 <haskell_apprenti> ahh ok that wadler "theorems for free" looks like what I want to look at
2022-05-08 18:03:54 +0200 <haskell_apprenti> looks dense thuogh
2022-05-08 18:03:59 +0200 <haskell_apprenti> thanks for the help!
2022-05-08 18:06:33 +0200 <ski> haskell_apprenti : we know it holds for an idealized calculus (second-order polymorphic lambda calculus (F2), in the papers mentioning Reynolds in the abstract, at the link i gave you), because of the abstraction theorem. the "theorems for free" is about deriving an immediate result/law, from a `forall'-type (a universal type), using that theorem
2022-05-08 18:08:39 +0200 <ski> i'm not sure if someone has attempted to prove the corresponding thing, for a system that looks more like Haskell (including various stuff like partiality, nontermination, and possibly a bunch of fancy type system features making it more powerful than F2) .. but we're basically treating it like it behaves similarly
2022-05-08 18:08:57 +0200 <[exa]> haskell_apprenti: btw it's useful to read about curry-howard correspondence; by dragging in logic it paints a much cleaner image of stuff that can't be done. E.g. here: https://en.wikibooks.org/wiki/Haskell/The_Curry%E2%80%93Howard_isomorphism#Intuitionistic_vs_class…
2022-05-08 18:09:20 +0200 <ski> (don't worry, the "full abstraction" stuff by Reynolds is denser)
2022-05-08 18:11:05 +0200 <ski> for Curry-Howard, it can also be neat if one knows a little about basic set theory (cardinality, cartesian product, disjoint union, exponential set (function set))
2022-05-08 18:13:18 +0200 <ski> haskell_apprenti : "but how do we know its true" -- from an appeal to intuition standpoint, there is no way that `reverse' could inspect or interact with the elements (apart from forcing them, and the worst that may do is give nontermination or partiality). .. so, the only thing it can do is return some of the input elements, as output elements (possibly reordering, and possibly duplicating (and dropping
2022-05-08 18:13:24 +0200 <ski> others))
2022-05-08 18:13:49 +0200 <ski> but its behaviour can't depend on the innards of the elements, it can only depend on the length of the input list
2022-05-08 18:14:22 +0200Simon91(~Simon@ipbcc036f5.dynamic.kabel-deutschland.de)
2022-05-08 18:14:26 +0200 <Simon91> Hello again
2022-05-08 18:14:52 +0200 <ski> (the only way to depend on the innards would be to either pass off an element to a callback (but there's no such, in this case), or to use a typeclass-overloaded operation on them (but there's no class constraints in the type signature, so that's not going to happen, either))
2022-05-08 18:15:34 +0200 <Simon91> GHCI coming up with "funktionB :: Integral a => [a] -> [a]" for "funktionB x = [ if (y `mod` 2 /= 0) then (2 * y) else y | y <- x]" is due to GHCI being smart and knowing that you need Integers for the operations in brackets?
2022-05-08 18:16:33 +0200 <c_wraith> It's inference from the way the elements are used.
2022-05-08 18:16:34 +0200 <ski> if you do `foo :: Eq a => Int -> [a] -> [a]', then `foo' can pass off elements to `(==)' and `(/=)' (and other operations with an `Eq' constraint, like e.g. `allDistinct :: Eq a => [a] -> Bool')
2022-05-08 18:16:52 +0200 <c_wraith> You're using (/=), (*), and mod.
2022-05-08 18:17:03 +0200 <ski> @type mod
2022-05-08 18:17:04 +0200 <lambdabot> Integral a => a -> a -> a
2022-05-08 18:17:14 +0200 <ski> @type (*)
2022-05-08 18:17:17 +0200 <lambdabot> Num a => a -> a -> a
2022-05-08 18:17:19 +0200 <ski> @type (/=)
2022-05-08 18:17:20 +0200 <lambdabot> Eq a => a -> a -> Bool
2022-05-08 18:17:28 +0200 <ski> `Num' and `Eq' are superclasses of `Integral'
2022-05-08 18:17:31 +0200 <c_wraith> from that, it derives Eq, Num, and Integral - but it turns out Integral requires Eq and Num, so it reduces the display set
2022-05-08 18:18:02 +0200 <ski> Simon91 : also, your (round) brackets there are redundant
2022-05-08 18:20:04 +0200littlebobeep(~alMalsamo@gateway/tor-sasl/almalsamo) (Ping timeout: 240 seconds)
2022-05-08 18:20:28 +0200 <c_wraith> Oh, there's one other thing contributing to inference there - the 0 literal. It also implies a Num constraint. It's redundant in this case, but worth knowing
2022-05-08 18:20:46 +0200 <c_wraith> Err. the 0 and 2 literals.
2022-05-08 18:20:49 +0200 <Simon91> c_wraith and it chooses Integral because it always chooses the most sub subclass from all classes involved?
2022-05-08 18:20:53 +0200raehik(~raehik@cpc95906-rdng25-2-0-cust156.15-3.cable.virginm.net)
2022-05-08 18:21:13 +0200 <c_wraith> Simon91: no, doesn't show Eq or Num because they're implied by Integral
2022-05-08 18:21:36 +0200 <ski> haskell_apprenti : so, anyway. the only way to do type introspection stuff, and being able to look "inside" an input whose type is a type variable (apart from passing it off to a callback that accepts it, but then the callback comes from the caller, not the callee/implementor of the operation) is to explicitly opt-in to it, by using a `Typable' or `Generic' constraint, or so, on the type variable
2022-05-08 18:21:58 +0200 <ski> (well, there's also GADTs ..)
2022-05-08 18:22:05 +0200 <Simon91> ski yeah I thought so, but it felt weird and error-prone not putting them (even though it's probably the other way round)
2022-05-08 18:22:06 +0200 <c_wraith> Simon91: that may sound like the same thing, but classes aren't all in a single hierarchy
2022-05-08 18:22:44 +0200 <c_wraith> Simon91: so there's no guarantee there is such a thing as a single most-sub subclass.
2022-05-08 18:22:45 +0200 <Simon91> c_wraith I see. Very interesting.
2022-05-08 18:22:54 +0200 <ski> Simon91 : pointing out redundant brackets (when it's likely they weren't put in consciously for an explicit reason), is a pet peeve of mine ;)
2022-05-08 18:23:17 +0200Pickchea(~private@user/pickchea) (Quit: Leaving)
2022-05-08 18:23:19 +0200 <Simon91> hahah
2022-05-08 18:23:42 +0200 <c_wraith> ski: parse error, unmatched closing ')' at end of input
2022-05-08 18:24:22 +0200 <ski> example of a consciously inserted pair of brackets :
2022-05-08 18:24:28 +0200 <ski> map :: ( a -> b )
2022-05-08 18:24:31 +0200 <ski> -> ([a] -> [b])
2022-05-08 18:24:37 +0200 <ski> (the second pair of round brackets)
2022-05-08 18:24:51 +0200 <ski> @type map . map . map
2022-05-08 18:24:53 +0200 <lambdabot> (a -> b) -> [[[a]]] -> [[[b]]]
2022-05-08 18:25:01 +0200machinedgod(~machinedg@24.105.81.50) (Ping timeout: 256 seconds)
2022-05-08 18:25:11 +0200 <ski> @type zipWith . zipWith
2022-05-08 18:25:14 +0200 <lambdabot> (a -> b -> c) -> [[a]] -> [[b]] -> [[c]]
2022-05-08 18:25:59 +0200 <c_wraith> that doesn't look useful! :P
2022-05-08 18:26:32 +0200 <c_wraith> (I'm sure it's come up once or twice in history)
2022-05-08 18:27:06 +0200 <ski> @let foldL :: (s -> a -> s) -> (s -> [a] -> s); foldL = foldl
2022-05-08 18:27:07 +0200 <lambdabot> Defined.
2022-05-08 18:27:13 +0200 <ski> @type foldL . foldL
2022-05-08 18:27:14 +0200 <lambdabot> (s -> a -> s) -> s -> [[a]] -> s
2022-05-08 18:28:54 +0200 <ski> (the types of the fold right function in OCaml also allows this. but, alas, the signature of the Haskell one prevents this, without interleaving a `flip')
2022-05-08 18:29:45 +0200 <ski> Simon91 : anyway, you'll get used to it (hopefully)
2022-05-08 18:31:24 +0200 <ski> (for some reason, it seems that many people who've been using Haskell for years still don't know that the brackets in `(Foo ...) == ... = ...' and in `case ... of (x:xs) -> ...; ...' or `... where (x:xs) = ...' are redundant ..)
2022-05-08 18:32:05 +0200 <ski> (hm, and there's also `foo :: (Eq a) => ..a..')
2022-05-08 18:34:13 +0200 <geekosaur> I know it but I generally go for consistency
2022-05-08 18:34:51 +0200 <ski> yea, i figure some do (and several don't know)
2022-05-08 18:35:16 +0200tzh(~tzh@c-24-21-73-154.hsd1.wa.comcast.net)
2022-05-08 18:36:34 +0200romesrf(~romes@185.5.8.134)
2022-05-08 18:44:07 +0200 <haskell_apprenti> ski will check out the wiki books thing you sent
2022-05-08 18:45:01 +0200 <haskell_apprenti> also nice intuition thanks
2022-05-08 18:45:56 +0200raehik(~raehik@cpc95906-rdng25-2-0-cust156.15-3.cable.virginm.net) (Ping timeout: 248 seconds)
2022-05-08 18:46:48 +0200 <elmyr> @type (.)
2022-05-08 18:46:49 +0200 <lambdabot> (b -> c) -> (a -> b) -> a -> c
2022-05-08 18:47:02 +0200 <elmyr> ski: doesn't look like Caleskell there either
2022-05-08 18:49:36 +0200__monty__(~toonn@user/toonn)
2022-05-08 18:54:38 +0200alp_(~alp@user/alp)
2022-05-08 18:55:46 +0200gurkenglas(~gurkengla@dslb-084-057-085-111.084.057.pools.vodafone-ip.de)
2022-05-08 18:55:49 +0200 <dminuoso> [Leary]: Oh wow, thanks. Yes!
2022-05-08 18:58:11 +0200haskell_apprenti(~haskell_a@cpe-74-71-248-39.nyc.res.rr.com) (Quit: Client closed)
2022-05-08 19:00:24 +0200skinods to elmyr
2022-05-08 19:00:28 +0200nate1(~nate@98.45.169.16)
2022-05-08 19:05:37 +0200econo(uid147250@user/econo)
2022-05-08 19:08:40 +0200Simon91(~Simon@ipbcc036f5.dynamic.kabel-deutschland.de) (Quit: Client closed)
2022-05-08 19:10:59 +0200bahamas(~lucian@84.232.141.55)
2022-05-08 19:11:32 +0200nate1(~nate@98.45.169.16) (Ping timeout: 248 seconds)
2022-05-08 19:20:21 +0200xaotuk(~sasha@net234-32-245-109.mbb.telenor.rs) (Read error: Connection reset by peer)
2022-05-08 19:20:44 +0200mbuf(~Shakthi@122.174.202.44) (Quit: Leaving)
2022-05-08 19:23:08 +0200jlamothe(~jlamothe@198.251.61.229) (Quit: leaving)
2022-05-08 19:25:37 +0200xaotuk(~sasha@87.116.177.12)
2022-05-08 19:26:06 +0200jakalx(~jakalx@base.jakalx.net) ()
2022-05-08 19:28:13 +0200jakalx(~jakalx@base.jakalx.net)
2022-05-08 19:32:32 +0200haskell_apprenti(~haskell_a@2603-7000-9900-04ba-0000-0000-0000-16e3.res6.spectrum.com)
2022-05-08 19:32:41 +0200haskell_apprenti(~haskell_a@2603-7000-9900-04ba-0000-0000-0000-16e3.res6.spectrum.com) (Client Quit)
2022-05-08 19:36:36 +0200xaotuk(~sasha@87.116.177.12) (Ping timeout: 240 seconds)
2022-05-08 19:40:34 +0200bitdex(~bitdex@gateway/tor-sasl/bitdex) (Ping timeout: 240 seconds)
2022-05-08 19:41:39 +0200raehik(~raehik@cpc95906-rdng25-2-0-cust156.15-3.cable.virginm.net)
2022-05-08 19:43:41 +0200lambdap2(~lambdap@static.167.190.119.168.clients.your-server.de) (Quit: lambdap2)
2022-05-08 19:44:13 +0200lambdap2(~lambdap@static.167.190.119.168.clients.your-server.de)
2022-05-08 19:44:45 +0200bitdex(~bitdex@gateway/tor-sasl/bitdex)
2022-05-08 19:45:35 +0200zeenk(~zeenk@2a02:2f04:a004:9b00:1efc:c1cf:378d:8b3d)
2022-05-08 19:49:34 +0200dcompoze(~dcompoze@5E98D6D9.static.tld.pl)
2022-05-08 19:49:51 +0200dcompoze(~dcompoze@5E98D6D9.static.tld.pl) (Client Quit)
2022-05-08 19:52:49 +0200mikoto-chan(~mikoto-ch@213.177.151.239) (Read error: Connection reset by peer)
2022-05-08 19:58:23 +0200mikoto-chan(~mikoto-ch@213.177.151.239)
2022-05-08 19:59:32 +0200tromp(~textual@dhcp-077-249-230-040.chello.nl) (Quit: My iMac has gone to sleep. ZZZzzz…)
2022-05-08 20:12:10 +0200notzmv(~zmv@user/notzmv) (Ping timeout: 250 seconds)
2022-05-08 20:16:23 +0200jakalx(~jakalx@base.jakalx.net) ()
2022-05-08 20:16:28 +0200melas(~melas@172.77.31.247)
2022-05-08 20:18:30 +0200jakalx(~jakalx@base.jakalx.net)
2022-05-08 20:20:50 +0200notzmv(~zmv@user/notzmv)
2022-05-08 20:21:36 +0200oxide(~lambda@user/oxide) (Quit: oxide)
2022-05-08 20:21:47 +0200tromp(~textual@dhcp-077-249-230-040.chello.nl)
2022-05-08 20:33:42 +0200uam(uid360535@id-360535.hampstead.irccloud.com) (Quit: Connection closed for inactivity)
2022-05-08 20:34:27 +0200coot(~coot@213.134.190.95)
2022-05-08 20:43:06 +0200 <maerwald> does haskell CPP on windows need anything special? I'm getting massive errors that I don't get on unix
2022-05-08 20:45:32 +0200pretty_dumm_guy(trottel@gateway/vpn/protonvpn/prettydummguy/x-88029655)
2022-05-08 20:46:07 +0200werneta(~werneta@70-142-214-115.lightspeed.irvnca.sbcglobal.net)
2022-05-08 20:46:09 +0200dextaa45(~dextaa@user/dextaa)
2022-05-08 20:46:50 +0200dextaa4(~dextaa@user/dextaa) (Ping timeout: 250 seconds)
2022-05-08 20:46:51 +0200dextaa45dextaa4
2022-05-08 20:47:18 +0200 <hpc> probably something to do with how it picks what cpp command to run?
2022-05-08 20:49:39 +0200dextaa49(~dextaa@user/dextaa)
2022-05-08 20:51:36 +0200dextaa4(~dextaa@user/dextaa) (Ping timeout: 250 seconds)
2022-05-08 20:51:37 +0200dextaa49dextaa4
2022-05-08 20:54:25 +0200machinedgod(~machinedg@24.105.81.50)
2022-05-08 21:08:45 +0200yauhsien(~yauhsien@61-231-26-70.dynamic-ip.hinet.net)
2022-05-08 21:09:42 +0200Sgeo(~Sgeo@user/sgeo)
2022-05-08 21:10:20 +0200inversed_(~inversed@176.248.27.211)
2022-05-08 21:11:50 +0200bahamas(~lucian@84.232.141.55) (Ping timeout: 260 seconds)
2022-05-08 21:13:48 +0200yauhsien(~yauhsien@61-231-26-70.dynamic-ip.hinet.net) (Ping timeout: 276 seconds)
2022-05-08 21:14:02 +0200inversed(~inversed@176.248.27.211) (Ping timeout: 272 seconds)
2022-05-08 21:16:38 +0200waleee(~waleee@2001:9b0:213:7200:cc36:a556:b1e8:b340)
2022-05-08 21:22:42 +0200acidjnk(~acidjnk@p200300d0c7068b132c0a169992321cdc.dip0.t-ipconnect.de)
2022-05-08 21:27:47 +0200jollygood2(~bc8147f2@199.204.85.195)
2022-05-08 21:30:00 +0200 <dminuoso> Okay so Im writing a hardware library, that exposes a bunch of `init/finalize` or `open/close` functions. Im debating whether to provide `with` CPS helpers - and the reason Im debating this is because I dont want to make a choice for `bracket`.
2022-05-08 21:30:07 +0200 <dminuoso> i.e. do I use base or safe-exceptions bracket
2022-05-08 21:30:49 +0200 <dminuoso> My thinking is: just expose the manual functions, defer writing a bracket'ed helper to the user who can then chose whatever library they want
2022-05-08 21:30:52 +0200 <dminuoso> Is this a sane choice?
2022-05-08 21:33:25 +0200melas(~melas@172.77.31.247) (Ping timeout: 260 seconds)
2022-05-08 21:33:43 +0200 <hpc> presumably you aren't already depending on safe-exceptions
2022-05-08 21:33:47 +0200 <monochrom> base itself takes the approach of providing both, with the latter hardwired to IO.
2022-05-08 21:33:49 +0200 <hpc> but you're certainly already depending on base
2022-05-08 21:34:03 +0200 <hpc> so provide the base functions and a with-function for base bracket
2022-05-08 21:34:15 +0200 <hpc> the user can write a safe-exceptions with-function
2022-05-08 21:34:19 +0200 <dminuoso> monochrom: both
2022-05-08 21:34:21 +0200 <dminuoso> ?
2022-05-08 21:34:31 +0200 <dminuoso> hpc: Mmm, I guess I can do that.
2022-05-08 21:34:44 +0200 <monochrom> base has both openFile+hClose and withFile.
2022-05-08 21:34:50 +0200 <dminuoso> Ahh, I see
2022-05-08 21:36:36 +0200 <monochrom> But everyone knows how to use bracket. If you don't provide a "with", it's OK.
2022-05-08 21:37:31 +0200 <monochrom> I haven't needed safe-exceptions.
2022-05-08 21:38:06 +0200 <dminuoso> "needed" is a bit strong, in case of bracket its rather about a rare edge case that is really hard to trigger
2022-05-08 21:39:01 +0200 <dminuoso> I sincerely believe that defaulting to `mask` instead of `uninterruptibleMask` inside the implementation is a dangerous mistake that leads to false assumptions.
2022-05-08 21:39:15 +0200 <dminuoso> And it goes into "everyone thinks they know how to use bracket" rather than "everyone knows"
2022-05-08 21:42:46 +0200takuan(~takuan@178-116-218-225.access.telenet.be) (Remote host closed the connection)
2022-05-08 21:46:04 +0200stiell_(~stiell@gateway/tor-sasl/stiell) (Ping timeout: 240 seconds)
2022-05-08 21:46:46 +0200 <mxs> would this be a candidate for base? elemIndex :: (Traversable t, Eq a, Num b) => a -> t a -> Maybe b
2022-05-08 21:47:45 +0200Pickchea(~private@user/pickchea)
2022-05-08 21:47:56 +0200 <dminuoso> The Num polymorphism is a bit weird
2022-05-08 21:48:22 +0200 <mxs> can be Int. I just like the generic* functions
2022-05-08 21:48:24 +0200nut(~haskellfi@roc37-h01-176-170-197-243.dsl.sta.abo.bbox.fr)
2022-05-08 21:49:08 +0200 <mxs> it's about the Traversable elemIndex, I find myself using it a lot
2022-05-08 21:49:48 +0200 <dminuoso> Traversable is way too strong
2022-05-08 21:49:51 +0200 <dminuoso> You only need Foldable
2022-05-08 21:51:12 +0200 <mxs> mhm yeah I suppose, even better. I wrote it with mapAccum for efficiency that's why
2022-05-08 21:51:15 +0200melas(~melas@172.77.31.247)
2022-05-08 21:52:20 +0200 <dminuoso> Not sure how mapAccum would help make it more efficient
2022-05-08 21:52:40 +0200 <mxs> how would you write it?
2022-05-08 21:52:42 +0200 <dminuoso> elemIndex' e = elemIndex e . toList
2022-05-08 21:53:59 +0200 <dminuoso> Im not sure this combinator would cross the Fairbairn threshold
2022-05-08 21:54:06 +0200vorpuni(~pvorp@2001:861:3881:c690:5de2:29c5:e469:d4b5)
2022-05-08 21:54:08 +0200stiell_(~stiell@gateway/tor-sasl/stiell)
2022-05-08 21:54:25 +0200 <dminuoso> If you find yourself needing this a lot, it might be an indicator of working with the wrong data types
2022-05-08 21:54:53 +0200 <Bulby[m]> it's always traverse!
2022-05-08 21:55:04 +0200 <Bulby[m]> what is Fairbairn
2022-05-08 21:55:11 +0200 <dminuoso> I guess the thing is, in a Foldable this is generally not useful since you have no guarantee to do random access on that
2022-05-08 21:55:38 +0200 <dminuoso> Finding the index of an arbitrary foldable structure seems like an awkward information if you cant say manipulate the structure on that index
2022-05-08 21:56:36 +0200 <dminuoso> On lists at least this has clear meaning, but what does "index in a tree" mean exactly?
2022-05-08 21:56:55 +0200 <dminuoso> Bulby[m]: https://wiki.haskell.org/Fairbairn_threshold
2022-05-08 21:57:49 +0200 <mxs> elemIndex a = msum . snd . mapAccumL fn 0 where fn s x = (s+1, guard(a == x) >> Just s)
2022-05-08 21:58:06 +0200 <mxs> without toList, but I'm not sure how much that saves on second thought
2022-05-08 21:58:15 +0200 <dminuoso> Im confident `elemIndex' e = elemIndex e . toList` is going to be cheaper.
2022-05-08 21:58:39 +0200 <dminuoso> Recall that in non-strict semantics the list is being generated lazily
2022-05-08 21:58:57 +0200 <dminuoso> But really, all this boils down to the same problem:
2022-05-08 21:59:12 +0200 <dminuoso> Your code does semantically the same: turn it into a list in sequencing order, and find the index inside that list.
2022-05-08 21:59:19 +0200 <dminuoso> Is this a generally useful operation on arbitrary foldable structures?
2022-05-08 22:00:59 +0200 <dminuoso> mxs: btw, the above is going to use findIndices internally , which has some carefully crafted code to trigger deforestation
2022-05-08 22:01:17 +0200 <dminuoso> https://hackage.haskell.org/package/base-4.16.1.0/docs/src/Data-OldList.html#findIndices
2022-05-08 22:02:03 +0200 <dminuoso> So depending on how the structure is made, this can be quite efficient
2022-05-08 22:04:01 +0200eggplantade(~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net) (Remote host closed the connection)
2022-05-08 22:04:39 +0200 <kaol> Today I learned that it pays to sometimes think a bit and not just hammer at the types until they match.
2022-05-08 22:05:11 +0200 <monochrom> Intelligent Design > Evolution
2022-05-08 22:05:12 +0200 <kaol> join . listToMaybe was too easy, I needed getFirst . mconcat . fmap First instead.
2022-05-08 22:06:07 +0200eggplantade(~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net)
2022-05-08 22:08:33 +0200MajorBiscuit(~MajorBisc@c-001-007-017.client.tudelft.eduvpn.nl) (Quit: WeeChat 3.4)
2022-05-08 22:08:34 +0200 <tomsmeding> kaol: isn't that `catMaybes`
2022-05-08 22:11:18 +0200 <kaol> listToMaybe . catMaybes actually.
2022-05-08 22:11:26 +0200_ht(~quassel@231-169-21-31.ftth.glasoperator.nl) (Remote host closed the connection)
2022-05-08 22:11:30 +0200 <tomsmeding> Ah right
2022-05-08 22:12:10 +0200 <tomsmeding> kaol: hmm, so isn't it `asum`
2022-05-08 22:12:32 +0200 <tomsmeding> The Alternative instance for Maybe picks the leftmost Just
2022-05-08 22:12:37 +0200mmhat(~mmh@2001:4090:a243:8070:ee08:6bff:fe09:5315)
2022-05-08 22:12:39 +0200mmhat(~mmh@2001:4090:a243:8070:ee08:6bff:fe09:5315) (Client Quit)
2022-05-08 22:14:47 +0200 <kaol> Well I'll be. I think I have reached par on this golf journey.
2022-05-08 22:15:31 +0200tromp(~textual@dhcp-077-249-230-040.chello.nl) (Quit: My iMac has gone to sleep. ZZZzzz…)
2022-05-08 22:15:53 +0200 <mxs> dminuoso: thanks for the insight, you're probably right - I avoided toList but now that I think about it, there's no reason
2022-05-08 22:16:33 +0200 <tomsmeding> kaol: knowing the variety of utility functions that happen to do useful things on Maybe is more learning/experience than art :p
2022-05-08 22:21:24 +0200nut(~haskellfi@roc37-h01-176-170-197-243.dsl.sta.abo.bbox.fr) (Ping timeout: 276 seconds)
2022-05-08 22:27:39 +0200tromp(~textual@dhcp-077-249-230-040.chello.nl)
2022-05-08 22:30:05 +0200wgl(~wgl@75-161-32-115.albq.qwest.net)
2022-05-08 22:33:35 +0200 <dminuoso> mxs: https://gist.github.com/dminuoso/e285f19e9dac2de2300a52e74ca82279
2022-05-08 22:34:43 +0200 <dminuoso> What is interesting is that fusion did not trigger, and even despite that its still a lot less code.
2022-05-08 22:35:35 +0200 <dminuoso> Part of that is because findIndices then ends up being a simple fold, but mapAccumL is a traverse over simplified State transformer
2022-05-08 22:36:50 +0200 <dminuoso> Ah, turns out that according to #15426 the fusion is broken currently for findIndex
2022-05-08 22:38:09 +0200CiaoSen(~Jura@p200300c95732ec002a3a4dfffe84dbd5.dip0.t-ipconnect.de)
2022-05-08 22:39:04 +0200raehik(~raehik@cpc95906-rdng25-2-0-cust156.15-3.cable.virginm.net) (Ping timeout: 250 seconds)
2022-05-08 22:42:33 +0200littlebobeep(~alMalsamo@gateway/tor-sasl/almalsamo)
2022-05-08 22:42:39 +0200raehik(~raehik@cpc95906-rdng25-2-0-cust156.15-3.cable.virginm.net)
2022-05-08 22:44:19 +0200 <energizer> can i use hoogle or something to find a bunch of interesting examples of Monoid?
2022-05-08 22:46:08 +0200 <dsal> energizer: You can find a bunch just by looking at haddock.
2022-05-08 22:46:15 +0200 <geekosaur> @instances Monoid
2022-05-08 22:46:17 +0200 <lambdabot> (), (a -> b), (a, b), All, Any, Dual a, IO a, Maybe a, Ordering, Product a, ST s a, Sum a
2022-05-08 22:46:33 +0200 <dsal> https://hackage.haskell.org/package/base-4.16.1.0/docs/Data-Monoid.html#t:Monoid
2022-05-08 22:46:36 +0200 <geekosaur> and those are just the ones in Prelude iirc
2022-05-08 22:46:48 +0200 <geekosaur> @instances-importing Data.Monoid Monoid
2022-05-08 22:46:50 +0200 <lambdabot> (), (a -> b), (a, b), All, Any, Dual a, IO a, Maybe a, Ordering, Product a, ST s a, Sum a
2022-05-08 22:47:25 +0200 <dsal> (a->b) and Ordering are pretty interesting ones together.
2022-05-08 22:48:44 +0200 <dsal> I use the tuple ones sometimes, but for that type of thing, often just make a new product type.
2022-05-08 22:51:16 +0200dextaa4(~dextaa@user/dextaa) (Quit: The Lounge - https://thelounge.chat)
2022-05-08 22:51:24 +0200wgl(~wgl@75-161-32-115.albq.qwest.net) (Quit: wgl)
2022-05-08 22:53:57 +0200jmdaemon(~jmdaemon@user/jmdaemon)
2022-05-08 22:59:10 +0200jgeerds(~jgeerds@d53604b0.access.ecotel.net)
2022-05-08 22:59:13 +0200coot(~coot@213.134.190.95) (Quit: coot)
2022-05-08 23:05:14 +0200Pickchea(~private@user/pickchea) (Quit: Leaving)
2022-05-08 23:05:15 +0200julian(~julian@20.83.116.49) (Remote host closed the connection)
2022-05-08 23:05:37 +0200king_gs(~Thunderbi@2806:103e:29:99f9:ca77:e08e:3816:239e)
2022-05-08 23:05:43 +0200king_gs(~Thunderbi@2806:103e:29:99f9:ca77:e08e:3816:239e) (Client Quit)
2022-05-08 23:07:08 +0200julian(~julian@20.83.116.49)
2022-05-08 23:07:40 +0200jonathanx(~jonathan@h-178-174-176-109.A357.priv.bahnhof.se) (Ping timeout: 250 seconds)
2022-05-08 23:09:26 +0200kenran(~kenran@200116b82be152003bcf840303205486.dip.versatel-1u1.de) (Quit: WeeChat info:version)
2022-05-08 23:09:38 +0200julian(~julian@20.83.116.49) (Remote host closed the connection)
2022-05-08 23:11:06 +0200julian(~julian@20.83.116.49)
2022-05-08 23:18:20 +0200zer0bitz(~zer0bitz@2001:2003:f444:8f00:740b:2afc:d306:1083) (Read error: Connection reset by peer)
2022-05-08 23:19:41 +0200werneta(~werneta@70-142-214-115.lightspeed.irvnca.sbcglobal.net) (Ping timeout: 256 seconds)
2022-05-08 23:19:51 +0200__monty__(~toonn@user/toonn) (Quit: leaving)
2022-05-08 23:20:47 +0200werneta(~werneta@70-142-214-115.lightspeed.irvnca.sbcglobal.net)
2022-05-08 23:25:45 +0200mikoto-chan(~mikoto-ch@213.177.151.239) (Ping timeout: 276 seconds)
2022-05-08 23:37:32 +0200harveypwca(~harveypwc@2601:246:c180:a570:3828:d8:e523:3f67)
2022-05-08 23:39:04 +0200king_gs(~Thunderbi@187.201.141.165)
2022-05-08 23:40:30 +0200andrey_(~andrey@p508d43ec.dip0.t-ipconnect.de)
2022-05-08 23:43:28 +0200andrey(~andrey@p200300dbcf48ce00934437bb39b09cba.dip0.t-ipconnect.de)
2022-05-08 23:43:30 +0200andrey__(~andrey@p200300dbcf3ea70066ff5d38847dda5c.dip0.t-ipconnect.de) (Ping timeout: 260 seconds)
2022-05-08 23:45:07 +0200tabemann(~tabemann@172-13-49-137.lightspeed.milwwi.sbcglobal.net) (Remote host closed the connection)
2022-05-08 23:45:08 +0200alp_(~alp@user/alp) (Ping timeout: 248 seconds)
2022-05-08 23:45:22 +0200AkechiShiro(~licht@user/akechishiro) (Ping timeout: 250 seconds)
2022-05-08 23:46:31 +0200AkechiShiro(~licht@user/akechishiro)
2022-05-08 23:46:33 +0200andrey_(~andrey@p508d43ec.dip0.t-ipconnect.de) (Ping timeout: 276 seconds)
2022-05-08 23:48:30 +0200king_gs(~Thunderbi@187.201.141.165) (Ping timeout: 276 seconds)
2022-05-08 23:48:31 +0200wgl(~wgl@75-161-32-115.albq.qwest.net)
2022-05-08 23:49:06 +0200king_gs(~Thunderbi@187.201.105.54)
2022-05-08 23:49:49 +0200machinedgod(~machinedg@24.105.81.50) (Ping timeout: 246 seconds)
2022-05-08 23:51:50 +0200tabemann(~tabemann@172-13-49-137.lightspeed.milwwi.sbcglobal.net)
2022-05-08 23:56:18 +0200liz(~liz@host109-151-128-120.range109-151.btcentralplus.com) (Quit: Lost terminal)
2022-05-08 23:56:51 +0200vorpuni(~pvorp@2001:861:3881:c690:5de2:29c5:e469:d4b5) (Remote host closed the connection)