Home liberachat/#haskell: Logs Calendar

Logs on 2025-02-25 (liberachat/#haskell)

00:02:39 olivial joins (~benjaminl@user/benjaminl)
00:03:10 × vanishingideal quits (~vanishing@user/vanishingideal) (Remote host closed the connection)
00:04:25 × olivial_ quits (~benjaminl@c-76-144-12-233.hsd1.or.comcast.net) (Ping timeout: 268 seconds)
00:06:34 merijn joins (~merijn@host-vr.cgnat-g.v4.dfn.nl)
00:07:05 × eL_Bart0 quits (eL_Bart0@dietunichtguten.org) (Ping timeout: 244 seconds)
00:08:28 × olivial quits (~benjaminl@user/benjaminl) (Ping timeout: 265 seconds)
00:11:26 × merijn quits (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 244 seconds)
00:14:54 olivial joins (~benjaminl@user/benjaminl)
00:19:35 vanishingideal joins (~vanishing@user/vanishingideal)
00:22:22 merijn joins (~merijn@host-vr.cgnat-g.v4.dfn.nl)
00:23:07 alfiee joins (~alfiee@user/alfiee)
00:27:29 × merijn quits (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 260 seconds)
00:27:29 × alfiee quits (~alfiee@user/alfiee) (Ping timeout: 248 seconds)
00:38:07 merijn joins (~merijn@host-vr.cgnat-g.v4.dfn.nl)
00:38:41 × euleritian quits (~euleritia@ip4d17fae8.dynamic.kabel-deutschland.de) (Ping timeout: 248 seconds)
00:43:40 × merijn quits (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 272 seconds)
00:49:09 × ljdarj quits (~Thunderbi@user/ljdarj) (Ping timeout: 244 seconds)
00:51:42 euleritian joins (~euleritia@ip4d17fae8.dynamic.kabel-deutschland.de)
00:53:56 merijn joins (~merijn@host-vr.cgnat-g.v4.dfn.nl)
00:56:27 × xff0x quits (~xff0x@2405:6580:b080:900:6dac:d85c:a56f:65f8) (Ping timeout: 276 seconds)
00:57:27 × acidjnk quits (~acidjnk@p200300d6e7283f506dba6a8fb70c33a2.dip0.t-ipconnect.de) (Ping timeout: 268 seconds)
00:59:13 × merijn quits (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 265 seconds)
00:59:34 × m5zs7k quits (aquares@web10.mydevil.net) (Quit: m5zs7k)
01:03:29 m5zs7k joins (aquares@web10.mydevil.net)
01:08:32 alfiee joins (~alfiee@user/alfiee)
01:09:46 merijn joins (~merijn@host-vr.cgnat-g.v4.dfn.nl)
01:09:58 × zlqrvx quits (~zlqrvx@user/zlqrvx) (Quit: %quit%)
01:11:03 zlqrvx joins (~zlqrvx@user/zlqrvx)
01:12:50 × alfiee quits (~alfiee@user/alfiee) (Ping timeout: 252 seconds)
01:14:24 × merijn quits (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 246 seconds)
01:16:48 merijn joins (~merijn@host-vr.cgnat-g.v4.dfn.nl)
01:17:36 × sprotte24 quits (~sprotte24@p200300d16f3063004006d4006bd9f81a.dip0.t-ipconnect.de) (Read error: Connection reset by peer)
01:21:38 × merijn quits (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 252 seconds)
01:32:05 × Square2 quits (~Square4@user/square) (Ping timeout: 265 seconds)
01:32:38 merijn joins (~merijn@host-vr.cgnat-g.v4.dfn.nl)
01:35:55 × alp quits (~alp@2001:861:8ca0:4940:4960:283e:5e01:3e7b) (Ping timeout: 252 seconds)
01:38:14 × merijn quits (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 244 seconds)
01:39:15 Square joins (~Square4@user/square)
01:43:32 × califax quits (~califax@user/califx) (Remote host closed the connection)
01:43:55 califax joins (~califax@user/califx)
01:43:55 × machinedgod quits (~machinedg@d108-173-18-100.abhsia.telus.net) (Ping timeout: 244 seconds)
01:46:43 × euleritian quits (~euleritia@ip4d17fae8.dynamic.kabel-deutschland.de) (Remote host closed the connection)
01:47:10 euleritian joins (~euleritia@ip4d17fae8.dynamic.kabel-deutschland.de)
01:47:21 × euleritian quits (~euleritia@ip4d17fae8.dynamic.kabel-deutschland.de) (Remote host closed the connection)
01:48:22 euleritian joins (~euleritia@ip4d17fae8.dynamic.kabel-deutschland.de)
01:48:48 × euleritian quits (~euleritia@ip4d17fae8.dynamic.kabel-deutschland.de) (Remote host closed the connection)
01:49:11 euleritian joins (~euleritia@ip4d17fae8.dynamic.kabel-deutschland.de)
01:49:17 xff0x joins (~xff0x@fsb6a9491c.tkyc517.ap.nuro.jp)
01:49:40 merijn joins (~merijn@host-vr.cgnat-g.v4.dfn.nl)
01:54:26 × merijn quits (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 248 seconds)
01:54:56 alfiee joins (~alfiee@user/alfiee)
01:59:23 × alfiee quits (~alfiee@user/alfiee) (Ping timeout: 252 seconds)
02:05:22 merijn joins (~merijn@host-vr.cgnat-g.v4.dfn.nl)
02:06:52 × Tuplanolla quits (~Tuplanoll@91-159-69-59.elisa-laajakaista.fi) (Quit: Leaving.)
02:10:24 × merijn quits (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 252 seconds)
02:21:08 merijn joins (~merijn@host-vr.cgnat-g.v4.dfn.nl)
02:25:26 × merijn quits (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 252 seconds)
02:36:32 merijn joins (~merijn@host-vr.cgnat-g.v4.dfn.nl)
02:40:20 alfiee joins (~alfiee@user/alfiee)
02:43:18 × merijn quits (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 245 seconds)
02:44:30 × alfiee quits (~alfiee@user/alfiee) (Ping timeout: 252 seconds)
02:50:09 × petrichor quits (~znc-user@user/petrichor) (Read error: Connection reset by peer)
02:51:56 × euleritian quits (~euleritia@ip4d17fae8.dynamic.kabel-deutschland.de) (Remote host closed the connection)
02:52:16 euleritian joins (~euleritia@ip4d17fae8.dynamic.kabel-deutschland.de)
02:52:59 petrichor joins (~znc-user@user/petrichor)
02:54:30 peterbecich joins (~Thunderbi@syn-047-229-123-186.res.spectrum.com)
02:54:35 merijn joins (~merijn@host-vr.cgnat-g.v4.dfn.nl)
02:54:37 × ash3en quits (~Thunderbi@2a03:7846:b6eb:101:93ac:a90a:da67:f207) (Ping timeout: 268 seconds)
02:59:32 × merijn quits (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 252 seconds)
03:01:58 ash3en joins (~Thunderbi@2a03:7846:b6eb:101:93ac:a90a:da67:f207)
03:04:30 tavare joins (~tavare@user/tavare)
03:07:01 × xff0x quits (~xff0x@fsb6a9491c.tkyc517.ap.nuro.jp) (Ping timeout: 248 seconds)
03:07:36 × peterbecich quits (~Thunderbi@syn-047-229-123-186.res.spectrum.com) (Ping timeout: 252 seconds)
03:11:08 xff0x joins (~xff0x@fsb6a9491c.tkyc517.ap.nuro.jp)
03:18:38 × tavare quits (~tavare@user/tavare) (Remote host closed the connection)
03:24:27 dmoerner joins (~dmoerner@fedora/dmoerner)
03:26:10 merijn joins (~merijn@host-vr.cgnat-g.v4.dfn.nl)
03:26:44 alfiee joins (~alfiee@user/alfiee)
03:26:56 weary-traveler joins (~user@user/user363627)
03:27:48 × zungi quits (~tory@user/andrewchawk) (Ping timeout: 264 seconds)
03:29:37 zungi joins (~tory@user/andrewchawk)
03:30:52 × merijn quits (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 244 seconds)
03:31:04 × alfiee quits (~alfiee@user/alfiee) (Ping timeout: 252 seconds)
03:41:58 merijn joins (~merijn@host-vr.cgnat-g.v4.dfn.nl)
03:46:09 × merijn quits (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 244 seconds)
03:47:19 × L29Ah quits (~L29Ah@wikipedia/L29Ah) (Read error: Connection timed out)
03:57:20 merijn joins (~merijn@host-vr.cgnat-g.v4.dfn.nl)
04:02:24 × merijn quits (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 265 seconds)
04:08:42 × euleritian quits (~euleritia@ip4d17fae8.dynamic.kabel-deutschland.de) (Remote host closed the connection)
04:08:56 euleritian joins (~euleritia@ip4d17fae8.dynamic.kabel-deutschland.de)
04:09:02 × euleritian quits (~euleritia@ip4d17fae8.dynamic.kabel-deutschland.de) (Read error: Connection reset by peer)
04:09:27 euleritian joins (~euleritia@ip4d17fae8.dynamic.kabel-deutschland.de)
04:12:48 alfiee joins (~alfiee@user/alfiee)
04:13:07 merijn joins (~merijn@host-vr.cgnat-g.v4.dfn.nl)
04:17:03 × alfiee quits (~alfiee@user/alfiee) (Ping timeout: 245 seconds)
04:20:16 × merijn quits (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 272 seconds)
04:21:53 peterbecich joins (~Thunderbi@syn-047-229-123-186.res.spectrum.com)
04:27:11 × petrichor quits (~znc-user@user/petrichor) (Read error: Connection reset by peer)
04:28:58 petrichor joins (~znc-user@user/petrichor)
04:29:25 bitdex joins (~bitdex@gateway/tor-sasl/bitdex)
04:31:11 merijn joins (~merijn@host-vr.cgnat-g.v4.dfn.nl)
04:35:58 × merijn quits (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 252 seconds)
04:39:15 aforemny joins (~aforemny@i59F4C45F.versanet.de)
04:39:35 × aforemny_ quits (~aforemny@2001:9e8:6cc6:4c00:6a7:4bec:d8bb:d20c) (Ping timeout: 244 seconds)
04:43:42 × peterbecich quits (~Thunderbi@syn-047-229-123-186.res.spectrum.com) (Ping timeout: 272 seconds)
04:46:58 merijn joins (~merijn@host-vr.cgnat-g.v4.dfn.nl)
04:49:39 × euphores quits (~SASL_euph@user/euphores) (Quit: Leaving.)
04:49:53 × Square quits (~Square4@user/square) (Ping timeout: 248 seconds)
04:51:44 × merijn quits (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 252 seconds)
04:57:54 <ski> "exponentiation involves instantiating one numeral to `r -> r`" -- did this, for implication goals, in a logic programming prototype, having unbounded number of continuation levels (and then `IO' or `ST s' at the bottom, for update-in-place of logic variables)
04:58:33 alfiee joins (~alfiee@user/alfiee)
05:01:51 merijn joins (~merijn@host-vr.cgnat-g.v4.dfn.nl)
05:02:53 × alfiee quits (~alfiee@user/alfiee) (Ping timeout: 245 seconds)
05:03:49 j1n37 joins (~j1n37@user/j1n37)
05:04:12 × j1n37- quits (~j1n37@user/j1n37) (Ping timeout: 252 seconds)
05:06:38 × merijn quits (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 245 seconds)
05:17:40 merijn joins (~merijn@host-vr.cgnat-g.v4.dfn.nl)
05:22:15 × merijn quits (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 244 seconds)
05:33:27 merijn joins (~merijn@host-vr.cgnat-g.v4.dfn.nl)
05:35:13 polyphem joins (~polyphem@p4fc2ccda.dip0.t-ipconnect.de)
05:38:25 × merijn quits (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 248 seconds)
05:40:30 × j1n37 quits (~j1n37@user/j1n37) (Read error: Connection reset by peer)
05:41:00 misterfish joins (~misterfis@84.53.85.146)
05:42:13 × sudden quits (~cat@user/sudden) (Ping timeout: 248 seconds)
05:43:48 × polyphem quits (~polyphem@p4fc2ccda.dip0.t-ipconnect.de) (Ping timeout: 252 seconds)
05:44:11 j1n37 joins (~j1n37@user/j1n37)
05:44:58 alfiee joins (~alfiee@user/alfiee)
05:45:09 k0zy joins (~user@user/k0zy)
05:47:17 × rvalue quits (~rvalue@user/rvalue) (Read error: Connection reset by peer)
05:47:49 rvalue joins (~rvalue@user/rvalue)
05:49:08 × alfiee quits (~alfiee@user/alfiee) (Ping timeout: 245 seconds)
05:49:14 merijn joins (~merijn@host-vr.cgnat-g.v4.dfn.nl)
05:54:18 sudden joins (~cat@user/sudden)
05:55:48 × merijn quits (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 245 seconds)
05:56:36 fp1 joins (~Thunderbi@wireless-86-50-141-43.open.aalto.fi)
05:57:40 × califax quits (~califax@user/califx) (Remote host closed the connection)
05:58:33 califax joins (~califax@user/califx)
05:59:55 alp joins (~alp@2001:861:8ca0:4940:1509:d62f:8652:bd61)
06:00:42 × fp1 quits (~Thunderbi@wireless-86-50-141-43.open.aalto.fi) (Ping timeout: 244 seconds)
06:01:16 × talismanick quits (~user@2601:644:937c:ed10::ae5) (Read error: Connection reset by peer)
06:03:11 michalz joins (~michalz@185.246.207.203)
06:03:58 ensyde joins (~ensyde@2601:5c6:c200:6dc0::a1d8)
06:07:18 merijn joins (~merijn@host-vr.cgnat-g.v4.dfn.nl)
06:10:08 machinedgod joins (~machinedg@d108-173-18-100.abhsia.telus.net)
06:12:04 × merijn quits (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 244 seconds)
06:15:37 × echoreply quits (~echoreply@2001:19f0:9002:1f3b:5400:ff:fe6f:8b8d) (Quit: WeeChat 2.8)
06:16:31 echoreply joins (~echoreply@45.32.163.16)
06:17:30 takuan joins (~takuan@d8D86B601.access.telenet.be)
06:19:00 × k0zy quits (~user@user/k0zy) (Ping timeout: 252 seconds)
06:23:06 merijn joins (~merijn@host-vr.cgnat-g.v4.dfn.nl)
06:25:56 × hughjfchen quits (~hughjfche@vmi2417424.contaboserver.net) (Quit: WeeChat 4.4.3)
06:26:20 × simplystuart quits (~simplystu@c-75-75-152-164.hsd1.pa.comcast.net) (Ping timeout: 252 seconds)
06:27:59 × alp quits (~alp@2001:861:8ca0:4940:1509:d62f:8652:bd61) (Ping timeout: 260 seconds)
06:28:00 × merijn quits (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 246 seconds)
06:28:08 hughjfchen joins (~hughjfche@vmi2417424.contaboserver.net)
06:30:41 simplystuart joins (~simplystu@c-75-75-152-164.hsd1.pa.comcast.net)
06:31:03 alfiee joins (~alfiee@user/alfiee)
06:35:48 × alfiee quits (~alfiee@user/alfiee) (Ping timeout: 272 seconds)
06:38:52 merijn joins (~merijn@host-vr.cgnat-g.v4.dfn.nl)
06:44:01 peterbecich joins (~Thunderbi@syn-047-229-123-186.res.spectrum.com)
06:44:02 × merijn quits (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 272 seconds)
06:46:14 × p3n quits (~p3n@2a00:19a0:3:7c:0:d9c6:7cf6:1) (Quit: ZNC 1.9.1 - https://znc.in)
06:54:41 merijn joins (~merijn@host-vr.cgnat-g.v4.dfn.nl)
06:57:32 p3n joins (~p3n@217.198.124.246)
06:59:42 × merijn quits (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 252 seconds)
07:02:55 merijn joins (~merijn@host-vr.cgnat-g.v4.dfn.nl)
07:03:05 × tccq quits (~user@user/tccq) (Remote host closed the connection)
07:04:00 rvalue- joins (~rvalue@user/rvalue)
07:04:50 × rvalue quits (~rvalue@user/rvalue) (Ping timeout: 252 seconds)
07:07:28 × merijn quits (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 245 seconds)
07:09:56 × Lord_of_Life quits (~Lord@user/lord-of-life/x-2819915) (Ping timeout: 244 seconds)
07:10:12 Lord_of_Life_ joins (~Lord@user/lord-of-life/x-2819915)
07:11:34 Lord_of_Life_ is now known as Lord_of_Life
07:12:25 CiaoSen joins (~Jura@2a02:8071:64e1:7180:4e50:ddff:fe9b:8922)
07:12:42 rvalue- is now known as rvalue
07:15:42 × misterfish quits (~misterfis@84.53.85.146) (Ping timeout: 272 seconds)
07:16:48 alfiee joins (~alfiee@user/alfiee)
07:18:22 × j1n37 quits (~j1n37@user/j1n37) (Read error: Connection reset by peer)
07:18:39 merijn joins (~merijn@host-vr.cgnat-g.v4.dfn.nl)
07:20:35 tromp joins (~textual@2a02:a210:cba:8500:6ddc:c1a9:bc13:1391)
07:21:29 j1n37 joins (~j1n37@user/j1n37)
07:21:38 × alfiee quits (~alfiee@user/alfiee) (Ping timeout: 268 seconds)
07:23:32 × merijn quits (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 252 seconds)
07:25:22 × peterbecich quits (~Thunderbi@syn-047-229-123-186.res.spectrum.com) (Ping timeout: 252 seconds)
07:34:27 merijn joins (~merijn@host-vr.cgnat-g.v4.dfn.nl)
07:36:45 lortabac joins (~lortabac@2a01:e0a:541:b8f0:55ab:e185:7f81:54a4)
07:41:08 × merijn quits (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 252 seconds)
07:43:54 talismanick joins (~user@2601:644:937c:ed10::ae5)
07:47:44 × kaskal quits (~kaskal@2a02:8388:15bf:c200:6260:f3eb:9ba8:d6f8) (Quit: ZNC - https://znc.in)
07:48:07 kaskal joins (~kaskal@2a02:8388:15bf:c200:69b8:13b6:b9c5:a489)
07:57:46 × tromp quits (~textual@2a02:a210:cba:8500:6ddc:c1a9:bc13:1391) (Quit: My iMac has gone to sleep. ZZZzzz…)
08:00:01 × caconym quits (~caconym@user/caconym) (Quit: bye)
08:00:42 sord937 joins (~sord937@gateway/tor-sasl/sord937)
08:01:02 caconym joins (~caconym@user/caconym)
08:02:12 alfiee joins (~alfiee@user/alfiee)
08:06:25 × alfiee quits (~alfiee@user/alfiee) (Ping timeout: 252 seconds)
08:12:21 eL_Bart0 joins (eL_Bart0@dietunichtguten.org)
08:18:42 alp joins (~alp@2001:861:8ca0:4940:9bfe:6d72:595b:d191)
08:24:13 ljdarj joins (~Thunderbi@user/ljdarj)
08:24:57 merijn joins (~merijn@77.242.116.146)
08:27:56 bitterx joins (~bitterx@APN-122-12-44-gprs.simobil.net)
08:28:06 × bitterx quits (~bitterx@APN-122-12-44-gprs.simobil.net) (Changing host)
08:28:06 bitterx joins (~bitterx@user/bitterx)
08:29:28 × sord937 quits (~sord937@gateway/tor-sasl/sord937) (Remote host closed the connection)
08:29:46 sord937 joins (~sord937@gateway/tor-sasl/sord937)
08:30:57 × glguy quits (glguy@libera/staff/glguy) (Read error: Connection reset by peer)
08:41:22 misterfish joins (~misterfis@h239071.upc-h.chello.nl)
08:43:32 zzz joins (~z@user/zero)
08:43:56 tromp joins (~textual@2a02:a210:cba:8500:6ddc:c1a9:bc13:1391)
08:45:18 × yin quits (~z@user/zero) (Read error: Connection reset by peer)
08:45:18 zzz is now known as yin
08:47:01 × ash3en quits (~Thunderbi@2a03:7846:b6eb:101:93ac:a90a:da67:f207) (Quit: ash3en)
08:47:37 alfiee joins (~alfiee@user/alfiee)
08:49:08 Unicorn_Princess joins (~Unicorn_P@user/Unicorn-Princess/x-3540542)
08:49:22 <tomsmeding> Athas: suppose I had a library inspired by Kmett's 'ad' library, but with first-class support for arrays somehow, instead of just scalars. (The goal being to significantly reduce the overhead of all those dual-number heap nodes.) What would you expect its interface to be?
08:52:36 × alfiee quits (~alfiee@user/alfiee) (Ping timeout: 272 seconds)
08:57:12 × zungi quits (~tory@user/andrewchawk) (Ping timeout: 264 seconds)
08:57:50 lxsameer joins (~lxsameer@Serene/lxsameer)
08:58:41 zungi joins (~tory@user/andrewchawk)
08:58:45 tabaqui1 joins (~root@87.200.129.102)
09:00:01 acidjnk joins (~acidjnk@p200300d6e7283f38a15cd1ba33b15ba0.dip0.t-ipconnect.de)
09:00:44 <Athas> tomsmeding: good question. I'm not terribly imaginatine when it comes to Haskell types, I must admit. I would probably like a type family 'Array sh t', where 'sh' is an Accelerate-like shape (this is not so important for 'ad'), and 't' is heavily constrained to either a some primal number type or dual/adjoint numbers.
09:01:07 chele joins (~chele@user/chele)
09:01:22 <Athas> Then the array type has a vocabulary of first order bulk operations (where I expect good performance for derivatives), and also some second order operations (like map) that should at least work.
09:02:09 × weary-traveler quits (~user@user/user363627) (Remote host closed the connection)
09:03:21 why joins (~why@n218250229238.netvigator.com)
09:05:28 <tomsmeding> Athas: Thanks! Second order operations are fundamentally more difficult to make work with the 'ad'-style algorithm than first-order bulk operations, though
09:05:47 <Athas> Yes, I know, which is why I wouldn't expect them to work well, and I could sympathise with not having them at all.
09:05:57 <tomsmeding> as in, making them work but slow is easy (fromList . map f . toList), but making them fast is rather difficult
09:06:21 <tomsmeding> (though perhaps allocating fewer list nodes is doable)
09:06:57 <Athas> I would be OK with the API limiting primal values to types that can be unboxed (and also imposing some strictness requirements).
09:07:16 <Athas> Making the tape more efficient (by storing it in an unboxed and bump-allocated vector) would make a big difference to performance, I think.
09:07:19 <tomsmeding> Athas: some other component of the interface that is surprisingly tricky: 'ad' uses Traversable as the universal input structure, but if you have heterogeneously typed inputs, that doesn't really work any more
09:07:30 <Athas> The tape-based AD libraries in C++ are not slow at all.
09:07:50 <Athas> Heterogeneously typed active inputs are rare.
09:08:09 <Athas> For example, they occur in none of the ADBench benchmarks.
09:08:15 <tomsmeding> Athas: I tried, but the fact that the forward pass becomes a write to a vector with potential reallocation logic, instead of just allocating an object in the haskell nursery, increases the overhead quite a bit
09:08:29 <tomsmeding> Athas: mind that having arrays of different ranks in the input is already "heterogeneously typed"
09:08:46 <tomsmeding> as is "arrays and scalars"
09:09:14 <Athas> Oh, I was considering only the types of the underlying scalars.
09:09:34 <tomsmeding> I was thinking of that Traversable constraint; that requires all the "input values" to really be exactly the same Haskell type
09:09:55 <Athas> Well, so there's another restriction I'm OK with: the input may be assumed to be isomorphic to a monomorphic sequence of scalars. Many AD libraries make that assumption. The Haskell type system is easily strong enough to make that nice to work with.
09:10:23 <tomsmeding> what do you mean with a monomorphic sequence of scalars? [Vector a]?
09:10:40 <Athas> Not the list, just 'Vector a'.
09:10:50 <tomsmeding> do other AD libraries really do that?
09:10:57 <tomsmeding> that feels a bit much, to me
09:10:58 <Athas> But I don't understand - if you require that the input is some 'f t' where 'f' is Traversable, isn't that essentially going to be a sequence of 't's with some shape on top?
09:11:05 <tomsmeding> exactly
09:11:18 <tomsmeding> which works for scalars, but if you have array support, then it's suddenly inadequate
09:11:22 <Athas> It's common in C++ AD libraries yes, although they sometimes put some polish on top to make it seem like that's not how it works.
09:11:28 <tomsmeding> interesting
09:11:35 <Athas> You just pretend the arrays are concatenated. It's easy.
09:12:01 <tomsmeding> well f (Vector Double) would be rather easy to support, for a Traversable f
09:12:20 <Athas> These libraries ultimately expect the input to be a sequence of scalars. In Haskell, you could do fancier things (like arrays of functions!), but I'm not sure that is so useful.
09:12:43 <Athas> I'd much prefer a Haskell AD library that can efficiently handle boring classic numerical problems, even if fancy weird things, like functional vector fields, cannot be handled.
09:12:52 × AlexZenon quits (~alzenon@178.34.162.44) (Ping timeout: 272 seconds)
09:13:01 <tomsmeding> I'm not thinking about functional vector fields :p
09:13:43 <Athas> When you're talking about the Jacobian matrix, you're already in a sense flattening all of the scalars to form each axis.
09:14:57 <tomsmeding> full disclosure: I've been hacking on something like this; the API currently looks like this: gradient' from here ( https://git.tomsmeding.com/ad-dual/tree/src/Numeric/ADDual/Array/Internal.hs ), where 'VDual s Double' implements the classes from here ( https://git.tomsmeding.com/ad-dual/tree/src/Numeric/ADDual/VectorOps.hs )
09:15:04 <tomsmeding> arrays are single-dimensional only
09:15:12 <tomsmeding> but that's rather non-fundamental
09:15:40 <Athas> Yes, that can be fixed at a higher level.
09:15:48 <tomsmeding> also that
09:17:02 <Athas> This looks compelling. Using 'f (VS.Vector a)' instead of just 'a' is make it easier to have some efficient representation without imposing constraints on 'f'?
09:17:25 <tomsmeding> it just means that you can pass in a single vector if you want, but also a list of vectors.
09:17:38 <tomsmeding> Or a boxed vector of vectors!
09:17:49 <Athas> Yes, I think it's fine for all of my uses, but honestly just 'VS.Vector a' would work as well.
09:18:18 <tomsmeding> it doesn't even assume that 'a' is Double, so you should be able to instantiate 'a' with a standard forward-mode dual number
09:18:43 AlexZenon joins (~alzenon@178.34.162.44)
09:18:52 <Athas> This looks compelling, but why unsafePerformIO directly? Can this not be expressed with ST?
09:19:01 <Athas> Are dual numbers Storable?
09:19:09 <Athas> I guess they could be.
09:19:14 <tomsmeding> surely they could be
09:19:31 <Athas> But this cannot possibly do reverse-then-forward, right?
09:19:49 <tomsmeding> how would that look in 'ad'?
09:19:57 Smiles joins (uid551636@id-551636.lymington.irccloud.com)
09:20:17 <tomsmeding> and I think you may be right that IO is overkill here!
09:20:27 <Athas> jvp (\ ... vjp ...), but with the weird 'ad' names instead.
09:20:40 <Athas> It Just Works in 'ad'.
09:20:49 × califax quits (~califax@user/califx) (Remote host closed the connection)
09:21:00 <tomsmeding> wouldn't that be Reverse s (Forward Double) in 'ad'?
09:21:08 califax joins (~califax@user/califx)
09:21:13 <tomsmeding> i.e. doing reverse mode, but secretly the scalars are dual numbers?
09:21:55 <Athas> Operationally yes. I don't know what the type of that looks like. I was referring to the surface syntax.
09:22:19 <Athas> It's 'diffF' on a function that uses 'grad'.
09:22:30 × off^ quits (~off@108.192.66.114) (Ping timeout: 268 seconds)
09:22:36 tomsmeding opens the 'ad' docs
09:22:50 <tomsmeding> the fact that that package's name is so short is really inconvenient. :P
09:22:59 × dsrt^ quits (~dsrt@108.192.66.114) (Ping timeout: 260 seconds)
09:24:27 <tomsmeding> I'm not familiar enough with the 'ad' API to figure out what that 'AD' type is suppose to do
09:24:29 <tomsmeding> *supposed
09:24:47 <tomsmeding> nothing, it seems, semantically?
09:25:48 <tomsmeding> Athas: I think if you 'diffF' on a function that uses 'grad', you instantiate the 'a' in the type of 'grad' with 'AD s (Forward a)'; does that sound right?
09:26:24 <Athas> Yes, so that ought to work. That is good.
09:26:40 <tomsmeding> if so, then exactly the same thing should work here
09:26:40 × why quits (~why@n218250229238.netvigator.com) (Quit: Client closed)
09:27:08 × ThePenguin quits (~ThePengui@cust-95-80-24-166.csbnet.se) (Remote host closed the connection)
09:28:23 <tomsmeding> Athas: I might be able to switch to ST, but because the individual scalar operations are effectful (they mutate the tape), there's going to be some unsafePerformIO-like thing there anyway
09:28:41 <tomsmeding> and there isn't even unsafePerformST!
09:28:51 <tomsmeding> I guess that's called "runST . unsafeCoerce"
09:29:07 ThePenguin joins (~ThePengui@cust-95-80-24-166.csbnet.se)
09:29:37 <tomsmeding> 'ad' also has unsafePerformIO in the same positions
09:31:54 <Athas> How close is this to working?
09:32:04 <tomsmeding> I benchmarked this on a simple 2-hidden-layer neural network with relu activation and softmax at the end; when input and hidden layers are all width N, then when N goes from 100 to 2000, the speedup over 'ad' goes from 26x to ~550x
09:32:22 ski . o O ( "Data Parallel Haskell" (GHC 6.10 - 8.4)
09:32:22 ski <https://downloads.haskell.org/ghc/8.4-latest/docs/html/users_guide/parallel.html#data-parallel-haskell>,<https://wiki.haskell.org/GHC/Data_Parallel_Haskell,<https://www.cs.cmu.edu/~scandal/cacm/cacm2.html>,<https://web.archive.org/web/20040806031752/http://cgi.cse.unsw.edu.au/~chak/papers/papers.html#ndp-haskell>,<https://en.wikipedia.org/wiki/NESL>,<https://en.wikipedia.org/wiki/Data_parallelism> )
09:32:38 <tomsmeding> Athas: I used fneural_A for my library and fneural for 'ad' https://git.tomsmeding.com/ad-dual/tree/examples/Numeric/ADDual/Examples.hs
09:32:59 <Athas> tomsmeding: very promising!
09:33:09 <tomsmeding> perhaps I should've been fair and used fneural_A for both, but honestly, fneural should be faster because it uses V.map sometimes
09:33:22 alfiee joins (~alfiee@user/alfiee)
09:33:45 <tomsmeding> the inspiration for this was your question of "is there anything better than 'ad'" and me thinking "we can't possibly have just this as the answer"
09:33:55 <tomsmeding> :)
09:34:35 <tomsmeding> It's fun to see the original performance around 300ms, and then seeing the array version be 700us. :p
09:35:00 <Athas> Here is how well tape based AD can do in C++: https://sigkill.dk/junk/gmm-diff.pdf - 'adept', 'adol-c', and 'cppad' use taping, while everything else is some kind of source transformation.
09:35:31 <Athas> So 4x to 5x slower than Enzyme (which is a compiler transformation) is dosable in C++. And these tools don't actually know what a "matrix" is; they're completely scalar-oriented.
09:36:20 <tomsmeding> we have the disadvantage that being scalar-oriented means spraying your the heap with huge amounts of garbage, and also creating long, deep chains that the GC has to traverse
09:36:45 <tomsmeding> but with arrays, even just first-order ones, both of those problems should be reduced to negligibility
09:36:48 <Athas> Indeed.
09:37:17 <Athas> And in the limit, with high level array operations, some things can perhaps be differentiated more effectively, using knowledge about what is actually going on.
09:37:19 <tomsmeding> I find it interesting in your graph that 'tensorflow' is just like "I have about 0.6 seconds overhead, otherwise I have the same graph as you guys"
09:37:43 × alfiee quits (~alfiee@user/alfiee) (Ping timeout: 252 seconds)
09:37:50 <Athas> The TF code is crap, I have an issue for it. It is something I took from ADBench but there is no way this is as fast as it should be.
09:38:00 <tomsmeding> perhaps, but scalar-level AD is in some sense the limit of cleverness in that respect -- it automatically detects and exploits _all_ sparsity!
09:38:13 <tomsmeding> heh okay
09:38:47 <tomsmeding> also pytorch is like "I'm faster than all you guys but you just need to give me data"
09:38:56 <Athas> ski: what about DPH?
09:39:36 <Athas> The PyTorch code in ADBench was also crap, but a colleague of mine was so disgusted that he rewrote it, when we needed it for a paper a few years back.
09:39:54 <tomsmeding> anyway this is very much a side-track to what I should actually be working on these weeks. But I wanted to get some ideas from you anyway :)
09:39:58 <tomsmeding> hah
09:40:11 <Athas> No no, I think this is definitely what you should be workign on. Keep up! Don't get distracted!
09:40:19 <tomsmeding> it's funny how people put those graphs in papers, but then the underlying implementations are actually kind of crap :P
09:40:41 <tomsmeding> well, first I have to revise a journal paper which is due in 2 weeks or so. :P
09:41:25 <tomsmeding> it's also in a way unsatisfying. Writing this ad-dual thing is mostly like "this is easy stuff, the interesting research is in tackling harder problems like actually differentiating higher-order code first-class, or as a source-code transformation, or stuff like that"
09:41:37 <tomsmeding> "this is trivial application of the stuff we already know"
09:41:51 <tomsmeding> but then it ends up, in this particular niche of haskell AD libraries, improving the state of the art by >500x.
09:42:36 <tomsmeding> This is at most a workshop talk!
09:43:03 <tomsmeding> Real-world impact is not particularly correlated with publication-worthiness
09:45:18 <ski> Athas : wondering whether there'd be any hope of integrating it with something like the above
09:45:24 <tomsmeding> Athas: do you get those nice plots out of gradbench?
09:45:59 × tzh quits (~tzh@c-76-115-131-146.hsd1.or.comcast.net) (Quit: zzz)
09:46:27 <tomsmeding> ski: are you thinking of just the parallelism part, or also the distributed computing part of DPH? (IIRC they had distributed execution over multiple machines as a core design goal)
09:46:42 <tomsmeding> in any case, the fact that it doesn't really exist any more makes this a hard proposition :)
09:53:54 kuribas joins (~user@ip-188-118-57-242.reverse.destiny.be)
09:55:43 <[exa]> ski: I was trying to find some such connection before and it doesn't really seem easily. IMO we'd need some very interesting encoding of the array indexes and updates that can be differentiated directly and then reconstructed. Most differentiation formulations I've seen basically deny that.
09:58:38 divya- joins (divya@140.238.251.170)
09:59:53 divya- is now known as divya
10:00:20 <ski> mainly the parallelism, i suppose, tomsmeding
10:01:10 <ski> [exa] : differentiated as in AD, or say as in differential lambda calculus ?
10:02:51 <[exa]> ski: as in AD in this case
10:06:07 × ljdarj quits (~Thunderbi@user/ljdarj) (Ping timeout: 244 seconds)
10:06:33 <Athas> tomsmeding: yes, those plots are from gradbench (but not fully automated yet).
10:07:48 <Athas> ski: the things that didn't work in DPH are dead (mostly the vectorisation transform), but a lot of the other ideas are well and alive, or its successors are. DPH begat Repa, which inspired massiv, which to my knowledge is still good and living.
10:07:54 ljdarj joins (~Thunderbi@user/ljdarj)
10:08:23 <ski> mm, i see
10:08:52 <Athas> Accelerate itself is also a DPH spinoff.
10:09:13 <ski> Obsidian ?
10:09:58 <Athas> No, that came out of a different line of research.
10:10:09 <ski> mhm
10:10:10 <ski> ([exa] : you mentioning updates (and reconstruction) made me wonder)
10:12:33 <tomsmeding> ski: I'm doing my PhD in the group that's currently doing research on Accelerate, so in that sense I'm in the right place :p
10:13:41 × xff0x quits (~xff0x@fsb6a9491c.tkyc517.ap.nuro.jp) (Ping timeout: 248 seconds)
10:14:00 <ski> nice :b
10:14:08 × gmg quits (~user@user/gehmehgeh) (Quit: Leaving)
10:18:26 × misterfish quits (~misterfis@h239071.upc-h.chello.nl) (Ping timeout: 252 seconds)
10:19:47 alfiee joins (~alfiee@user/alfiee)
10:21:11 <[exa]> ski: the differential lambda calculus is btw not directly related to the datatype differentiation (as with zippers), right?
10:21:49 <[exa]> ski: anyway the main thing I took home from the AD currently is that the array indices need some completely different approach before this works automatically in all cases
10:22:24 [exa] goes aFfInE TeNsOrS
10:23:32 <ski> @type System.IO.Unsafe.unsafePerformIO . Control.Monad.ST.Unsafe.unsafeSTToIO -- "I guess that's called \"runST . unsafeCoerce\""
10:23:33 <lambdabot> ST s c -> c
10:23:35 <ski> @type Control.Monad.Primitive.unsafeInlineST
10:23:36 <lambdabot> ST s a -> a
10:23:55 <ski> [exa] : not afaik
10:24:11 <Hecate> morning
10:24:17 <ski> moining
10:24:26 × alfiee quits (~alfiee@user/alfiee) (Ping timeout: 272 seconds)
10:25:41 <tomsmeding> ski: right, but at that point I'm not sure one can really say "yes, I'm using ST and not IO" :p
10:26:03 tomsmeding has a meeting
10:26:20 × acidjnk quits (~acidjnk@p200300d6e7283f38a15cd1ba33b15ba0.dip0.t-ipconnect.de) (Ping timeout: 272 seconds)
10:26:36 <[exa]> ski: interesting construction tho. thanks. :D
10:27:24 L29Ah joins (~L29Ah@wikipedia/L29Ah)
10:28:15 × tromp quits (~textual@2a02:a210:cba:8500:6ddc:c1a9:bc13:1391) (Quit: My iMac has gone to sleep. ZZZzzz…)
10:28:36 <ski> hm ?
10:29:26 <ski> (the unsafe stuff ?)
10:29:42 misterfish joins (~misterfis@31-161-39-137.biz.kpn.net)
10:31:29 gmg joins (~user@user/gehmehgeh)
10:33:34 __monty__ joins (~toonn@user/toonn)
10:36:51 tromp joins (~textual@2a02:a210:cba:8500:6ddc:c1a9:bc13:1391)
10:41:46 × olivial quits (~benjaminl@user/benjaminl) (Ping timeout: 244 seconds)
10:41:50 olivial_ joins (~benjaminl@2601:1c0:847f:9c70:223:24ff:fe66:4370)
10:43:23 × Googulator quits (~Googulato@2a01:36d:106:c81:ad7c:ac56:196b:c9a2) (Quit: Client closed)
10:43:39 Googulator joins (~Googulato@2a01-036d-0106-0c81-ad7c-ac56-196b-c9a2.pool6.digikabel.hu)
10:49:12 Tuplanolla joins (~Tuplanoll@91-159-69-59.elisa-laajakaista.fi)
10:53:33 × lortabac quits (~lortabac@2a01:e0a:541:b8f0:55ab:e185:7f81:54a4) (Ping timeout: 252 seconds)
11:04:54 lortabac joins (~lortabac@2a01:e0a:541:b8f0:55ab:e185:7f81:54a4)
11:06:11 alfiee joins (~alfiee@user/alfiee)
11:10:29 × alfiee quits (~alfiee@user/alfiee) (Ping timeout: 260 seconds)
11:11:19 × Googulator quits (~Googulato@2a01-036d-0106-0c81-ad7c-ac56-196b-c9a2.pool6.digikabel.hu) (Quit: Client closed)
11:11:44 xff0x joins (~xff0x@2405:6580:b080:900:3152:bac6:3fc:3eb6)
11:12:06 Googulator joins (~Googulato@2a01:36d:106:c81:ad7c:ac56:196b:c9a2)
11:12:30 × kuribas quits (~user@ip-188-118-57-242.reverse.destiny.be) (Remote host closed the connection)
11:17:56 × lortabac quits (~lortabac@2a01:e0a:541:b8f0:55ab:e185:7f81:54a4) (Ping timeout: 244 seconds)
11:18:10 acidjnk joins (~acidjnk@p200300d6e7283f38a15cd1ba33b15ba0.dip0.t-ipconnect.de)
11:22:45 × merijn quits (~merijn@77.242.116.146) (Ping timeout: 268 seconds)
11:25:09 × eL_Bart0 quits (eL_Bart0@dietunichtguten.org) (Ping timeout: 252 seconds)
11:28:53 wootehfoot joins (~wootehfoo@user/wootehfoot)
11:36:30 merijn joins (~merijn@77.242.116.146)
11:36:38 × CiaoSen quits (~Jura@2a02:8071:64e1:7180:4e50:ddff:fe9b:8922) (Ping timeout: 245 seconds)
11:40:35 × ljdarj quits (~Thunderbi@user/ljdarj) (Ping timeout: 265 seconds)
11:43:29 × merijn quits (~merijn@77.242.116.146) (Ping timeout: 265 seconds)
11:49:34 sprotte24 joins (~sprotte24@p200300d16f33ea00f98eb0699631b9b8.dip0.t-ipconnect.de)
11:49:59 merijn joins (~merijn@77.242.116.146)
11:51:55 alfiee joins (~alfiee@user/alfiee)
11:53:15 × sprotte24 quits (~sprotte24@p200300d16f33ea00f98eb0699631b9b8.dip0.t-ipconnect.de) (Read error: Connection reset by peer)
11:53:19 ljdarj joins (~Thunderbi@user/ljdarj)
11:56:10 × alfiee quits (~alfiee@user/alfiee) (Ping timeout: 244 seconds)
12:00:05 × caconym quits (~caconym@user/caconym) (Quit: bye)
12:03:52 caconym joins (~caconym@user/caconym)
12:05:09 × califax quits (~califax@user/califx) (Remote host closed the connection)
12:05:24 califax joins (~califax@user/califx)
12:09:59 × aristid quits (sid1599@id-1599.uxbridge.irccloud.com) (Ping timeout: 260 seconds)
12:10:58 kuribas joins (~user@ip-188-118-57-242.reverse.destiny.be)
12:11:22 × foul_owl quits (~kerry@94.156.149.93) (Ping timeout: 252 seconds)
12:12:21 × ft quits (~ft@p4fc2a610.dip0.t-ipconnect.de) (Quit: leaving)
12:12:59 × merijn quits (~merijn@77.242.116.146) (Ping timeout: 265 seconds)
12:13:10 aristid joins (sid1599@id-1599.uxbridge.irccloud.com)
12:15:45 × acidjnk quits (~acidjnk@p200300d6e7283f38a15cd1ba33b15ba0.dip0.t-ipconnect.de) (Ping timeout: 252 seconds)
12:16:42 lortabac joins (~lortabac@2a01:e0a:541:b8f0:55ab:e185:7f81:54a4)
12:25:38 foul_owl joins (~kerry@94.156.149.92)
12:26:31 × bitterx quits (~bitterx@user/bitterx) (Quit: bitterx)
12:26:46 dsrt^ joins (~dsrt@108.192.66.114)
12:26:47 off^ joins (~off@108.192.66.114)
12:26:51 merijn joins (~merijn@77.242.116.146)
12:37:18 alfiee joins (~alfiee@user/alfiee)
12:37:30 jespada joins (~jespada@2800:a4:2292:6100:79b2:449e:bbb0:bfcf)
12:42:04 × alfiee quits (~alfiee@user/alfiee) (Ping timeout: 260 seconds)
12:50:19 × bitdex quits (~bitdex@gateway/tor-sasl/bitdex) (Quit: = "")
13:01:35 comerijn joins (~merijn@77.242.116.146)
13:04:13 × merijn quits (~merijn@77.242.116.146) (Ping timeout: 265 seconds)
13:04:54 × slack1256 quits (~slack1256@2803:c600:5111:952f:8534:d540:7202:b800) (Remote host closed the connection)
13:05:50 × mange quits (~user@user/mange) (Quit: Zzz...)
13:23:22 alfiee joins (~alfiee@user/alfiee)
13:27:37 × alfiee quits (~alfiee@user/alfiee) (Ping timeout: 244 seconds)
13:27:46 × L29Ah quits (~L29Ah@wikipedia/L29Ah) (Ping timeout: 248 seconds)
13:33:41 × comerijn quits (~merijn@77.242.116.146) (Ping timeout: 248 seconds)
13:33:49 Miroboru joins (~myrvoll@178-164-114.82.3p.ntebredband.no)
13:37:54 × lbseale quits (~quassel@user/ep1ctetus) (Quit: https://quassel-irc.org - Chat comfortably. Anywhere.)
13:38:13 L29Ah joins (~L29Ah@wikipedia/L29Ah)
13:38:49 lbseale joins (~quassel@user/ep1ctetus)
13:38:53 L29Ah parts (~L29Ah@wikipedia/L29Ah) ()
13:38:56 merijn joins (~merijn@77.242.116.146)
13:40:53 acidjnk joins (~acidjnk@p200300d6e7283f3811296adff26f61ec.dip0.t-ipconnect.de)
13:42:48 × zungi quits (~tory@user/andrewchawk) (Ping timeout: 264 seconds)
13:43:14 L29Ah joins (~L29Ah@wikipedia/L29Ah)
13:45:54 × misterfish quits (~misterfis@31-161-39-137.biz.kpn.net) (Ping timeout: 248 seconds)
13:53:36 zungi joins (~tory@user/andrewchawk)
13:55:49 weary-traveler joins (~user@user/user363627)
14:03:35 × lbseale quits (~quassel@user/ep1ctetus) (Quit: https://quassel-irc.org - Chat comfortably. Anywhere.)
14:04:04 lbseale joins (~quassel@user/ep1ctetus)
14:05:51 × ensyde quits (~ensyde@2601:5c6:c200:6dc0::a1d8) (Ping timeout: 244 seconds)
14:08:46 alfiee joins (~alfiee@user/alfiee)
14:10:30 j1n37- joins (~j1n37@user/j1n37)
14:10:30 × ljdarj quits (~Thunderbi@user/ljdarj) (Ping timeout: 244 seconds)
14:11:43 × j1n37 quits (~j1n37@user/j1n37) (Ping timeout: 268 seconds)
14:12:26 × euleritian quits (~euleritia@ip4d17fae8.dynamic.kabel-deutschland.de) (Ping timeout: 272 seconds)
14:12:54 × machinedgod quits (~machinedg@d108-173-18-100.abhsia.telus.net) (Ping timeout: 260 seconds)
14:13:06 × alfiee quits (~alfiee@user/alfiee) (Ping timeout: 252 seconds)
14:13:15 euleritian joins (~euleritia@dynamic-176-006-131-080.176.6.pool.telefonica.de)
14:17:52 Digitteknohippie joins (~user@user/digit)
14:18:58 × Digit quits (~user@user/digit) (Ping timeout: 252 seconds)
14:24:19 ft joins (~ft@p3e9bc68d.dip0.t-ipconnect.de)
14:27:39 × merijn quits (~merijn@77.242.116.146) (Ping timeout: 260 seconds)
14:30:36 × Googulator quits (~Googulato@2a01:36d:106:c81:ad7c:ac56:196b:c9a2) (Quit: Client closed)
14:31:01 Googulator joins (~Googulato@2a01-036d-0106-0c81-ad7c-ac56-196b-c9a2.pool6.digikabel.hu)
14:34:33 merijn joins (~merijn@77.242.116.146)
14:36:05 × alp quits (~alp@2001:861:8ca0:4940:9bfe:6d72:595b:d191) (Ping timeout: 248 seconds)
14:44:44 × weary-traveler quits (~user@user/user363627) (Read error: Connection reset by peer)
14:44:59 weary-traveler joins (~user@user/user363627)
14:45:39 × Googulator quits (~Googulato@2a01-036d-0106-0c81-ad7c-ac56-196b-c9a2.pool6.digikabel.hu) (Quit: Client closed)
14:45:56 Googulator joins (~Googulato@2a01-036d-0106-0c81-ad7c-ac56-196b-c9a2.pool6.digikabel.hu)
14:46:45 × pavonia quits (~user@user/siracusa) (Quit: Bye!)
14:47:10 × weary-traveler quits (~user@user/user363627) (Remote host closed the connection)
14:52:53 weary-traveler joins (~user@user/user363627)
14:54:30 alfiee joins (~alfiee@user/alfiee)
14:59:15 × alfiee quits (~alfiee@user/alfiee) (Ping timeout: 265 seconds)
15:01:33 glguy joins (glguy@libera/staff/glguy)
15:04:18 Square joins (~Square4@user/square)
15:05:28 × jespada quits (~jespada@2800:a4:2292:6100:79b2:449e:bbb0:bfcf) (Quit: My Mac has gone to sleep. ZZZzzz…)
15:07:19 jespada joins (~jespada@2800:a4:2292:6100:79b2:449e:bbb0:bfcf)
15:23:27 Digitteknohippie is now known as Digit
15:38:59 ash3en joins (~Thunderbi@2a03:7846:b6eb:101:93ac:a90a:da67:f207)
15:40:30 × ash3en quits (~Thunderbi@2a03:7846:b6eb:101:93ac:a90a:da67:f207) (Client Quit)
15:40:34 alfiee joins (~alfiee@user/alfiee)
15:44:45 × alfiee quits (~alfiee@user/alfiee) (Ping timeout: 252 seconds)
15:52:52 sprotte24 joins (~sprotte24@p200300d16f33ea00547a79769710f53f.dip0.t-ipconnect.de)
15:56:09 × lortabac quits (~lortabac@2a01:e0a:541:b8f0:55ab:e185:7f81:54a4) (Quit: WeeChat 4.5.1)
15:57:05 tzh joins (~tzh@c-76-115-131-146.hsd1.or.comcast.net)
16:13:28 × jespada quits (~jespada@2800:a4:2292:6100:79b2:449e:bbb0:bfcf) (Ping timeout: 244 seconds)
16:15:54 jespada joins (~jespada@r167-61-134-196.dialup.adsl.anteldata.net.uy)
16:17:45 × acidjnk quits (~acidjnk@p200300d6e7283f3811296adff26f61ec.dip0.t-ipconnect.de) (Ping timeout: 252 seconds)
16:26:17 alfiee joins (~alfiee@user/alfiee)
16:30:42 × alfiee quits (~alfiee@user/alfiee) (Ping timeout: 252 seconds)
16:31:07 ljdarj joins (~Thunderbi@user/ljdarj)
16:33:21 alp joins (~alp@2001:861:8ca0:4940:d9b2:488b:3c7b:5f95)
16:34:23 × chele quits (~chele@user/chele) (Remote host closed the connection)
16:42:25 misterfish joins (~misterfis@84.53.85.146)
16:53:57 <Square> Local functions is such a great thing for readability. But you cannot access them from outside even for tests right?
16:54:23 <Rembane> Square: Bingo!
16:55:14 tanky joins (~tanky@user/tanky)
16:56:13 × misterfish quits (~misterfis@84.53.85.146) (Ping timeout: 245 seconds)
16:56:44 × euleritian quits (~euleritia@dynamic-176-006-131-080.176.6.pool.telefonica.de) (Read error: Connection reset by peer)
16:57:36 euleritian joins (~euleritia@ip4d17fae8.dynamic.kabel-deutschland.de)
16:57:59 misterfish joins (~misterfis@84.53.85.146)
16:58:24 × zungi quits (~tory@user/andrewchawk) (Ping timeout: 264 seconds)
17:01:10 ashemark joins (~nav@49.205.34.144)
17:02:14 × euleritian quits (~euleritia@ip4d17fae8.dynamic.kabel-deutschland.de) (Ping timeout: 260 seconds)
17:02:20 zungi joins (~tory@user/andrewchawk)
17:02:35 × ashemark quits (~nav@49.205.34.144) (Client Quit)
17:03:00 euleritian joins (~euleritia@dynamic-176-006-131-080.176.6.pool.telefonica.de)
17:03:50 acidjnk joins (~acidjnk@p200300d6e7283f3811296adff26f61ec.dip0.t-ipconnect.de)
17:07:24 × zungi quits (~tory@user/andrewchawk) (Ping timeout: 264 seconds)
17:09:06 × merijn quits (~merijn@77.242.116.146) (Ping timeout: 248 seconds)
17:09:07 zungi joins (~tory@user/andrewchawk)
17:12:02 alfiee joins (~alfiee@user/alfiee)
17:13:32 target_i joins (~target_i@user/target-i/x-6023099)
17:13:58 todi1 is now known as todi
17:16:31 × alfiee quits (~alfiee@user/alfiee) (Ping timeout: 265 seconds)
17:19:48 × euleritian quits (~euleritia@dynamic-176-006-131-080.176.6.pool.telefonica.de) (Ping timeout: 268 seconds)
17:20:21 euleritian joins (~euleritia@dynamic-176-000-139-246.176.0.pool.telefonica.de)
17:23:02 × misterfish quits (~misterfis@84.53.85.146) (Ping timeout: 252 seconds)
17:27:08 × sord937 quits (~sord937@gateway/tor-sasl/sord937) (Quit: sord937)
17:31:23 euphores joins (~SASL_euph@user/euphores)
17:33:33 × kuribas quits (~user@ip-188-118-57-242.reverse.destiny.be) (Remote host closed the connection)
17:34:05 Digitteknohippie joins (~user@user/digit)
17:34:34 justsomeguy joins (~justsomeg@user/justsomeguy)
17:34:43 × euleritian quits (~euleritia@dynamic-176-000-139-246.176.0.pool.telefonica.de) (Read error: Connection reset by peer)
17:35:00 euleritian joins (~euleritia@ip4d17fae8.dynamic.kabel-deutschland.de)
17:35:30 × Digit quits (~user@user/digit) (Ping timeout: 276 seconds)
17:39:19 <tomsmeding> Square: you may want to have a look at https://hackage.haskell.org/package/doctest
17:39:33 <tomsmeding> (haven't used it myself, but I've seen other people use it)
17:40:00 × justsomeguy quits (~justsomeg@user/justsomeguy) (Ping timeout: 252 seconds)
17:41:49 <tomsmeding> though from a quick look at the readme it looks rather involved to set up
17:44:22 acidjnk_new joins (~acidjnk@p200300d6e7283f3800c9913f6d25b0a5.dip0.t-ipconnect.de)
17:44:28 × acidjnk quits (~acidjnk@p200300d6e7283f3811296adff26f61ec.dip0.t-ipconnect.de) (Ping timeout: 268 seconds)
17:50:27 × ljdarj quits (~Thunderbi@user/ljdarj) (Ping timeout: 276 seconds)
17:58:25 alfiee joins (~alfiee@user/alfiee)
17:59:54 × jle` quits (~jle`@2603:8001:3b00:11:dd38:7882:e75c:4a19) (Ping timeout: 244 seconds)
18:02:37 × alfiee quits (~alfiee@user/alfiee) (Ping timeout: 252 seconds)
18:04:32 ljdarj joins (~Thunderbi@user/ljdarj)
18:05:36 × zungi quits (~tory@user/andrewchawk) (Ping timeout: 264 seconds)
18:07:15 × Googulator quits (~Googulato@2a01-036d-0106-0c81-ad7c-ac56-196b-c9a2.pool6.digikabel.hu) (Quit: Client closed)
18:07:37 Googulator joins (~Googulato@2a01-036d-0106-0c81-ad7c-ac56-196b-c9a2.pool6.digikabel.hu)
18:10:01 tccq joins (~user@user/tccq)
18:11:34 <carbolymer> anyone knowledgeable in dbus library here? https://stackoverflow.com/questions/79467506/how-to-set-dbus-interface-property-in-haskell
18:13:04 zungi joins (~tory@user/andrewchawk)
18:14:30 ensyde joins (~ensyde@2601:5c6:c200:6dc0::a1d8)
18:18:44 × sim590 quits (~simon@209-15-185-101.resi.cgocable.ca) (Quit: WeeChat 4.5.1)
18:19:26 × ensyde quits (~ensyde@2601:5c6:c200:6dc0::a1d8) (Ping timeout: 272 seconds)
18:21:19 × L29Ah quits (~L29Ah@wikipedia/L29Ah) (Read error: Connection reset by peer)
18:21:42 × rvalue quits (~rvalue@user/rvalue) (Read error: Connection reset by peer)
18:22:13 rvalue joins (~rvalue@user/rvalue)
18:31:39 misterfish joins (~misterfis@84.53.85.146)
18:32:04 merijn joins (~merijn@host-vr.cgnat-g.v4.dfn.nl)
18:32:34 machinedgod joins (~machinedg@d108-173-18-100.abhsia.telus.net)
18:38:45 × merijn quits (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 248 seconds)
18:44:08 alfiee joins (~alfiee@user/alfiee)
18:44:47 L29Ah joins (~L29Ah@wikipedia/L29Ah)
18:45:31 × misterfish quits (~misterfis@84.53.85.146) (Ping timeout: 268 seconds)
18:48:28 × alfiee quits (~alfiee@user/alfiee) (Ping timeout: 244 seconds)
18:50:07 merijn joins (~merijn@host-vr.cgnat-g.v4.dfn.nl)
18:53:20 JuanDaugherty joins (~juan@user/JuanDaugherty)
18:55:06 × merijn quits (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 265 seconds)
18:59:07 Digitteknohippie is now known as Digit
19:05:30 merijn joins (~merijn@host-vr.cgnat-g.v4.dfn.nl)
19:05:59 × j1n37- quits (~j1n37@user/j1n37) (Read error: Connection reset by peer)
19:09:46 j1n37 joins (~j1n37@user/j1n37)
19:12:47 JuanDaugherty is now known as ColinRobinson
19:13:01 × merijn quits (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 252 seconds)
19:15:14 × lxsameer quits (~lxsameer@Serene/lxsameer) (Ping timeout: 260 seconds)
19:21:12 × acidjnk_new quits (~acidjnk@p200300d6e7283f3800c9913f6d25b0a5.dip0.t-ipconnect.de) (Ping timeout: 252 seconds)
19:22:49 peterbecich joins (~Thunderbi@syn-047-229-123-186.res.spectrum.com)
19:22:57 × vanishingideal quits (~vanishing@user/vanishingideal) (Ping timeout: 248 seconds)
19:23:55 merijn joins (~merijn@host-vr.cgnat-g.v4.dfn.nl)
19:25:07 vanishingideal joins (~vanishing@user/vanishingideal)
19:28:21 × merijn quits (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 248 seconds)
19:29:54 × Flow quits (~none@gentoo/developer/flow) (Ping timeout: 276 seconds)
19:30:33 alfiee joins (~alfiee@user/alfiee)
19:34:36 × ljdarj quits (~Thunderbi@user/ljdarj) (Quit: ljdarj)
19:34:58 × alfiee quits (~alfiee@user/alfiee) (Ping timeout: 244 seconds)
19:39:17 merijn joins (~merijn@host-vr.cgnat-g.v4.dfn.nl)
19:43:30 Flow joins (~none@gentoo/developer/flow)
19:43:33 × merijn quits (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 246 seconds)
19:44:21 × peterbecich quits (~Thunderbi@syn-047-229-123-186.res.spectrum.com) (Ping timeout: 248 seconds)
19:45:18 ash3en joins (~Thunderbi@2a03:7846:b6eb:101:93ac:a90a:da67:f207)
19:46:24 alx741 joins (~alx741@186.33.188.229)
19:49:30 × alx741 quits (~alx741@186.33.188.229) (Client Quit)
19:51:42 × weary-traveler quits (~user@user/user363627) (Remote host closed the connection)
19:53:24 lxsameer joins (~lxsameer@Serene/lxsameer)
19:54:40 merijn joins (~merijn@host-vr.cgnat-g.v4.dfn.nl)
19:57:27 ljdarj joins (~Thunderbi@user/ljdarj)
19:57:41 × vanishingideal quits (~vanishing@user/vanishingideal) (Ping timeout: 248 seconds)
19:57:41 × ColinRobinson quits (~juan@user/JuanDaugherty) (Quit: praxis.meansofproduction.biz (juan@acm.org))
19:59:13 × merijn quits (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 248 seconds)
19:59:22 vanishingideal joins (~vanishing@user/vanishingideal)
20:00:00 × caconym quits (~caconym@user/caconym) (Quit: bye)
20:00:41 caconym joins (~caconym@user/caconym)
20:02:14 pavonia joins (~user@user/siracusa)
20:04:51 × jespada quits (~jespada@r167-61-134-196.dialup.adsl.anteldata.net.uy) (Quit: My Mac has gone to sleep. ZZZzzz…)
20:09:46 merijn joins (~merijn@host-vr.cgnat-g.v4.dfn.nl)
20:10:47 × ash3en quits (~Thunderbi@2a03:7846:b6eb:101:93ac:a90a:da67:f207) (Quit: ash3en)
20:10:59 cheater_ joins (~Username@user/cheater)
20:12:05 × cheater quits (~Username@user/cheater) (Ping timeout: 248 seconds)
20:12:14 cheater_ is now known as cheater
20:15:57 alfiee joins (~alfiee@user/alfiee)
20:16:13 × merijn quits (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 245 seconds)
20:20:08 × alfiee quits (~alfiee@user/alfiee) (Ping timeout: 252 seconds)
20:21:24 acidjnk_new joins (~acidjnk@p200300d6e7283f3800c9913f6d25b0a5.dip0.t-ipconnect.de)
20:27:48 merijn joins (~merijn@host-vr.cgnat-g.v4.dfn.nl)
20:28:40 Sgeo_ joins (~Sgeo@user/sgeo)
20:29:03 × Smiles quits (uid551636@id-551636.lymington.irccloud.com) (Quit: Connection closed for inactivity)
20:31:52 × Sgeo quits (~Sgeo@user/sgeo) (Ping timeout: 252 seconds)
20:32:14 × merijn quits (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 260 seconds)
20:43:11 merijn joins (~merijn@host-vr.cgnat-g.v4.dfn.nl)
20:45:49 × jcarpenter2 quits (~lol@96.78.87.197) (Read error: Connection reset by peer)
20:45:54 lol_ joins (~lol@2603:3016:1e01:b960:5cab:e8ae:c3b1:72bf)
20:48:02 × merijn quits (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 252 seconds)
20:50:42 ash3en joins (~Thunderbi@2a03:7846:b6eb:101:93ac:a90a:da67:f207)
20:50:53 × todi quits (~todi@p57803331.dip0.t-ipconnect.de) (Remote host closed the connection)
20:51:03 × ash3en quits (~Thunderbi@2a03:7846:b6eb:101:93ac:a90a:da67:f207) (Client Quit)
20:57:15 × michalz quits (~michalz@185.246.207.203) (Remote host closed the connection)
20:58:57 merijn joins (~merijn@host-vr.cgnat-g.v4.dfn.nl)
21:02:20 alfiee joins (~alfiee@user/alfiee)
21:03:24 × merijn quits (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 252 seconds)
21:03:35 ash3en joins (~Thunderbi@2a03:7846:b6eb:101:93ac:a90a:da67:f207)
21:04:06 misterfish joins (~misterfis@84.53.85.146)
21:04:44 × vanishingideal quits (~vanishing@user/vanishingideal) (Ping timeout: 272 seconds)
21:06:12 vanishingideal joins (~vanishing@user/vanishingideal)
21:06:25 × alfiee quits (~alfiee@user/alfiee) (Ping timeout: 244 seconds)
21:10:46 merijn joins (~merijn@host-vr.cgnat-g.v4.dfn.nl)
21:14:10 × ash3en quits (~Thunderbi@2a03:7846:b6eb:101:93ac:a90a:da67:f207) (Quit: ash3en)
21:14:41 × misterfish quits (~misterfis@84.53.85.146) (Ping timeout: 244 seconds)
21:15:30 × merijn quits (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 272 seconds)
21:16:37 misterfish joins (~misterfis@84.53.85.146)
21:16:38 ash3en joins (~Thunderbi@2a03:7846:b6eb:101:93ac:a90a:da67:f207)
21:16:58 × ash3en quits (~Thunderbi@2a03:7846:b6eb:101:93ac:a90a:da67:f207) (Client Quit)
21:19:32 × tromp quits (~textual@2a02:a210:cba:8500:6ddc:c1a9:bc13:1391) (Quit: My iMac has gone to sleep. ZZZzzz…)
21:22:25 × tabaqui1 quits (~root@87.200.129.102) (Ping timeout: 248 seconds)
21:22:46 <dminuoso> What's with this behavior of cross posting simultaneously in different platforms?
21:23:11 <dminuoso> It seems as if this is some attempt at soliciting the fastest possible response, it feels rude.
21:24:13 <geekosaur> I don't see a problem with it tbh
21:24:17 × dsrt^ quits (~dsrt@108.192.66.114) (Ping timeout: 252 seconds)
21:24:43 <geekosaur> less "soliciting the fastest possible response" and more "dealing with a balkanized userbase"
21:24:57 dsrt^ joins (~dsrt@108.192.66.114)
21:25:20 tromp joins (~textual@2a02:a210:cba:8500:b949:287e:6bbd:873b)
21:25:51 <geekosaur> SO, Reddit, Discourse, IRC, Matrix, Discord…
21:26:08 merijn joins (~merijn@host-vr.cgnat-g.v4.dfn.nl)
21:26:23 <geekosaur> (and I think there are multiple Discord servers with Haskell rooms)
21:28:29 <monochrom> My counter-measure, when I bother to, is to provide conflicting answers across the platforms. >:)
21:30:44 × merijn quits (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 265 seconds)
21:31:33 × zungi quits (~tory@user/andrewchawk) (Remote host closed the connection)
21:32:18 <haskellbridge> <sm> I agree with both sides.. sometimes cc’ing is necessary/effective but it can be overdone
21:32:20 <monochrom> And when I don't bother to, I rest assured that conflicting answers from multiple platforms will happen naturally anyway!
21:32:34 zungi joins (~tory@user/andrewchawk)
21:33:05 ash3en joins (~Thunderbi@2a03:7846:b6eb:101:93ac:a90a:da67:f207)
21:33:24 × ash3en quits (~Thunderbi@2a03:7846:b6eb:101:93ac:a90a:da67:f207) (Client Quit)
21:33:29 <haskellbridge> <sm> For a non-urgent support request I’ll usually at least wait a little before trying another channel
21:34:52 <haskellbridge> <sm> Then again irc and forums are so distinct there’s no real harm
21:35:01 <geekosaur> yes, but I also differentiate between lower-latency/lower-retention (even with history, how far back are you willing to scroll?) venues and higher-overhead/ … that
21:35:23 × wootehfoot quits (~wootehfoo@user/wootehfoot) (Quit: Leaving)
21:41:30 merijn joins (~merijn@host-vr.cgnat-g.v4.dfn.nl)
21:43:13 × tromp quits (~textual@2a02:a210:cba:8500:b949:287e:6bbd:873b) (Quit: My iMac has gone to sleep. ZZZzzz…)
21:44:37 tromp joins (~textual@2a02:a210:cba:8500:b949:287e:6bbd:873b)
21:45:56 × merijn quits (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 252 seconds)
21:48:45 alfiee joins (~alfiee@user/alfiee)
21:52:53 × alfiee quits (~alfiee@user/alfiee) (Ping timeout: 252 seconds)
21:55:33 weary-traveler joins (~user@user/user363627)
21:56:53 merijn joins (~merijn@host-vr.cgnat-g.v4.dfn.nl)
22:00:38 tabaqui1 joins (~root@87.200.129.102)
22:03:28 × Unicorn_Princess quits (~Unicorn_P@user/Unicorn-Princess/x-3540542) (Remote host closed the connection)
22:03:29 × merijn quits (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 248 seconds)
22:07:42 × tromp quits (~textual@2a02:a210:cba:8500:b949:287e:6bbd:873b) (Quit: My iMac has gone to sleep. ZZZzzz…)
22:09:44 tromp joins (~textual@2a02:a210:cba:8500:b949:287e:6bbd:873b)
22:14:54 merijn joins (~merijn@host-vr.cgnat-g.v4.dfn.nl)
22:15:54 × tabaqui1 quits (~root@87.200.129.102) (Ping timeout: 260 seconds)
22:16:32 × weary-traveler quits (~user@user/user363627) (Remote host closed the connection)
22:16:59 × target_i quits (~target_i@user/target-i/x-6023099) (Quit: leaving)
22:19:40 × merijn quits (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 252 seconds)
22:21:06 × tromp quits (~textual@2a02:a210:cba:8500:b949:287e:6bbd:873b) (Quit: My iMac has gone to sleep. ZZZzzz…)
22:30:39 merijn joins (~merijn@host-vr.cgnat-g.v4.dfn.nl)
22:33:24 × lxsameer quits (~lxsameer@Serene/lxsameer) (Ping timeout: 272 seconds)
22:35:04 × merijn quits (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 252 seconds)
22:36:08 alfiee joins (~alfiee@user/alfiee)
22:40:34 × alfiee quits (~alfiee@user/alfiee) (Ping timeout: 260 seconds)
22:46:02 merijn joins (~merijn@host-vr.cgnat-g.v4.dfn.nl)
22:50:57 × merijn quits (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 268 seconds)
22:52:37 j1n37- joins (~j1n37@user/j1n37)
22:53:46 × j1n37 quits (~j1n37@user/j1n37) (Ping timeout: 252 seconds)
22:56:19 × foul_owl quits (~kerry@94.156.149.92) (Ping timeout: 260 seconds)
22:58:49 <hololeap> I'm trying to parse a string with parsec that looks like "this:that,black:white" into [(String,String)]
22:59:12 <hololeap> I started with: sepBy anyChar (char ',')
22:59:32 <hololeap> and I'm not sure how to then split the substrings on (char ':')
23:00:53 <tomsmeding> hololeap: sepBy ((,) <$> manyTill (char ':') <*> manyTill (lookAhead (oneOf ":," <|> eof))) (char ',') ?
23:01:24 merijn joins (~merijn@host-vr.cgnat-g.v4.dfn.nl)
23:01:26 ljdarj1 joins (~Thunderbi@user/ljdarj)
23:02:18 <hololeap> hm, you would think with Parsec being a monad, it could be done with: sepBy anyChar (char ',') >>= mapM (...)
23:02:28 <tomsmeding> anyChar parses _one_ character
23:02:55 <hololeap> right, s/anyChar/(many anyChar)/
23:03:04 <tomsmeding> also, while you can process the result of parsing later using (>>=), parsec always parses _from_ the input string
23:03:13 × ljdarj quits (~Thunderbi@user/ljdarj) (Ping timeout: 248 seconds)
23:03:13 ljdarj1 is now known as ljdarj
23:03:56 <tomsmeding> you can't "re-inject" some arbitrary string into the source to be parsed
23:04:22 <hololeap> I see
23:05:03 <tomsmeding> of course you technically can just start a new parser for that string, and you can also `setInput`, but typically both are a bad idea
23:05:52 × merijn quits (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 252 seconds)
23:06:24 <tomsmeding> hololeap: also, that "sepBy (many anyChar) (char ',')" wouldn't even work: the `many anyChar` would consume the entire input from here, and because it consumed input, it would count as "succeeded" which means it doesn't backtrack
23:07:16 <tomsmeding> % import Text.Parsec
23:07:16 <yahb2> <no output>
23:07:24 <tomsmeding> % parse (sepBy (many anyChar) (char ',')) "<stdin>" "abc,def,ghi"
23:07:24 <yahb2> Right ["abc,def,ghi"]
23:07:41 <tomsmeding> hm, let's see if I can whiteboard code
23:07:56 <tomsmeding> % parse (sepBy ((,) <$> manyTill (char ':') <*> manyTill (lookAhead (oneOf ":," <|> eof))) (char ',')) "<stdin>" "this:that,black:white"
23:07:56 <yahb2> <interactive>:287:23: error: [GHC-83865] ; • Couldn't match expected type: ParsecT ; String () GHC.Internal.Data.Functor.Identity.Identity a1 ; ...
23:08:07 <tomsmeding> evidently not!
23:08:23 <tomsmeding> % parse (sepBy ((,) <$> manyTill anyChar (char ':') <*> manyTill anyChar (lookAhead (oneOf ":," <|> eof))) (char ',')) "<stdin>" "this:that,black:white"
23:08:23 <yahb2> <interactive>:289:99: error: [GHC-83865] ; • Couldn't match type ‘()’ with ‘Char’ ; Expected: ParsecT ; String () GHC.Internal.Data.Functor.Identity.Identity Char ; ...
23:08:26 <monochrom> Yikes, abuse of lookAhead again.
23:08:50 <monochrom> many (satisfy (/= ',')) pretty please
23:08:59 <tomsmeding> I guess
23:09:49 <monochrom> What you should really lament, if you like, is that parsec is not regex, so whereas in regex you just have to say ".*,.*", you simply can't do that in parsec.
23:10:09 <tomsmeding> % parse (sepBy ((,) <$> (many (satisfy (/= ':')) <* char ':') <*> many (satisfy (`notElem` ":,"))) (char ',')) "<stdin>" "this:that,black:white"
23:10:09 <yahb2> Right [("this","that"),("black","white")]
23:10:20 <tomsmeding> hololeap: there
23:10:29 foul_owl joins (~kerry@174-21-138-88.tukw.qwest.net)
23:10:32 <hololeap> cool, thanks :)
23:10:43 <tomsmeding> monochrom: thanks, it's been too long since I parsec'd, this is also nicer to write
23:10:44 <monochrom> BTW the "convenience" of regex allowing that is avenged by the fact that such high non-determinism causes exp-time or exp-space.
23:10:57 <hololeap> although I wonder if it would be more readable to just do this with span from Data.List
23:11:37 <tomsmeding> if you write out that <$> <*> sequence as a do-block, it gets much more readable
23:11:39 <monochrom> Oh, the split package has tools for that too.
23:12:12 <monochrom> You can write your own recursion over span. But the split package does that for you.
23:12:40 <tomsmeding> hololeap: https://paste.tomsmeding.com/QHaiHEVF
23:12:43 <monochrom> Although, I confess that I want 0 dependencies so I wrote my own recursion :)
23:12:53 <tomsmeding> but yes, a splitting function is perhaps nicer here
23:16:46 merijn joins (~merijn@host-vr.cgnat-g.v4.dfn.nl)
23:20:18 × rvalue quits (~rvalue@user/rvalue) (Quit: ZNC - https://znc.in)
23:21:03 × merijn quits (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 244 seconds)
23:23:46 alfiee joins (~alfiee@user/alfiee)
23:28:14 × alfiee quits (~alfiee@user/alfiee) (Ping timeout: 252 seconds)
23:32:08 merijn joins (~merijn@host-vr.cgnat-g.v4.dfn.nl)
23:36:46 × __monty__ quits (~toonn@user/toonn) (Quit: leaving)
23:37:49 rvalue joins (~rvalue@user/rvalue)
23:38:43 × merijn quits (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 245 seconds)
23:50:12 merijn joins (~merijn@host-vr.cgnat-g.v4.dfn.nl)
23:51:13 src joins (~src@user/src)
23:55:05 × merijn quits (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 268 seconds)
23:58:51 merijn joins (~merijn@host-vr.cgnat-g.v4.dfn.nl)
23:59:26 <EvanR> is parsec more or less powerful than regex
23:59:41 <EvanR> does it hinge on whether unlimited lookahead is regex

All times are in UTC on 2025-02-25.