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.