Home liberachat/#haskell: Logs Calendar

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

00:02:50 merijn joins (~merijn@204-220-045-062.dynamic.caiway.nl)
00:03:38 sw4n joins (~sw4n@2605:59c0:40f0:9610:559:7713:a305:7d30)
00:07:44 × merijn quits (~merijn@204-220-045-062.dynamic.caiway.nl) (Ping timeout: 260 seconds)
00:08:16 × ChaiTRex quits (~ChaiTRex@user/chaitrex) (Ping timeout: 260 seconds)
00:08:31 × sw4n quits (~sw4n@2605:59c0:40f0:9610:559:7713:a305:7d30) (Ping timeout: 264 seconds)
00:09:49 sw4n joins (~sw4n@2605:59c0:40f0:9610:559:7713:a305:7d30)
00:10:02 ChaiTRex joins (~ChaiTRex@user/chaitrex)
00:14:44 × sw4n quits (~sw4n@2605:59c0:40f0:9610:559:7713:a305:7d30) (Ping timeout: 260 seconds)
00:19:52 merijn joins (~merijn@204-220-045-062.dynamic.caiway.nl)
00:22:06 troojg joins (~troojg@user/troojg)
00:24:39 × merijn quits (~merijn@204-220-045-062.dynamic.caiway.nl) (Ping timeout: 260 seconds)
00:29:25 × hiecaq quits (~hiecaq@user/hiecaq) (Quit: ERC 5.5.0.29.1 (IRC client for GNU Emacs 29.4))
00:30:10 × Feuermagier quits (~Feuermagi@user/feuermagier) (Ping timeout: 248 seconds)
00:32:00 hiecaq joins (~hiecaq@user/hiecaq)
00:36:44 merijn joins (~merijn@204-220-045-062.dynamic.caiway.nl)
00:39:23 causal joins (~eric@50.35.88.207)
00:41:00 × merijn quits (~merijn@204-220-045-062.dynamic.caiway.nl) (Ping timeout: 246 seconds)
00:42:35 sw4n joins (~sw4n@2605:59c0:40f0:9610:559:7713:a305:7d30)
00:51:10 × athan quits (~athan@syn-098-153-145-140.biz.spectrum.com) (Quit: Konversation terminated!)
00:53:15 × sw4n quits (~sw4n@2605:59c0:40f0:9610:559:7713:a305:7d30) (Ping timeout: 246 seconds)
00:54:38 merijn joins (~merijn@204-220-045-062.dynamic.caiway.nl)
00:59:39 × merijn quits (~merijn@204-220-045-062.dynamic.caiway.nl) (Ping timeout: 260 seconds)
01:03:47 merijn joins (~merijn@204-220-045-062.dynamic.caiway.nl)
01:08:10 sw4n joins (~sw4n@2605:59c0:40f0:9610:559:7713:a305:7d30)
01:08:59 × merijn quits (~merijn@204-220-045-062.dynamic.caiway.nl) (Ping timeout: 260 seconds)
01:13:04 × sw4n quits (~sw4n@2605:59c0:40f0:9610:559:7713:a305:7d30) (Ping timeout: 260 seconds)
01:19:48 merijn joins (~merijn@204-220-045-062.dynamic.caiway.nl)
01:24:03 × merijn quits (~merijn@204-220-045-062.dynamic.caiway.nl) (Ping timeout: 246 seconds)
01:29:00 john is now known as synchromesh
01:29:29 sw4n joins (~sw4n@2605:59c0:40f0:9610:559:7713:a305:7d30)
01:33:53 × sw4n quits (~sw4n@2605:59c0:40f0:9610:559:7713:a305:7d30) (Ping timeout: 252 seconds)
01:36:43 merijn joins (~merijn@204-220-045-062.dynamic.caiway.nl)
01:41:06 × merijn quits (~merijn@204-220-045-062.dynamic.caiway.nl) (Ping timeout: 248 seconds)
01:43:25 × krei-se quits (~krei-se@p57af2718.dip0.t-ipconnect.de) (Ping timeout: 252 seconds)
01:47:16 krei-se joins (~krei-se@p57af2362.dip0.t-ipconnect.de)
01:47:25 × weary-traveler quits (~user@user/user363627) (Remote host closed the connection)
01:48:00 sw4n joins (~sw4n@2605:59c0:40f0:9610:559:7713:a305:7d30)
01:52:38 merijn joins (~merijn@204-220-045-062.dynamic.caiway.nl)
01:52:44 × sw4n quits (~sw4n@2605:59c0:40f0:9610:559:7713:a305:7d30) (Ping timeout: 260 seconds)
01:57:00 × merijn quits (~merijn@204-220-045-062.dynamic.caiway.nl) (Ping timeout: 252 seconds)
01:59:58 morb joins (~morb@pool-108-41-100-120.nycmny.fios.verizon.net)
02:03:31 × ZharMeny quits (~ZharMeny@user/ZharMeny) (Quit: ERC 5.5.0.29.1 (IRC client for GNU Emacs 29.4))
02:05:04 × op_4 quits (~tslil@user/op-4/x-9116473) (Remote host closed the connection)
02:05:35 op_4 joins (~tslil@user/op-4/x-9116473)
02:06:32 sw4n joins (~sw4n@2605:59c0:40f0:9610:559:7713:a305:7d30)
02:08:23 merijn joins (~merijn@204-220-045-062.dynamic.caiway.nl)
02:10:55 × sw4n quits (~sw4n@2605:59c0:40f0:9610:559:7713:a305:7d30) (Ping timeout: 252 seconds)
02:11:51 <Leary> thirdofmay: I didn't read the first article closely (it would be too much effort with my weak cat-fu), but I think it's just saying that `iter` takes (endofunctorial) f-algebrae to (monadic / Eilenberg-Moore) `Free f`-algebrae, with an inverse `unIter = \alg -> alg . Op . fmap Pure` making it an isomorphism. This lets your transfer results about (more structured) algebrae over monads to (less structured) algebrae over endofunctors. But this is just a to
02:11:51 <Leary> ol for the mathematician, of which the free monad is an implementation detail.
02:12:46 × merijn quits (~merijn@204-220-045-062.dynamic.caiway.nl) (Ping timeout: 252 seconds)
02:13:43 merijn joins (~merijn@204-220-045-062.dynamic.caiway.nl)
02:14:01 caconym9 is now known as caconym
02:18:38 × merijn quits (~merijn@204-220-045-062.dynamic.caiway.nl) (Ping timeout: 252 seconds)
02:25:03 sw4n joins (~sw4n@2605:59c0:40f0:9610:559:7713:a305:7d30)
02:29:29 × sw4n quits (~sw4n@2605:59c0:40f0:9610:559:7713:a305:7d30) (Ping timeout: 260 seconds)
02:30:27 weary-traveler joins (~user@user/user363627)
02:31:44 merijn joins (~merijn@204-220-045-062.dynamic.caiway.nl)
02:36:09 × merijn quits (~merijn@204-220-045-062.dynamic.caiway.nl) (Ping timeout: 246 seconds)
02:42:19 × td_ quits (~td@i5387091B.versanet.de) (Ping timeout: 260 seconds)
02:43:59 td_ joins (~td@i5387091C.versanet.de)
02:47:22 merijn joins (~merijn@204-220-045-062.dynamic.caiway.nl)
02:51:59 × merijn quits (~merijn@204-220-045-062.dynamic.caiway.nl) (Ping timeout: 252 seconds)
02:55:04 jathan joins (~jathan@69.61.93.38)
02:55:21 × spew quits (~spew@201.141.99.170) (Quit: spew)
02:59:03 sw4n joins (~sw4n@2605:59c0:40f0:9610:559:7713:a305:7d30)
02:59:03 × synchromesh quits (~john@2406:5a00:241a:5600:16f:d6b6:8ecf:f15b) (Read error: Connection reset by peer)
02:59:25 synchromesh joins (~john@2406:5a00:241a:5600:16f:d6b6:8ecf:f15b)
03:03:24 merijn joins (~merijn@204-220-045-062.dynamic.caiway.nl)
03:03:54 × sw4n quits (~sw4n@2605:59c0:40f0:9610:559:7713:a305:7d30) (Ping timeout: 260 seconds)
03:06:52 sw4n joins (~sw4n@2605:59c0:40f0:9610:559:7713:a305:7d30)
03:07:59 × merijn quits (~merijn@204-220-045-062.dynamic.caiway.nl) (Ping timeout: 260 seconds)
03:12:06 × sw4n quits (~sw4n@2605:59c0:40f0:9610:559:7713:a305:7d30) (Ping timeout: 276 seconds)
03:13:41 × morb quits (~morb@pool-108-41-100-120.nycmny.fios.verizon.net) (Remote host closed the connection)
03:18:36 × ridcully quits (~ridcully@p508ac2b4.dip0.t-ipconnect.de) (Ping timeout: 276 seconds)
03:19:19 merijn joins (~merijn@204-220-045-062.dynamic.caiway.nl)
03:24:19 × merijn quits (~merijn@204-220-045-062.dynamic.caiway.nl) (Ping timeout: 260 seconds)
03:31:41 ridcully joins (~ridcully@p57b528bc.dip0.t-ipconnect.de)
03:32:40 × Lord_of_Life quits (~Lord@user/lord-of-life/x-2819915) (Ping timeout: 265 seconds)
03:33:07 telser joins (~quassel@user/telser)
03:34:13 Lord_of_Life joins (~Lord@user/lord-of-life/x-2819915)
03:35:23 merijn joins (~merijn@204-220-045-062.dynamic.caiway.nl)
03:35:31 × telser quits (~quassel@user/telser) (Client Quit)
03:40:01 × merijn quits (~merijn@204-220-045-062.dynamic.caiway.nl) (Ping timeout: 252 seconds)
03:40:23 sw4n joins (~sw4n@2605:59c0:40f0:9610:559:7713:a305:7d30)
03:44:44 × sw4n quits (~sw4n@2605:59c0:40f0:9610:559:7713:a305:7d30) (Ping timeout: 260 seconds)
03:50:35 telser joins (~quassel@user/telser)
03:51:46 merijn joins (~merijn@204-220-045-062.dynamic.caiway.nl)
03:52:30 × troojg quits (~troojg@user/troojg) (Remote host closed the connection)
03:56:10 × merijn quits (~merijn@204-220-045-062.dynamic.caiway.nl) (Ping timeout: 252 seconds)
03:58:54 sw4n joins (~sw4n@2605:59c0:40f0:9610:559:7713:a305:7d30)
04:03:18 × sw4n quits (~sw4n@2605:59c0:40f0:9610:559:7713:a305:7d30) (Ping timeout: 246 seconds)
04:08:22 merijn joins (~merijn@204-220-045-062.dynamic.caiway.nl)
04:13:02 × merijn quits (~merijn@204-220-045-062.dynamic.caiway.nl) (Ping timeout: 252 seconds)
04:14:44 merijn joins (~merijn@204-220-045-062.dynamic.caiway.nl)
04:17:30 sw4n joins (~sw4n@2605:59c0:40f0:9610:559:7713:a305:7d30)
04:19:44 × merijn quits (~merijn@204-220-045-062.dynamic.caiway.nl) (Ping timeout: 260 seconds)
04:22:04 × sw4n quits (~sw4n@2605:59c0:40f0:9610:559:7713:a305:7d30) (Ping timeout: 260 seconds)
04:28:56 JuanDaugherty joins (~juan@user/JuanDaugherty)
04:30:36 merijn joins (~merijn@204-220-045-062.dynamic.caiway.nl)
04:33:27 pavonia joins (~user@user/siracusa)
04:35:02 × merijn quits (~merijn@204-220-045-062.dynamic.caiway.nl) (Ping timeout: 252 seconds)
04:42:17 sw4n joins (~sw4n@2605:59c0:40f0:9610:559:7713:a305:7d30)
04:46:41 × sw4n quits (~sw4n@2605:59c0:40f0:9610:559:7713:a305:7d30) (Ping timeout: 248 seconds)
04:47:18 merijn joins (~merijn@204-220-045-062.dynamic.caiway.nl)
04:48:36 × naxx quits (~brandt@177.191-pool-nas4-sc.sccoast.net) (Quit: WeeChat 4.4.2)
04:51:54 × merijn quits (~merijn@204-220-045-062.dynamic.caiway.nl) (Ping timeout: 252 seconds)
05:01:53 peterbecich joins (~Thunderbi@syn-047-229-123-186.res.spectrum.com)
05:04:14 merijn joins (~merijn@204-220-045-062.dynamic.caiway.nl)
05:08:51 × merijn quits (~merijn@204-220-045-062.dynamic.caiway.nl) (Ping timeout: 265 seconds)
05:15:23 × JuanDaugherty quits (~juan@user/JuanDaugherty) (Quit: JuanDaugherty)
05:19:17 sw4n joins (~sw4n@2605:59c0:40f0:9610:559:7713:a305:7d30)
05:19:47 merijn joins (~merijn@204-220-045-062.dynamic.caiway.nl)
05:19:58 × euphores quits (~SASL_euph@user/euphores) (Ping timeout: 265 seconds)
05:23:54 × sw4n quits (~sw4n@2605:59c0:40f0:9610:559:7713:a305:7d30) (Ping timeout: 260 seconds)
05:24:09 × merijn quits (~merijn@204-220-045-062.dynamic.caiway.nl) (Ping timeout: 246 seconds)
05:25:58 euphores joins (~SASL_euph@user/euphores)
05:27:15 emaczen joins (~user@user/emaczen)
05:27:56 sw4n joins (~sw4n@2605:59c0:40f0:9610:559:7713:a305:7d30)
05:30:18 × euphores quits (~SASL_euph@user/euphores) (Client Quit)
05:37:21 merijn joins (~merijn@204-220-045-062.dynamic.caiway.nl)
05:37:47 euphores joins (~SASL_euph@user/euphores)
05:42:07 × merijn quits (~merijn@204-220-045-062.dynamic.caiway.nl) (Ping timeout: 264 seconds)
05:46:08 × sourcetarius_ quits (~sourcetar@user/sourcetarius) (Quit: nyaa~)
05:53:51 merijn joins (~merijn@204-220-045-062.dynamic.caiway.nl)
05:58:54 × merijn quits (~merijn@204-220-045-062.dynamic.caiway.nl) (Ping timeout: 260 seconds)
05:59:48 × sw4n quits (~sw4n@2605:59c0:40f0:9610:559:7713:a305:7d30) (Ping timeout: 276 seconds)
06:06:41 × emaczen quits (~user@user/emaczen) (Ping timeout: 248 seconds)
06:09:27 czy joins (~user@host86-151-168-160.range86-151.btcentralplus.com)
06:11:19 merijn joins (~merijn@204-220-045-062.dynamic.caiway.nl)
06:11:30 misterfish joins (~misterfis@84.53.85.146)
06:13:56 tromp joins (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl)
06:16:02 × merijn quits (~merijn@204-220-045-062.dynamic.caiway.nl) (Ping timeout: 265 seconds)
06:28:28 sw4n joins (~sw4n@2605:59c0:40f0:9610:559:7713:a305:7d30)
06:29:11 merijn joins (~merijn@204-220-045-062.dynamic.caiway.nl)
06:33:19 × sw4n quits (~sw4n@2605:59c0:40f0:9610:559:7713:a305:7d30) (Ping timeout: 260 seconds)
06:33:50 × merijn quits (~merijn@204-220-045-062.dynamic.caiway.nl) (Ping timeout: 252 seconds)
06:44:50 merijn joins (~merijn@204-220-045-062.dynamic.caiway.nl)
06:49:39 × merijn quits (~merijn@204-220-045-062.dynamic.caiway.nl) (Ping timeout: 260 seconds)
06:53:31 × econo_ quits (uid147250@id-147250.tinside.irccloud.com) (Quit: Connection closed for inactivity)
06:54:44 × misterfish quits (~misterfis@84.53.85.146) (Ping timeout: 252 seconds)
06:58:09 × tromp quits (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl) (Quit: My iMac has gone to sleep. ZZZzzz…)
07:00:02 × caconym quits (~caconym@user/caconym) (Quit: bye)
07:00:07 × tt123109783243 quits (~tt1231@2603:6010:8700:4a81:219f:50d3:618a:a6ee) (Quit: The Lounge - https://thelounge.chat)
07:00:37 caconym joins (~caconym@user/caconym)
07:01:44 merijn joins (~merijn@204-220-045-062.dynamic.caiway.nl)
07:03:36 tt123109783243 joins (~tt1231@2603:6010:8700:4a81:219f:50d3:618a:a6ee)
07:06:01 tromp joins (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl)
07:06:29 × merijn quits (~merijn@204-220-045-062.dynamic.caiway.nl) (Ping timeout: 248 seconds)
07:06:43 takuan joins (~takuan@178-116-218-225.access.telenet.be)
07:07:34 × peterbecich quits (~Thunderbi@syn-047-229-123-186.res.spectrum.com) (Ping timeout: 252 seconds)
07:08:03 × gmg quits (~user@user/gehmehgeh) (Quit: Leaving)
07:14:46 peterbecich joins (~Thunderbi@syn-047-229-123-186.res.spectrum.com)
07:17:46 gmg joins (~user@user/gehmehgeh)
07:18:44 merijn joins (~merijn@204-220-045-062.dynamic.caiway.nl)
07:23:20 × peterbecich quits (~Thunderbi@syn-047-229-123-186.res.spectrum.com) (Ping timeout: 252 seconds)
07:23:29 × merijn quits (~merijn@204-220-045-062.dynamic.caiway.nl) (Ping timeout: 260 seconds)
07:25:46 Squared joins (~Square@user/square)
07:28:20 × benjaminl quits (~benjaminl@user/benjaminl) (Read error: Connection reset by peer)
07:28:35 benjaminl joins (~benjaminl@user/benjaminl)
07:29:06 oneeyedalien joins (~oneeyedal@user/oneeyedalien)
07:29:07 × oneeyedalien quits (~oneeyedal@user/oneeyedalien) (Max SendQ exceeded)
07:29:33 oneeyedalien joins (~oneeyedal@user/oneeyedalien)
07:34:49 target_i joins (~target_i@user/target-i/x-6023099)
07:34:52 merijn joins (~merijn@204-220-045-062.dynamic.caiway.nl)
07:39:49 × merijn quits (~merijn@204-220-045-062.dynamic.caiway.nl) (Ping timeout: 260 seconds)
07:41:58 sw4n joins (~sw4n@2605:59c0:40f0:9610:559:7713:a305:7d30)
07:46:25 × sw4n quits (~sw4n@2605:59c0:40f0:9610:559:7713:a305:7d30) (Ping timeout: 248 seconds)
07:50:35 acidjnk joins (~acidjnk@p200300d6e72cfb77305c26d382fbfdca.dip0.t-ipconnect.de)
07:53:09 merijn joins (~merijn@204-220-045-062.dynamic.caiway.nl)
07:54:58 mreh joins (~matthew@host86-160-168-12.range86-160.btcentralplus.com)
07:57:48 × merijn quits (~merijn@204-220-045-062.dynamic.caiway.nl) (Ping timeout: 252 seconds)
08:00:27 sw4n joins (~sw4n@2605:59c0:40f0:9610:559:7713:a305:7d30)
08:01:05 YuutaW joins (~YuutaW@mail.yuuta.moe)
08:04:41 merijn joins (~merijn@204-220-045-062.dynamic.caiway.nl)
08:04:54 × sw4n quits (~sw4n@2605:59c0:40f0:9610:559:7713:a305:7d30) (Ping timeout: 260 seconds)
08:08:20 × weary-traveler quits (~user@user/user363627) (Remote host closed the connection)
08:15:25 × merijn quits (~merijn@204-220-045-062.dynamic.caiway.nl) (Ping timeout: 265 seconds)
08:16:11 × oneeyedalien quits (~oneeyedal@user/oneeyedalien) (Quit: Leaving)
08:16:34 × Pozyomka quits (~pyon@user/pyon) (Quit: WeeChat 4.4.1)
08:28:10 merijn joins (~merijn@204-220-045-062.dynamic.caiway.nl)
08:32:54 × merijn quits (~merijn@204-220-045-062.dynamic.caiway.nl) (Ping timeout: 260 seconds)
08:33:59 sw4n joins (~sw4n@2605:59c0:40f0:9610:559:7713:a305:7d30)
08:39:06 × youthlic quits (~Thunderbi@user/youthlic) (Remote host closed the connection)
08:41:13 × sw4n quits (~sw4n@2605:59c0:40f0:9610:559:7713:a305:7d30) (Ping timeout: 245 seconds)
08:41:40 youthlic joins (~Thunderbi@user/youthlic)
08:44:17 ash3en joins (~Thunderbi@2a01:c23:8d69:4600:ccd4:88c0:9e3f:3453)
08:45:26 merijn joins (~merijn@204-220-045-062.dynamic.caiway.nl)
08:48:52 × ash3en quits (~Thunderbi@2a01:c23:8d69:4600:ccd4:88c0:9e3f:3453) (Client Quit)
08:49:52 × merijn quits (~merijn@204-220-045-062.dynamic.caiway.nl) (Ping timeout: 252 seconds)
09:00:18 Tuplanolla joins (~Tuplanoll@91-159-69-59.elisa-laajakaista.fi)
09:00:56 merijn joins (~merijn@204-220-045-062.dynamic.caiway.nl)
09:01:27 × tromp quits (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl) (Quit: My iMac has gone to sleep. ZZZzzz…)
09:01:29 wootehfoot joins (~wootehfoo@user/wootehfoot)
09:02:10 × causal quits (~eric@50.35.88.207) (Quit: WeeChat 4.3.1)
09:05:42 × merijn quits (~merijn@204-220-045-062.dynamic.caiway.nl) (Ping timeout: 276 seconds)
09:10:29 sw4n joins (~sw4n@2605:59c0:40f0:9610:559:7713:a305:7d30)
09:11:48 tromp joins (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl)
09:16:46 merijn joins (~merijn@204-220-045-062.dynamic.caiway.nl)
09:21:46 × merijn quits (~merijn@204-220-045-062.dynamic.caiway.nl) (Ping timeout: 252 seconds)
09:26:57 × tzh quits (~tzh@c-76-115-131-146.hsd1.or.comcast.net) (Quit: zzz)
09:35:02 merijn joins (~merijn@204-220-045-062.dynamic.caiway.nl)
09:38:14 × sw4n quits (~sw4n@2605:59c0:40f0:9610:559:7713:a305:7d30) (Ping timeout: 260 seconds)
09:39:44 × merijn quits (~merijn@204-220-045-062.dynamic.caiway.nl) (Ping timeout: 252 seconds)
09:48:55 × euleritian quits (~euleritia@ip4d16fc38.dynamic.kabel-deutschland.de) (Read error: Connection reset by peer)
09:49:47 euleritian joins (~euleritia@ip4d16fc38.dynamic.kabel-deutschland.de)
09:51:11 sw4n joins (~sw4n@2605:59c0:40f0:9610:559:7713:a305:7d30)
09:51:20 flounders joins (~flounders@2607:fb91:f40:c71f:f5c9:7500:92f8:5ba9)
09:51:50 merijn joins (~merijn@204-220-045-062.dynamic.caiway.nl)
09:52:07 CiaoSen joins (~Jura@2a05:5800:244:d800:ca4b:d6ff:fec1:99da)
09:55:44 × sw4n quits (~sw4n@2605:59c0:40f0:9610:559:7713:a305:7d30) (Ping timeout: 260 seconds)
09:56:06 × merijn quits (~merijn@204-220-045-062.dynamic.caiway.nl) (Ping timeout: 246 seconds)
10:02:25 × CiaoSen quits (~Jura@2a05:5800:244:d800:ca4b:d6ff:fec1:99da) (Ping timeout: 248 seconds)
10:05:42 merijn joins (~merijn@204-220-045-062.dynamic.caiway.nl)
10:10:23 × merijn quits (~merijn@204-220-045-062.dynamic.caiway.nl) (Ping timeout: 245 seconds)
10:17:31 Piedro joins (~Piedro@84.15.223.154)
10:18:58 __monty__ joins (~toonn@user/toonn)
10:19:47 × raym quits (~ray@user/raym) (Ping timeout: 255 seconds)
10:21:52 <fr33domlover> o/ Is there a constraint that is the opposite of ~ ? e.g. (a !~ b) that is similarly inferred when a and b *aren't* the same type?
10:22:17 <fr33domlover> I'd like to use such a constraint in a typeclass instance
10:22:42 merijn joins (~merijn@204-220-045-062.dynamic.caiway.nl)
10:22:59 <Leary> Nope.
10:24:37 lxsameer joins (~lxsameer@Serene/lxsameer)
10:25:25 <tomsmeding> fr33domlover: haskell is based on the invariant that knowing _more_ information can only make your program more defined
10:25:58 <fr33domlover> There's (==) from Data.Type.Equality, but I guess (a == b ~ False) isn't inferred in the same way?
10:26:10 <tomsmeding> e.g. knowing more type equalities will not make your program cease to type-check. Having more typeclass instances in scope will not make instance resolution fail.
10:27:05 <tomsmeding> passing a non-bottom value to a function will not make that function return more bottoms than if you pass it 'undefined'. (caveat: by catching exceptions in IO you can subvert this)
10:27:24 × czy quits (~user@host86-151-168-160.range86-151.btcentralplus.com) (Ping timeout: 252 seconds)
10:27:29 × merijn quits (~merijn@204-220-045-062.dynamic.caiway.nl) (Ping timeout: 248 seconds)
10:28:17 <tomsmeding> fr33domlover: hm, I guess that works
10:28:27 <tomsmeding> but you won't be able to case-analyse with this
10:28:51 <tomsmeding> or maybe you can
10:28:53 <tomsmeding> hm
10:29:31 <tomsmeding> fr33domlover: if (==) is enough for your usecase, it should work :p
10:30:14 <tomsmeding> a ~ b will imply a == b ~ True, but a == b ~ True doesn't imply a ~ b, and a == b ~ False also doesn't imply NOT(a ~ b)
10:31:02 <tomsmeding> in that sense it lives "outside" the core type system
10:31:33 <fr33domlover> tomsmeding: But are there cases where (a ~ b) and (a == b) don't agree?
10:31:49 <tomsmeding> no, they're just not bidirectionally inferrable
10:31:56 <tomsmeding> ~ is magic, == is not
10:32:08 <tomsmeding> hence ~ will imply ==, but == does not impart actual information to the compiler
10:32:21 <tomsmeding> it's just some arbitrary type family that happens to evaluate to True or False
10:32:49 <fr33domlover> I'll try my code with == and see if it generates instances the way I intend ^_^
10:33:16 <tomsmeding> e.g. the following doesn't typecheck: foo :: a == b ~ True => a -> b ; foo x = x
10:33:58 <tomsmeding> (with parens around the (a == b))
10:39:29 sw4n joins (~sw4n@2605:59c0:40f0:9610:559:7713:a305:7d30)
10:39:32 merijn joins (~merijn@204-220-045-062.dynamic.caiway.nl)
10:44:30 × merijn quits (~merijn@204-220-045-062.dynamic.caiway.nl) (Ping timeout: 276 seconds)
10:44:30 × sw4n quits (~sw4n@2605:59c0:40f0:9610:559:7713:a305:7d30) (Ping timeout: 276 seconds)
10:47:57 ZharMeny joins (~ZharMeny@user/ZharMeny)
10:48:37 <ski> "knowing _more_ information can only make your program more defined" -- sounds somehow related to "steadfastness", now that i think about it, hmm ..
10:48:54 × Piedro quits (~Piedro@84.15.223.154) (Remote host closed the connection)
10:49:02 <tomsmeding> I was thinking about "monotonicity" but I know too little about the actual theory so I didn't want to use the word incorrectly
10:49:26 <tomsmeding> (and it seems I wasn't even quite correct because (==) does allow a limited form of antimonotonicity)
10:49:59 <tomsmeding> (limited because inference only goes one way)
10:50:35 <ski> a predicate in Prolog is steadfast, if providing more information to a call of it cannot make it produce more solutions, or less instantiated (/known( ones, but only make it produce less solutions, or more instantiated ones
10:51:01 <tomsmeding> that sounds very related yes
10:51:18 <tomsmeding> does using ~ (not) in prolog break that in general?
10:51:21 × rvalue quits (~rvalue@user/rvalue) (Read error: Connection reset by peer)
10:51:53 rvalue joins (~rvalue@user/rvalue)
10:52:25 <ski> while, your property sounds more like : adding more defining clauses (or generalizing existing ones) to predicates in pure Prolog (without cut, negation-as-failure) cannot make queries produce less solutions (or more instantiated ones), only the other way around
10:52:42 <ski> yes, negation-by-failure breaks this
10:52:56 <ski> (and cut, which is how negation-as-failure is implemented)
10:53:20 <tomsmeding> if you see type class inference as a very weak logic programming language, my property sounds like steadfastness, I think
10:53:28 <tomsmeding> ah no I see
10:53:30 <tomsmeding> you're right
10:53:43 <tomsmeding> not quite the same
10:54:25 <ski> basically, non-steadfastness means that commutativity of conjunction breaks. `p(X,Y),X = foo' might not be equivalent to `X = foo,p(X,Y)' (providing more information about `X' before calling `p/2')
10:55:01 <tomsmeding> oof the lack of space after that separating `,` broke my brain for a bit
10:55:25 <ski> steadfastness is about calling a specific predicate. while i think what you're talking about seems more related to adding to definition of a predicate
10:55:45 <ski> but they seem to be related
10:55:51 <tomsmeding> indeed, adding new predicates or adding more clauses to an existing predicate
10:56:09 merijn joins (~merijn@204-220-045-062.dynamic.caiway.nl)
10:56:18 <tomsmeding> (which I guess is the same thing, if all potential predicates already exist, just with zero clauses)
10:56:38 <ski> one's about conjunctively adding stuff to goals/queries. the other's about conjunctively adding stuff to clauses. goals and clauses are "opposite". clauses are assumed, goals are to be proved
10:57:05 <ski> yea
10:57:57 <ski> (in constraint logic terminology, there's a "duality" between "tell" and "ask")
11:01:04 × merijn quits (~merijn@204-220-045-062.dynamic.caiway.nl) (Ping timeout: 260 seconds)
11:03:54 × mrmr155334346318 quits (~mrmr@user/mrmr) (Quit: Bye, See ya later!)
11:04:12 <ski> here's an example of a non-steadfast predicate definition
11:04:20 <ski> max(X,Y,X) :- X >= Y,!.
11:04:29 <ski> max(_,Y,Y).
11:05:34 Guest|97 joins (~Guest|97@73.220.6.51.dyn.plus.net)
11:05:48 <ski> the intention is to compare the first two parameters `X', and `Y'. if `X' is the greater, then set the result parameter to `X', *otherwise* set it to `Y' (the `!' causes lack of backtracking to the second predicate, if `X >= Y' succeeds, implementing the "otherwise" part. without it, we wouldn't have committed to the first clause, and so the query `?- max(3,2,Z).' would then have had two solutions)
11:05:50 × Guest|97 quits (~Guest|97@73.220.6.51.dyn.plus.net) (Client Quit)
11:06:32 <ski> however, this can be broken by providing the third parameter upfront, in a query like `?- max(3,2,2).' (equivalent to `?- Z = 2,max(3,2,Z).'), which doesn't even try `3 >= 2' because the third parameter doesn't unify with the first (call doesn't match with clause head `max(X,Y,X)'), and so goes to the fallback/catch-all clause, and (incorrectly) *succeeds* there (because we wanted to avoid a second
11:06:38 <ski> comparision check, `X =< Y') ! while, otoh, `?- max(3,2,Z),Z = 2.' (correctly) fails
11:07:47 <ski> the correct way to do this, is to either bite the bullet, and duplicate the check (well, i guess it's better to use `X < Y' rather than `X =< Y', to avoid duplicate solutions, though that's only a performance issue, not a correctness issue)
11:07:59 <ski> max(X,Y,X) :- X >= Y.
11:08:06 <ski> max(X,Y,Y) :- X < Y.
11:08:32 <ski> or, to correctly use the cut (`!'), you have to put the "output unification" *after* the cut
11:08:48 <ski> max(X,Y,Z) :- X >= Y,!,Z = X.
11:08:55 <ski> max(_,Y,Y).
11:09:03 <ski> which is equivalent to
11:09:27 <ski> max(X,Y,Z) :- ( X >= Y -> Z = X ; Z = Y ). % using a conditional
11:10:39 <ski> the main point is that if you use cut (or negation-by-failure), it's very easy to end up with illogical (non-steadfast) predicates, if you're not careful
11:11:15 <tomsmeding> interesting
11:11:47 <tomsmeding> reminds me of the trick in haskell where if you want to provide an instance that requires certain type arguments to be identical, you should put that equality in the context of the instance, not make the actual syntactic arguments the same
11:12:05 <tomsmeding> e.g. writing `instance (n ~ n') => IsLabel n (SSymbol n')`
11:12:14 <tomsmeding> not sure whether it just looks similar or actually is related
11:12:36 <tomsmeding> there is a "matching -> cut (instance selection) -> output unification" sequence, though
11:13:05 sw4n joins (~sw4n@2605:59c0:40f0:9610:559:7713:a305:7d30)
11:13:24 merijn joins (~merijn@204-220-045-062.dynamic.caiway.nl)
11:13:40 <ski> yea, hmm
11:15:36 × synchromesh quits (~john@2406:5a00:241a:5600:16f:d6b6:8ecf:f15b) (Read error: Connection reset by peer)
11:17:05 synchromesh joins (~john@2406:5a00:241a:5600:16f:d6b6:8ecf:f15b)
11:17:20 <ski> well, i suppose the type constructors, and the shared (non-linear) type variables in parameters of the head of a type class can be viewed as "inputs" (will be considered upon instance resolution selecting instance rules. if there's no conclusive input information, selection will just be stalled/delayed/suspended for that "call"). while the calls and equalities in the context can be viewed as "outputs" of
11:17:26 <ski> that instance rule
11:17:50 × merijn quits (~merijn@204-220-045-062.dynamic.caiway.nl) (Ping timeout: 255 seconds)
11:17:59 × sw4n quits (~sw4n@2605:59c0:40f0:9610:559:7713:a305:7d30) (Ping timeout: 260 seconds)
11:19:07 <lxsameer> If you're an Emacs user, could you please share your haskell setup with me?
11:30:59 mrmr155334346318 joins (~mrmr@user/mrmr)
11:31:37 sw4n joins (~sw4n@2605:59c0:40f0:9610:559:7713:a305:7d30)
11:31:40 <jackdk> I just use dante to run ghcid out of flycheck
11:31:45 merijn joins (~merijn@204-220-045-062.dynamic.caiway.nl)
11:36:29 × merijn quits (~merijn@204-220-045-062.dynamic.caiway.nl) (Ping timeout: 265 seconds)
11:42:26 Inst_ joins (~Inst@user/Inst)
11:42:34 × Inst quits (~Inst@user/Inst) (Remote host closed the connection)
11:43:25 × Inst_ quits (~Inst@user/Inst) (Remote host closed the connection)
11:44:03 <lxsameer> jackdk: no haskell-mode?
11:44:23 Inst_ joins (~Inst@user/Inst)
11:44:55 × Inst_ quits (~Inst@user/Inst) (Remote host closed the connection)
11:45:43 <jackdk> Oh yeah sure for syntax highlighting but I never got around to setting up fancy keybinds or lsp-mode or eglot or anything
11:47:20 merijn joins (~merijn@204-220-045-062.dynamic.caiway.nl)
11:47:53 × sw4n quits (~sw4n@2605:59c0:40f0:9610:559:7713:a305:7d30) (Ping timeout: 245 seconds)
11:50:51 sourcetarius joins (~sourcetar@user/sourcetarius)
11:51:44 × merijn quits (~merijn@204-220-045-062.dynamic.caiway.nl) (Ping timeout: 252 seconds)
11:58:45 morb joins (~morb@pool-108-41-100-120.nycmny.fios.verizon.net)
12:00:08 <lxsameer> jackdk: I'm using eglot, never tried dante, the thing that pisses off the most about my setup is that, if I have a compilation issue in my code, my setup kinda would be useless, no type in the echo area, or no eldoc stuff until i fixed the issue. have you experinced a similar thing with Dante?
12:01:27 <jackdk> I don't think I use any of those things. I get red squigglies under compilation errors and that has been enough for me
12:01:48 × Sgeo quits (~Sgeo@user/sgeo) (Read error: Connection reset by peer)
12:02:45 merijn joins (~merijn@204-220-045-062.dynamic.caiway.nl)
12:03:01 <lxsameer> jackdk: cool, one last question, how do you get more info about a function, the type signature or the docmuntation and such? i mean as part of your workflow
12:03:09 × morb quits (~morb@pool-108-41-100-120.nycmny.fios.verizon.net) (Ping timeout: 246 seconds)
12:06:42 JuanDaugherty joins (~juan@user/JuanDaugherty)
12:07:03 × merijn quits (~merijn@204-220-045-062.dynamic.caiway.nl) (Ping timeout: 245 seconds)
12:12:55 <Athas> Does Data.List not have a function that removes the first element that satisfies some predicate? I cannot seem to find it.
12:18:25 merijn joins (~merijn@204-220-045-062.dynamic.caiway.nl)
12:18:53 <Leary> Athas: I doubt it. Use `break`.
12:19:39 michalz joins (~michalz@185.246.207.203)
12:19:40 <Athas> Ugh. I'll rather just write the recursive function myself.
12:19:40 <mauke> deleteBy
12:19:55 <Athas> mauke: doesn't work; it requires the needle and haystack elements are the same type.
12:20:12 <Athas> Although interestingly, this seems like an artificial restriction imposed by the type signature.
12:20:33 <mauke> :t \p -> deleteBy (const p) undefined
12:20:34 <lambdabot> (b -> Bool) -> [b] -> [b]
12:21:20 <Athas> Ha! Clever, but horrifying.
12:23:31 × merijn quits (~merijn@204-220-045-062.dynamic.caiway.nl) (Ping timeout: 264 seconds)
12:31:09 <Leary> Definitely blame that one on whoever wrote the function so silly in the first place.
12:35:38 sw4n joins (~sw4n@2605:59c0:40f0:9610:559:7713:a305:7d30)
12:36:09 merijn joins (~merijn@204-220-045-062.dynamic.caiway.nl)
12:40:36 × merijn quits (~merijn@204-220-045-062.dynamic.caiway.nl) (Ping timeout: 246 seconds)
12:40:45 <Athas> I'll send a mail pronto to Simon complaining that his language is bad.
12:40:51 × sw4n quits (~sw4n@2605:59c0:40f0:9610:559:7713:a305:7d30) (Ping timeout: 276 seconds)
12:45:52 × Sciencentistguy quits (~sciencent@hacksoc/ordinary-member) (Quit: o/)
12:48:59 × tromp quits (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl) (Quit: My iMac has gone to sleep. ZZZzzz…)
12:52:26 merijn joins (~merijn@204-220-045-062.dynamic.caiway.nl)
12:54:11 sw4n joins (~sw4n@2605:59c0:40f0:9610:559:7713:a305:7d30)
12:56:19 tromp joins (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl)
12:56:50 × merijn quits (~merijn@204-220-045-062.dynamic.caiway.nl) (Ping timeout: 248 seconds)
13:01:38 × sw4n quits (~sw4n@2605:59c0:40f0:9610:559:7713:a305:7d30) (Ping timeout: 248 seconds)
13:08:29 merijn joins (~merijn@204-220-045-062.dynamic.caiway.nl)
13:10:10 krei-se- joins (~krei-se@p57af2362.dip0.t-ipconnect.de)
13:10:12 × hughjfch1 quits (~hughjfche@vmi556545.contaboserver.net) (Ping timeout: 252 seconds)
13:10:34 × Lord_of_Life quits (~Lord@user/lord-of-life/x-2819915) (Ping timeout: 252 seconds)
13:10:34 × krei-se quits (~krei-se@p57af2362.dip0.t-ipconnect.de) (Ping timeout: 252 seconds)
13:10:34 × lbseale quits (~quassel@user/ep1ctetus) (Ping timeout: 252 seconds)
13:11:00 lbseale joins (~quassel@user/ep1ctetus)
13:11:59 Lord_of_Life joins (~Lord@user/lord-of-life/x-2819915)
13:12:10 hughjfchen joins (~hughjfche@vmi556545.contaboserver.net)
13:13:29 × merijn quits (~merijn@204-220-045-062.dynamic.caiway.nl) (Ping timeout: 260 seconds)
13:15:20 × Xe quits (~cadey@perl/impostor/xe) (Ping timeout: 252 seconds)
13:16:04 × euleritian quits (~euleritia@ip4d16fc38.dynamic.kabel-deutschland.de) (Ping timeout: 252 seconds)
13:16:46 euleritian joins (~euleritia@dynamic-176-006-130-018.176.6.pool.telefonica.de)
13:16:49 sw4n joins (~sw4n@2605:59c0:40f0:9610:559:7713:a305:7d30)
13:17:27 Xe joins (~cadey@perl/impostor/xe)
13:21:09 <jackdk> lxsameer: Usually I use `:t` in a repl - most of the time when I need that I'm building up a complicated expression incrementally. But also the work that I do tends not to be super-high-powered haskell so there are a manageable number of type variables in play. I also use haddock pages on hackage pretty heavily because I'm usually asking "what functions might help solve my problem?" not "what is the type of this thing?" does that help?
13:21:48 × sw4n quits (~sw4n@2605:59c0:40f0:9610:559:7713:a305:7d30) (Ping timeout: 276 seconds)
13:23:56 merijn joins (~merijn@204-220-045-062.dynamic.caiway.nl)
13:28:12 × merijn quits (~merijn@204-220-045-062.dynamic.caiway.nl) (Ping timeout: 246 seconds)
13:29:40 <Leary> lxsameer: Just BTW, you can always put _ in an expression or type and let GHC(id) tell you what ought to go there.
13:31:55 raym joins (~ray@user/raym)
13:35:20 sw4n joins (~sw4n@2605:59c0:40f0:9610:559:7713:a305:7d30)
13:37:24 × kmein quits (~weechat@user/kmein) (Ping timeout: 276 seconds)
13:39:45 merijn joins (~merijn@204-220-045-062.dynamic.caiway.nl)
13:39:53 × sw4n quits (~sw4n@2605:59c0:40f0:9610:559:7713:a305:7d30) (Ping timeout: 252 seconds)
13:42:57 cjay- is now known as cjay
13:44:18 × merijn quits (~merijn@204-220-045-062.dynamic.caiway.nl) (Ping timeout: 252 seconds)
13:45:37 × euleritian quits (~euleritia@dynamic-176-006-130-018.176.6.pool.telefonica.de) (Read error: Connection reset by peer)
13:46:44 euleritian joins (~euleritia@ip4d16fc38.dynamic.kabel-deutschland.de)
13:47:56 <probie> > let deleteFirst p xs = foldr (\x k q -> if q x then k (const False) else (x:) . k q) (const id) xs p [] in deleteFirst (> 5) [1..10]
13:47:57 <lambdabot> [1,2,3,4,5,7,8,9,10]
13:53:45 × euleritian quits (~euleritia@ip4d16fc38.dynamic.kabel-deutschland.de) (Ping timeout: 265 seconds)
13:54:23 gdown joins (~gavin@h69-11-148-150.kndrid.broadband.dynamic.tds.net)
13:54:29 <probie> > let deleteFirst p = uncurry (++) . fmap (drop 1) . break p in deleteFirst (>5) [1..10]
13:54:30 <lambdabot> [1,2,3,4,5,7,8,9,10]
13:55:43 euleritian joins (~euleritia@dynamic-176-006-130-018.176.6.pool.telefonica.de)
13:57:47 merijn joins (~merijn@204-220-045-062.dynamic.caiway.nl)
14:02:16 × euleritian quits (~euleritia@dynamic-176-006-130-018.176.6.pool.telefonica.de) (Ping timeout: 252 seconds)
14:02:27 × merijn quits (~merijn@204-220-045-062.dynamic.caiway.nl) (Ping timeout: 265 seconds)
14:10:23 × euphores quits (~SASL_euph@user/euphores) (Quit: Leaving.)
14:10:40 weary-traveler joins (~user@user/user363627)
14:11:39 emaczen joins (~user@user/emaczen)
14:13:45 × rubin55 quits (sid666177@id-666177.lymington.irccloud.com) (Ping timeout: 260 seconds)
14:14:35 merijn joins (~merijn@204-220-045-062.dynamic.caiway.nl)
14:15:20 euphores joins (~SASL_euph@user/euphores)
14:16:26 rubin55 joins (sid666177@id-666177.lymington.irccloud.com)
14:18:19 emaczen` joins (~user@75-98-148-133.cpe.safelink.net)
14:19:08 × merijn quits (~merijn@204-220-045-062.dynamic.caiway.nl) (Ping timeout: 252 seconds)
14:22:22 <lxsameer> Leary: yeah, I'm aware of that, but some times i want to see the type of a symbol quickly
14:32:04 merijn joins (~merijn@204-220-045-062.dynamic.caiway.nl)
14:34:35 <geekosaur> I mouseover it in vscode 😛
14:34:48 Pozyomka joins (~pyon@user/pyon)
14:36:54 × merijn quits (~merijn@204-220-045-062.dynamic.caiway.nl) (Ping timeout: 260 seconds)
14:38:53 Sciencentistguy joins (~sciencent@hacksoc/ordinary-member)
14:39:36 × weary-traveler quits (~user@user/user363627) (Quit: Konversation terminated!)
14:39:39 <tomsmeding> I hit K in my neovim lsp card house :p
14:40:23 euleritian joins (~euleritia@dynamic-176-002-004-162.176.2.pool.telefonica.de)
14:40:43 <tomsmeding> (why 'K', don't ask me)
14:40:57 <tomsmeding> (doKumentation?)
14:41:16 <geekosaur> because nvim's got no good keys left 😛
14:41:22 <tomsmeding> that's more likely
14:41:38 <geekosaur> faceplant in a neovim session and something will happen
14:41:44 <tomsmeding> well, K is already "show man page" in normal vim
14:42:00 <tomsmeding> so it's a natural extension from that, but why K means "show man page" is not any clearer
14:42:27 <tomsmeding> it's not even `man -K`, it's just normal `man`
14:43:00 <geekosaur> they took away my `g` which was my go-to macro from the 1980s
14:43:27 <tomsmeding> as in go-to-file?
14:43:44 <tomsmeding> and vim already did that, that must have been vi
14:43:50 <geekosaur> I mean that was the first key I always bound in classical vi, yes
14:43:57 <tomsmeding> I see
14:44:18 <tomsmeding> well Bram apparently had the same idea and used it for all vim's stuff :p
14:44:23 <tomsmeding> well, g and z
14:45:15 <geekosaur> of course, that lost that `z` was left unbound deliberately as a guard around `ZZ`
14:45:55 misterfish joins (~misterfis@84.53.85.146)
14:45:56 <tomsmeding> most z actions are harmless, though
14:46:12 <geekosaur> right, the worry was that `ZZ` isn't
14:46:24 <tomsmeding> I z
14:46:31 dyniec joins (~dyniec@dybiec.info)
14:46:36 <geekosaur> so (a) it's doubled (b) `z` doesn't do anything useful to reduce chances of hitting `Z` instead
14:46:58 <geekosaur> original vi actually had a semi-rational command set design
14:47:03 <tomsmeding> did those keyboards have caps lock, in the time that vi's command set was designed?
14:47:19 Sciencentistguy4 joins (~sciencent@hacksoc/ordinary-member)
14:47:20 <geekosaur> yes
14:47:25 <geekosaur> (no num lock though)
14:47:28 <tomsmeding> then it's a risk, indeed
14:47:48 <tomsmeding> "no num lock" was the numpad just always numbers, or no numpad at all?
14:47:55 <geekosaur> the former
14:47:58 <tomsmeding> good
14:48:20 <tomsmeding> I never understood why one would want what is today "num lock off"
14:48:22 <geekosaur> the idea of the numpad turning into an arrow pad was a hack by the original IBM PC so they could make a more compact keyboard
14:48:48 <geekosaur> vi was written on 80s-style UNIX engineering workstations with big keyboards, so they had dedicated arrow pads
14:49:11 × Sciencentistguy quits (~sciencent@hacksoc/ordinary-member) (Ping timeout: 252 seconds)
14:49:11 Sciencentistguy4 is now known as Sciencentistguy
14:49:24 merijn joins (~merijn@204-220-045-062.dynamic.caiway.nl)
14:52:14 × euleritian quits (~euleritia@dynamic-176-002-004-162.176.2.pool.telefonica.de) (Ping timeout: 265 seconds)
14:52:36 weary-traveler joins (~user@user/user363627)
14:53:18 × emaczen quits (~user@user/emaczen) (Ping timeout: 272 seconds)
14:53:24 × shawwwn quits (sid6132@id-6132.helmsley.irccloud.com) (Ping timeout: 260 seconds)
14:53:27 × emaczen` quits (~user@75-98-148-133.cpe.safelink.net) (Ping timeout: 276 seconds)
14:53:42 spew joins (~spew@201.141.99.170)
14:54:07 × merijn quits (~merijn@204-220-045-062.dynamic.caiway.nl) (Ping timeout: 264 seconds)
14:54:32 euleritian joins (~euleritia@dynamic-176-006-143-017.176.6.pool.telefonica.de)
14:56:29 × euleritian quits (~euleritia@dynamic-176-006-143-017.176.6.pool.telefonica.de) (Read error: Connection reset by peer)
14:56:54 euleritian joins (~euleritia@ip4d16fc38.dynamic.kabel-deutschland.de)
15:05:07 zmt00 joins (~zmt00@user/zmt00)
15:06:59 merijn joins (~merijn@204-220-045-062.dynamic.caiway.nl)
15:07:54 × misterfish quits (~misterfis@84.53.85.146) (Ping timeout: 252 seconds)
15:08:37 × swamp_ quits (~zmt00@user/zmt00) (Ping timeout: 252 seconds)
15:09:23 × tromp quits (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl) (Quit: My iMac has gone to sleep. ZZZzzz…)
15:11:27 × merijn quits (~merijn@204-220-045-062.dynamic.caiway.nl) (Ping timeout: 246 seconds)
15:11:36 shawwwn joins (sid6132@id-6132.helmsley.irccloud.com)
15:18:10 athan joins (~athan@syn-098-153-145-140.biz.spectrum.com)
15:23:18 merijn joins (~merijn@204-220-045-062.dynamic.caiway.nl)
15:27:48 × merijn quits (~merijn@204-220-045-062.dynamic.caiway.nl) (Ping timeout: 252 seconds)
15:34:22 tromp joins (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl)
15:39:54 rosco joins (~rosco@175.136.158.234)
15:41:30 merijn joins (~merijn@204-220-045-062.dynamic.caiway.nl)
15:46:01 × merijn quits (~merijn@204-220-045-062.dynamic.caiway.nl) (Ping timeout: 252 seconds)
15:57:21 merijn joins (~merijn@204-220-045-062.dynamic.caiway.nl)
15:59:42 Inst_ joins (~Inst@user/Inst)
16:01:55 × merijn quits (~merijn@204-220-045-062.dynamic.caiway.nl) (Ping timeout: 264 seconds)
16:07:49 <haskellbridge> <thirdofmay18081814goya> what is the usual model of parallelism and concurrency when we model computations with monads?
16:09:30 econo_ joins (uid147250@id-147250.tinside.irccloud.com)
16:14:51 × gmg quits (~user@user/gehmehgeh) (Ping timeout: 260 seconds)
16:15:15 gmg joins (~user@user/gehmehgeh)
16:15:37 merijn joins (~merijn@204-220-045-062.dynamic.caiway.nl)
16:16:45 kmein joins (~weechat@user/kmein)
16:17:20 <monochrom> I think there is none because they are orthogonal.
16:18:06 <JuanDaugherty> by which he means no consensus, if that's what usual means
16:18:57 <JuanDaugherty> ie. no single pkg, approach
16:19:32 <JuanDaugherty> physical is physical tho
16:20:08 × merijn quits (~merijn@204-220-045-062.dynamic.caiway.nl) (Ping timeout: 252 seconds)
16:20:19 <haskellbridge> <thirdofmay18081814goya> monochrom: how would you formalize parallelism or concurrency?
16:21:10 × gdown quits (~gavin@h69-11-148-150.kndrid.broadband.dynamic.tds.net) (Remote host closed the connection)
16:21:24 <JuanDaugherty> STM is big
16:22:21 JuanDaugherty parts (~juan@user/JuanDaugherty) ()
16:22:23 <geekosaur> I thoink "formalize" doesn't mean "do", it means "model"?
16:22:44 <monochrom> In theory, I prefer Communicating Sequential Processes or generally any messaging system. In practice, I recognize that we are stuck with shared memory and some weak consistency guarantee.
16:23:19 <haskellbridge> <thirdofmay18081814goya> monochrom: ah very cool! thanks a lot for the CSP reference
16:27:18 × telser quits (~quassel@user/telser) (Quit: https://quassel-irc.org - Chat comfortably. Anywhere.)
16:30:20 troojg joins (~troojg@user/troojg)
16:30:43 × athan quits (~athan@syn-098-153-145-140.biz.spectrum.com) (Quit: Konversation terminated!)
16:32:17 merijn joins (~merijn@204-220-045-062.dynamic.caiway.nl)
16:36:38 × merijn quits (~merijn@204-220-045-062.dynamic.caiway.nl) (Ping timeout: 245 seconds)
16:37:06 telser joins (~quassel@user/telser)
16:49:31 merijn joins (~merijn@204-220-045-062.dynamic.caiway.nl)
16:53:52 × merijn quits (~merijn@204-220-045-062.dynamic.caiway.nl) (Ping timeout: 252 seconds)
16:54:56 × weary-traveler quits (~user@user/user363627) (Read error: Connection reset by peer)
16:56:08 × youthlic quits (~Thunderbi@user/youthlic) (Quit: youthlic)
17:07:53 merijn joins (~merijn@204-220-045-062.dynamic.caiway.nl)
17:09:32 × remedan quits (~remedan@ip-62-245-108-153.bb.vodafone.cz) (Quit: Bye!)
17:10:21 raehik joins (~raehik@rdng-25-b2-v4wan-169990-cust1344.vm39.cable.virginm.net)
17:10:21 remedan joins (~remedan@ip-62-245-108-153.bb.vodafone.cz)
17:12:34 × merijn quits (~merijn@204-220-045-062.dynamic.caiway.nl) (Ping timeout: 252 seconds)
17:16:31 billchenchina- joins (~billchenc@103.152.35.21)
17:17:25 × mxs quits (~mxs@user/mxs) (Quit: The Lounge - https://thelounge.chat)
17:22:08 misterfish joins (~misterfis@84.53.85.146)
17:23:21 merijn joins (~merijn@204-220-045-062.dynamic.caiway.nl)
17:23:28 <raehik> Is there any way to disable a single "redundant import" warning? (context, need to import Control.Monad.forM_ in mtl-2.3 / GHC 9.6, but it's re-exported in mtl-2.x)
17:26:52 <tomsmeding> nope
17:26:53 × euphores quits (~SASL_euph@user/euphores) (Quit: Leaving.)
17:27:15 <tomsmeding> in general there should be more ways to selectively disable diagnostics/warnings/etc; -Worphans is another candidate
17:27:19 tzh joins (~tzh@c-76-115-131-146.hsd1.or.comcast.net)
17:27:58 × merijn quits (~merijn@204-220-045-062.dynamic.caiway.nl) (Ping timeout: 252 seconds)
17:28:02 <tomsmeding> the typical solution is to use CPP (#if !MIN_VERSION_mtl(2,4,0) \n import Control.Monad (forM_) \n #endif)
17:28:06 <raehik> oh yeah that would be nice. my orphans tend to be placed in separate modules anyway so I don't feel that so much
17:28:23 <tomsmeding> but getting out CPP for just a warning is perhaps a bit overkill
17:28:37 <raehik> gotcha, and yup I can't introduce CPP here
17:28:47 <tomsmeding> ("can't"?)
17:28:49 <mauke> how do I trigger that warning?
17:28:59 <tomsmeding> mauke: import something twice
17:29:03 <raehik> (...don't want to xd)
17:29:08 <tomsmeding> raehik: ah :p
17:29:08 <mauke> no, this exact case
17:29:27 <raehik> my previous solution was to add a comment on the import line so it shows up in the warning-- will continue to do so
17:29:49 merijn joins (~merijn@204-220-045-062.dynamic.caiway.nl)
17:29:58 <raehik> mauke: import some mtl-2.2.x module and Control.Monad
17:30:02 <haskellbridge> <Jade> scoped disabling of warnings would be a cool thing
17:30:07 <haskellbridge> <Jade> there's a ticket somewhere
17:30:14 <raehik> some of the mtl-2.2.x modules re-export Control.Monad and submodules
17:30:28 <mauke> what do you mean by "a mtl-2.2.x module"?
17:30:56 <raehik> a module from mtl, one of the 2.2 versions (before 2.3)
17:31:12 <raehik> not sure which modules re-export, probably like Control.Monad.State etc
17:31:16 <tomsmeding> (the CPP should have been: #if MIN_VERSION_mtl(2,4,0) \n import ... \n #endif)
17:31:37 <tomsmeding> e.g. https://hackage.haskell.org/package/mtl-2.2.2/docs/Control-Monad-Identity.html
17:31:45 <tomsmeding> (see the Control.Monad re-export)
17:31:49 <raehik> ahh thx tomsmeding
17:32:00 <tomsmeding> christ even now it's wrong
17:32:02 <tomsmeding> (2,3,0)
17:32:19 <mauke> Module ‘Control.Monad.Identity’ does not export ‘forM_’. -- guess I don't have the right (wrong) version
17:32:34 <tomsmeding> mauke: which version do you have :p
17:32:40 <mauke> no idea
17:32:41 <monochrom> Actually I don't think re-exports causes redundant import warning. Or is it because I didn't turn on -Wall-anal-warnings?
17:32:47 <tomsmeding> mauke: how are you trying it? ghci?
17:32:50 <mauke> ghc
17:32:55 <mauke> actually, ghc -Wall
17:33:15 <tomsmeding> try opening it in ghci and typing `:show packages`
17:33:21 <raehik> GHC 9.6 packages mtl-2.3.1 https://downloads.haskell.org/ghc/9.6.1/docs/users_guide/9.6.1-notes.html
17:33:23 <monochrom> I've ever only seen unused imports, but even then I had to proactively ask for it.
17:33:30 <raehik> GHC 9.4 and before should package mtl-2.2.x
17:33:38 <mauke> active package flags: none
17:34:36 × merijn quits (~merijn@204-220-045-062.dynamic.caiway.nl) (Ping timeout: 246 seconds)
17:34:52 <tomsmeding> https://play.haskell.org/saved/Ldlipq0S this gives a redundant import warning in any case
17:35:01 <tomsmeding> (for obvious reasons)
17:35:07 <tomsmeding> monochrom: yes, people enable -Wall
17:35:33 euphores joins (~SASL_euph@user/euphores)
17:36:10 <mauke> raehik: import qualified Control.Monad as M; ... M.forM_
17:36:11 <raehik> `-Wall -Wno-unticked-promoted-constructors` is my goto
17:36:28 <tomsmeding> raehik: that -Wno-... is unnecessary since recent ghcs
17:36:31 <raehik> mauke: yeah I could do that..... but it's annoying :D it's not just forM_
17:36:55 <raehik> tomsmeding: yeah since GHC 9.4. but I still support GHC 9.2 in some of my projs so it stays a default for now
17:37:49 × tromp quits (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl) (Quit: My iMac has gone to sleep. ZZZzzz…)
17:39:30 <tomsmeding> mauke: oh actually, here's a reproducer: https://play.haskell.org/saved/4NaXDNzu
17:39:38 <tomsmeding> gives a redundant import warning with ghc 9.4 but not with 9.6
17:39:46 <tomsmeding> I didn't realise mtl was wired in
17:40:22 merijn joins (~merijn@204-220-045-062.dynamic.caiway.nl)
17:40:53 <Hecate> eyo
17:40:58 <Hecate> https://blog.haskell.org/the-haskell-playground/ <- nice article tomsmeding :D
17:41:18 <tomsmeding> Hecate: doesn't look live yet to me
17:41:29 <tomsmeding> oh it is, my browser was just caching the wrong thing
17:41:58 <tomsmeding> lol I can only see that in a private window
17:41:58 <Hecate> :3
17:42:01 <Hecate> damnit
17:42:02 <Hecate> hmm
17:42:21 <tomsmeding> the redirect is cached and I can't force-reload anything (ignoring cache) because... it redirects immediately
17:44:10 <tomsmeding> but yay, cheers for launching
17:44:28 <Hecate> tomsmeding: you have kill the service worker!
17:44:37 <Hecate> if you use Firefox, go there: about:debugging#/runtime/this-firefox
17:45:07 <monochrom> I just didn't know -Wall also warns redundant imports where the imports are not syntactically redundant.
17:45:43 <tomsmeding> Hecate: a browser restart didn't help, but that did it O.o
17:45:59 <monochrom> I mean, no one really does "Control.Monad, then Control.Monad again for (forM_)". But everyone is entitled to do "Control.Monad and Control.Monad.State" and shouldn't need to worry about it.
17:46:25 <tomsmeding> monochrom: I agree it's a little overzealous
17:47:19 <monochrom> With C I turn on -Wall because every warning there is just cause. With GHC, -Wall is a lot of noise.
17:47:39 × troojg quits (~troojg@user/troojg) (Ping timeout: 260 seconds)
17:48:45 <raehik> in my own projects I tend not to get too much -Wall noise. but yes larger projects it's a bit much and requires sifting (which partly defeats the purpose.... but imo not fully)
17:50:09 × merijn quits (~merijn@204-220-045-062.dynamic.caiway.nl) (Ping timeout: 260 seconds)
17:50:26 <dolio> GHC has multiple warning about things where the code required to avoid the warning is arguably worse than what it's warning about.
17:51:09 <monochrom> tomsmeding: About the playground, so is docker too bloated that you declined and did your own systemd-run and bwrap?
17:51:52 <tomsmeding> monochrom: I have heard from various directions that docker is meant as an environment reproducibility tool, not a sandboxing tool, and hence it's unwise to rely on it for sandboxing
17:52:07 <Hecate> tomsmeding: yeah I really don't like PWAs…
17:52:09 <tomsmeding> maerwald (of ghcup fame) liked bwrap, and I have 0 knowledge in this space, so I trusted him
17:53:21 × misterfish quits (~misterfis@84.53.85.146) (Ping timeout: 248 seconds)
18:00:57 × pavonia quits (~user@user/siracusa) (Quit: Bye!)
18:01:14 tromp joins (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl)
18:03:07 merijn joins (~merijn@204-220-045-062.dynamic.caiway.nl)
18:05:44 × raehik quits (~raehik@rdng-25-b2-v4wan-169990-cust1344.vm39.cable.virginm.net) (Ping timeout: 260 seconds)
18:07:34 × merijn quits (~merijn@204-220-045-062.dynamic.caiway.nl) (Ping timeout: 252 seconds)
18:08:24 × myxos quits (~myxos@syn-065-028-251-121.res.spectrum.com) (Ping timeout: 252 seconds)
18:09:52 × billchenchina- quits (~billchenc@103.152.35.21) (Remote host closed the connection)
18:10:18 peterbecich joins (~Thunderbi@syn-047-229-123-186.res.spectrum.com)
18:13:11 athan joins (~athan@syn-098-153-145-140.biz.spectrum.com)
18:17:04 myxos joins (~myxos@syn-065-028-251-121.res.spectrum.com)
18:19:40 merijn joins (~merijn@204-220-045-062.dynamic.caiway.nl)
18:21:40 k_hachig_ joins (~k_hachig@2607:fea8:351d:ef0:e8aa:5287:babe:ddb5)
18:22:03 k_hachig_ is now known as k_hachig
18:24:42 × merijn quits (~merijn@204-220-045-062.dynamic.caiway.nl) (Ping timeout: 276 seconds)
18:25:16 <lxsameer> hey friends, is there any immutable refrence type in Haskell?
18:29:30 <monochrom> No.
18:29:33 <[exa]> lxsameer: technically all values are immutable references, but I guess you want something that behaves more explicitly as a reference?
18:29:56 × myxos quits (~myxos@syn-065-028-251-121.res.spectrum.com) (Ping timeout: 252 seconds)
18:30:08 <dmj`> lxsameer: like an IORef or Ptr where you can't mutate the underlying value?
18:31:12 <monochrom> Actually, perhaps StableName.
18:31:20 myxos joins (~myxos@syn-065-028-251-121.res.spectrum.com)
18:35:09 merijn joins (~merijn@204-220-045-062.dynamic.caiway.nl)
18:35:47 <tomsmeding> lxsameer: what exactly would you be able to do with an "immutable reference type" that you can't do with just... an immutable value?
18:36:43 <geekosaur> yeh, I'm confused by what the question is about. XY problem perhaps?
18:37:52 <geekosaur> as stated above, all normal Haskell values are references. unboxed values by definition aren't, but you normally let the compiler deal with those.
18:38:16 raehik joins (~raehik@rdng-25-b2-v4wan-169990-cust1344.vm39.cable.virginm.net)
18:38:18 <tomsmeding> (and in any case, if you're using unboxed values, you're typically quite explicitly choosing to do so)
18:38:24 <[exa]> I can imagine a read-only Ptr to statically linked data as a sensible use, but not much more tbh
18:38:43 <tomsmeding> make a ByteString from it?
18:39:42 × merijn quits (~merijn@204-220-045-062.dynamic.caiway.nl) (Ping timeout: 246 seconds)
18:40:14 <[exa]> bytestring is able to avoid copying it out?
18:40:44 <tomsmeding> yes, but it's on the programmer to promise that that's safe
18:40:59 <tomsmeding> [exa]: https://hackage.haskell.org/package/bytestring-0.12.1.0/docs/Data-ByteString-Unsafe.html#v:unsafePackCStringLen
18:41:17 <[exa]> ah yes, lovely, forgot to add the unsafe there
18:41:28 <[exa]> long live bytestring the new immutable reference
18:41:32 <tomsmeding> well, it's good that it has "unsafe" in the name :p
18:41:40 <tomsmeding> immutable reference to _byte array_ data
18:42:02 <tomsmeding> oh, you want an immutable reference: data Box a = Box a
18:42:04 <tomsmeding> here you go!
18:42:29 <[exa]> btw technically "as long as the programmer promises that it's safe" w.r.t. immutability is roughly equivalent to the usual "as long as the programmer promises not to typecast the `const` away"
18:42:50 <tomsmeding> technically true, but here there is not necessarily a const to typecast away
18:42:59 <tomsmeding> in C you have to actually do a cast there
18:43:17 <tomsmeding> the CStringLen that you pass to unsafePackAsCStringLen could well be a mutable pointer, and then you're not casting anything
18:43:40 <tomsmeding> so it's "less safe" than a `const uint8_t*` in C (which in itself is already not very safe, but it's C so)
18:43:51 <[exa]> "relatively safe"
18:44:12 <tomsmeding> "relative" in the mathematical sense: relative to a proof by the programmer that the data will not be modified :p
18:44:13 × myxos quits (~myxos@syn-065-028-251-121.res.spectrum.com) (Ping timeout: 252 seconds)
18:44:37 × AlexZenon quits (~alzenon@94.233.241.202) (Ping timeout: 248 seconds)
18:46:00 myxos joins (~myxos@syn-065-028-251-121.res.spectrum.com)
18:48:28 × tromp quits (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl) (Quit: My iMac has gone to sleep. ZZZzzz…)
18:49:15 myxokephale joins (~myxos@syn-065-028-251-121.res.spectrum.com)
18:50:22 × myxos quits (~myxos@syn-065-028-251-121.res.spectrum.com) (Read error: Connection reset by peer)
18:51:34 × raehik quits (~raehik@rdng-25-b2-v4wan-169990-cust1344.vm39.cable.virginm.net) (Ping timeout: 252 seconds)
18:51:46 merijn joins (~merijn@204-220-045-062.dynamic.caiway.nl)
18:52:04 tromp joins (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl)
18:52:25 <ski> i could imagine they wanted `instance Eq (Box a)'
18:52:41 euandreh joins (~Thunderbi@189.6.105.228)
18:53:10 <monochrom> StableName gets sufficiently close to that.
18:53:14 <ski> (you could use it to traverse (possibly cyclic) graphs)
18:53:22 <ski> there's also `IVar'
18:53:41 <ski> @hackage ivar-simple
18:53:41 <lambdabot> https://hackage.haskell.org/package/ivar-simple
18:53:46 <ski> @hackage data-ivar
18:53:46 <lambdabot> https://hackage.haskell.org/package/data-ivar
18:54:26 <lxsameer> [exa]: indeed
18:54:31 <EvanR> was about to say ivar
18:54:39 <lxsameer> dmj`: yeah
18:54:52 <EvanR> literally an immutable var
18:55:05 <tomsmeding> lxsameer: why is just a value not enough? Note that haskell is lazy
18:55:20 <tomsmeding> > let fibs = 0 : 1 : zipWith (+) fibs (tail fibs) in fibs
18:55:21 <lambdabot> [0,1,1,2,3,5,8,13,21,34,55,89,144,233,377,610,987,1597,2584,4181,6765,10946,...
18:55:25 <ski> tomsmeding : `Eq' ?
18:55:26 <monochrom> But generally this is why I have the hot take unpopular opinion that a data type is not defined by how you would implement its data structure, but rather by what operations you expect of it.
18:55:32 AlexZenon joins (~alzenon@94.233.241.202)
18:55:51 <tomsmeding> ski: you want pointer equality?
18:55:51 <lxsameer> tomsmeding: I'm trying to avoid copying data. Hopefully ghc is smart enough to do that, but since I don't know about how ghc works, I asked the question
18:55:58 <EvanR> the rubick's cube is all about the moves and not the cube itself
18:56:05 <ski> tomsmeding : that could be one way to implement it, sure
18:56:07 <tomsmeding> lxsameer: _everything_ in a haskell program is a refrence
18:56:11 <monochrom> In this example, "a pointer to my value" is unhelpful, "I need pointer equality, like identity in Java" is helpful.
18:56:20 × merijn quits (~merijn@204-220-045-062.dynamic.caiway.nl) (Ping timeout: 252 seconds)
18:56:25 <ski> tomsmeding : or just increment a counter in a state monad
18:56:27 <monochrom> s/identity/object identity/
18:56:28 <tomsmeding> (unless you explicitly say you want a non-reference type, i.e. an _unboxed_ type, but those are marked with a '#', like Int#)
18:56:40 <tomsmeding> nothing will be copied if you just pass values around
18:56:52 <EvanR> is unboxed array a non-reference type xD
18:56:59 <tomsmeding> monochrom: agreed
18:57:30 <monochrom> Extreme example: "how do I make an infinite set?" is informationless.
18:57:36 × tabemann quits (~tabemann@2600:1700:7990:24e0:f2d2:5bad:a45f:c15b) (Remote host closed the connection)
18:57:43 <tomsmeding> EvanR: which type are you talking about, precisely?
18:57:50 tabemann joins (~tabemann@2600:1700:7990:24e0:6b51:c8e0:844c:e9ca)
18:58:04 <monochrom> You must give up some of the usual set operations, and you haven't said which.
18:58:12 <tomsmeding> (e.g. ByteArray# is _unlifted_, not unboxed; that's something different)
18:58:20 <monochrom> Extreme answer: "()". >:)
18:58:59 <tomsmeding> monochrom: in this case, however, it turned out that the question was not about explicit operations on the data, but on what the _implicit_ copy operation does on data
19:00:02 × caconym quits (~caconym@user/caconym) (Quit: bye)
19:00:34 × myxokephale quits (~myxos@syn-065-028-251-121.res.spectrum.com) (Ping timeout: 260 seconds)
19:00:37 caconym joins (~caconym@user/caconym)
19:00:47 <EvanR> monochrom, clearly they are implying all standard operations on a set, union, intersection, "element of" xD
19:01:03 × hueso quits (~root@user/hueso) (Quit: hueso)
19:01:14 <monochrom> I hope they also include set equality.
19:01:49 myxos joins (~myxos@syn-065-028-251-121.res.spectrum.com)
19:01:50 <EvanR> cardinality of
19:02:34 hueso joins (~root@user/hueso)
19:02:50 <monochrom> And a choice function >:)
19:03:03 <tomsmeding> uniformly random, please
19:03:18 × mreh quits (~matthew@host86-160-168-12.range86-160.btcentralplus.com) (Ping timeout: 252 seconds)
19:03:20 rvalue- joins (~rvalue@user/rvalue)
19:04:00 <[exa]> lxsameer: any specific example on where you are trying to avoid copies? notably, ghc is not going to copy (not even materialize!) anything that you don't try to take apart (and reassemble manually)
19:04:03 × rvalue quits (~rvalue@user/rvalue) (Ping timeout: 265 seconds)
19:04:09 <probie> A choice function on an infinite set? Next you'll be asking me to turn a ball into two identical balls using 5 cuts
19:04:51 causal joins (~eric@50.35.88.207)
19:05:07 <monochrom> That's user-definable so we will leave it to 3rd-party libraries. >:)
19:05:37 × myxos quits (~myxos@syn-065-028-251-121.res.spectrum.com) (Remote host closed the connection)
19:06:20 myxos joins (~myxos@syn-065-028-251-121.res.spectrum.com)
19:06:24 × hueso quits (~root@user/hueso) (Client Quit)
19:07:33 <lxsameer> [exa]: cool good to know
19:08:33 hueso joins (~root@user/hueso)
19:08:47 merijn joins (~merijn@204-220-045-062.dynamic.caiway.nl)
19:09:29 rvalue- is now known as rvalue
19:09:31 <[exa]> lxsameer: actually it's a kinda side outcome of the laziness -- for example you are guaranteed to be able to safely change a few first elements of a list which contains an error or is infinite or so. Haskell can't assume that copying of the rest of the list is "safe" because there might be something that triggers an error, and the usual solution is that it just doesn't touch it at all unless
19:09:33 <[exa]> absolutely forced to
19:10:34 <tomsmeding> > head [42, undefined, error "what"]
19:10:35 <lambdabot> 42
19:10:56 <probie> > length [error "oh no"]
19:10:58 <lambdabot> 1
19:11:14 <[exa]> ah perfect ^
19:11:35 <lxsameer> pretty cool
19:12:03 <monochrom> I think it's the other way round. Lisp Scheme ML etc all did this since way back, so eager and impure languages do it too. Laziness was invented later and took advantage of it.
19:12:31 <monochrom> Not to mention, like, Java when it comes to objects. >:)
19:12:54 <[exa]> yeah there's this laziness vs actual laziness. :D
19:13:12 × merijn quits (~merijn@204-220-045-062.dynamic.caiway.nl) (Ping timeout: 252 seconds)
19:14:02 <EvanR> I like how the clojure lazy list evaluates like 32 elements at a time, so if you only look at the first 5 things, it might trigger an error on item 29 as a side effect
19:14:18 <EvanR> keeps you on your toes
19:14:31 <dolio> Yeah, that sounds great.
19:15:03 <haskellbridge> <Bowuigi> I guess it is a certified JVM moment
19:15:16 <[exa]> lol
19:15:55 <EvanR> it's just like haskell, if there are no errors or bugs anywhere, reasoning gets simpler xD
19:16:15 <haskellbridge> <Bowuigi> You could always "data SuperLazyList a = Nil | Cons (() -> a) (() -> SuperLazyList a)"
19:17:07 × euandreh quits (~Thunderbi@189.6.105.228) (Quit: euandreh)
19:17:15 <haskellbridge> <Bowuigi> Tho the initial constructor is not lazy enough so you might want to "type SLL a = () -> SuperLazyList a"
19:17:17 <monochrom> ()->Foo easily kills the sharing we were talking about.
19:17:18 <dolio> Realistically, you should probably not be depending on that sort of difference.
19:18:16 <dolio> Although it seems like you might have to worry about it for various infinite definitions involving lists.
19:19:06 <[exa]> we should leave `()->Foo` to javascript and pals
19:19:31 <monochrom> But OK on the bright side, "sum xs / length xs" suffers from sharing and could benefit from re-computation.
19:20:15 <EvanR> dupthunk
19:20:27 <monochrom> Ugh symmetry fix: s/re-computation/re-computing/ # heh
19:20:38 <dolio> I.E. I don't think you should be worried about exactly the behavior of actual exceptions. You should worry about how reasoning about them implies things about well-defined programs.
19:21:34 <haskellbridge> <Bowuigi> "Fast and loose reasoning is morally correct"?
19:22:08 <dolio> No, that's something different.
19:22:49 <dolio> Reasoning about how your program acts with ⊥ is a coarse approximation of the operational behavior of your program.
19:24:08 <dolio> So, you probably don't care about how your program acts if fed with a list with a bomb in it, because it won't be fed that. But reasoning about that can tell you things about how it will act somewhat operationally on the lists it will be fed.
19:26:20 merijn joins (~merijn@204-220-045-062.dynamic.caiway.nl)
19:26:28 <dolio> Like, it would be unsurprising if the clojure lists can't handle `l = 1 : <some expression involving l`, because you need an entire chunk to be properly lazy, not just however much the expression needs.
19:27:50 <dolio> Unless there's some special support to turn expressions like that into code that works with chunks.
19:28:43 AlexZenon_2 joins (~alzenon@94.233.241.202)
19:29:41 <monochrom> Probably the intention was just streaming, rather than laziness.
19:29:46 × euphores quits (~SASL_euph@user/euphores) (Quit: Leaving.)
19:29:57 × AlexZenon quits (~alzenon@94.233.241.202) (Ping timeout: 248 seconds)
19:30:20 <dolio> Yeah.
19:30:47 × merijn quits (~merijn@204-220-045-062.dynamic.caiway.nl) (Ping timeout: 252 seconds)
19:31:04 <EvanR> good question haven't tried that
19:31:34 AlexZenon_2 is now known as AlexZenon
19:32:36 × synchromesh quits (~john@2406:5a00:241a:5600:16f:d6b6:8ecf:f15b) (Read error: Connection reset by peer)
19:33:47 synchromesh joins (~john@2406:5a00:241a:5600:71fc:6cae:c163:498e)
19:35:11 × rosco quits (~rosco@175.136.158.234) (Quit: Lost terminal)
19:38:21 euphores joins (~SASL_euph@user/euphores)
19:40:10 mxs joins (~mxs@user/mxs)
19:42:12 merijn joins (~merijn@204-220-045-062.dynamic.caiway.nl)
19:50:10 <[exa]> how bad is it to traverse stuff "via Compose" if I'm just too lazy to squash a few levels of the traversables myself?
19:50:32 <[exa]> (it really helps with mapAccum and pals)
19:51:06 × merijn quits (~merijn@204-220-045-062.dynamic.caiway.nl) (Ping timeout: 246 seconds)
20:03:10 merijn joins (~merijn@204-220-045-062.dynamic.caiway.nl)
20:04:51 Sgeo joins (~Sgeo@user/sgeo)
20:07:56 × merijn quits (~merijn@204-220-045-062.dynamic.caiway.nl) (Ping timeout: 255 seconds)
20:12:55 <monochrom> If "bad" refers to slow, I don't know. If "bad" refers to ugly, generally too-lazy-to-write-more-code iff beautiful. :)
20:14:48 <monochrom> perhaps s/more-code/more-mundane-code/
20:20:20 merijn joins (~merijn@204-220-045-062.dynamic.caiway.nl)
20:20:23 <probie> % traverse print $ (coerce :: [[[Int]]] -> Compose (Compose [] []) [] Int) [[[1],[2,3]],[[4],[5,6]]]
20:20:23 <yahb2> 1 ; 2 ; 3 ; 4 ; 5 ; 6 ; Compose (Compose [[[()],[(),()]],[[()],[(),()]]])
20:20:32 <probie> as in that sort of thing?
20:21:57 × wootehfoot quits (~wootehfoo@user/wootehfoot) (Read error: Connection reset by peer)
20:22:00 neuroevolutus joins (~neuroevol@37.19.200.152)
20:25:36 × merijn quits (~merijn@204-220-045-062.dynamic.caiway.nl) (Ping timeout: 276 seconds)
20:27:21 × tcard_ quits (~tcard@2400:4051:5801:7500:cf17:befc:ff82:5303) (Quit: Leaving)
20:30:03 × bionade24 quits (~quassel@2a03:4000:33:45b::1) (Quit: Apocalypse Incoming!)
20:30:13 bionade24 joins (~quassel@2a03:4000:33:45b::1)
20:32:20 × barrucadu quits (~barrucadu@carcosa.barrucadu.co.uk) (Quit: Lost terminal)
20:33:39 barrucadu joins (~barrucadu@carcosa.barrucadu.co.uk)
20:34:36 × sourcetarius quits (~sourcetar@user/sourcetarius) (Quit: sourcetarius)
20:35:34 sourcetarius joins (~sourcetar@user/sourcetarius)
20:36:12 × mxs quits (~mxs@user/mxs) (Quit: The Lounge - https://thelounge.chat)
20:36:29 merijn joins (~merijn@204-220-045-062.dynamic.caiway.nl)
20:36:44 × solution quits (~Solution@85-66-208-144.pool.digikabel.hu) (Ping timeout: 255 seconds)
20:40:48 × merijn quits (~merijn@204-220-045-062.dynamic.caiway.nl) (Ping timeout: 245 seconds)
20:41:44 tcard joins (~tcard@2400:4051:5801:7500:cf17:befc:ff82:5303)
20:51:29 × michalz quits (~michalz@185.246.207.203) (Remote host closed the connection)
20:51:32 × target_i quits (~target_i@user/target-i/x-6023099) (Quit: leaving)
20:54:51 merijn joins (~merijn@204-220-045-062.dynamic.caiway.nl)
20:55:04 × takuan quits (~takuan@178-116-218-225.access.telenet.be) (Remote host closed the connection)
20:56:52 JuanDaugherty joins (~juan@user/JuanDaugherty)
20:57:14 × lxsameer quits (~lxsameer@Serene/lxsameer) (Ping timeout: 260 seconds)
20:59:34 × merijn quits (~merijn@204-220-045-062.dynamic.caiway.nl) (Ping timeout: 265 seconds)
21:03:35 mreh joins (~matthew@host86-160-168-12.range86-160.btcentralplus.com)
21:09:05 × foul_owl quits (~kerry@174-21-143-250.tukw.qwest.net) (Ping timeout: 260 seconds)
21:13:11 merijn joins (~merijn@204-220-045-062.dynamic.caiway.nl)
21:18:14 × merijn quits (~merijn@204-220-045-062.dynamic.caiway.nl) (Ping timeout: 260 seconds)
21:21:30 × k_hachig quits (~k_hachig@2607:fea8:351d:ef0:e8aa:5287:babe:ddb5) (Ping timeout: 276 seconds)
21:23:23 foul_owl joins (~kerry@185.219.141.160)
21:24:29 <mauke> https://pvp.haskell.org/#decision-tree is pretty nutty
21:25:02 <mauke> does anyone actually do the (A+1).B.C or A.(B+1).C stuff?
21:25:55 <mauke> I feel most people would go for (A+1).0.0 or A.(B+1).0
21:26:44 <haskellbridge> <Jade> isn't that what they meant? I'm aware that it's not what it says but it feels like that's what they want to convey
21:27:44 <monochrom> Most people set zero the lower bits, yeah.
21:28:36 <monochrom> But dBase II is an example of someone skipping a lot of normal version numbers and starting at 2 right at the beginning. :)
21:28:56 merijn joins (~merijn@204-220-045-062.dynamic.caiway.nl)
21:29:31 <monochrom> https://en.wikipedia.org/wiki/DBase#Ashton-Tate
21:30:23 <geekosaur> looked at the version history of HTTP (the Hackage package, not the protocol) recently?
21:30:37 <geekosaur> or for that matter filepath
21:30:48 <meejah> or latex/web ;)
21:31:17 <geekosaur> then again maybe they're thinking of how TeX version numbers work 😛
21:33:53 × merijn quits (~merijn@204-220-045-062.dynamic.caiway.nl) (Ping timeout: 265 seconds)
21:34:10 <monochrom> It is not wrong do go from, e.g., 1.4.3 to 2.1.7. There is no need to require people to reset to zero. PVP is not a control freak.
21:34:38 <monochrom> Determinism is overrated.
21:36:21 × mreh quits (~matthew@host86-160-168-12.range86-160.btcentralplus.com) (Ping timeout: 248 seconds)
21:36:49 <mauke> PVP requires that a breaking change from 1.4.3 go to either 2.4.3 or 1.5.3
21:37:53 × tromp quits (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl) (Quit: My iMac has gone to sleep. ZZZzzz…)
21:38:07 <monochrom> Hrm, you're right, it says that.
21:40:14 <mauke> it mentions Data.Version.Version, but does not say whether version numbers must be compatible with Data.Version
21:41:07 troojg joins (~troojg@user/troojg)
21:42:00 <monochrom> I would take the picture as informative rather than normative. The wall of text is the normative one.
21:42:03 <mauke> Data.Version can definitely represent things that cabal package versions cannot, but I can't tell if it's supposed to be a superset
21:45:39 × drlkf quits (~drlkf@192.184.163.34.bc.googleusercontent.com) (Quit: drlkf)
21:46:04 merijn joins (~merijn@204-220-045-062.dynamic.caiway.nl)
21:47:23 <dolio> Whoever made the diagram just botched the form of the versions in it. The actual specification just says that certain parts have to be greater than the previous version. It doesn't say the other parts have to stay the same.
21:48:07 <haskellbridge> <Jade> still not super clear unfortunately
21:48:11 <monochrom> or must be +1 instead of +314
21:48:29 <haskellbridge> <Jade> I'd expect a spec to be rigorous in regards to these things ^^
21:49:59 × neuroevolutus quits (~neuroevol@37.19.200.152) (Ping timeout: 256 seconds)
21:50:08 × gmg quits (~user@user/gehmehgeh) (Quit: Leaving)
21:50:54 × merijn quits (~merijn@204-220-045-062.dynamic.caiway.nl) (Ping timeout: 260 seconds)
21:52:54 neuroevolutus joins (~neuroevol@37.19.200.152)
21:53:56 <monochrom> Data.Version.Version is meant to be a superset. "a representation which subsumes many of the versioning schemes commonly in use". Fortunately, most versioning schemes use lexicographical ordering, and Data.Version.Version's Ord does that.
21:54:30 <monochrom> Cabal's is simply the subet where the list length is between 2 and 4.
21:55:05 <mauke> monochrom: there is no upper limit of 4
21:55:25 <mauke> also, the PVP spec only says the components must be "numbers", which is not what Data.Version implements
21:55:32 <monochrom> PVP mentions Data.Version.Version just for confirming that the Ord instance is good.
21:55:46 <mauke> that's not a superset, then
21:56:17 <monochrom> I take Int to be enough for "numbers".
21:56:39 <monochrom> or rather, "number".
21:56:39 <mauke> I don't
21:57:06 <monochrom> OK you want to include quaternions?
21:57:13 <mauke> what's the minimum value of maxBound::Int? 2^18 or something?
21:57:26 <monochrom> 2^30
21:57:32 <monochrom> err, 2^30 - 1
21:57:49 <mauke> right, so I can easily but a 9-digit number in there and break Data.Version, probably silently
21:57:54 <mauke> s/but/put/
21:57:54 <monochrom> err, maybe s/30/29/
21:59:27 <haskellbridge> <Jade> -1,25.π.3+2i has got to be one of my favorite versions
21:59:37 <monochrom> I don't know whether a 9-digit number also breaks Cabal, but you should try and file a bug report.
22:00:05 <mauke> no, that would be pointless
22:00:08 <dolio> It only breaks on some hypothetical Haskell compiler that doesn't exist.
22:01:56 <mauke> the (A+1).B.C issue has been known and fixed since 2018
22:02:18 <mauke> it's just that the pvp.haskell.org website is unmaintained and any "fixes" are not deployed anywhere
22:02:57 merijn joins (~merijn@204-220-045-062.dynamic.caiway.nl)
22:03:10 <haskellbridge> <Jade> where is the proper spec writeup?
22:03:25 <dolio> Also, even on such a compiler, if you bump by +1, it's still enough to release a major version bump every second for 17 years.
22:03:54 <mauke> dolio: depends on where you start
22:04:43 <monochrom> What is the purpose of these critiques?
22:04:51 <mauke> technically, the ordering requirements are vacuous
22:06:12 <mauke> monochrom: me figuring out what exactly I am allowed to upload to hackage and getting feedback from others
22:07:13 × merijn quits (~merijn@204-220-045-062.dynamic.caiway.nl) (Ping timeout: 248 seconds)
22:07:36 <monochrom> OK, so if you don't want others to feedback hate from you, start by not going for 9-digit numbers. :)
22:08:00 <mauke> oh, 9 digits are not enough
22:08:06 × Pozyomka quits (~pyon@user/pyon) (Quit: WeeChat 4.4.2)
22:08:11 <mauke> to break real-world haskell compilers I probably need at least 20 digits
22:10:49 <monochrom> OK, I don't do "exactly", I don't always test the limits and patience of other people. I only do "safely" as long as it is large enough.
22:14:42 × troojg quits (~troojg@user/troojg) (Ping timeout: 248 seconds)
22:15:55 <sclv> pvp is maintained by the clc, there just hasn't been a redeploy of an official new version, they just keep patching the "beta" repo
22:16:54 <monochrom> :(
22:17:11 <monochrom> "fixed in HEAD" strikes again
22:19:43 merijn joins (~merijn@204-220-045-062.dynamic.caiway.nl)
22:21:54 <mauke> how's this for a paradox? https://github.com/haskell/pvp/issues/62
22:22:36 <monochrom> haha
22:22:46 <monochrom> "wontfix"
22:23:40 <monochrom> how's using "⊥ = not ⊥" to resolve the paradox of "b = not b"? >:)
22:23:46 <mauke> even the haskell logo on pvp.haskell.org is broken :-(
22:24:14 <monochrom> and the paradox of "Type : Type" too
22:24:14 × merijn quits (~merijn@204-220-045-062.dynamic.caiway.nl) (Ping timeout: 252 seconds)
22:25:53 mxs joins (~mxs@user/mxs)
22:27:14 <mauke> btw, my original idea was to use Gödel numbering to smuggle a proper versioning system into PVP, but it looks like that won't work (or be required)
22:27:35 weary-traveler joins (~user@user/user363627)
22:27:54 <monochrom> list of numbers > one single big fat Gödel number
22:28:04 <monochrom> err, even:
22:28:08 <monochrom> list of small numbers > one single big fat Gödel number
22:28:16 × mxs quits (~mxs@user/mxs) (Client Quit)
22:29:25 <mauke> acme-bee-movie where the version number encodes the "bee movie" script in ascii
22:30:20 <monochrom> You know, if the number is too big, or the list way too long, it may break the hackage server altogether, formalities aside.
22:30:45 esph joins (~weechat@user/esph)
22:31:14 <monochrom> It is not very productive to be theoretically correct but pragmatically DoS hackage.
22:31:38 <mauke> if that breaks hackage, then they should have used a safer language to implement the server. like C.
22:32:09 <mauke> and no, I'm not going to actually test the limits
22:32:59 mxs joins (~mxs@user/mxs)
22:33:11 <mauke> but this seems like a very basic thing to secure against if all your spec says is "you can put an list of unbounded length here"
22:34:36 × tabemann quits (~tabemann@2600:1700:7990:24e0:6b51:c8e0:844c:e9ca) (Ping timeout: 252 seconds)
22:36:59 troojg joins (~troojg@user/troojg)
22:37:56 merijn joins (~merijn@204-220-045-062.dynamic.caiway.nl)
22:38:54 × tomboy64 quits (~tomboy64@user/tomboy64) (Ping timeout: 252 seconds)
22:40:10 × mxs quits (~mxs@user/mxs) (Quit: The Lounge - https://thelounge.chat)
22:42:49 × merijn quits (~merijn@204-220-045-062.dynamic.caiway.nl) (Ping timeout: 260 seconds)
22:44:57 morb joins (~morb@pool-108-41-100-120.nycmny.fios.verizon.net)
22:45:13 tomboy64 joins (~tomboy64@user/tomboy64)
22:45:35 tabemann joins (~tabemann@2600:1700:7990:24e0:6b51:c8e0:844c:e9ca)
22:49:49 × morb quits (~morb@pool-108-41-100-120.nycmny.fios.verizon.net) (Ping timeout: 260 seconds)
22:50:25 × __monty__ quits (~toonn@user/toonn) (Quit: leaving)
22:53:27 × neuroevolutus quits (~neuroevol@37.19.200.152) (Ping timeout: 256 seconds)
22:54:59 merijn joins (~merijn@204-220-045-062.dynamic.caiway.nl)
22:59:26 × merijn quits (~merijn@204-220-045-062.dynamic.caiway.nl) (Ping timeout: 252 seconds)
23:11:19 <ski> "A Functional Hitchhiker's Guide to Hereditarily Finite Sets, Ackermann Encodings and Pairing Functions" by Paul Tarau (implementor of BinProlog) in 2008-08-06 at <https://arxiv.org/abs/0808.0754> talks about encoding finite sets of natural numbers as natural numbers, and hence also hereditarily finite sets (hereditary like in ZF) as natural numbers
23:11:25 merijn joins (~merijn@204-220-045-062.dynamic.caiway.nl)
23:11:45 × acidjnk quits (~acidjnk@p200300d6e72cfb77305c26d382fbfdca.dip0.t-ipconnect.de) (Ping timeout: 248 seconds)
23:15:56 × merijn quits (~merijn@204-220-045-062.dynamic.caiway.nl) (Ping timeout: 252 seconds)
23:18:33 × athan quits (~athan@syn-098-153-145-140.biz.spectrum.com) (Quit: Konversation terminated!)
23:19:48 × Squared quits (~Square@user/square) (Ping timeout: 276 seconds)
23:27:47 merijn joins (~merijn@204-220-045-062.dynamic.caiway.nl)
23:32:25 × merijn quits (~merijn@204-220-045-062.dynamic.caiway.nl) (Ping timeout: 252 seconds)
23:32:54 <monochrom> I have always heard of hereditary sets from math friends. Maybe this one will help me learn it. :)
23:33:20 <monochrom> "Set theory is too hard, let's go functional programming"
23:34:05 <c_wraith> set theory *is* surprisingly hard, for such a "simple" construction.
23:34:09 × benjaminl quits (~benjaminl@user/benjaminl) (Read error: Connection reset by peer)
23:34:25 benjaminl joins (~benjaminl@user/benjaminl)
23:34:47 <Leary> tomsmeding: Re "every memory allocation is marked by a let expression in Core": for these purposes, isn't STG much better, since the other direction also holds? It would make a good addition to the playground. Unrelatedly, yahb2's GHC could do with an upgrade; I wanted Data.Foldable1 the other day but it was too old.
23:35:04 <monochrom> I am kind of less surprised after knowing about violin and piano music.
23:35:24 <monochrom> Violin is "just 4 strings". Then along came Paganini to ruin it for everyone.
23:35:55 <monochrom> Then piano made it trivial to be pitch-perfect. Then along came Chopin and Liszt to ruin it for everyone.
23:36:03 <c_wraith> If I'm gonna play a 4-string instrument, it's gonna be a ukulele
23:36:17 <monochrom> The general lesson is that there is always someone to find difficult things to do.
23:36:45 × JuanDaugherty quits (~juan@user/JuanDaugherty) (Quit: JuanDaugherty)
23:36:58 <monochrom> And then programming... You think you have designed a simple language, then someone will find a way to write a quine in it and confuse the hell out of everyone.
23:37:12 <geekosaur> don't forget tht Beethoven was told by his friends that nobody would ever be able to play his études
23:37:36 <c_wraith> I think I heard Conway wanted his game of Life to not be Turing complete. Oops.
23:37:39 <monochrom> "Chopin enters the chat" :)
23:39:37 <EvanR> haskell is basically beethoven
23:39:45 Clint squints.
23:39:48 <EvanR> lol
23:39:55 <monochrom> Leary: Both STG and -ddump-prep (last core stage before STG) satisfies the iff property.
23:40:10 <EvanR> unless you use IO
23:40:19 <monochrom> (and "prep" means "prepare for STG")
23:40:31 <EvanR> then it becomes the movie about the dog beethoven
23:40:42 <monochrom> haha
23:41:14 × Tuplanolla quits (~Tuplanoll@91-159-69-59.elisa-laajakaista.fi) (Quit: Leaving.)
23:41:41 × ZharMeny quits (~ZharMeny@user/ZharMeny) (Quit: ERC 5.5.0.29.1 (IRC client for GNU Emacs 29.4))
23:42:14 pavonia joins (~user@user/siracusa)
23:43:12 <monochrom> Then again the STG also goes through some changes, so maybe dump-prep is not the final story either.
23:43:52 <monochrom> I prefer Core just because I read Core better than I read STG. :)
23:44:53 geekosaur still wishes STGi were far enough along that it could be hooked into the playground
23:45:12 <Leary> monochrom: I see, I didn't know that. And yeah, there's still optimisation at both the STG and CMM level, so neither can really be the final story. Core /is/ easier to read for most. Wonder what flags the playground actually uses...
23:45:27 merijn joins (~merijn@204-220-045-062.dynamic.caiway.nl)
23:48:08 × weary-traveler quits (~user@user/user363627) (Remote host closed the connection)
23:49:54 <monochrom> I don't know for sure, but I bet -ddump-simpl because that's what everyone has been telling each other about.
23:50:11 × merijn quits (~merijn@204-220-045-062.dynamic.caiway.nl) (Ping timeout: 265 seconds)
23:50:24 <geekosaur> and probably -dsuppress-uniques and the other related flag and I don't recall
23:51:11 <monochrom> The playground doesn't seem to add suppress-unique or any other suppress-*
23:51:21 <geekosaur> oh, these days it's -dsuppress-all\
23:51:49 <monochrom> E.g., I see "ds_dvf", I also see too may types and "Occ=LoopBreaker" etc etc
23:52:04 <monochrom> and GHC.Types.[]
23:53:32 <geekosaur> (but do you see GHC.Types.Any?)
23:53:32 × haskellbridge quits (~hackager@syn-024-093-192-219.res.spectrum.com) (Read error: Connection reset by peer)
23:53:40 <geekosaur> wtf just happened
23:53:46 <geekosaur> my network shut down on me
23:54:53 <monochrom> I think I haven't. How do I normally get GHC.Types.Any? Like "print []"?
23:55:00 haskellbridge joins (~hackager@syn-024-093-192-219.res.spectrum.com)
23:55:00 ChanServ sets mode +v haskellbridge
23:55:00 <geekosaur> yes

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