Home liberachat/#haskell: Logs Calendar

Logs on 2024-09-26 (liberachat/#haskell)

00:07:03 × merijn quits (~merijn@204-220-045-062.dynamic.caiway.nl) (Ping timeout: 245 seconds)
00:09:46 athan joins (~athan@syn-098-153-145-140.biz.spectrum.com)
00:12:30 morb joins (~morb@pool-108-41-100-120.nycmny.fios.verizon.net)
00:12:52 × pavonia quits (~user@user/siracusa) (Ping timeout: 252 seconds)
00:18:05 merijn joins (~merijn@204-220-045-062.dynamic.caiway.nl)
00:23:19 × merijn quits (~merijn@204-220-045-062.dynamic.caiway.nl) (Ping timeout: 260 seconds)
00:23:54 × morb quits (~morb@pool-108-41-100-120.nycmny.fios.verizon.net) (Ping timeout: 260 seconds)
00:26:30 × Smiles quits (uid551636@id-551636.lymington.irccloud.com) (Quit: Connection closed for inactivity)
00:29:06 pavonia joins (~user@user/siracusa)
00:35:34 × xff0x quits (~xff0x@2405:6580:b080:900:bae7:541b:79b5:8d8e) (Ping timeout: 260 seconds)
00:38:01 morb joins (~morb@pool-108-41-100-120.nycmny.fios.verizon.net)
00:38:11 × identity quits (~identity@user/ZharMeny) (Quit: ERC 5.5.0.29.1 (IRC client for GNU Emacs 29.4))
00:39:49 × peterbecich quits (~Thunderbi@syn-047-229-123-186.res.spectrum.com) (Ping timeout: 248 seconds)
00:41:05 × raehik quits (~raehik@rdng-25-b2-v4wan-169990-cust1344.vm39.cable.virginm.net) (Ping timeout: 252 seconds)
00:43:03 × morb quits (~morb@pool-108-41-100-120.nycmny.fios.verizon.net) (Ping timeout: 246 seconds)
00:49:39 merijn joins (~merijn@204-220-045-062.dynamic.caiway.nl)
00:54:40 × merijn quits (~merijn@204-220-045-062.dynamic.caiway.nl) (Ping timeout: 252 seconds)
00:58:43 morb joins (~morb@pool-108-41-100-120.nycmny.fios.verizon.net)
01:00:44 L29Ah joins (~L29Ah@wikipedia/L29Ah)
01:02:57 × morb quits (~morb@pool-108-41-100-120.nycmny.fios.verizon.net) (Ping timeout: 244 seconds)
01:05:27 merijn joins (~merijn@204-220-045-062.dynamic.caiway.nl)
01:10:26 × ystael quits (~ystael@user/ystael) (Read error: Connection reset by peer)
01:10:34 × merijn quits (~merijn@204-220-045-062.dynamic.caiway.nl) (Ping timeout: 260 seconds)
01:13:51 morb joins (~morb@pool-108-41-100-120.nycmny.fios.verizon.net)
01:19:29 × morb quits (~morb@pool-108-41-100-120.nycmny.fios.verizon.net) (Ping timeout: 260 seconds)
01:21:14 merijn joins (~merijn@204-220-045-062.dynamic.caiway.nl)
01:23:14 × synchromesh quits (~john@2406:5a00:241a:5600:ac18:5792:28a:df5a) (Read error: Connection reset by peer)
01:24:16 synchromesh joins (~john@2406:5a00:241a:5600:2de5:ba26:2eef:9155)
01:25:49 sourcetarius joins (~sourcetar@user/sourcetarius)
01:26:06 × merijn quits (~merijn@204-220-045-062.dynamic.caiway.nl) (Ping timeout: 246 seconds)
01:26:07 xff0x joins (~xff0x@fsb6a9491c.tkyc517.ap.nuro.jp)
01:33:26 × juri_ quits (~juri@implicitcad.org) (Ping timeout: 244 seconds)
01:33:57 morb joins (~morb@pool-108-41-100-120.nycmny.fios.verizon.net)
01:35:59 dontdieych2 joins (~quassel@user/dontdieych2)
01:37:01 merijn joins (~merijn@204-220-045-062.dynamic.caiway.nl)
01:38:14 × morb quits (~morb@pool-108-41-100-120.nycmny.fios.verizon.net) (Ping timeout: 255 seconds)
01:42:15 × merijn quits (~merijn@204-220-045-062.dynamic.caiway.nl) (Ping timeout: 252 seconds)
01:47:11 troojg joins (~troojg@user/troojg)
01:51:45 morb joins (~morb@pool-108-41-100-120.nycmny.fios.verizon.net)
01:52:47 merijn joins (~merijn@204-220-045-062.dynamic.caiway.nl)
01:56:01 × morb quits (~morb@pool-108-41-100-120.nycmny.fios.verizon.net) (Ping timeout: 248 seconds)
01:57:37 × merijn quits (~merijn@204-220-045-062.dynamic.caiway.nl) (Ping timeout: 248 seconds)
01:58:04 merijn joins (~merijn@204-220-045-062.dynamic.caiway.nl)
02:03:03 × merijn quits (~merijn@204-220-045-062.dynamic.caiway.nl) (Ping timeout: 265 seconds)
02:08:58 morb joins (~morb@pool-108-41-100-120.nycmny.fios.verizon.net)
02:10:59 × weary-traveler quits (~user@user/user363627) (Remote host closed the connection)
02:13:43 merijn joins (~merijn@204-220-045-062.dynamic.caiway.nl)
02:16:19 × td_ quits (~td@i5387090E.versanet.de) (Ping timeout: 264 seconds)
02:17:36 td_ joins (~td@i53870912.versanet.de)
02:18:43 × merijn quits (~merijn@204-220-045-062.dynamic.caiway.nl) (Ping timeout: 245 seconds)
02:19:28 merijn joins (~merijn@204-220-045-062.dynamic.caiway.nl)
02:24:04 × merijn quits (~merijn@204-220-045-062.dynamic.caiway.nl) (Ping timeout: 244 seconds)
02:34:57 × troojg quits (~troojg@user/troojg) (Ping timeout: 248 seconds)
02:35:10 merijn joins (~merijn@204-220-045-062.dynamic.caiway.nl)
02:36:13 × morb quits (~morb@pool-108-41-100-120.nycmny.fios.verizon.net) (Ping timeout: 245 seconds)
02:40:16 × merijn quits (~merijn@204-220-045-062.dynamic.caiway.nl) (Ping timeout: 265 seconds)
02:43:01 × Unicorn_Princess quits (~Unicorn_P@user/Unicorn-Princess/x-3540542) (Remote host closed the connection)
02:50:57 merijn joins (~merijn@204-220-045-062.dynamic.caiway.nl)
02:52:07 × glguy quits (glguy@libera/staff/glguy) (Ping timeout: 624 seconds)
02:52:18 × tv quits (~tv@user/tv) (Quit: derp)
02:54:08 tv joins (~tv@user/tv)
02:56:05 × merijn quits (~merijn@204-220-045-062.dynamic.caiway.nl) (Ping timeout: 255 seconds)
02:56:13 × athan quits (~athan@syn-098-153-145-140.biz.spectrum.com) (Quit: Konversation terminated!)
03:04:21 rosco joins (~rosco@175.136.158.234)
03:04:43 × swamp_ quits (~zmt00@user/zmt00) (Read error: Connection reset by peer)
03:06:45 merijn joins (~merijn@204-220-045-062.dynamic.caiway.nl)
03:11:47 × merijn quits (~merijn@204-220-045-062.dynamic.caiway.nl) (Ping timeout: 252 seconds)
03:16:47 morb joins (~morb@pool-108-41-100-120.nycmny.fios.verizon.net)
03:20:54 × morb quits (~morb@pool-108-41-100-120.nycmny.fios.verizon.net) (Ping timeout: 246 seconds)
03:21:20 × paddymahoney quits (~paddymaho@pool-99-250-10-137.cpe.net.cable.rogers.com) (Ping timeout: 252 seconds)
03:22:32 merijn joins (~merijn@204-220-045-062.dynamic.caiway.nl)
03:23:46 zmt00 joins (~zmt00@user/zmt00)
03:27:03 paddymahoney joins (~paddymaho@pool-99-250-10-137.cpe.net.cable.rogers.com)
03:27:28 × merijn quits (~merijn@204-220-045-062.dynamic.caiway.nl) (Ping timeout: 245 seconds)
03:27:51 L29Ah parts (~L29Ah@wikipedia/L29Ah) ()
03:29:46 <dmj`> there needs to be a paper on how typeclass entailment was implemented using outsidein(x)
03:34:57 morb joins (~morb@pool-108-41-100-120.nycmny.fios.verizon.net)
03:38:19 merijn joins (~merijn@204-220-045-062.dynamic.caiway.nl)
03:39:40 Lord_of_Life_ joins (~Lord@user/lord-of-life/x-2819915)
03:39:43 × Lord_of_Life quits (~Lord@user/lord-of-life/x-2819915) (Ping timeout: 265 seconds)
03:40:10 athan joins (~athan@syn-098-153-145-140.biz.spectrum.com)
03:40:24 × morb quits (~morb@pool-108-41-100-120.nycmny.fios.verizon.net) (Ping timeout: 252 seconds)
03:41:03 Lord_of_Life_ is now known as Lord_of_Life
03:43:20 × merijn quits (~merijn@204-220-045-062.dynamic.caiway.nl) (Ping timeout: 252 seconds)
03:47:50 glguy joins (glguy@libera/staff/glguy)
03:53:47 morb joins (~morb@pool-108-41-100-120.nycmny.fios.verizon.net)
03:58:21 × morb quits (~morb@pool-108-41-100-120.nycmny.fios.verizon.net) (Ping timeout: 252 seconds)
03:59:09 merijn joins (~merijn@204-220-045-062.dynamic.caiway.nl)
04:03:36 × merijn quits (~merijn@204-220-045-062.dynamic.caiway.nl) (Ping timeout: 246 seconds)
04:07:07 lol_ is now known as jcarpenter2
04:12:20 morb joins (~morb@pool-108-41-100-120.nycmny.fios.verizon.net)
04:14:45 merijn joins (~merijn@204-220-045-062.dynamic.caiway.nl)
04:19:48 × merijn quits (~merijn@204-220-045-062.dynamic.caiway.nl) (Ping timeout: 244 seconds)
04:30:19 meritamen joins (~user@user/meritamen)
04:30:32 merijn joins (~merijn@204-220-045-062.dynamic.caiway.nl)
04:30:43 spew joins (~spew@201.141.99.170)
04:31:57 × fun-safe-math quits (~fun-safe-@24.21.106.247) (Ping timeout: 246 seconds)
04:33:35 × meritamen quits (~user@user/meritamen) (Client Quit)
04:33:35 L29Ah joins (~L29Ah@wikipedia/L29Ah)
04:35:27 × merijn quits (~merijn@204-220-045-062.dynamic.caiway.nl) (Ping timeout: 246 seconds)
04:38:17 michalz joins (~michalz@185.246.207.200)
04:38:47 takuan joins (~takuan@178-116-218-225.access.telenet.be)
04:46:18 merijn joins (~merijn@204-220-045-062.dynamic.caiway.nl)
04:46:20 × szkl quits (uid110435@id-110435.uxbridge.irccloud.com) (Quit: Connection closed for inactivity)
04:51:01 × merijn quits (~merijn@204-220-045-062.dynamic.caiway.nl) (Ping timeout: 248 seconds)
04:52:53 peterbecich joins (~Thunderbi@syn-047-229-123-186.res.spectrum.com)
04:57:29 × rosco quits (~rosco@175.136.158.234) (Quit: Lost terminal)
04:59:57 merijn joins (~merijn@204-220-045-062.dynamic.caiway.nl)
05:03:02 × spew quits (~spew@201.141.99.170) (Quit: spew)
05:04:51 × merijn quits (~merijn@204-220-045-062.dynamic.caiway.nl) (Ping timeout: 246 seconds)
05:05:20 × marinelli quits (~weechat@gateway/tor-sasl/marinelli) (Quit: marinelli)
05:10:38 misterfish joins (~misterfis@84.53.85.146)
05:11:28 rosco joins (~rosco@175.136.158.234)
05:14:34 × morb quits (~morb@pool-108-41-100-120.nycmny.fios.verizon.net) (Ping timeout: 244 seconds)
05:15:44 merijn joins (~merijn@204-220-045-062.dynamic.caiway.nl)
05:20:29 × merijn quits (~merijn@204-220-045-062.dynamic.caiway.nl) (Ping timeout: 252 seconds)
05:30:07 × Sgeo quits (~Sgeo@user/sgeo) (Read error: Connection reset by peer)
05:30:17 L29Ah parts (~L29Ah@wikipedia/L29Ah) ()
05:31:31 merijn joins (~merijn@204-220-045-062.dynamic.caiway.nl)
05:31:44 × dontdieych2 quits (~quassel@user/dontdieych2) (Read error: Connection reset by peer)
05:32:26 morb joins (~morb@pool-108-41-100-120.nycmny.fios.verizon.net)
05:34:19 Guest6 joins (~Guest6@190.17.179.95)
05:35:21 × Guest6 quits (~Guest6@190.17.179.95) (Client Quit)
05:36:12 × merijn quits (~merijn@204-220-045-062.dynamic.caiway.nl) (Ping timeout: 265 seconds)
05:38:45 × morb quits (~morb@pool-108-41-100-120.nycmny.fios.verizon.net) (Ping timeout: 252 seconds)
05:46:56 merijn joins (~merijn@204-220-045-062.dynamic.caiway.nl)
05:48:21 ubert joins (~Thunderbi@178.165.177.214.wireless.dyn.drei.com)
05:48:46 × Square3 quits (~Square4@user/square) (Ping timeout: 265 seconds)
05:51:46 × merijn quits (~merijn@204-220-045-062.dynamic.caiway.nl) (Ping timeout: 244 seconds)
05:54:01 acidjnk joins (~acidjnk@p200300d6e72cfb33a563052759f358da.dip0.t-ipconnect.de)
06:00:57 merijn joins (~merijn@204-220-045-062.dynamic.caiway.nl)
06:01:48 alp_ joins (~alp@2001:861:e3d6:8f80:7a01:1d08:ba91:82c0)
06:03:30 × alp_ quits (~alp@2001:861:e3d6:8f80:7a01:1d08:ba91:82c0) (Client Quit)
06:03:49 alp_ joins (~alp@2001:861:e3d6:8f80:7a01:1d08:ba91:82c0)
06:04:30 × peterbecich quits (~Thunderbi@syn-047-229-123-186.res.spectrum.com) (Quit: peterbecich)
06:04:46 peterbecich joins (~Thunderbi@syn-047-229-123-186.res.spectrum.com)
06:05:41 × merijn quits (~merijn@204-220-045-062.dynamic.caiway.nl) (Ping timeout: 248 seconds)
06:09:08 morb joins (~morb@pool-108-41-100-120.nycmny.fios.verizon.net)
06:10:00 × misterfish quits (~misterfis@84.53.85.146) (Ping timeout: 252 seconds)
06:13:18 × peterbecich quits (~Thunderbi@syn-047-229-123-186.res.spectrum.com) (Ping timeout: 252 seconds)
06:16:44 merijn joins (~merijn@204-220-045-062.dynamic.caiway.nl)
06:18:25 × morb quits (~morb@pool-108-41-100-120.nycmny.fios.verizon.net) (Ping timeout: 248 seconds)
06:20:55 tromp joins (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl)
06:21:44 × merijn quits (~merijn@204-220-045-062.dynamic.caiway.nl) (Ping timeout: 255 seconds)
06:23:34 × lucy quits (~lucy@user/lucy) (Ping timeout: 252 seconds)
06:25:27 lucy joins (~lucy@user/lucy)
06:32:32 merijn joins (~merijn@204-220-045-062.dynamic.caiway.nl)
06:37:35 × merijn quits (~merijn@204-220-045-062.dynamic.caiway.nl) (Ping timeout: 265 seconds)
06:39:16 oneeyedalien joins (~oneeyedal@user/oneeyedalien)
06:48:18 merijn joins (~merijn@204-220-045-062.dynamic.caiway.nl)
06:49:04 morb joins (~morb@pool-108-41-100-120.nycmny.fios.verizon.net)
06:51:37 jinsun joins (~jinsun@user/jinsun)
06:52:50 × ft quits (~ft@p4fc2acce.dip0.t-ipconnect.de) (Quit: leaving)
06:53:44 × merijn quits (~merijn@204-220-045-062.dynamic.caiway.nl) (Ping timeout: 260 seconds)
06:55:29 × morb quits (~morb@pool-108-41-100-120.nycmny.fios.verizon.net) (Ping timeout: 260 seconds)
06:59:25 misterfish joins (~misterfis@87.215.131.102)
06:59:37 × hsw quits (~hsw@2001-b030-2303-0104-0172-0025-0012-0132.hinet-ip6.hinet.net) (Quit: Leaving)
07:00:04 × caconym quits (~caconym@user/caconym) (Quit: bye)
07:00:41 caconym joins (~caconym@user/caconym)
07:01:57 merijn joins (~merijn@204-220-045-062.dynamic.caiway.nl)
07:07:19 × merijn quits (~merijn@204-220-045-062.dynamic.caiway.nl) (Ping timeout: 264 seconds)
07:09:06 ljdarj joins (~Thunderbi@user/ljdarj)
07:09:28 merijn joins (~merijn@204-220-045-062.dynamic.caiway.nl)
07:14:10 × merijn quits (~merijn@204-220-045-062.dynamic.caiway.nl) (Ping timeout: 252 seconds)
07:19:14 alicia-it joins (~alicia-it@91.254.20.157)
07:20:00 alicia-it parts (~alicia-it@91.254.20.157) ()
07:23:53 × ljdarj quits (~Thunderbi@user/ljdarj) (Quit: ljdarj)
07:26:27 morb joins (~morb@pool-108-41-100-120.nycmny.fios.verizon.net)
07:27:49 yoneda joins (~mike@193.206.102.122)
07:32:04 × morb quits (~morb@pool-108-41-100-120.nycmny.fios.verizon.net) (Ping timeout: 260 seconds)
07:45:00 kuribas joins (~user@ip-188-118-57-242.reverse.destiny.be)
07:46:11 morb joins (~morb@pool-108-41-100-120.nycmny.fios.verizon.net)
07:48:08 lortabac joins (~lortabac@2a01:e0a:541:b8f0:55ab:e185:7f81:54a4)
07:52:36 CiaoSen joins (~Jura@2a05:5800:2ec:ac00:ca4b:d6ff:fec1:99da)
07:54:10 gmg joins (~user@user/gehmehgeh)
07:57:28 × morb quits (~morb@pool-108-41-100-120.nycmny.fios.verizon.net) (Ping timeout: 245 seconds)
08:00:45 × alp_ quits (~alp@2001:861:e3d6:8f80:7a01:1d08:ba91:82c0) (Remote host closed the connection)
08:01:31 merijn joins (~merijn@77.242.116.146)
08:02:08 × oneeyedalien quits (~oneeyedal@user/oneeyedalien) (Quit: Leaving)
08:02:46 alp_ joins (~alp@2001:861:e3d6:8f80:7a01:1d08:ba91:82c0)
08:03:26 lxsameer joins (~lxsameer@Serene/lxsameer)
08:11:32 morb joins (~morb@pool-108-41-100-120.nycmny.fios.verizon.net)
08:16:40 × rosco quits (~rosco@175.136.158.234) (Quit: Lost terminal)
08:17:09 × morb quits (~morb@pool-108-41-100-120.nycmny.fios.verizon.net) (Ping timeout: 260 seconds)
08:24:06 × econo_ quits (uid147250@id-147250.tinside.irccloud.com) (Quit: Connection closed for inactivity)
08:26:48 × Raito_Bezarius quits (~Raito@wireguard/tunneler/raito-bezarius) (Ping timeout: 246 seconds)
08:27:43 Smiles joins (uid551636@id-551636.lymington.irccloud.com)
08:32:02 morb joins (~morb@pool-108-41-100-120.nycmny.fios.verizon.net)
08:35:00 × euandreh quits (~Thunderbi@189.6.105.228) (Ping timeout: 276 seconds)
08:36:30 euandreh joins (~Thunderbi@189.6.105.228)
08:37:38 × morb quits (~morb@pool-108-41-100-120.nycmny.fios.verizon.net) (Ping timeout: 248 seconds)
08:39:51 × mrmonday quits (~robert@2a01:7e00:e000:1b2:95ca:100:49e0:3f15) (Quit: .)
08:41:10 mrmonday joins (~robert@what.i.hope.is.not.a.tabernaevagant.es)
08:41:42 murgeljm joins (~murgeljm@APN-122-12-44-gprs.simobil.net)
08:49:12 raehik joins (~raehik@rdng-25-b2-v4wan-169990-cust1344.vm39.cable.virginm.net)
08:49:33 cfricke joins (~cfricke@user/cfricke)
08:51:34 × Franciman quits (~Franciman@mx1.fracta.dev) (Ping timeout: 244 seconds)
08:55:32 × murgeljm quits (~murgeljm@APN-122-12-44-gprs.simobil.net) (Read error: Connection reset by peer)
08:58:21 Franciman joins (~Franciman@mx1.fracta.dev)
08:59:57 sawilagar joins (~sawilagar@user/sawilagar)
09:06:51 morb joins (~morb@pool-108-41-100-120.nycmny.fios.verizon.net)
09:07:53 × tzh quits (~tzh@c-76-115-131-146.hsd1.or.comcast.net) (Quit: zzz)
09:11:33 × lucy quits (~lucy@user/lucy) (Read error: Connection reset by peer)
09:12:21 × morb quits (~morb@pool-108-41-100-120.nycmny.fios.verizon.net) (Ping timeout: 248 seconds)
09:14:48 × cfricke quits (~cfricke@user/cfricke) (Ping timeout: 252 seconds)
09:16:00 __monty__ joins (~toonn@user/toonn)
09:17:06 × misterfish quits (~misterfis@87.215.131.102) (Ping timeout: 252 seconds)
09:17:21 szkl joins (uid110435@id-110435.uxbridge.irccloud.com)
09:18:56 × tromp quits (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl) (Quit: My iMac has gone to sleep. ZZZzzz…)
09:20:08 Raito_Bezarius joins (~Raito@wireguard/tunneler/raito-bezarius)
09:23:57 misterfish joins (~misterfis@87.215.131.102)
09:24:07 × merijn quits (~merijn@77.242.116.146) (Ping timeout: 244 seconds)
09:24:41 × Raito_Bezarius quits (~Raito@wireguard/tunneler/raito-bezarius) (Max SendQ exceeded)
09:26:49 morb joins (~morb@pool-108-41-100-120.nycmny.fios.verizon.net)
09:26:56 Digitteknohippie joins (~user@user/digit)
09:27:43 × Digit quits (~user@user/digit) (Ping timeout: 264 seconds)
09:30:57 merijn joins (~merijn@77.242.116.146)
09:31:19 × morb quits (~morb@pool-108-41-100-120.nycmny.fios.verizon.net) (Ping timeout: 264 seconds)
09:31:57 ljdarj joins (~Thunderbi@user/ljdarj)
09:36:10 L29Ah joins (~L29Ah@wikipedia/L29Ah)
09:37:57 tromp joins (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl)
09:40:50 × merijn quits (~merijn@77.242.116.146) (Ping timeout: 252 seconds)
09:41:34 Raito_Bezarius joins (~Raito@wireguard/tunneler/raito-bezarius)
09:43:42 × lortabac quits (~lortabac@2a01:e0a:541:b8f0:55ab:e185:7f81:54a4) (Quit: WeeChat 4.2.2)
09:43:42 merijn joins (~merijn@77.242.116.146)
09:45:50 morb joins (~morb@pool-108-41-100-120.nycmny.fios.verizon.net)
09:46:05 Digitteknohippie is now known as Digit
09:49:36 × CiaoSen quits (~Jura@2a05:5800:2ec:ac00:ca4b:d6ff:fec1:99da) (Ping timeout: 272 seconds)
09:49:59 × kuribas quits (~user@ip-188-118-57-242.reverse.destiny.be) (Remote host closed the connection)
09:50:12 kuribas joins (~user@ip-188-118-57-242.reverse.destiny.be)
09:50:19 × morb quits (~morb@pool-108-41-100-120.nycmny.fios.verizon.net) (Ping timeout: 260 seconds)
10:02:09 morb joins (~morb@pool-108-41-100-120.nycmny.fios.verizon.net)
10:07:15 × morb quits (~morb@pool-108-41-100-120.nycmny.fios.verizon.net) (Ping timeout: 246 seconds)
10:09:44 × xff0x quits (~xff0x@fsb6a9491c.tkyc517.ap.nuro.jp) (Ping timeout: 260 seconds)
10:09:47 × merijn quits (~merijn@77.242.116.146) (Ping timeout: 252 seconds)
10:11:42 × raehik quits (~raehik@rdng-25-b2-v4wan-169990-cust1344.vm39.cable.virginm.net) (Ping timeout: 265 seconds)
10:14:25 × ouroboros quits (~ouroboros@user/ouroboros) (Quit: Bye.)
10:14:25 × acro quits (~acro@user/acro) (Quit: Bye.)
10:15:45 acro joins (~acro@user/acro)
10:17:17 ouroboros joins (~ouroboros@user/ouroboros)
10:17:27 raehik joins (~raehik@rdng-25-b2-v4wan-169990-cust1344.vm39.cable.virginm.net)
10:19:25 merijn joins (~merijn@77.242.116.146)
10:20:42 morb joins (~morb@pool-108-41-100-120.nycmny.fios.verizon.net)
10:25:20 × picnoir quits (~picnoir@about/aquilenet/vodoo/NinjaTrappeur) (Quit: WeeChat 4.4.2)
10:26:57 picnoir joins (~picnoir@about/aquilenet/vodoo/NinjaTrappeur)
10:39:47 Guest76 joins (~Guest76@e175029.upc-e.chello.nl)
10:41:53 × Guest76 quits (~Guest76@e175029.upc-e.chello.nl) (Client Quit)
10:43:33 × merijn quits (~merijn@77.242.116.146) (Ping timeout: 248 seconds)
10:43:43 × misterfish quits (~misterfis@87.215.131.102) (Ping timeout: 245 seconds)
10:44:19 misterfish joins (~misterfis@87.215.131.102)
10:50:43 merijn joins (~merijn@77.242.116.146)
10:56:17 × merijn quits (~merijn@77.242.116.146) (Ping timeout: 248 seconds)
10:57:16 merijn joins (~merijn@77.242.116.146)
10:58:30 identity joins (~identity@user/ZharMeny)
10:59:38 lortabac joins (~lortabac@2a01:e0a:541:b8f0:55ab:e185:7f81:54a4)
11:00:04 × caconym quits (~caconym@user/caconym) (Quit: bye)
11:01:09 × morb quits (~morb@pool-108-41-100-120.nycmny.fios.verizon.net) (Ping timeout: 248 seconds)
11:02:34 caconym joins (~caconym@user/caconym)
11:05:44 × ljdarj quits (~Thunderbi@user/ljdarj) (Ping timeout: 260 seconds)
11:14:52 xff0x joins (~xff0x@2405:6580:b080:900:edb3:3e3f:7e00:b65b)
11:16:42 × tromp quits (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl) (Quit: My iMac has gone to sleep. ZZZzzz…)
11:19:37 hgolden_ joins (~hgolden@204.152.216.106)
11:22:02 × hgolden quits (~hgolden@23.162.40.28) (Ping timeout: 252 seconds)
11:35:33 CiaoSen joins (~Jura@2a05:5800:2ec:ac00:ca4b:d6ff:fec1:99da)
11:36:47 × Smiles quits (uid551636@id-551636.lymington.irccloud.com) (Quit: Connection closed for inactivity)
11:42:23 cfricke joins (~cfricke@user/cfricke)
11:44:39 × synchromesh quits (~john@2406:5a00:241a:5600:2de5:ba26:2eef:9155) (Read error: Connection reset by peer)
11:44:46 × misterfish quits (~misterfis@87.215.131.102) (Ping timeout: 252 seconds)
11:45:52 synchromesh joins (~john@2406:5a00:241a:5600:2de5:ba26:2eef:9155)
11:46:41 misterfish joins (~misterfis@178.229.81.197)
11:48:20 JuanDaugherty joins (~juan@user/JuanDaugherty)
11:53:41 × fgaz_ quits (1ff9197ed6@2a03:6000:1812:100::11ea) (Remote host closed the connection)
11:53:47 fgaz_ joins (1ff9197ed6@2a03:6000:1812:100::11ea)
12:10:09 × misterfish quits (~misterfis@178.229.81.197) (Ping timeout: 276 seconds)
12:10:29 × alioguzhan quits (~Thunderbi@78.173.89.238) (Quit: alioguzhan)
12:10:47 alioguzhan joins (~Thunderbi@78.173.89.238)
12:11:32 misterfish joins (~misterfis@87.215.131.102)
12:13:09 × sawilagar quits (~sawilagar@user/sawilagar) (Remote host closed the connection)
12:13:33 sawilagar joins (~sawilagar@user/sawilagar)
12:14:44 × michalz quits (~michalz@185.246.207.200) (Read error: Connection reset by peer)
12:15:17 michalz joins (~michalz@185.246.207.193)
12:16:40 Smiles joins (uid551636@id-551636.lymington.irccloud.com)
12:19:35 ljdarj joins (~holoirc@37.165.175.135)
12:19:35 × ljdarj quits (~holoirc@37.165.175.135) (Changing host)
12:19:35 ljdarj joins (~holoirc@user/ljdarj)
12:19:55 × JuanDaugherty quits (~juan@user/JuanDaugherty) (Quit: JuanDaugherty)
12:30:20 × misterfish quits (~misterfis@87.215.131.102) (Read error: Connection reset by peer)
12:32:39 misterfish joins (~misterfis@87.215.131.102)
12:36:38 akegalj joins (~akegalj@231-112.dsl.iskon.hr)
12:38:12 × ljdarj quits (~holoirc@user/ljdarj) (Read error: Connection reset by peer)
12:38:13 morb joins (~morb@pool-108-41-100-120.nycmny.fios.verizon.net)
12:39:38 tromp joins (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl)
12:42:00 × raehik quits (~raehik@rdng-25-b2-v4wan-169990-cust1344.vm39.cable.virginm.net) (Ping timeout: 276 seconds)
12:43:21 × morb quits (~morb@pool-108-41-100-120.nycmny.fios.verizon.net) (Ping timeout: 246 seconds)
12:44:21 <akegalj> what is recomended way to create haskell tags? I see ghc-tags and hasktags as options
12:46:21 ljdarj joins (~holoirc@user/ljdarj)
12:46:23 machinedgod joins (~machinedg@d50-99-47-73.abhsia.telus.net)
12:49:46 <__monty__> You mean ctags but Haskell? I still use fast-tags.
12:55:30 × ljdarj quits (~holoirc@user/ljdarj) (Read error: Connection reset by peer)
12:56:08 <akegalj> __monty__: yes. Will have a look at fast-tags. ty
12:57:09 × Lord_of_Life quits (~Lord@user/lord-of-life/x-2819915) (Excess Flood)
12:57:37 morb joins (~morb@pool-108-41-100-120.nycmny.fios.verizon.net)
12:59:10 raehik joins (~raehik@rdng-25-b2-v4wan-169990-cust1344.vm39.cable.virginm.net)
13:00:20 weary-traveler joins (~user@user/user363627)
13:00:29 Lord_of_Life joins (~Lord@user/lord-of-life/x-2819915)
13:01:39 <zzz> since when is `(a,b) :: (Float,Float)` an invalid type signature?
13:02:04 ljdarj joins (~holoirc@37.165.175.135)
13:02:05 × ljdarj quits (~holoirc@37.165.175.135) (Changing host)
13:02:05 ljdarj joins (~holoirc@user/ljdarj)
13:02:40 × morb quits (~morb@pool-108-41-100-120.nycmny.fios.verizon.net) (Ping timeout: 244 seconds)
13:03:23 lucy_ joins (~lucy@user/lucy)
13:04:55 <ncf>
13:05:25 <__monty__> zzz: In what context?
13:05:31 morb joins (~morb@pool-108-41-100-120.nycmny.fios.verizon.net)
13:05:56 <__monty__> :t (1.0,1.0) :: (Float,Float) -- is perfectly valid
13:05:57 <lambdabot> (Float, Float)
13:06:12 spew joins (~spew@201.141.99.170)
13:07:16 × merijn quits (~merijn@77.242.116.146) (Ping timeout: 252 seconds)
13:08:13 <ski> it's a valid type ascription, not a valid type signature
13:08:37 <zzz> __monty__: at the top level. u usually write stuff like `(a,b,c) :: (Int,Word,Whatever) ; (a,b,c) = (1,2,3)` and i never got this error
13:09:02 <zzz> s/u/I
13:09:03 <ski> > let (a,b) :: (Float,Float); a = 0; b = 1 in b - a
13:09:05 <lambdabot> <hint>:1:5: error:
13:09:05 <lambdabot> Invalid type signature: (a, b) :: ...
13:09:05 <lambdabot> Should be of form <variable> :: <type>
13:09:06 <ski> > let (a,b) :: (Float,Float); (a,b) = (0,1) in b - a
13:09:08 <lambdabot> <hint>:1:5: error:
13:09:08 <lambdabot> Invalid type signature: (a, b) :: ...
13:09:08 <lambdabot> Should be of form <variable> :: <type>
13:09:50 × morb quits (~morb@pool-108-41-100-120.nycmny.fios.verizon.net) (Ping timeout: 252 seconds)
13:10:03 <ski> > let a,b :: Float; (a,b) = (0,1) in snd ((a,b) :: (Float,Float)) - fst ((a,b) :: (Float,Float))
13:10:05 <lambdabot> 1.0
13:11:11 × ljdarj quits (~holoirc@user/ljdarj) (Read error: Connection reset by peer)
13:11:29 merijn joins (~merijn@77.242.116.146)
13:13:52 <ski> a type signature has a sequence of *identifiers* separated by commas, to the left of PAAMAYIM_NEKUDOTAYIM
13:13:56 <ski> (aka `::')
13:15:43 ljdarj joins (~holoirc@37.165.175.135)
13:15:43 × ljdarj quits (~holoirc@37.165.175.135) (Changing host)
13:15:43 ljdarj joins (~holoirc@user/ljdarj)
13:16:00 <ski> (using `.. :: ..' as a declaration, this is a type signature. using `.. :: ..' as an expression (or pattern), this is a type ascription)
13:17:20 × michalz quits (~michalz@185.246.207.193) (Ping timeout: 272 seconds)
13:17:42 ystael joins (~ystael@user/ystael)
13:17:56 michalz joins (~michalz@185.246.207.221)
13:18:41 Digitteknohippie joins (~user@user/digit)
13:19:19 × Digit quits (~user@user/digit) (Ping timeout: 260 seconds)
13:21:19 <zzz> i understand. even so, i'm almost sure i've done it before
13:21:29 <zzz> maybe i'm mistaken
13:24:04 × lucy_ quits (~lucy@user/lucy) (Ping timeout: 265 seconds)
13:24:43 morb joins (~morb@pool-108-41-100-120.nycmny.fios.verizon.net)
13:25:14 <zzz> is there a reason something like `(a,b) :: (Float,Float) = (0,1)` shouldn't suppress a "missing signature" warning?
13:25:43 lucy joins (~lucy@user/lucy)
13:25:45 <zzz> a _good_ reason... ?
13:28:51 × morb quits (~morb@pool-108-41-100-120.nycmny.fios.verizon.net) (Ping timeout: 246 seconds)
13:32:48 <ski> hm, i suppose one could imagine allowing a sequence of patterns, to the left of the `::' in a type signature
13:34:36 × athan quits (~athan@syn-098-153-145-140.biz.spectrum.com) (Quit: Konversation terminated!)
13:34:39 <ski> .. although, i guess that would be awkward with existential data constructors, in that you'd not necessarily specify the whole types of the involved variables. but that's already the case with wildcards in signatures
13:35:56 <ski> one reason could be that allowing just identifiers is the conservative choice. allowing a sequence of identifiers can be useful to avoid repeating the type for a series of operations of the same type
13:39:56 × ljdarj quits (~holoirc@user/ljdarj) (Read error: Connection reset by peer)
13:40:46 ljdarj joins (~holoirc@user/ljdarj)
13:42:57 morb joins (~morb@pool-108-41-100-120.nycmny.fios.verizon.net)
13:45:24 Digitteknohippie is now known as Digit
13:46:37 × ljdarj quits (~holoirc@user/ljdarj) (Quit: ljdarj)
13:48:43 ljdarj joins (~ljdarj@user/ljdarj)
13:50:27 × morb quits (~morb@pool-108-41-100-120.nycmny.fios.verizon.net) (Ping timeout: 252 seconds)
13:50:45 × ljdarj quits (~ljdarj@user/ljdarj) (Remote host closed the connection)
13:51:13 <tomsmeding> zzz: that depends on the types involved. Knowing the result type of a constructor does not necessarily mean that you know the types of the fields also
13:51:19 <tomsmeding> data Exists f where Exists :: f a -> Exists f
13:51:37 <tomsmeding> then `Exists x :: Exists Maybe = Just 42` does not pin down what the type of x is
13:52:20 <tomsmeding> sure, in your example it does. But Haskell's type system tends to prefer reasoning about the general case rather than optimising for specific cases
13:53:12 ski gesticulates wildly
13:53:32 <tomsmeding> ski: am I spouting nonsense again?
13:53:36 <ski> nah :)
13:53:51 <ski> just spelling it out more thoroughly
13:54:29 <tomsmeding> oh I didn't even properly read your second message lol, sorry
13:54:32 <tomsmeding> this is precisely what you were saying
13:58:24 <zzz> tomsmeding: good point
13:59:27 <zzz> ski: good point ;)
13:59:57 <ski> map (\(_ :: a) -> _ :: b) (_ :: [a]) :: [b] -- C-style prototypes, for Haskell !
14:00:38 <ski> (replace the `_'s to identifiers indicating the respective rôles, if you prefer)
14:01:28 <zzz> my proposal would also allow for nonesense like `Nothing :: Maybe Int` to be silently accepted
14:01:43 <tomsmeding> ski: that notation would also extend nicely to Pi types :)
14:02:00 <tomsmeding> > let Nothing :: Maybe Int = Nothing in 42
14:02:02 <lambdabot> 42
14:02:08 <tomsmeding> ghc doesn't think it's nonsense
14:02:17 <tomsmeding> but it gets better:
14:02:18 <ski> that's a pattern signature, though
14:02:21 <tomsmeding> > let Nothing :: Maybe Int = Just 12 in 42
14:02:23 <lambdabot> 42
14:02:29 <zzz> that's not a type signature
14:03:04 <zzz> wait what?
14:03:18 <tomsmeding> (haskell is a lazy language)
14:03:24 <zzz> ah, let bindings are irrefutable, is that it?
14:03:42 <tomsmeding> indeed
14:03:44 <ski> > let f ~Nothing = () in f (Just 2)
14:03:44 <tomsmeding> i.e. lazy
14:03:45 <lambdabot> ()
14:03:47 morb joins (~morb@pool-108-41-100-120.nycmny.fios.verizon.net)
14:03:56 <tomsmeding> > let x@Nothing :: Maybe Int = Just 12 in x
14:03:57 <lambdabot> *Exception: <interactive>:3:5-36: Non-exhaustive patterns in x@Nothing :: Ma...
14:04:05 <ski> > let !Nothing = Just 2 in ()
14:04:07 <lambdabot> *Exception: <interactive>:3:5-21: Non-exhaustive patterns in Nothing
14:04:22 gensyst joins (~gensyst@user/gensyst)
14:06:14 × gensyst quits (~gensyst@user/gensyst) (Client Quit)
14:06:46 <zzz> i used to think Haskell is confusing. i still do, but i used to too.
14:07:53 × morb quits (~morb@pool-108-41-100-120.nycmny.fios.verizon.net) (Ping timeout: 245 seconds)
14:08:18 <zzz> luckily, correctness makes up for it
14:15:43 <EvanR> if something is logical and follows its own rules, then confusing is my own fault xD
14:15:51 <EvanR> unlike many programming languages
14:16:37 <ski> @type confusing
14:16:38 <lambdabot> Applicative f => LensLike (Data.Functor.Day.Curried.Curried (Data.Functor.Yoneda.Yoneda f) (Data.Functor.Yoneda.Yoneda f)) s t a b -> LensLike f s t a b
14:20:07 alp__ joins (~alp@2001:861:e3d6:8f80:538:d7bb:b13e:aad)
14:21:34 morb joins (~morb@pool-108-41-100-120.nycmny.fios.verizon.net)
14:21:41 × alp_ quits (~alp@2001:861:e3d6:8f80:7a01:1d08:ba91:82c0) (Ping timeout: 248 seconds)
14:26:47 × akegalj quits (~akegalj@231-112.dsl.iskon.hr) (Quit: leaving)
14:31:55 × CiaoSen quits (~Jura@2a05:5800:2ec:ac00:ca4b:d6ff:fec1:99da) (Ping timeout: 264 seconds)
14:32:48 Sgeo joins (~Sgeo@user/sgeo)
14:34:56 × morb quits (~morb@pool-108-41-100-120.nycmny.fios.verizon.net) (Ping timeout: 255 seconds)
14:37:16 × tromp quits (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl) (Quit: My iMac has gone to sleep. ZZZzzz…)
14:41:07 × alp__ quits (~alp@2001:861:e3d6:8f80:538:d7bb:b13e:aad) (Quit: Leaving)
14:41:38 <Inst> iirc unsafeIOtoST is unsafe for more reasons than just effectively being unsafePerformIO
14:41:50 <Inst> but is unsafeIOtoST an idiomatic way to do unsafePerformIO?
14:49:21 × flounders quits (~flounders@173.246.214.210) (Ping timeout: 246 seconds)
14:50:59 <EvanR> is it an idiomatic way to safely do unsafePerformIO, no but it would be safe. E.g. if the IO action you're doing has no side effects and is "reentrant" etc
14:51:21 <EvanR> otherwise it's just as unsafe
14:51:33 flounders joins (~flounders@2607:fb91:f40:c71f:8dda:e662:7d36:da1f)
14:54:03 × lortabac quits (~lortabac@2a01:e0a:541:b8f0:55ab:e185:7f81:54a4) (Quit: WeeChat 4.2.2)
14:54:15 alp_ joins (~alp@2001:861:e3d6:8f80:538:d7bb:b13e:aad)
15:00:17 × sourcetarius quits (~sourcetar@user/sourcetarius) (Quit: sourcetarius)
15:01:32 morb joins (~morb@pool-108-41-100-120.nycmny.fios.verizon.net)
15:01:41 × raehik quits (~raehik@rdng-25-b2-v4wan-169990-cust1344.vm39.cable.virginm.net) (Ping timeout: 248 seconds)
15:03:35 tromp joins (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl)
15:05:23 <Inst> reentrant?
15:05:37 <Inst> tbh probably unsafePerformIO is better off just not being disguised
15:08:17 <EvanR> yes wrapping it in a runST doesn't change anything
15:08:57 <EvanR> Inst, if you want to safely use unsafePerformIO, the IO action you are unsafePerforming needs to be able to begin multiple times without completing, technically
15:09:29 <EvanR> as well as be technically pure
15:09:33 × morb quits (~morb@pool-108-41-100-120.nycmny.fios.verizon.net) (Ping timeout: 276 seconds)
15:10:09 <EvanR> like the C function sqrt
15:11:06 <EvanR> unlike a C function which mutates a static array of numbers
15:11:12 <Inst> yeah, i know, just wondering if there's idiomatic rules for using unsafePerformIO
15:11:20 <Inst> like, there's no documentation on how to idiomatically use trace (in debug code)
15:11:38 <EvanR> idiomatically, remove the traces before you ship your code
15:11:54 <EvanR> and those are the rules for unsafePerformIO
15:12:10 <EvanR> to be ignored probably
15:12:32 <dolio> The rule is: do not use unsafePerformIO.
15:12:39 <Inst> i rarely use unsafePerformIO, so i'm not using unsafePerformIO
15:12:54 <EvanR> interesting logic
15:12:59 <Inst> dolio: unless you're writing bytestring, then again, that's accursedUnutterablePerformIO
15:13:19 <EvanR> creating a new bytestring maybe
15:13:22 <EvanR> modifying an existing one?
15:13:30 <EvanR> there be dragons
15:13:53 <Inst> honestly the idea of abusing unsafePerformIO for side effects everywhere hurts my brain
15:14:01 <EvanR> and if you're creating a new one, you can use ST
15:14:15 <Inst> as i've said before, I used it to route a variable
15:14:33 <Inst> and as geekosaur pointed out, it was only more efficient because i probably had thunk pileups somewhere
15:14:35 <dolio> No. The authors of bytestring use it.
15:15:02 <dolio> Oh, I see. Yes. If you're an absolute expert, the general rule doesn't apply.
15:16:06 <Inst> but it's sort of hard to find out what's idiomatic for black magic functions / techniques
15:16:07 <dolio> Or, it doesn't always apply.
15:16:20 × misterfish quits (~misterfis@87.215.131.102) (Ping timeout: 255 seconds)
15:16:27 <EvanR> yeah it's idiomatic to just not use those
15:16:37 <EvanR> don't use black magic
15:16:47 <Inst> like, since we almost always remove Debug.Trace from shipping production code, it's hard to see examples of best practices with Debug.Trace
15:16:56 <EvanR> haskell gets away with this idiom more than other languages
15:17:31 <EvanR> Debug.Trace is just like printf debugging
15:17:43 <dolio> Wrap your Debug.Trace in a function that checks a top-level 'debug' boolean. Then you don't need to remove it.
15:17:43 <EvanR> not a best practice
15:17:49 <Inst> except it's hooked into laziness, i.e, should you use let !_ = trace idiom
15:18:10 <Inst> You saw my attempt to create an annotated sum, right?
15:18:12 <EvanR> if you do that, you aren't testing the same code
15:18:29 Square3 joins (~Square4@user/square)
15:18:31 <EvanR> you're collapsing the wavefunction an attempt to see if lights a particle or a wave
15:18:34 <EvanR> in an
15:18:44 × lucy quits (~lucy@user/lucy) (Ping timeout: 260 seconds)
15:18:46 <Inst> https://paste.tomsmeding.com/cyYgn3MX
15:18:51 ski . o O ( "Don't use $X, unless you know why not to use $X." )
15:19:57 <weary-traveler> applies unconditionally to X, previously known as Twitter.
15:20:07 <Inst> heh
15:20:36 lucy joins (~lucy@user/lucy)
15:21:01 <Inst> is demonstrativeSum a good exercise (of course it'll never be used in production)?
15:21:56 <EvanR> for visual debugging printing out things has issues, like if it's in a loop you see zillions of outputs
15:22:02 <EvanR> there have to be better ways
15:22:12 <EvanR> ghcvis
15:22:56 <Inst> bbut the code is broken, insofar as i'm hacking the evaluation order
15:23:15 <Inst> by forcing the externals to be printed before the internals
15:30:00 × lucy quits (~lucy@user/lucy) (Ping timeout: 252 seconds)
15:30:22 raehik joins (~raehik@rdng-25-b2-v4wan-169990-cust1344.vm39.cable.virginm.net)
15:31:57 lucy joins (~lucy@user/lucy)
15:32:02 <Inst> and no, trace isn't "true" printf debugging since printf debugging is effectively strict, whereas trace has to coexist with laziness
15:32:53 <EvanR> when trace is evaluated, it prints something. When printf is evaluated, it prints something
15:33:12 <EvanR> so your context matters more than anything in both cases, not the thing itself or the subject
15:33:33 <EvanR> you've put printf and nothing happens before
15:33:36 <EvanR> because it never ran
15:36:48 × szkl quits (uid110435@id-110435.uxbridge.irccloud.com) (Quit: Connection closed for inactivity)
15:38:03 morb joins (~morb@pool-108-41-100-120.nycmny.fios.verizon.net)
15:40:30 polyphem joins (~rod@p4fc2c857.dip0.t-ipconnect.de)
15:40:41 <Inst> by the way, when it comes to IO actions, do we say they're executed or evaluated? can the concept be separated?
15:40:52 <Inst> since IO is a wrapper over a side-effecting function
15:41:18 <Inst> evaluation to WHNF leaves you the function, and correct me if i'm wrong, the NF of the function is still the function
15:41:50 <ski> if `m' is a monad, then an `m'-action (a value of type `m a', for some type `a') is executed/run/performed/invoked, to (possibly) produce result of type `a'
15:42:12 × morb quits (~morb@pool-108-41-100-120.nycmny.fios.verizon.net) (Ping timeout: 246 seconds)
15:42:21 ash3en joins (~Thunderbi@2a03:7846:b6eb:101:93ac:a90a:da67:f207)
15:42:22 <ski> e.g. when executing `Just 3', you get `3' as monadic result
15:43:14 <Inst> ski: how would m = [] be performed, then?
15:47:57 szkl joins (uid110435@id-110435.uxbridge.irccloud.com)
15:49:48 <Inst> or for that matter, Proxy
15:52:17 <ski> executing `[2,3,5,7]' gets you results `2',`3',`5',`7', respectively
15:53:00 <ski> for `Proxy', there's never a result
15:53:28 × synchromesh quits (~john@2406:5a00:241a:5600:2de5:ba26:2eef:9155) (Read error: Connection reset by peer)
15:54:28 synchromesh joins (~john@2406:5a00:241a:5600:2de5:ba26:2eef:9155)
15:57:37 × lucy quits (~lucy@user/lucy) (Ping timeout: 248 seconds)
15:58:03 <EvanR> when you evaluate an IO action, it doesn't execute. Concept separated
15:58:41 <EvanR> > print undefined
15:58:42 <lambdabot> <IO ()>
15:59:53 × Square3 quits (~Square4@user/square) (Ping timeout: 244 seconds)
16:00:38 <Inst> the results '2', '3', '5', '7', respectively, I don't understand that
16:00:45 <Inst> lists are supposed to model nondeterminism as an effect
16:01:02 ft joins (~ft@p4fc2acce.dip0.t-ipconnect.de)
16:01:03 Squared joins (~Square@user/square)
16:01:21 <Inst> in a sense, executing a monadic action is sort of like a comonad with either injected
16:01:27 <Inst> or rather Maybe
16:01:35 <EvanR> nondeterminism, i.e. not necessarily 1 result
16:01:44 <EvanR> 0 or 1 or more results
16:02:24 <Inst> i mean in that sense you can always have a comonad of any monad by injecting Maybe [a]
16:02:29 <Inst> or just going to []
16:02:42 <EvanR> that doesn't make sense
16:03:07 <EvanR> returning multiple results is list specific, maybe you're confusing the list of results with the list type constructor
16:03:17 <Inst> monad guarantees that you can inject a value into a monadic context (as well have monadic join be associative)
16:03:27 × yoneda quits (~mike@193.206.102.122) (Quit: Lost terminal)
16:03:32 <Inst> comonad guarantees that you can extract a single value from a comonadic context
16:03:42 <EvanR> monad doesn't guarantee you get anything whatsoever, so no, comonad doesn't apply
16:03:58 <Inst> i mean not all monads are comonads
16:04:07 <EvanR> "you can always have a comonad of any monad"
16:04:15 <Inst> but the implication is that you can generate comonads from any monad via []
16:04:25 ski . o O ( not all primes are even )
16:04:47 <ski> how so ?
16:04:53 <EvanR> you're veering hard into "anything can be anythinged" territory
16:04:56 × sprout quits (~sprout@84-80-106-227.fixed.kpn.net) (Ping timeout: 255 seconds)
16:05:21 <Inst> i am, i just found it amusing to think that way because I'm holidng the effect interpretation of monads as somewhat unnatural
16:05:21 <EvanR> any float is an int... if I just map all floats to zero
16:05:27 morb joins (~morb@pool-108-41-100-120.nycmny.fios.verizon.net)
16:05:43 <Inst> and saying that any monadic action can be executed
16:05:47 <EvanR> they can't
16:05:57 <EvanR> they don't all have a run function
16:05:58 <Inst> well, that's ski's assertation
16:06:10 <Inst> it's why I asserted that IO actions can be executed
16:06:14 <EvanR> e.g. runIO
16:06:33 <Inst> case runRW# foo nameOfRealworldTokenIForgot
16:06:34 × raehik quits (~raehik@rdng-25-b2-v4wan-169990-cust1344.vm39.cable.virginm.net) (Ping timeout: 252 seconds)
16:06:43 <EvanR> there you go again
16:06:52 <Inst> why :(
16:07:01 <EvanR> anything can be anythinged
16:07:11 <Inst> is that a bad thing?
16:07:15 <EvanR> yes
16:07:22 <EvanR> that's javascript
16:07:28 <mauke> runRW# doesn't exist
16:07:30 <ski> you can say "When `act >>= cont' is executed, `act' is executed, and for result `x' of executing it, then `cont x' is executed. Result thereof is result of the whole `act >>= cont'."
16:07:40 <Inst> i mean that not all monadic actions can be executed
16:07:43 <Inst> as per your interpretation
16:08:06 <ski> (this doesn't guarantee that there is a way to start off execution, to begin with)
16:08:07 <Inst> from ski's interpretation, it does provide the interesting suggestion that you can use [] (0 or more elements] to render any monad a comonad
16:08:14 <ski> no
16:08:24 × merijn quits (~merijn@77.242.116.146) (Ping timeout: 252 seconds)
16:08:30 <ski> you can't always extract an `a' from a `[a]'
16:08:54 <Inst> you can always extract an [a] from [a]
16:09:00 <EvanR> for any monad, or any value you want, you can map it to []
16:09:14 <Inst> by extension, you can also extract a [a] from Proxy a
16:09:16 <mauke> I can always extract an [a] from b
16:09:23 <ski> how would that help, Inst ?
16:09:33 <Inst> ski: not at all!
16:09:40 <Inst> it's just an interesting observation
16:09:47 <EvanR> I disagree
16:09:50 <ski> i still have no idea where you see a comonad here
16:10:04 × morb quits (~morb@pool-108-41-100-120.nycmny.fios.verizon.net) (Ping timeout: 260 seconds)
16:10:07 <Inst> i mean i guess it's not a true comonad since comonad has its own associativity rules
16:10:17 <EvanR> you failed to get an a
16:10:21 <ski> unless, i guess, you're talking about the `Identity' comonad ? (are you ?)
16:10:28 <mauke> what's the other comonad operation? separate :: w a -> w (w a)?
16:10:33 <EvanR> duplicate
16:10:43 <Inst> <ski> if `m' is a monad, then an `m'-action (a value of type `m a', for some type `a') is executed/run/performed/invoked, to (possibly) produce result of type `a'
16:10:51 <Inst> possibly
16:11:06 <Inst> implies that any monadic action can produce a result of type [a]
16:11:10 <Inst> whereas [] represents no result
16:11:17 <mauke> that sounds more like trying to describe >>= than an actual run operation
16:11:23 <ski> (but how does that allow you to "have a comonad of any monad by injecting Maybe [a]" ?)
16:11:33 <Inst> Maybe [a] isn't necessary
16:11:35 <Inst> you just need []
16:11:38 <Inst> 0 or more results
16:11:47 <mauke> Inst: why not just Maybe if all you're going for is Nothing?
16:11:52 <ski> "implies that any monadic action can produce a result of type [a]" -- no
16:11:56 <EvanR> that fails to satisfy the definition of a comonad
16:12:02 <Inst> ski: why not?
16:12:14 <Inst> i mean the hole i'm thinking is more runReader producing a r -> a function
16:12:37 <EvanR> runAnything ma = [] doesn't have that type
16:13:03 <EvanR> round beg square hole
16:13:06 <EvanR> peg
16:13:15 <Inst> division by zero is the fruit of all creativity :3
16:13:20 <Inst> (source)
16:13:24 × Vajb quits (~Vajb@n7m8bu6eaitlx0eukg2-1.v6.elisa-mobile.fi) (Ping timeout: 272 seconds)
16:13:28 <EvanR> o_O
16:13:50 <EvanR> it's the source of several erroneous proofs I can think of
16:14:06 <EvanR> proving 1 = 2 and such
16:14:20 <ski> Inst : you can't extract an `a' from `IO a'. similarly neither from `ContT () IO a' (which can be used e.g. to express non-deterministic Input/Output computations)
16:14:21 <Inst> if you define division by zero as the set of all real numbers, division by zero always contains your answer, just almost certainly not in a useful manner
16:14:23 lucy joins (~lucy@user/lucy)
16:14:36 <EvanR> like that falso logic system
16:14:47 <EvanR> all propositions are true, and false
16:14:48 <Inst> ski: yeah, that was my point, the problem with the [a] extraction converting any monad into a comonad would be function types
16:15:02 <mauke> if you think of monads as containers/boxes, then >>= lets you open a box, but only by magically trapping you inside a bigger box
16:15:22 <ski> besides, being able to extract `[a]' would still not help with your comonad notion here
16:15:33 <EvanR> it wouldn't be a comonad
16:15:34 <Inst> i just think of monads as (Type -> Type) -> Constraint and Type -> Type
16:16:07 <Inst> eta, map, and mu
16:16:15 <EvanR> getting comonads right is what makes comonads so useless, lets keep it that way xD
16:16:41 <ski> a monad, in this context, is an `m :: Type -> Type', such that we have an instance `Monad m' (satisfying the laws, say). that's `Monad', not `(Type -> Type) -> Constraint'
16:16:43 <EvanR> otherwise you end up with stuff like "isomorphic javascript" (an actual "thing" at one time)
16:16:52 <Inst> https://www.haskellforall.com/2013/02/you-could-have-invented-comonads.html
16:16:52 hc joins (~hc@mail.hce.li)
16:16:56 <Inst> iirc this isn't exactly correct
16:17:08 <mauke> the type of Monad is (Type -> Type) -> Constraint, I think
16:17:11 <mauke> like all constructor classes
16:17:30 <Inst> with regards to EvanR calling Comonads useless
16:17:32 <ski> yes. but we're not considering all type classes having that kind here
16:17:38 <ski> we're considering `Monad' in particular
16:18:07 <ski> (and perhaps also `Comonad', in particular)
16:18:09 <EvanR> they're fairly unuseful, but of course, you can anything it into anythingfulness
16:18:09 <Inst> (I'd find it funny to consider comonadic programming the dominant programming paradigm ;))
16:18:23 <EvanR> by simply saying so
16:18:50 <ski> (otoh, we are considering all types of kind `Type -> Type', when we're considering the monad concept)
16:18:56 <monochrom> I will just have fun poking holes into "inject into the context". With "data Proxy a = Proxy", "pure _ = Proxy", you clearly don't have an injection.
16:19:02 <Inst> a -> b is not a useless function, it's simply a question of having the computing capability to search through all a -> b for something useful
16:19:21 <Inst> monochrom: you can claim it's a destructive injection
16:19:29 <EvanR> a -> b isn't useless, isn't an empty type
16:19:36 <EvanR> so is as useful as Void
16:19:41 <ski> if `a' has more than two inhabitants, it's not an injection
16:19:45 <monochrom> Maybe you can. But I can't. I have integrity.
16:20:06 <EvanR> it's an*
16:20:15 <monochrom> By definition, injection cannot be destructive.
16:20:19 <ski> er, s/more than two/two or more/
16:20:30 <Inst> monochrom: tbh, after 3 years, all I can really say about monads is that it's best to think of them in terms of the definitions and laws, then start looking for uses instead of going through dumb analogies
16:20:43 <EvanR> have you written a monad tutorial yet
16:20:49 <ski> (please don't)
16:20:51 <EvanR> lol
16:20:55 <monochrom> Right. So what is this hour-long conversation about again?
16:21:01 <Inst> I'd love to write a monad tutorial writer
16:21:19 <Inst> ski asserting that you can execute monadic actions after I asked about whether it's terminologically appropriate to say you can execute an IO action
16:21:19 <ski> monochrom : dispelling misconceptions, possibly. maybe
16:21:23 <EvanR> I wonder if chat-gpt can generate satirical monad tutorials
16:21:44 <EvanR> which hopefully people don't take seriously when I post them on reddit
16:21:54 L29Ah parts (~L29Ah@wikipedia/L29Ah) ()
16:21:58 <ski> a la Sokal, EvanR ?
16:22:07 <EvanR> hmm... no
16:22:19 <EvanR> it would be more coherent
16:22:30 raehik joins (~raehik@rdng-25-b2-v4wan-169990-cust1344.vm39.cable.virginm.net)
16:22:31 <EvanR> unless you mean taking seriously
16:22:35 <monochrom> I can only understand the conversation as mansplaining the laws in one's own words to show that one is making it all up.
16:22:44 <Inst> monochrom: then, based on his assertation, i tried to see if i could argue that you can use [a] to generate a comonad from any monad
16:23:02 × kuribas quits (~user@ip-188-118-57-242.reverse.destiny.be) (Remote host closed the connection)
16:23:03 <EvanR> and you still haven't admitted that that's wrong
16:23:13 <monochrom> Why argue? Write a proof, write actual code.
16:23:14 <ski> afaiui, you haven't told us whoc comonad would be generated from any given monad `m'
16:23:18 <ski> s/whoc/which/
16:23:40 <monochrom> Write the proof in Agda or Lean for good measure.
16:24:05 morb joins (~morb@pool-108-41-100-120.nycmny.fios.verizon.net)
16:24:17 <Inst> hmmm, okay Professor Monochrom.
16:24:34 <Inst> I just need to figure out how to deal with the damned r -> a instances
16:25:23 <mauke> if r -> a causes problems, then so do state, writer, cont, parser, etc.
16:25:29 <mauke> or really any monad that isn't [] or Maybe
16:25:51 <EvanR> even [] isn't a comonad
16:25:57 <EvanR> Stream though
16:26:56 <dolio> Proofs are code.
16:27:23 <ski> Inst : talking about executing monadic actions is a useful figure of speech. you could (if you wanted to think about it rather abstractly) think of it as reasoning on the level of an internal language in the Kleisli category of the monad in question. (although, i suspect that latter part may not make much sense to you, unless you know what the Kleisli category is, and have an idea of the internal language in
16:27:29 <ski> a topos). or, if you prefer, it's reasoning at the level of an imperative language (for a particular monad `m'), which could be compiled to Haskell
16:28:20 <ski> @quote world's.best
16:28:21 <lambdabot> SPJ says: Haskell is the world's best imperative language.
16:28:33 × morb quits (~morb@pool-108-41-100-120.nycmny.fios.verizon.net) (Ping timeout: 252 seconds)
16:29:59 <Inst> re free comonads, i guess we have cofree comonads right now
16:30:02 <Inst> https://reasonablypolymorphic.com/blog/cofree-comonads/
16:34:11 × cfricke quits (~cfricke@user/cfricke) (Quit: WeeChat 4.2.2)
16:39:19 L29Ah joins (~L29Ah@wikipedia/L29Ah)
16:41:52 × alp_ quits (~alp@2001:861:e3d6:8f80:538:d7bb:b13e:aad) (Quit: Leaving)
16:42:37 morb joins (~morb@pool-108-41-100-120.nycmny.fios.verizon.net)
16:47:04 × morb quits (~morb@pool-108-41-100-120.nycmny.fios.verizon.net) (Ping timeout: 265 seconds)
16:48:25 misterfish joins (~misterfis@84.53.85.146)
16:48:46 × ash3en quits (~Thunderbi@2a03:7846:b6eb:101:93ac:a90a:da67:f207) (Quit: ash3en)
16:49:02 morb joins (~morb@pool-108-41-100-120.nycmny.fios.verizon.net)
16:50:30 sprout joins (~sprout@84-80-106-227.fixed.kpn.net)
16:56:09 × morb quits (~morb@pool-108-41-100-120.nycmny.fios.verizon.net) (Ping timeout: 276 seconds)
16:59:52 × tromp quits (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl) (Quit: My iMac has gone to sleep. ZZZzzz…)
17:03:28 × weary-traveler quits (~user@user/user363627) (Remote host closed the connection)
17:04:32 × gmg quits (~user@user/gehmehgeh) (Quit: Leaving)
17:07:15 peterbecich joins (~Thunderbi@syn-047-229-123-186.res.spectrum.com)
17:11:27 merijn joins (~merijn@204-220-045-062.dynamic.caiway.nl)
17:15:37 tromp joins (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl)
17:16:21 × merijn quits (~merijn@204-220-045-062.dynamic.caiway.nl) (Ping timeout: 244 seconds)
17:24:21 morb joins (~morb@pool-108-41-100-120.nycmny.fios.verizon.net)
17:27:15 merijn joins (~merijn@204-220-045-062.dynamic.caiway.nl)
17:29:01 ash3en joins (~Thunderbi@2a03:7846:b6eb:101:93ac:a90a:da67:f207)
17:29:21 × peterbecich quits (~Thunderbi@syn-047-229-123-186.res.spectrum.com) (Ping timeout: 248 seconds)
17:30:32 × morb quits (~morb@pool-108-41-100-120.nycmny.fios.verizon.net) (Ping timeout: 252 seconds)
17:32:06 × merijn quits (~merijn@204-220-045-062.dynamic.caiway.nl) (Ping timeout: 252 seconds)
17:33:23 <Inst> i guess it comes out to, you can conceive of a typeclassed function sExtends with the typing
17:33:35 <Inst> Monad m => m a -> [a]
17:33:51 <Inst> withn functions you can present the (mathematical) range of the function
17:33:56 econo_ joins (uid147250@id-147250.tinside.irccloud.com)
17:34:54 × infinity0 quits (~infinity0@pwned.gg) (Ping timeout: 246 seconds)
17:38:49 tzh joins (~tzh@c-76-115-131-146.hsd1.or.comcast.net)
17:39:35 <ski> "typeclassed function" ?
17:42:27 weary-traveler joins (~user@user/user363627)
17:42:33 × ash3en quits (~Thunderbi@2a03:7846:b6eb:101:93ac:a90a:da67:f207) (Ping timeout: 252 seconds)
17:42:38 × raehik quits (~raehik@rdng-25-b2-v4wan-169990-cust1344.vm39.cable.virginm.net) (Ping timeout: 252 seconds)
17:43:02 merijn joins (~merijn@204-220-045-062.dynamic.caiway.nl)
17:45:24 × mulk quits (~mulk@p5b112a06.dip0.t-ipconnect.de) (Ping timeout: 246 seconds)
17:45:33 wootehfoot joins (~wootehfoo@user/wootehfoot)
17:48:05 <Inst> well, a method, I guess
17:49:42 <EvanR> Monad m => m a -> [a] seems to have exactly 1 implementation
17:50:01 <EvanR> unless you get into creative combinations of undefined
17:50:03 <ski> a method, of which type class. with which tyvars as parameters ?
17:50:10 ash3en joins (~Thunderbi@2a03:7846:b6eb:101:93ac:a90a:da67:f207)
17:50:52 <ski> (specifically, any of `m' and `a' ?)
17:51:41 <Inst> yeah
17:52:50 morb joins (~morb@pool-108-41-100-120.nycmny.fios.verizon.net)
17:52:56 × merijn quits (~merijn@204-220-045-062.dynamic.caiway.nl) (Ping timeout: 255 seconds)
17:53:11 <Inst> for (a -> k) -> k cont, simply output the entire set of a, for (r -> a), output the domain by testing the input of a, etc, but w/e, this isn't a good strategy to try to derive something like a free comonad, as opposed to cofree comonad
17:53:30 <Inst> also, incidental and annoying discovery
17:53:36 mulk joins (~mulk@p5b112a06.dip0.t-ipconnect.de)
17:53:48 <ski> `a' could be uncountably infinite
17:53:51 <Inst> type a $ b = a b works, type (a . b) c = a (b c) doesn't compose
17:53:53 × xal quits (~xal@mx1.xal.systems) (Quit: bye)
17:53:55 <Inst> and yeah, I thought about that too
17:54:21 xal joins (~xal@mx1.xal.systems)
17:54:50 <Inst> which is actually interesting, how could you depict a type with uncountably infinite values?
17:55:24 <tomsmeding> [Integer]
17:55:27 <tomsmeding> oh
17:55:31 <tomsmeding> never mind
17:55:39 <EvanR> if the values are defined by finite programs, you can't
17:55:47 <EvanR> for some value of depict
17:55:49 <tomsmeding> okay sure, yes [Bool] will do
17:56:01 <tomsmeding> just as a binary expansion of values in R
17:56:05 <Inst> ummm, cantor diagonalization?
17:56:10 infinity0 joins (~infinity0@pwned.gg)
17:56:15 <tomsmeding> remember that lists can be infinite
17:56:27 <Inst> yeah but there's no complaint about infinite, that's the advantage of [a]
17:56:32 <Inst> it's uncountably infinite that's the real problem
17:57:01 <tomsmeding> hm I guess [Bool] is only the computable reals
17:57:05 <tomsmeding> are those countable?
17:57:05 <EvanR> there's a countable number of such programs so you don't have uncountably infinite values
17:57:13 <tomsmeding> right, probably
17:57:21 <ski> no, tomsmeding
17:57:29 <EvanR> but someone could feed you a [Bool] from who knows where
17:57:50 <ski> (difference between algorithmic and computable)
17:58:34 × morb quits (~morb@pool-108-41-100-120.nycmny.fios.verizon.net) (Ping timeout: 260 seconds)
17:58:37 <ski> yep. "lawless sequences", in Brouwer terminology
17:59:00 <ski> (ones that are not described by any algorithm, but are still computable)
17:59:10 <monochrom> [Integer] is countable or uncountable depending on which exact semantics you use.
17:59:15 <monochrom> Likewise for [Bool].
17:59:41 <tomsmeding> I guess
17:59:57 <EvanR> side step the whole shindig by saying [Integer] is a type, not a set
18:00:07 <EvanR> don't try to assign cardinality
18:00:18 <EvanR> polymorphism is not set theoretic
18:00:33 <monochrom> OK, countable or uncountable or you-don't-even-know :)
18:00:54 × tomboy64 quits (~tomboy64@user/tomboy64) (Ping timeout: 260 seconds)
18:00:56 <EvanR> or ultrafinite
18:01:23 EvanR hides
18:03:35 tomboy64 joins (~tomboy64@user/tomboy64)
18:03:56 merijn joins (~merijn@204-220-045-062.dynamic.caiway.nl)
18:04:05 × ft quits (~ft@p4fc2acce.dip0.t-ipconnect.de) (Quit: leaving)
18:08:31 morb joins (~morb@pool-108-41-100-120.nycmny.fios.verizon.net)
18:10:23 × merijn quits (~merijn@204-220-045-062.dynamic.caiway.nl) (Ping timeout: 245 seconds)
18:11:31 raehik joins (~raehik@rdng-25-b2-v4wan-169990-cust1344.vm39.cable.virginm.net)
18:13:05 × morb quits (~morb@pool-108-41-100-120.nycmny.fios.verizon.net) (Ping timeout: 248 seconds)
18:18:25 × pavonia quits (~user@user/siracusa) (Quit: Bye!)
18:21:32 merijn joins (~merijn@204-220-045-062.dynamic.caiway.nl)
18:25:57 × lxsameer quits (~lxsameer@Serene/lxsameer) (Ping timeout: 248 seconds)
18:26:38 × merijn quits (~merijn@204-220-045-062.dynamic.caiway.nl) (Ping timeout: 265 seconds)
18:27:34 × tromp quits (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl) (Quit: My iMac has gone to sleep. ZZZzzz…)
18:29:21 shapr joins (~user@4.30.215.226)
18:29:32 morb joins (~morb@pool-108-41-100-120.nycmny.fios.verizon.net)
18:29:45 <shapr> hi
18:29:48 <shapr> How's code?
18:31:12 <[exa]> I just killed ghc (panic! (the 'impossible' happened))
18:31:34 <[exa]> somehow it's 9.4.4, will try upgrade and see. :D
18:32:19 <shapr> yay!
18:32:34 <shapr> I'm writing fun code, as always
18:32:50 <shapr> Where do you put your Arbitrary instances? In the library with the type, or in the test module?
18:33:51 <[exa]> if the type is exported, into the library
18:34:00 <[exa]> so that others don't have to implement their own arbitrary if trying to do tests
18:34:51 <shapr> hm, I like that reasoning!
18:36:15 <[exa]> \o/
18:36:30 <[exa]> also kinda depends on how opinionated the Arbitrary gets
18:36:36 <[exa]> if there's a natural one, go for it
18:36:59 <shapr> yeah, true
18:37:04 <[exa]> if not, maybe stash it in an ugly instance-only module module
18:37:10 × morb quits (~morb@pool-108-41-100-120.nycmny.fios.verizon.net) (Ping timeout: 272 seconds)
18:37:12 <[exa]> "ugly"
18:37:22 <shapr> Yeah, I hit an especially ugly Arbitrary a few months ago
18:37:29 <shapr> my own fault, as always
18:41:03 × euphores quits (~SASL_euph@user/euphores) (Quit: Leaving.)
18:44:25 <Rembane> I'm putting the Arbitrary in the same module as the type, or make a Generator-module if it becomes truly gnarly.
18:46:50 euphores joins (~SASL_euph@user/euphores)
18:48:26 rvalue- joins (~rvalue@user/rvalue)
18:48:43 × rvalue quits (~rvalue@user/rvalue) (Ping timeout: 245 seconds)
18:53:00 Tuplanolla joins (~Tuplanoll@91-159-69-59.elisa-laajakaista.fi)
18:53:01 <tomsmeding> [exa]: and poof, QuickCheck dependency in a library that doesn't need it :p
18:53:06 merijn joins (~merijn@204-220-045-062.dynamic.caiway.nl)
18:53:20 × weary-traveler quits (~user@user/user363627) (Remote host closed the connection)
18:53:46 <shapr> tomsmeding: any thoughts on how to do it better?
18:54:06 <tomsmeding> no
18:54:14 shapr thinks
18:54:21 <tomsmeding> this is the problem I have with haskell's way of doing instances
18:54:26 <tomsmeding> the thing is, I have no solution
18:54:28 <tomsmeding> and that annoys me :)
18:54:41 × troydm quits (~troydm@user/troydm) (Quit: What is Hope? That all of your wishes and all of your dreams come true? To turn back time because things were not supposed to happen like that (C) Rau Le Creuset)
18:54:47 <shapr> Arbitrary and Shrink could be separated from QuickCheck
18:55:01 × flounders quits (~flounders@2607:fb91:f40:c71f:8dda:e662:7d36:da1f) (Quit: WeeChat 4.3.3)
18:55:09 <shapr> A few months ago I knew how to work with LeanCheck, QuickCheck, and HedgeHog
18:55:12 <shapr> but it's faded
18:55:18 <tomsmeding> you still get an additional dependency, but perhaps it's smaller indeed
18:55:33 <shapr> Your point of "depends on QuickCheck" is a good point
18:55:51 <tomsmeding> I now remember that there's a more general guideline that solves this problem too: ban orphans in libraries, but allow them in executables
18:56:00 <shapr> if there were an interface with "random value of this type" and "shrink this value" might help?
18:56:13 <shapr> tomsmeding: oh, how does that solve the problem?
18:56:22 <tomsmeding> the problem with orphans is that you can get conflicting instances, and this is annoying because you cannot not-export instances, and you cannot not-import instances
18:56:23 rvalue- is now known as rvalue
18:56:33 <tomsmeding> so putting an orphan instance in a library is a sure-fire way of annoying people
18:56:35 <shapr> oh yeah
18:56:40 <tomsmeding> but putting an orphan instance in an executable annoys only yourself
18:56:46 <tomsmeding> and presumably it's the right instance for you!
18:56:55 <shapr> So, always put instances in a separate module that's not re-exported?
18:57:13 <shapr> that sounds like it gives users both convenience and choice
18:57:20 <tomsmeding> that module must also never be _imported_ by yourself
18:57:23 <tomsmeding> instances spread virally
18:57:30 <shapr> oh I see what you mean
18:57:31 <tomsmeding> if you import a module that defines an instance, you export that instance unconditionally
18:57:48 <shapr> yeah, I see
18:57:55 <tomsmeding> it would be okay to put orphans in library if they are in a separate module _that nothing else ever uses_
18:58:00 <tomsmeding> but then, y'know, why is the module there
18:58:03 × misterfish quits (~misterfis@84.53.85.146) (Ping timeout: 265 seconds)
18:58:04 × merijn quits (~merijn@204-220-045-062.dynamic.caiway.nl) (Ping timeout: 260 seconds)
18:58:39 <tomsmeding> also, "okay" is relative: then importing that "orphans module" becomes essentially "using orphans", to which the same principle applies transitively: only in executables, or separate unused modules in a library
18:59:01 <tomsmeding> the way this solves the quickcheck problem is that a test suite is an executable
18:59:05 <shapr> this reminds me I need to re-read the falsify paper, since it does shrinking entirely differently
18:59:05 <tomsmeding> so put it in the test suite :)
18:59:22 <shapr> thanks for the advice
18:59:24 <[exa]> ok good point
18:59:29 <tomsmeding> I read this somewhere, it's not my genius
18:59:35 <tomsmeding> but it feels like a decent approach
19:00:01 × caconym quits (~caconym@user/caconym) (Quit: bye)
19:00:24 <tomsmeding> (I strongly dislike hmatrix for blatantly going against this guideline)
19:00:39 caconym joins (~caconym@user/caconym)
19:00:59 <Rembane> You can also not have an Arbitrary instance and use a function to generate stuff instead, and call that function from forAllSomethingSomething in QuickCheck.
19:00:59 <shapr> tomsmeding: if you find the source, I'd like a link
19:01:11 <tomsmeding> Rembane: ooh, good one
19:01:23 <tomsmeding> Rembane: but now you depend on `random` ;)
19:01:23 <[exa]> phew, ghc 9.10 fixed the panic. :D
19:01:25 <tomsmeding> (probably)
19:01:30 <shapr> Rembane: even better, then you can allow people to make their own Arbitrary instance
19:01:37 <Rembane> tomsmeding: Nah, only QuickCheck. Let me get some links!
19:02:06 <Rembane> shapr, tomsmeding: https://hackage.haskell.org/package/QuickCheck-2.15.0.1/docs/Test-QuickCheck.html#v:forAll <- use this function or one of its friends.
19:02:16 [exa] . o O ( who'd think functions would be the solution again )
19:02:29 <tomsmeding> Rembane: the whole point of my rant here was that a random library that doesn't have anything to do with testing should not depend on QuickCheck :p
19:02:33 <Rembane> [exa]: Functions are the best! It's the ultimate abstraction!
19:02:44 <Rembane> tomsmeding: I ignored that part! :D
19:03:10 L29Ah parts (~L29Ah@wikipedia/L29Ah) ()
19:03:19 <[exa]> Rembane: always happy to see more proofs of that
19:03:33 alp_ joins (~alp@2001:861:e3d6:8f80:538:d7bb:b13e:aad)
19:03:34 <tomsmeding> I guess if you can write your function to take a (g -> (Word, g)) or something, then you can avoid dependencies on `random` _and_ on `QuickCheck`; the user just stuffs in System.Random.uniform or one of its friends, I forget the names
19:03:37 <shapr> I wrote a library that depends on LeanCheck, QuickCheck, AND HedgeHog! I really need to fix that.
19:04:12 <shapr> gotta convert that into kudzu-core, kudzu-leancheck, kudzu-quickcheck, kudzu-hedgehog
19:04:25 morb joins (~morb@pool-108-41-100-120.nycmny.fios.verizon.net)
19:05:35 <tomsmeding> shapr: this is not exactly what I described before, but it's definitely related https://www.michaelpj.com/blog/2020/10/29/your-orphans-are-fine.html
19:06:24 <shapr> thanks!
19:08:53 merijn joins (~merijn@204-220-045-062.dynamic.caiway.nl)
19:09:19 Sgeo_ joins (~Sgeo@user/sgeo)
19:09:25 Pixi` joins (~Pixi@user/pixi)
19:09:55 <int-e> . o O ( first sentence of a ransom notice )
19:10:15 <tomsmeding> (and I think that this is the blog post I had in mind. So either my memory distorted what I read into something simpler, or I read the idea somewhere else and the memories merged.)
19:10:18 <tomsmeding> int-e: quite
19:10:32 × machinedgod quits (~machinedg@d50-99-47-73.abhsia.telus.net) (Ping timeout: 244 seconds)
19:10:40 <tomsmeding> but then the question is, who are "you" if the sentence is "your orphans are fine"
19:10:57 × shapr quits (~user@4.30.215.226) (Quit: walking home)
19:10:58 ThePenguin5 joins (~ThePengui@cust-95-80-24-166.csbnet.se)
19:11:20 × son0p quits (~ff@191.104.21.8) (Killed (NickServ (GHOST command used by son0p-)))
19:13:28 raehik1 joins (~raehik@rdng-25-b2-v4wan-169990-cust1344.vm39.cable.virginm.net)
19:13:33 × merijn quits (~merijn@204-220-045-062.dynamic.caiway.nl) (Ping timeout: 252 seconds)
19:13:33 × morb quits (~morb@pool-108-41-100-120.nycmny.fios.verizon.net) (Ping timeout: 252 seconds)
19:13:38 × AlexZenon quits (~alzenon@178.34.162.53) (Ping timeout: 244 seconds)
19:14:09 some02 joins (~cat@user/sudden)
19:14:59 × AlexNoo quits (~AlexNoo@178.34.162.53) (Ping timeout: 260 seconds)
19:15:06 × rvalue quits (~rvalue@user/rvalue) (Remote host closed the connection)
19:15:28 rvalue joins (~rvalue@user/rvalue)
19:15:48 × Squared quits (~Square@user/square) (Remote host closed the connection)
19:16:24 AlexNoo joins (~AlexNoo@178.34.162.53)
19:16:26 zero joins (~z@user/zero)
19:16:44 <int-e> anyway, not a bad take on orphan instances.
19:17:13 <tomsmeding> agreed
19:17:34 Fooo joins (~Square@user/square)
19:18:20 sprout_ joins (~sprout@2a02-a448-3a80-0-c61c-b515-5509-58e7.fixed6.kpn.net)
19:19:23 weary-traveler joins (~user@user/user363627)
19:19:31 × raehik quits (~raehik@rdng-25-b2-v4wan-169990-cust1344.vm39.cable.virginm.net) (*.net *.split)
19:19:31 × sprout quits (~sprout@84-80-106-227.fixed.kpn.net) (*.net *.split)
19:19:31 × Sgeo quits (~Sgeo@user/sgeo) (*.net *.split)
19:19:31 × Digit quits (~user@user/digit) (*.net *.split)
19:19:31 × sawilagar quits (~sawilagar@user/sawilagar) (*.net *.split)
19:19:31 × mrmonday quits (~robert@what.i.hope.is.not.a.tabernaevagant.es) (*.net *.split)
19:19:31 × turlando quits (~turlando@user/turlando) (*.net *.split)
19:19:31 × ThePenguin quits (~ThePengui@cust-95-80-24-166.csbnet.se) (*.net *.split)
19:19:31 × TMA quits (tma@twin.jikos.cz) (*.net *.split)
19:19:31 × Pixi quits (~Pixi@user/pixi) (*.net *.split)
19:19:31 × TonyStone quits (~TonyStone@user/TonyStone) (*.net *.split)
19:19:32 × robobub quits (uid248673@id-248673.uxbridge.irccloud.com) (*.net *.split)
19:19:32 × op_4 quits (~tslil@user/op-4/x-9116473) (*.net *.split)
19:19:32 × sudden quits (~cat@user/sudden) (*.net *.split)
19:19:32 × red-snail quits (~snail@static.151.210.203.116.clients.your-server.de) (*.net *.split)
19:19:32 × meinside quits (uid24933@id-24933.helmsley.irccloud.com) (*.net *.split)
19:19:32 × zzz quits (~z@user/zero) (*.net *.split)
19:19:33 × _d0t quits (~{-d0t-}@user/-d0t-/x-7915216) (*.net *.split)
19:19:33 × lieven quits (~mal@ns2.wyrd.be) (*.net *.split)
19:19:33 × lyxia quits (~lyxia@poisson.chat) (*.net *.split)
19:19:33 × A_Dragon quits (A_D@libera/staff/dragon) (*.net *.split)
19:19:33 × nisstyre quits (wes@user/nisstyre) (*.net *.split)
19:19:33 × wz1000 quits (~zubin@static.11.113.47.78.clients.your-server.de) (*.net *.split)
19:19:34 × alanz quits (sid110616@id-110616.uxbridge.irccloud.com) (*.net *.split)
19:19:34 × enikar quits (~enikar@user/enikar) (*.net *.split)
19:19:34 × sweater quits (~sweater@206.81.18.26) (*.net *.split)
19:19:34 × flocks quits (~flocks@134.122.90.60) (*.net *.split)
19:19:34 × wryish quits (~wryish@2605:4c40:119:efa3:0:727d:19eb:1) (*.net *.split)
19:19:34 × hacklschorsch quits (~flo@vantaa.latfa.net) (*.net *.split)
19:19:34 × s4msung quits (u4jHfpaUni@user/s4msung) (*.net *.split)
19:19:35 × loonycyborg quits (loonycybor@wesnoth/developer/loonycyborg) (*.net *.split)
19:19:35 × _0xa quits (~user@user/0xa/x-3134607) (*.net *.split)
19:19:35 × SanchayanMaity quits (sid478177@2a03:5180:f:4::7:4be1) (*.net *.split)
19:19:35 × meooow quits (~meooow@2400:6180:100:d0::ad9:e001) (*.net *.split)
19:19:35 × taktoa[c] quits (sid282096@2a03:5180:f::4:4df0) (*.net *.split)
19:19:35 × edm quits (sid147314@2a03:5180:f:4::2:3f72) (*.net *.split)
19:19:35 × JSharp quits (sid4580@user/JSharp) (*.net *.split)
19:19:35 × Flow quits (~none@gentoo/developer/flow) (*.net *.split)
19:19:35 × Philonous quits (~Philonous@user/philonous) (*.net *.split)
19:19:36 ThePenguin5 is now known as ThePenguin
19:20:15 Digitteknohippie joins (~user@77.47.7.51.dyn.plus.net)
19:20:15 sawilagar joins (~sawilagar@user/sawilagar)
19:20:15 mrmonday joins (~robert@what.i.hope.is.not.a.tabernaevagant.es)
19:20:15 turlando joins (~turlando@user/turlando)
19:20:15 TMA joins (tma@twin.jikos.cz)
19:20:15 robobub joins (uid248673@id-248673.uxbridge.irccloud.com)
19:20:15 op_4 joins (~tslil@user/op-4/x-9116473)
19:20:15 red-snail joins (~snail@static.151.210.203.116.clients.your-server.de)
19:20:15 meinside joins (uid24933@id-24933.helmsley.irccloud.com)
19:20:15 _d0t joins (~{-d0t-}@user/-d0t-/x-7915216)
19:20:15 lieven joins (~mal@ns2.wyrd.be)
19:20:15 lyxia joins (~lyxia@poisson.chat)
19:20:15 A_Dragon joins (A_D@libera/staff/dragon)
19:20:15 nisstyre joins (wes@user/nisstyre)
19:20:15 hacklschorsch joins (~flo@vantaa.latfa.net)
19:20:15 wz1000 joins (~zubin@static.11.113.47.78.clients.your-server.de)
19:20:15 alanz joins (sid110616@id-110616.uxbridge.irccloud.com)
19:20:15 enikar joins (~enikar@user/enikar)
19:20:15 sweater joins (~sweater@206.81.18.26)
19:20:15 flocks joins (~flocks@134.122.90.60)
19:20:15 wryish joins (~wryish@2605:4c40:119:efa3:0:727d:19eb:1)
19:20:15 s4msung joins (u4jHfpaUni@user/s4msung)
19:20:15 loonycyborg joins (loonycybor@wesnoth/developer/loonycyborg)
19:20:15 _0xa joins (~user@user/0xa/x-3134607)
19:20:15 SanchayanMaity joins (sid478177@2a03:5180:f:4::7:4be1)
19:20:15 meooow joins (~meooow@2400:6180:100:d0::ad9:e001)
19:20:15 taktoa[c] joins (sid282096@2a03:5180:f::4:4df0)
19:20:15 edm joins (sid147314@2a03:5180:f:4::2:3f72)
19:20:15 JSharp joins (sid4580@user/JSharp)
19:20:15 Flow joins (~none@gentoo/developer/flow)
19:20:15 Philonous joins (~Philonous@user/philonous)
19:22:20 peterbecich joins (~Thunderbi@syn-047-229-123-186.res.spectrum.com)
19:24:18 merijn joins (~merijn@204-220-045-062.dynamic.caiway.nl)
19:25:04 shapr joins (~user@2601:19c:417e:5434:7fbe:b5f1:8fe7:ea47)
19:25:32 AlexZenon joins (~alzenon@178.34.162.53)
19:26:05 × robobub quits (uid248673@id-248673.uxbridge.irccloud.com) (Ping timeout: 265 seconds)
19:26:09 TonyStone joins (~TonyStone@user/TonyStone)
19:27:32 morb joins (~morb@pool-108-41-100-120.nycmny.fios.verizon.net)
19:29:08 × merijn quits (~merijn@204-220-045-062.dynamic.caiway.nl) (Ping timeout: 245 seconds)
19:29:20 L29Ah joins (~L29Ah@wikipedia/L29Ah)
19:32:29 robobub joins (uid248673@id-248673.uxbridge.irccloud.com)
19:32:30 × paddymahoney quits (~paddymaho@pool-99-250-10-137.cpe.net.cable.rogers.com) (Ping timeout: 246 seconds)
19:39:08 × peterbecich quits (~Thunderbi@syn-047-229-123-186.res.spectrum.com) (Ping timeout: 245 seconds)
19:39:27 <Inst> in do notation for lists, what's the idiomatic way to denote an empty list (fail the chain)?
19:39:32 motherfsck joins (~motherfsc@user/motherfsck)
19:39:35 <Inst> I'm using fail "", but it feels out of date
19:40:06 merijn joins (~merijn@204-220-045-062.dynamic.caiway.nl)
19:40:26 <tomsmeding> []?
19:40:33 <tomsmeding> also mzero
19:42:02 <Inst> thanks
19:42:13 × lucy quits (~lucy@user/lucy) (Ping timeout: 248 seconds)
19:42:49 JuanDaugherty joins (~juan@user/JuanDaugherty)
19:43:18 <Inst> also, more disgusting crap:
19:43:18 <tomsmeding> or good old mempty
19:43:24 <Inst> write a list comprehension that returns an IO value
19:43:28 <Inst> then sequenceA_
19:43:38 <tomsmeding> why is that disgusting?
19:44:04 lucy joins (~lucy@user/lucy)
19:44:08 <ski> yea, sometimes you can generalize to `MonadPlus' (or `Alternative')
19:44:18 <tomsmeding> or Monoid
19:44:26 <tomsmeding> I guess Alternative is more appropriate here
19:44:34 <tomsmeding> 'empty' then >:D
19:44:50 <Inst> well, i mean, for_ at least feels more honest about what you're doing
19:45:05 <tomsmeding> I guess
19:45:12 <tomsmeding> I've done this plenty of times, but admittedly without the _
19:45:14 <Inst> i mean, not list comprehension, but rather, do block in list
19:45:36 paddymahoney joins (~paddymaho@pool-99-250-10-137.cpe.net.cable.rogers.com)
19:45:41 <Inst> but then you can't run intermediate IO values
19:45:46 <int-e> Inst: that's just your own personal perception
19:45:48 × merijn quits (~merijn@204-220-045-062.dynamic.caiway.nl) (Ping timeout: 276 seconds)
19:45:48 × Smiles quits (uid551636@id-551636.lymington.irccloud.com) (Quit: Connection closed for inactivity)
19:46:03 <tomsmeding> https://github.com/tomsmeding/ad-dualrev-th/blob/17b758dbb3966de66394a756b708dae6ab57687e/src/Language/Haskell/ReverseAD/TH.hs#L785-L789
19:47:29 <int-e> sequenceA_ is very honest about what it does. for_ is also honest but has an order of arguments that is more convenient when the lists are short and the actions are long.
19:48:00 <int-e> :t sequenceA_
19:48:01 <lambdabot> (Foldable t, Applicative f) => t (f a) -> f ()
19:48:06 <int-e> :t for_
19:48:07 <lambdabot> (Foldable t, Applicative f) => t a -> (a -> f b) -> f ()
19:48:16 <int-e> that's the ground truth here, really
19:48:51 <tomsmeding> int-e: I think their subjective style guide here is "if the code is just about the side effects, write it in imperative style"
19:49:04 <int-e> which is fine
19:49:06 <tomsmeding> imperative style meaning "use control flow constructs like C's"
19:49:27 <int-e> but you don't have to expect others to be disgusted at alternatives
19:49:35 <tomsmeding> indeed
19:49:42 <EvanR> IO () monoid xD
19:49:46 <EvanR> just the side effects maam
19:49:50 <tomsmeding> it is a monoid though
19:49:58 <tomsmeding> I always found that funny
19:50:04 <Inst> <> > >> :3
19:50:07 <EvanR> > mempty :: IO ()
19:50:08 <lambdabot> <IO ()>
19:50:12 <EvanR> o_O
19:50:13 <tomsmeding> % mempty :: IO ()
19:50:13 <yahb2> <no output>
19:50:23 <tomsmeding> % print "hi" <> print "bye"
19:50:23 <yahb2> "hi" ; "bye"
19:50:44 <Inst> % fail <> print "Hello"
19:50:44 <yahb2> <interactive>:9:9: error: [GHC-83865] ; • Couldn't match expected type: String -> m a ; with actual type: IO () ; • Possible cause: ‘print’ is applied to too many argument...
19:50:50 <Inst> % fail "" <> print "Hello"
19:50:50 <yahb2> *** Exception: user error
19:50:59 <EvanR> > mempty :: IO String
19:51:00 <lambdabot> <IO [Char]>
19:51:03 <EvanR> ok good
19:51:16 <tomsmeding> instance Monoid a => Monoid (IO a)
19:51:21 <tomsmeding> it's the sensible instance :)
19:51:31 <EvanR> haskell is sensible again
19:53:29 <tomsmeding> % (print <> putStrLn . reverse . show) 1234
19:53:29 <yahb2> 1234 ; 4321
19:53:40 × JuanDaugherty quits (~juan@user/JuanDaugherty) (Quit: JuanDaugherty)
19:54:02 <EvanR> lol
19:54:27 <Inst> good ole Monoid b => Monoid (a -> b)
19:54:31 <tomsmeding> indeed
19:54:43 <EvanR> it's monoids all the way down
19:54:55 <tomsmeding> until it's actually a semigroup
19:55:09 <EvanR> until it's a semigroupoid
19:55:15 <tomsmeding> what even is that
19:55:18 <EvanR> lol
19:55:22 <tomsmeding> nonassociative?
19:55:24 <EvanR> no
19:55:27 <tomsmeding> no that's a magma
19:55:41 <EvanR> it's like the earlier group => groupoid discussion, but for semigroups
19:55:53 merijn joins (~merijn@204-220-045-062.dynamic.caiway.nl)
19:55:57 <EvanR> a semigroup is a semigroupoid where there is only 1 object
19:56:20 <ski> category without identities
19:56:32 <EvanR> it might have identities
19:56:34 <tomsmeding> I see
19:56:39 <EvanR> but doesn't have to
19:56:49 <tomsmeding> classic table https://en.wikipedia.org/wiki/Semigroupoid
19:56:53 <ski> "without" as it not being in the signature, yes
19:56:54 <haskellbridge> <thirdofmay18081814goya> anyone know of a community where i can ask about cybersecurity? am trying to define what a "maximally competent/trustworthy/trained" user is
19:58:08 <ski> thirdofmay18081814goya : there's a channel #security on Libera, with some nine hundred people in it
19:58:26 <EvanR> and you can just walk right in?
19:58:32 <EvanR> doesn't sound very secure
19:58:32 <haskellbridge> <thirdofmay18081814goya> ski: nice thank you!
19:58:54 user4561 joins (~user4561@2800:2168:2400:6d3:5b16:5e9e:7bd9:1a9)
19:58:55 <ski> seems you do need to have a registered nickname, to be able to talk there
19:58:56 <Inst> oh, that was what i was looking for
19:59:02 <ski> (channel mode `+R')
19:59:54 × euphores quits (~SASL_euph@user/euphores) (Ping timeout: 260 seconds)
19:59:56 × user4561 quits (~user4561@2800:2168:2400:6d3:5b16:5e9e:7bd9:1a9) (Client Quit)
20:00:01 <Inst> guard :: Bool -> f ()
20:00:21 user4561 joins (~user4561@2800:2168:2400:6d3:5b16:5e9e:7bd9:1a9)
20:00:49 × user4561 quits (~user4561@2800:2168:2400:6d3:5b16:5e9e:7bd9:1a9) (Client Quit)
20:00:53 × merijn quits (~merijn@204-220-045-062.dynamic.caiway.nl) (Ping timeout: 248 seconds)
20:01:24 × lucy quits (~lucy@user/lucy) (Ping timeout: 276 seconds)
20:01:41 lucy joins (~lucy@user/lucy)
20:03:25 <haskellbridge> <thirdofmay18081814goya> what irc client do you guys use?
20:04:08 <ski> /ctcp ski version
20:05:02 <tomsmeding> ctcp is funny
20:06:36 euphores joins (~SASL_euph@user/euphores)
20:07:14 × enikar quits (~enikar@user/enikar) (Quit: WeeChat 3.0)
20:07:21 <hc> why is it funny?
20:07:59 <EvanR> somehow it used to cause literally everyone in the channel to become irate if you used it
20:08:07 <EvanR> those were the days
20:08:13 <tomsmeding> simply because I always forget it is a thing; it feels more powerful than it should be
20:08:32 <ski> well, you shouldn't CTCP a whole channel
20:08:43 <EvanR> there was a unix command which wrote a message on another users terminal
20:08:49 <tomsmeding> wall(1)
20:09:02 <tomsmeding> it actually works on some servers, not everyone turns it off
20:09:06 <ski> an occasional random CTCP to whomever, i think is fine
20:09:17 × ash3en quits (~Thunderbi@2a03:7846:b6eb:101:93ac:a90a:da67:f207) (Ping timeout: 252 seconds)
20:09:34 <EvanR> it seems like from another universe, where no one had security because no one needed any
20:09:56 <ski> yea, i've witnessed people discovering `wall' (and then i, sometimes, responded that they could use `write' to direct to a particular user)
20:10:24 <tomsmeding> ah, right, wall and write
20:10:29 <ski> (also `mesg n', if you prefer)
20:10:34 enikar joins (~enikar@user/enikar)
20:10:47 int-e likes CTCP-ing a whole channel though
20:10:52 <EvanR> it was mesg
20:11:07 <ski> hah, yea, that's the exception, int-e :P
20:11:12 <hc> wall is still use by the shutdown command anyway
20:11:14 <tomsmeding> a while ago I actually used write(1) to alert someone that I was using a server they were running a long job on, so if they were benchmarking, their benchmark was now invalidated
20:11:27 <tomsmeding> they actually got back to me by email -- I put my email in the write(1) message just in case
20:11:40 merijn joins (~merijn@204-220-045-062.dynamic.caiway.nl)
20:12:17 <hc> I think write used to work remotely, too
20:12:26 <hc> Then there was a more advanced command called talk
20:12:56 <hc> It opened up a session where you could chat, you could see the letters appear as the other person was talking :]
20:13:44 <ski> yea, i used `talk' (more specifically `ytalk')
20:14:10 <hc> Oh, I didn't know that one :)
20:14:45 <hc> I'm sure there's an emacs command for that, too
20:15:47 <EvanR> tomsmeding, and then their reply email was delivered to you via nethack mail demon
20:16:11 <tomsmeding> unfortunately not, that was a bog-standard institutional MS Exchange email :p
20:16:23 <EvanR> shudder
20:16:32 <hc> That reminds me, irc is from a time when host names were static and user names were verified by identd
20:16:36 <ski> you could open an Emacs frame on the X display of another person, assuming their machine was accessible over the network, and they allowed you to open a window there. then you could both type into the same buffer (but at different points)
20:16:49 × merijn quits (~merijn@204-220-045-062.dynamic.caiway.nl) (Ping timeout: 248 seconds)
20:17:13 <ski> or, you can use a multi-user Screen session, for something similar (but only one point, unless you use something like `emacsclient -nw')
20:17:44 <int-e> hc: you could trust the admins of computers connected to the internet... or so it was assumed. imagine!
20:17:44 <hc> Oh nice, I did know about that emacs feature but not that you could actually use a different DISPLAY setting for it
20:18:01 <int-e> (the whole idea of identd is ludicrous from a modern perspective)
20:18:25 <hc> Yeah, but I think the culture was much different back then
20:18:36 <ski> hc : `M-x make-frame-on-display'
20:18:41 <int-e> obviously
20:18:41 <hc> Mostly university and a bit military perhaps, but probably mostly university
20:19:10 <hc> ski: kk, I'll write that down actually :)
20:19:22 ski bound `C-x 5 3' to that
20:19:38 <Inst> pftt, should disable version
20:19:49 tomsmeding wonders why "5 3"
20:20:01 <ski> (global-set-key [?\C-x ?5 ?3] #'make-frame-on-display)
20:20:10 <Inst> there isn't an inverse of guard?
20:20:24 <tomsmeding> guard . not
20:20:43 <Inst> yeah I just flipped the boolean
20:20:47 <Inst> I'm trying to write a conway's game of life
20:20:55 <Inst> then convert it to comonads
20:23:16 <ski> tomsmeding : `C-x 5 0' already is `delete-frame', and `C-x 5 1' is `delete-other-frames', and `C-x 5 2' is `make-frame-command' (make a new frame on the same display as the currently focused one). (cf. `C-x 0' being `delete-window', `C-x 1' being `delete-other-windows', `C-x 2' being `split-window-vertically', `C-x 3' being `split-window-horizontally'; these managing windows within a single frame)
20:23:52 <tomsmeding> vim is a _little_ more helpful in its key binding mnemonics :p
20:24:06 <hc> Anyone ever use yi? ;)
20:24:14 <tomsmeding> (still not amazing, but surely "v" is better than "2" for a vertical split :p)
20:24:29 <ski> "2" for "split in two", presumably
20:24:38 <tomsmeding> and 3 for "split in three"?
20:24:50 <ski> hah, the analogy breaks there :D
20:24:55 <tomsmeding> well, I guess it's "2'", so it becomes 3
20:24:59 <tomsmeding> that can work
20:25:20 <tomsmeding> same for 0 and 0'
20:26:18 peterbecich joins (~Thunderbi@syn-047-229-123-186.res.spectrum.com)
20:26:43 <ski> Screen has `^AX' for `remove', `^AQ' for `only', `^AS' for `split', and `^A|' for `split -v' (these similarly managing regions in a terminal display, similar to the windows in an Emacs frame)
20:27:27 merijn joins (~merijn@204-220-045-062.dynamic.caiway.nl)
20:28:22 <ski> (.. unfortunately, the terminology in Irssi is a bit conflated, both "buffers"/"tabs", as well as "screen regions" are manipulated using `/window' command)
20:29:04 × morb quits (~morb@pool-108-41-100-120.nycmny.fios.verizon.net) (Ping timeout: 260 seconds)
20:29:04 ash3en joins (~Thunderbi@2a03:7846:b6eb:101:93ac:a90a:da67:f207)
20:31:39 × raehik1 quits (~raehik@rdng-25-b2-v4wan-169990-cust1344.vm39.cable.virginm.net) (Ping timeout: 244 seconds)
20:32:21 × merijn quits (~merijn@204-220-045-062.dynamic.caiway.nl) (Ping timeout: 248 seconds)
20:39:49 × lucy quits (~lucy@user/lucy) (Ping timeout: 248 seconds)
20:40:22 × michalz quits (~michalz@185.246.207.221) (Remote host closed the connection)
20:41:49 lucy joins (~lucy@user/lucy)
20:41:51 morb joins (~morb@pool-108-41-100-120.nycmny.fios.verizon.net)
20:43:13 merijn joins (~merijn@204-220-045-062.dynamic.caiway.nl)
20:43:54 × sawilagar quits (~sawilagar@user/sawilagar) (Ping timeout: 265 seconds)
20:45:24 Fooo is now known as Square
20:48:15 × merijn quits (~merijn@204-220-045-062.dynamic.caiway.nl) (Ping timeout: 265 seconds)
20:49:40 <Inst> is there a way to multiply declare type synonyms?
20:52:51 <tomsmeding> Inst: what would that mean?
20:53:18 <Inst> type (Foo, Bar, Baz) = (String, Text, ByteString)
20:54:20 <Rembane> Inst: Why do you need that?
20:54:28 <Rembane> Inst: Cool syntax btw
20:54:41 <tomsmeding> type Foo = String ; type Bar = Text ; type Baz = ByteString
20:55:53 <Inst> type synonyming the inputs of a function to be more descriptive
20:56:58 <tomsmeding> write them as separate `type` declarations :)
20:57:01 tromp joins (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl)
20:57:12 <EvanR> it's true
20:57:28 <EvanR> if (a,b,c) = (d,e,f) then by the laws of something or other
20:57:32 <EvanR> a = d
20:57:34 <EvanR> b = e
20:57:35 <EvanR> c = f
20:57:45 <tomsmeding> injectivity of data constructors
20:58:29 × peterbecich quits (~Thunderbi@syn-047-229-123-186.res.spectrum.com) (Ping timeout: 248 seconds)
20:59:01 <tomsmeding> (Injectivity of a function f : a -> b means that different a's get sent to different b's. Hence, if f x = f y, then x = y.)
20:59:01 merijn joins (~merijn@204-220-045-062.dynamic.caiway.nl)
20:59:35 <EvanR> it's also (in the case of pairs) just part of the definition of identity types for pair in HoTT
21:00:01 <tomsmeding> right, if you want injectivity of functions of multiple arguments, there is some basic argument that products are injective somewhere :p
21:00:13 briandaed joins (~root@185.234.210.211)
21:00:21 <tomsmeding> injective in both their arguments, that is
21:01:03 <EvanR> so in that case you don't need a separate injectivity axiom
21:01:19 <EvanR> it's just defined that way
21:01:27 <briandaed> is there a way to pass a package with a different name? trying to clean mess with crypton vs cryptonite and would like to pass crypton as cryptonite replacement
21:01:43 <monochrom> (Apart from how you know that product exists in the first place. >:) )
21:01:57 <tomsmeding> briandaed: as in, you depend on some package X, and X depends on cryptonite, but you'd like to substitute crypton?
21:02:00 <tomsmeding> or is X your own package?
21:02:21 <briandaed> tomsmeding, first option
21:02:26 raehik joins (~raehik@rdng-25-b2-v4wan-169990-cust1344.vm39.cable.virginm.net)
21:02:54 × morb quits (~morb@pool-108-41-100-120.nycmny.fios.verizon.net) (Ping timeout: 260 seconds)
21:02:59 <tomsmeding> hm, cabal backpack does modules, not packages AFAIK
21:03:51 × merijn quits (~merijn@204-220-045-062.dynamic.caiway.nl) (Ping timeout: 246 seconds)
21:04:01 <monochrom> Right, backpack won't do it.
21:04:08 machinedgod joins (~machinedg@d50-99-47-73.abhsia.telus.net)
21:04:22 <tomsmeding> (for reference, this is backpack, i.e. this idea but for individual modules: https://cabal.readthedocs.io/en/3.4/cabal-package.html#pkg-field-mixins )
21:05:38 <monochrom> Only way I can think of is setting up your own local repo (https://cabal.readthedocs.io/en/stable/config.html#local-no-index-repositories) then you can put any abriged butchered packages there and you can arrange them to take precedence.
21:05:42 <tomsmeding> a _very_ hacky solution is to vendor crypton in, patch its cabal file to say "cryptonite" instead of "crypton", and then put that vendored crypton/cryptonite in the packages: field of cabal.project
21:06:02 <tomsmeding> stuff in 'packages:' overrides hackage
21:06:58 <Inst> hummm
21:07:02 <Inst> hmmm
21:07:22 <briandaed> yeah, thought about something like this but it's ... ugly
21:08:39 <monochrom> Sure, this is known as "supply-chain attack" >:)
21:09:09 × EvanR quits (~EvanR@user/evanr) (Quit: Leaving)
21:09:30 <Inst> type a $> b = a
21:09:36 <Inst> unfortunately we don't have a const operator
21:09:45 <Inst> type a $> b = b
21:10:35 <Inst> this is better than using dumb type synonyms for function inputs, easier to write delay $> Int -> repetitions $> Int -> IO ()
21:11:07 <tomsmeding> relevant: https://hackage.haskell.org/package/tagged-0.8.8/docs/Data-Tagged.html
21:11:10 ft joins (~ft@p4fc2acce.dip0.t-ipconnect.de)
21:11:53 <tomsmeding> (not quite the same, because it's a newtype)
21:12:20 <Inst> no i mean if you use type synonyms to change the function type signature to something more descriptive, if you reuse the type you'll force the reader to go look up what the type synonym is
21:13:07 × briandaed quits (~root@185.234.210.211) (Quit: Lost terminal)
21:14:47 merijn joins (~merijn@204-220-045-062.dynamic.caiway.nl)
21:16:02 × byte quits (~byte@149.28.222.189) (Ping timeout: 252 seconds)
21:16:19 byte joins (~byte@149.28.222.189)
21:19:21 <Inst> type a `Is` b = b works
21:19:41 × merijn quits (~merijn@204-220-045-062.dynamic.caiway.nl) (Ping timeout: 252 seconds)
21:24:20 × lucy quits (~lucy@user/lucy) (Quit: leaving)
21:25:18 morb joins (~morb@pool-108-41-100-120.nycmny.fios.verizon.net)
21:25:31 × krei-se quits (~krei-se@p57af2362.dip0.t-ipconnect.de) (Quit: ZNC 1.9.1 - https://znc.in)
21:25:34 × takuan quits (~takuan@178-116-218-225.access.telenet.be) (Remote host closed the connection)
21:29:12 Guest68 joins (~Guest2@181.28.115.159)
21:29:41 <Guest68> hi
21:29:46 × Guest68 quits (~Guest2@181.28.115.159) (Client Quit)
21:30:35 merijn joins (~merijn@204-220-045-062.dynamic.caiway.nl)
21:31:46 <geekosaur> 👀
21:35:37 × merijn quits (~merijn@204-220-045-062.dynamic.caiway.nl) (Ping timeout: 265 seconds)
21:41:28 × Tisoxin quits (~Ikosit@user/ikosit) (Read error: Connection reset by peer)
21:42:52 × machinedgod quits (~machinedg@d50-99-47-73.abhsia.telus.net) (Ping timeout: 265 seconds)
21:42:53 troojg joins (~troojg@user/troojg)
21:46:22 merijn joins (~merijn@204-220-045-062.dynamic.caiway.nl)
21:46:25 × __monty__ quits (~toonn@user/toonn) (Quit: leaving)
21:48:57 × weary-traveler quits (~user@user/user363627) (Remote host closed the connection)
21:51:34 × merijn quits (~merijn@204-220-045-062.dynamic.caiway.nl) (Ping timeout: 265 seconds)
21:54:57 × raehik quits (~raehik@rdng-25-b2-v4wan-169990-cust1344.vm39.cable.virginm.net) (Ping timeout: 265 seconds)
21:59:13 × ash3en quits (~Thunderbi@2a03:7846:b6eb:101:93ac:a90a:da67:f207) (Quit: ash3en)
22:02:08 merijn joins (~merijn@204-220-045-062.dynamic.caiway.nl)
22:02:40 krei-se joins (~krei-se@p57af2362.dip0.t-ipconnect.de)
22:07:31 × merijn quits (~merijn@204-220-045-062.dynamic.caiway.nl) (Ping timeout: 265 seconds)
22:17:56 merijn joins (~merijn@204-220-045-062.dynamic.caiway.nl)
22:19:55 Unicorn_Princess joins (~Unicorn_P@user/Unicorn-Princess/x-3540542)
22:20:58 × synchromesh quits (~john@2406:5a00:241a:5600:2de5:ba26:2eef:9155) (Read error: Connection reset by peer)
22:21:06 synchromesh joins (~john@2406:5a00:241a:5600:2de5:ba26:2eef:9155)
22:23:06 × merijn quits (~merijn@204-220-045-062.dynamic.caiway.nl) (Ping timeout: 276 seconds)
22:23:07 raehik joins (~raehik@rdng-25-b2-v4wan-169990-cust1344.vm39.cable.virginm.net)
22:23:22 × tromp quits (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl) (Quit: My iMac has gone to sleep. ZZZzzz…)
22:28:37 × morb quits (~morb@pool-108-41-100-120.nycmny.fios.verizon.net) (Ping timeout: 248 seconds)
22:31:39 Misosabbe joins (~Misosabbe@2a00:801:4f3:fb9c:22d2:cc07:9cb3:2)
22:33:43 merijn joins (~merijn@204-220-045-062.dynamic.caiway.nl)
22:35:28 morb joins (~morb@pool-108-41-100-120.nycmny.fios.verizon.net)
22:37:30 <Misosabbe> Hej, I'm trying to install GHC with stack with `stack setup`, however it fails with Network GetAddrInfo does not exist, for stackage-haddock.haskell.org:443
22:37:30 <Misosabbe> I'd post a log but my IRC is on another computer, currently trying to install Xmonad on a fresh install of Archlinux.
22:38:24 <Misosabbe> stackage-haddock.haskell.org is a 404, so maybe someone done goofed up, or am I doing something wrong?
22:38:56 × merijn quits (~merijn@204-220-045-062.dynamic.caiway.nl) (Ping timeout: 265 seconds)
22:40:36 demcgovern joins (~demcgover@216.106.58.132.reverse.socket.net)
22:40:51 <Rembane> Misosabbe: I don't know more than I also get the HTTP 404
22:41:40 <geekosaur> I recall hearing that stackage was being migrated over to HF control, I wonder if something got updated a little before it was supposed to?
22:41:44 athan joins (~athan@syn-098-153-145-140.biz.spectrum.com)
22:42:17 × CrunchyFlakes quits (~CrunchyFl@31.19.233.78) (Ping timeout: 255 seconds)
22:42:58 <Misosabbe> I also tried to install the stack-static package from AUR as an alternative, but it failed as it needed a gpg key I couldn't find on anyservers...
22:42:58 <Misosabbe> Any ideas for alternative routes? I would like to try not to use the arch maintained haskell packages, but I'm a bit blocked here :S
22:46:03 <Rembane> Misosabbe: Have you tried gchup?
22:48:27 <Misosabbe>  aha no, I will look that up, thanks for the tip
22:48:28 × arahael quits (~arahael@user/arahael) (Remote host closed the connection)
22:48:57 <Rembane> No worries, good luck!
22:49:30 merijn joins (~merijn@204-220-045-062.dynamic.caiway.nl)
22:53:34 Square3 joins (~Square4@user/square)
22:54:15 Smiles joins (uid551636@id-551636.lymington.irccloud.com)
22:54:53 × merijn quits (~merijn@204-220-045-062.dynamic.caiway.nl) (Ping timeout: 265 seconds)
22:56:50 × Square quits (~Square@user/square) (Ping timeout: 244 seconds)
22:58:59 × troojg quits (~troojg@user/troojg) (Ping timeout: 260 seconds)
22:59:15 CrunchyFlakes joins (~CrunchyFl@31.19.233.78)
23:01:06 × demcgovern quits (~demcgover@216.106.58.132.reverse.socket.net) (Quit: Client closed)
23:04:04 × CrunchyFlakes quits (~CrunchyFl@31.19.233.78) (Ping timeout: 265 seconds)
23:05:18 merijn joins (~merijn@204-220-045-062.dynamic.caiway.nl)
23:05:32 <Misosabbe> Really wish Haskell was a bit more stable / user friendly :( Every time I have to fix something with Xmonad I always have to go through a bunch of hoops to just try and get Haskell to work
23:08:38 <Misosabbe> Stack felt like a step forward, but now it's not working when I need it :/
23:10:16 × remedan quits (~remedan@ip-62-245-108-153.bb.vodafone.cz) (Quit: Bye!)
23:10:46 × merijn quits (~merijn@204-220-045-062.dynamic.caiway.nl) (Ping timeout: 272 seconds)
23:11:42 remedan joins (~remedan@ip-62-245-108-153.bb.vodafone.cz)
23:14:35 <haskellbridge> <sm> Misosabbe: sorry you're having trouble. Can you access matrix ? Stack's maintainer is there, https://matrix.to/#/#haskell-stack:matrix.org
23:16:46 <Misosabbe> Ah thanks for the tip! :) I can see if I can get on matrix
23:20:13 <haskellbridge> <sm> and yes, "ghcup tui" is especially useful, many stack users use ghcup instead of stack's built-in GHC installer
23:21:05 merijn joins (~merijn@204-220-045-062.dynamic.caiway.nl)
23:21:19 <haskellbridge> <sm> possibly upgrading to the latest stack will help ? IIRC some hard-coded urls were changed without redirects when stackage moved to HF
23:21:25 × acidjnk quits (~acidjnk@p200300d6e72cfb33a563052759f358da.dip0.t-ipconnect.de) (Ping timeout: 248 seconds)
23:22:31 <geekosaur> the broken URL appears to be one of the new ones
23:23:18 <Misosabbe> sm So is it possible to use ghcup tui with stack? Is there a how to on that anywhere? :)
23:23:20 × tt123109783243 quits (~tt1231@2603:6010:8700:4a81:219f:50d3:618a:a6ee) (Quit: The Lounge - https://thelounge.chat)
23:23:47 <Misosabbe> And thanks for notifying the maintainers,  I managed to join the matrix
23:23:56 <geekosaur> if you install stack with ghcup (whether command line or tui) it will ask you whether you want to use its stack integration
23:24:18 <geekosaur> actually, it should do that when you install ghcup
23:24:35 <geekosaur> since it will auto-install the recommended versions of ghc, cabal, and stack
23:25:03 tt123109783243 joins (~tt1231@2603:6010:8700:4a81:219f:50d3:618a:a6ee)
23:25:09 <geekosaur> "ghcup tui" then lets you install and make default other versions (and if the latest stack is throwing that error, try an older one)
23:26:24 × merijn quits (~merijn@204-220-045-062.dynamic.caiway.nl) (Ping timeout: 260 seconds)
23:26:55 × tt123109783243 quits (~tt1231@2603:6010:8700:4a81:219f:50d3:618a:a6ee) (Client Quit)
23:26:59 <haskellbridge> <sm> would this be a #haskell-infrastructure issue now ?
23:27:31 <geekosaur> presumably
23:27:43 <Misosabbe> Thanks for the support, I will keep playing <3
23:28:03 <haskellbridge> <sm> I'll mention it
23:28:12 tt123109783243 joins (~tt1231@2603:6010:8700:4a81:219f:50d3:618a:a6ee)
23:29:52 <sm> hey all.. cc'ing from #haskell: a stack user is experiencing failures due to stackage-haddock.haskell.org:443 being unreachable
23:30:00 <sm> oops
23:30:26 sm has +1 chaos
23:34:58 × morb quits (~morb@pool-108-41-100-120.nycmny.fios.verizon.net) (Ping timeout: 245 seconds)
23:35:22 sourcetarius joins (~sourcetar@user/sourcetarius)
23:44:31 morb joins (~morb@pool-108-41-100-120.nycmny.fios.verizon.net)
23:45:14 <Inst> okay...
23:45:24 <Inst> there's no assert_ :: (a -> Bool) -> a -> a?
23:47:40 <Inst> assert_ f a = assert (f a) a or (\a -> assert (_myFun a) a
23:48:53 × todi quits (~todi@p57803331.dip0.t-ipconnect.de) (Ping timeout: 255 seconds)
23:49:01 × morb quits (~morb@pool-108-41-100-120.nycmny.fios.verizon.net) (Ping timeout: 265 seconds)
23:49:57 <monochrom> https://hackage.haskell.org/package/base-4.20.0.1/docs/Control-Exception.html#v:assert
23:51:10 merijn joins (~merijn@204-220-045-062.dynamic.caiway.nl)
23:51:25 <geekosaur> easy enough to write yourself; doesn't meet the Fairbairn threshold IMO
23:52:28 weary-traveler joins (~user@user/user363627)
23:52:50 todi joins (~todi@p57803331.dip0.t-ipconnect.de)
23:53:26 <Inst> yeah i guess, i ran it as a debug function since traceShowId was providing too much information
23:54:53 <geekosaur> I don't consider that one to meet Fairbairn either tbh
23:55:03 <geekosaur> I just use `trace`
23:55:03 morb joins (~morb@pool-108-41-100-120.nycmny.fios.verizon.net)
23:55:08 <monochrom> Also I would find things like "assert (n < length xs) (xs !! n)" the dominant use case, generally the condition is not simply a predicate over the answer.
23:56:03 × merijn quits (~merijn@204-220-045-062.dynamic.caiway.nl) (Ping timeout: 246 seconds)
23:56:03 <monochrom> We need a derogatory name for the opposite of the Fairbairn threshold.
23:56:25 <monochrom> I.e., a name for "yes, it's just you, no one else wants that function".
23:56:32 geekosaur is not so much with the "derogatory"
23:56:36 <int-e> I like `traceShow`, it feels useful.
23:56:56 <int-e> but I can't say the same about `traceShowId`
23:57:53 <int-e> usually with the guard trick; I'll do | traceShow ("label", val1, val2) False = undefined
23:58:48 <haskellbridge> <sm> traceShowId is handy sometimes
23:59:27 <Inst> let !_ = traceShow ("label", val1, val2) () in
23:59:34 <haskellbridge> <sm> as usual I'll mention my Hledger.Utils.Debug for more trace helper ideas

All times are in UTC on 2024-09-26.