Logs on 2025-04-11 (liberachat/#haskell)
| 00:00:34 | <EvanR> | that's addCont |
| 00:01:05 | <EvanR> | but if you went the route of an interpreter for a free monad, you would "catch" there |
| 00:01:35 | <EvanR> | and >>= would still add another post processing step in that case as well |
| 00:02:51 | → | merijn joins (~merijn@host-vr.cgnat-g.v4.dfn.nl) |
| 00:04:33 | × | jespada quits (~jespada@r179-25-43-11.dialup.adsl.anteldata.net.uy) (Ping timeout: 248 seconds) |
| 00:08:04 | × | merijn quits (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 276 seconds) |
| 00:10:12 | <Guest87> | Hmmm this is very cool |
| 00:10:33 | <Guest87> | EvanR, thank you so much for patiently letting me fix issues in my program and then talking through it |
| 00:10:59 | <Guest87> | I have ran into "Free Monads" before but this is the first time I see a use case, so I will just go and read about it |
| 00:18:35 | → | merijn joins (~merijn@host-vr.cgnat-g.v4.dfn.nl) |
| 00:23:18 | × | merijn quits (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 245 seconds) |
| 00:25:52 | × | Unicorn_Princess quits (~Unicorn_P@user/Unicorn-Princess/x-3540542) (Remote host closed the connection) |
| 00:30:12 | × | ChaiTRex quits (~ChaiTRex@user/chaitrex) (Ping timeout: 264 seconds) |
| 00:30:46 | → | ChaiTRex joins (~ChaiTRex@user/chaitrex) |
| 00:33:59 | × | potatoespotatoes quits (~quassel@user/potatoespotatoes) () |
| 00:34:22 | → | merijn joins (~merijn@host-vr.cgnat-g.v4.dfn.nl) |
| 00:35:42 | → | ezzieyguywuf joins (~Unknown@user/ezzieyguywuf) |
| 00:36:40 | → | potatoespotatoes joins (~quassel@130.44.147.204) |
| 00:36:40 | × | potatoespotatoes quits (~quassel@130.44.147.204) (Changing host) |
| 00:36:40 | → | potatoespotatoes joins (~quassel@user/potatoespotatoes) |
| 00:39:06 | × | merijn quits (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 252 seconds) |
| 00:39:15 | × | potatoespotatoes quits (~quassel@user/potatoespotatoes) (Client Quit) |
| 00:39:17 | × | sabathan2 quits (~sabathan@amarseille-159-1-12-107.w86-203.abo.wanadoo.fr) (Ping timeout: 248 seconds) |
| 00:39:45 | → | potatoespotatoes joins (~quassel@130.44.147.204) |
| 00:39:45 | × | potatoespotatoes quits (~quassel@130.44.147.204) (Changing host) |
| 00:39:45 | → | potatoespotatoes joins (~quassel@user/potatoespotatoes) |
| 00:42:57 | → | sabathan2 joins (~sabathan@amarseille-159-1-12-107.w86-203.abo.wanadoo.fr) |
| 00:50:21 | → | merijn joins (~merijn@host-vr.cgnat-g.v4.dfn.nl) |
| 00:57:20 | × | merijn quits (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 252 seconds) |
| 00:57:21 | <haskellbridge> | <Bowuigi> lens-regex-pcre introduces a clever approach to implementing and extending structural regular expressions. Are there generalizations of this? Such that you can query parts of a structure and modify them based on that |
| 00:57:49 | → | peterbecich joins (~Thunderbi@syn-047-229-123-186.res.spectrum.com) |
| 00:58:16 | × | otto_s quits (~user@p4ff278a2.dip0.t-ipconnect.de) (Ping timeout: 265 seconds) |
| 00:58:54 | <geekosaur> | isn't that … lens? |
| 00:59:13 | <haskellbridge> | <Bowuigi> No no I mean, optics that check if there's a certain node inside a tree and allow you to modify the place where the query is ran rather than the node |
| 00:59:45 | → | otto_s joins (~user@p5de2fd33.dip0.t-ipconnect.de) |
| 01:01:53 | <haskellbridge> | <Bowuigi> "branch . without leaf" matching branches that do not have leaves as their inmediate substructures, for example |
| 01:02:26 | <glguy> | You can write that in regular lens |
| 01:02:29 | <geekosaur> | I think there are optics for that? |
| 01:03:03 | <haskellbridge> | <Bowuigi> I'd assume so yeah |
| 01:03:22 | <glguy> | you need to be careful about going and adding a leaf in that case where there wasn't one there before it you want to be able to use lens law reasoning |
| 01:08:13 | → | merijn joins (~merijn@host-vr.cgnat-g.v4.dfn.nl) |
| 01:08:17 | <haskellbridge> | <Bowuigi> Based on that warning I think that filtered is what I'm looking for |
| 01:09:17 | <haskellbridge> | <Bowuigi> Actually no, it's rewriteOf |
| 01:09:54 | × | xff0x quits (~xff0x@2405:6580:b080:900:1c0d:6c97:349e:6228) (Ping timeout: 252 seconds) |
| 01:10:02 | <haskellbridge> | <Bowuigi> Based on this example https://github.com/stevenfontanella/microlens/pull/119#issuecomment-496004851 |
| 01:13:43 | × | merijn quits (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 276 seconds) |
| 01:17:22 | × | acidjnk quits (~acidjnk@p200300d6e71c4f7444aa95b6f7c7abd1.dip0.t-ipconnect.de) (Ping timeout: 272 seconds) |
| 01:24:00 | → | merijn joins (~merijn@host-vr.cgnat-g.v4.dfn.nl) |
| 01:26:35 | → | __jmcantrell__ joins (~weechat@user/jmcantrell) |
| 01:26:35 | jmcantrell | is now known as Guest8811 |
| 01:26:35 | × | Guest8811 quits (644f1bed9a@user/jmcantrell) (Killed (copper.libera.chat (Nickname regained by services))) |
| 01:26:35 | __jmcantrell__ | is now known as jmcantrell |
| 01:26:44 | → | jmcantrell_ joins (644f1bed9a@user/jmcantrell) |
| 01:29:19 | × | merijn quits (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 276 seconds) |
| 01:31:42 | × | Guest87 quits (~Guest87@2620:72:0:1f18:7d2a:62e7:7a20:d79f) (Quit: Client closed) |
| 01:32:41 | × | ezzieyguywuf quits (~Unknown@user/ezzieyguywuf) (Quit: Lost terminal) |
| 01:34:32 | → | ezzieyguywuf joins (~Unknown@user/ezzieyguywuf) |
| 01:39:48 | → | merijn joins (~merijn@host-vr.cgnat-g.v4.dfn.nl) |
| 01:43:03 | → | OftenFaded joins (~OftenFade@user/tisktisk) |
| 01:44:55 | × | merijn quits (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 276 seconds) |
| 01:55:34 | → | merijn joins (~merijn@host-vr.cgnat-g.v4.dfn.nl) |
| 02:00:30 | × | merijn quits (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 252 seconds) |
| 02:05:35 | → | xff0x joins (~xff0x@fsb6a9491c.tkyc517.ap.nuro.jp) |
| 02:11:21 | → | merijn joins (~merijn@host-vr.cgnat-g.v4.dfn.nl) |
| 02:16:19 | × | merijn quits (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 260 seconds) |
| 02:20:04 | × | peterbecich quits (~Thunderbi@syn-047-229-123-186.res.spectrum.com) (Ping timeout: 272 seconds) |
| 02:21:58 | × | inca quits (~inca@pool-96-255-212-224.washdc.fios.verizon.net) (Ping timeout: 276 seconds) |
| 02:22:26 | × | haskellbridge quits (~hackager@syn-024-093-192-219.res.spectrum.com) (Remote host closed the connection) |
| 02:23:00 | → | haskellbridge joins (~hackager@syn-024-093-192-219.res.spectrum.com) |
| 02:23:00 | ChanServ | sets mode +v haskellbridge |
| 02:26:58 | → | merijn joins (~merijn@host-vr.cgnat-g.v4.dfn.nl) |
| 02:30:15 | × | ezzieyguywuf quits (~Unknown@user/ezzieyguywuf) (Remote host closed the connection) |
| 02:30:52 | × | Sciencentistguy quits (~sciencent@hacksoc/ordinary-member) (Quit: Ping timeout (120 seconds)) |
| 02:31:13 | → | Sciencentistguy joins (~sciencent@hacksoc/ordinary-member) |
| 02:32:43 | → | ezzieyguywuf joins (~Unknown@user/ezzieyguywuf) |
| 02:33:57 | × | merijn quits (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 248 seconds) |
| 02:34:08 | × | ezzieyguywuf quits (~Unknown@user/ezzieyguywuf) (Client Quit) |
| 02:35:48 | → | ezzieyguywuf joins (~Unknown@user/ezzieyguywuf) |
| 02:42:15 | → | inca joins (~inca@pool-96-255-212-224.washdc.fios.verizon.net) |
| 02:45:02 | → | merijn joins (~merijn@host-vr.cgnat-g.v4.dfn.nl) |
| 02:48:24 | → | bitdex joins (~bitdex@gateway/tor-sasl/bitdex) |
| 02:49:16 | × | roconnor quits (~quassel@rocq/roconnor) (Ping timeout: 276 seconds) |
| 02:49:19 | → | roconnor_ joins (~quassel@rocq/roconnor) |
| 02:49:54 | × | merijn quits (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 252 seconds) |
| 03:00:49 | → | merijn joins (~merijn@host-vr.cgnat-g.v4.dfn.nl) |
| 03:02:13 | × | Ranhir quits (~Ranhir@157.97.53.139) (Remote host closed the connection) |
| 03:04:24 | → | Ranhir joins (~Ranhir@157.97.53.139) |
| 03:05:38 | × | j1n37 quits (~j1n37@user/j1n37) (Read error: Connection reset by peer) |
| 03:05:40 | × | merijn quits (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 252 seconds) |
| 03:11:39 | → | j1n37 joins (~j1n37@user/j1n37) |
| 03:16:36 | → | merijn joins (~merijn@host-vr.cgnat-g.v4.dfn.nl) |
| 03:21:21 | × | merijn quits (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 252 seconds) |
| 03:22:21 | → | peterbecich joins (~Thunderbi@syn-047-229-123-186.res.spectrum.com) |
| 03:32:24 | → | merijn joins (~merijn@host-vr.cgnat-g.v4.dfn.nl) |
| 03:32:48 | × | ezzieyguywuf quits (~Unknown@user/ezzieyguywuf) (Quit: Lost terminal) |
| 03:34:36 | → | ezzieyguywuf joins (~Unknown@user/ezzieyguywuf) |
| 03:37:58 | × | merijn quits (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 272 seconds) |
| 03:43:13 | → | michalz joins (~michalz@185.246.207.205) |
| 03:47:51 | → | aforemny joins (~aforemny@2001:9e8:6cf4:300:5306:52f:8502:4ee0) |
| 03:48:13 | → | merijn joins (~merijn@host-vr.cgnat-g.v4.dfn.nl) |
| 03:49:48 | × | aforemny_ quits (~aforemny@2001:9e8:6cd3:ed00:7f35:da5a:93ab:c3e3) (Ping timeout: 276 seconds) |
| 03:53:37 | × | merijn quits (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 276 seconds) |
| 04:00:46 | × | xff0x quits (~xff0x@fsb6a9491c.tkyc517.ap.nuro.jp) (Ping timeout: 276 seconds) |
| 04:01:05 | → | xff0x joins (~xff0x@fsb6a9491c.tkyc517.ap.nuro.jp) |
| 04:03:58 | → | merijn joins (~merijn@host-vr.cgnat-g.v4.dfn.nl) |
| 04:10:46 | × | merijn quits (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 244 seconds) |
| 04:20:55 | × | peterbecich quits (~Thunderbi@syn-047-229-123-186.res.spectrum.com) (Ping timeout: 276 seconds) |
| 04:21:32 | → | tabaqui joins (~tabaqui@167.71.80.236) |
| 04:22:00 | → | merijn joins (~merijn@host-vr.cgnat-g.v4.dfn.nl) |
| 04:27:25 | × | merijn quits (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 276 seconds) |
| 04:37:46 | → | merijn joins (~merijn@host-vr.cgnat-g.v4.dfn.nl) |
| 04:42:44 | × | merijn quits (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 260 seconds) |
| 04:44:58 | → | merijn joins (~merijn@host-vr.cgnat-g.v4.dfn.nl) |
| 04:50:10 | × | merijn quits (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 276 seconds) |
| 04:52:04 | × | inca quits (~inca@pool-96-255-212-224.washdc.fios.verizon.net) (Ping timeout: 272 seconds) |
| 04:57:52 | → | peterbecich joins (~Thunderbi@syn-047-229-123-186.res.spectrum.com) |
| 05:00:44 | → | merijn joins (~merijn@host-vr.cgnat-g.v4.dfn.nl) |
| 05:04:23 | → | inca joins (~inca@pool-96-255-212-224.washdc.fios.verizon.net) |
| 05:05:34 | × | merijn quits (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 252 seconds) |
| 05:09:20 | → | qeef joins (~qeef@138-169-143-94.cust.centrio.cz) |
| 05:16:32 | → | merijn joins (~merijn@host-vr.cgnat-g.v4.dfn.nl) |
| 05:22:01 | × | merijn quits (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 276 seconds) |
| 05:28:17 | × | forell quits (~forell@user/forell) (Ping timeout: 248 seconds) |
| 05:32:19 | → | merijn joins (~merijn@host-vr.cgnat-g.v4.dfn.nl) |
| 05:34:22 | × | qeef quits (~qeef@138-169-143-94.cust.centrio.cz) (Ping timeout: 276 seconds) |
| 05:35:38 | × | peterbecich quits (~Thunderbi@syn-047-229-123-186.res.spectrum.com) (Ping timeout: 252 seconds) |
| 05:37:34 | × | merijn quits (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 260 seconds) |
| 05:40:03 | × | XZDX quits (~xzdx@user/XZDX) (Remote host closed the connection) |
| 05:41:05 | → | Garbanzo joins (~Garbanzo@2602:304:6eac:dc10::2e) |
| 05:41:34 | → | remexre_ joins (~remexre@user/remexre) |
| 05:41:41 | × | remexre quits (~remexre@user/remexre) (Ping timeout: 268 seconds) |
| 05:43:26 | × | Eoco quits (~ian@128.101.131.218) (Ping timeout: 265 seconds) |
| 05:45:13 | → | Eoco joins (~ian@128.101.131.218) |
| 05:46:43 | × | remexre_ quits (~remexre@user/remexre) (Ping timeout: 276 seconds) |
| 05:47:47 | → | JuanDaugherty joins (~juan@user/JuanDaugherty) |
| 05:48:07 | → | merijn joins (~merijn@host-vr.cgnat-g.v4.dfn.nl) |
| 05:50:12 | × | weary-traveler quits (~user@user/user363627) (Remote host closed the connection) |
| 05:55:49 | × | merijn quits (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 276 seconds) |
| 05:58:25 | × | amadaluzia quits (~amadaluzi@2a00:23c7:ed8b:6701:6582:5675:67d:4956) (Ping timeout: 276 seconds) |
| 05:59:38 | × | Sgeo quits (~Sgeo@user/sgeo) (Read error: Connection reset by peer) |
| 05:59:59 | → | polyphem joins (~rod@pd9fbfc2f.dip0.t-ipconnect.de) |
| 06:03:41 | → | amadaluzia joins (~amadaluzi@user/amadaluzia) |
| 06:04:17 | × | amadaluzia quits (~amadaluzi@user/amadaluzia) (Remote host closed the connection) |
| 06:05:27 | → | sord937 joins (~sord937@gateway/tor-sasl/sord937) |
| 06:06:08 | → | remexre joins (~remexre@user/remexre) |
| 06:06:10 | → | merijn joins (~merijn@host-vr.cgnat-g.v4.dfn.nl) |
| 06:06:57 | → | CiaoSen joins (~Jura@2a02:8071:64e1:da0:5a47:caff:fe78:33db) |
| 06:07:00 | JuanDaugherty | is now known as ColinRobinson |
| 06:10:48 | × | merijn quits (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 245 seconds) |
| 06:11:14 | × | inca quits (~inca@pool-96-255-212-224.washdc.fios.verizon.net) (Ping timeout: 272 seconds) |
| 06:20:55 | × | ft quits (~ft@p508db594.dip0.t-ipconnect.de) (Quit: leaving) |
| 06:21:56 | → | merijn joins (~merijn@host-vr.cgnat-g.v4.dfn.nl) |
| 06:22:20 | × | jmcantrell quits (~weechat@user/jmcantrell) (Quit: WeeChat 4.6.1) |
| 06:22:20 | jmcantrell_ | is now known as jmcantrell |
| 06:22:54 | → | inca joins (~inca@pool-96-255-212-224.washdc.fios.verizon.net) |
| 06:27:40 | × | merijn quits (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 276 seconds) |
| 06:27:57 | × | pikajude quits (~jude@2001:19f0:ac01:373:5400:2ff:fe86:3274) (Quit: ZNC 1.8.2 - https://znc.in) |
| 06:28:17 | → | pikajude joins (~jude@2001:19f0:ac01:373:5400:2ff:fe86:3274) |
| 06:28:19 | × | inca quits (~inca@pool-96-255-212-224.washdc.fios.verizon.net) (Ping timeout: 276 seconds) |
| 06:33:12 | × | chexum quits (~quassel@gateway/tor-sasl/chexum) (Ping timeout: 264 seconds) |
| 06:33:39 | → | chexum joins (~quassel@gateway/tor-sasl/chexum) |
| 06:37:44 | → | merijn joins (~merijn@host-vr.cgnat-g.v4.dfn.nl) |
| 06:37:48 | × | Garbanzo quits (~Garbanzo@2602:304:6eac:dc10::2e) (Remote host closed the connection) |
| 06:40:10 | → | inca joins (~inca@pool-96-255-212-224.washdc.fios.verizon.net) |
| 06:41:58 | × | xff0x quits (~xff0x@fsb6a9491c.tkyc517.ap.nuro.jp) (Ping timeout: 276 seconds) |
| 06:42:44 | × | merijn quits (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 268 seconds) |
| 06:43:56 | → | xff0x joins (~xff0x@fsb6a9491c.tkyc517.ap.nuro.jp) |
| 06:45:49 | × | inca quits (~inca@pool-96-255-212-224.washdc.fios.verizon.net) (Ping timeout: 260 seconds) |
| 06:49:46 | × | Square quits (~Square4@user/square) (Ping timeout: 276 seconds) |
| 06:53:22 | × | tomboy64 quits (~tomboy64@user/tomboy64) (Ping timeout: 252 seconds) |
| 06:53:31 | → | merijn joins (~merijn@host-vr.cgnat-g.v4.dfn.nl) |
| 06:54:08 | → | acidjnk joins (~acidjnk@p200300d6e71c4f7444aa95b6f7c7abd1.dip0.t-ipconnect.de) |
| 06:54:09 | → | tomboy64 joins (~tomboy64@user/tomboy64) |
| 06:57:53 | → | inca joins (~inca@pool-96-255-212-224.washdc.fios.verizon.net) |
| 06:58:14 | → | j1n37- joins (~j1n37@user/j1n37) |
| 06:58:30 | × | merijn quits (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 252 seconds) |
| 06:59:31 | × | j1n37 quits (~j1n37@user/j1n37) (Ping timeout: 276 seconds) |
| 07:00:02 | × | caconym quits (~caconym@user/caconym) (Quit: bye) |
| 07:01:01 | → | caconym joins (~caconym@user/caconym) |
| 07:02:32 | × | inca quits (~inca@pool-96-255-212-224.washdc.fios.verizon.net) (Ping timeout: 252 seconds) |
| 07:02:50 | × | Feuermagier quits (~Feuermagi@user/feuermagier) (Quit: Leaving) |
| 07:07:48 | → | lortabac joins (~lortabac@2a01:e0a:541:b8f0:55ab:e185:7f81:54a4) |
| 07:08:54 | × | Googulator quits (~Googulato@2a01-036d-0106-211a-98f9-54d1-cd01-d0d3.pool6.digikabel.hu) (Ping timeout: 240 seconds) |
| 07:15:28 | → | inca joins (~inca@pool-96-255-212-224.washdc.fios.verizon.net) |
| 07:16:29 | → | vpan joins (~vpan@212.117.1.172) |
| 07:18:57 | × | Lord_of_Life quits (~Lord@user/lord-of-life/x-2819915) (Ping timeout: 252 seconds) |
| 07:19:21 | → | Lord_of_Life joins (~Lord@user/lord-of-life/x-2819915) |
| 07:20:54 | × | inca quits (~inca@pool-96-255-212-224.washdc.fios.verizon.net) (Ping timeout: 244 seconds) |
| 07:22:06 | <jackdk> | Bowuigi I think you don't even have to write `subExprs` by hand - you could stock-derive `Data` and use `uniplate` or anyclass-derive `Plated` and use `plated`, or derive Generic and use `gplate` |
| 07:23:26 | → | merijn joins (~merijn@host-vr.cgnat-g.v4.dfn.nl) |
| 07:23:32 | → | __monty__ joins (~toonn@user/toonn) |
| 07:23:58 | → | inca joins (~inca@pool-96-255-212-224.washdc.fios.verizon.net) |
| 07:27:19 | → | j1n37 joins (~j1n37@user/j1n37) |
| 07:27:52 | × | j1n37- quits (~j1n37@user/j1n37) (Ping timeout: 272 seconds) |
| 07:28:51 | × | inca quits (~inca@pool-96-255-212-224.washdc.fios.verizon.net) (Ping timeout: 252 seconds) |
| 07:30:44 | × | merijn quits (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 265 seconds) |
| 07:31:27 | → | acidjnk_new joins (~acidjnk@p200300d6e71c4f37f95626b479c3d9ea.dip0.t-ipconnect.de) |
| 07:31:47 | × | rvalue quits (~rvalue@user/rvalue) (Read error: Connection reset by peer) |
| 07:32:20 | → | rvalue joins (~rvalue@user/rvalue) |
| 07:32:40 | × | acidjnk quits (~acidjnk@p200300d6e71c4f7444aa95b6f7c7abd1.dip0.t-ipconnect.de) (Ping timeout: 276 seconds) |
| 07:35:03 | → | peterbecich joins (~Thunderbi@syn-047-229-123-186.res.spectrum.com) |
| 07:39:33 | <hellwolf> | Short notice: Who wants to join a zoom call that discuss lineartypes at 2PM UTC today? |
| 07:40:38 | → | inca joins (~inca@pool-96-255-212-224.washdc.fios.verizon.net) |
| 07:41:29 | → | merijn joins (~merijn@host-vr.cgnat-g.v4.dfn.nl) |
| 07:42:10 | × | sayurc_ quits (~sayurc@169.150.203.34) (Quit: Konversation terminated!) |
| 07:45:25 | × | inca quits (~inca@pool-96-255-212-224.washdc.fios.verizon.net) (Ping timeout: 248 seconds) |
| 07:46:13 | × | merijn quits (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 245 seconds) |
| 07:52:44 | → | ljdarj joins (~Thunderbi@user/ljdarj) |
| 07:53:27 | × | peterbecich quits (~Thunderbi@syn-047-229-123-186.res.spectrum.com) (Ping timeout: 265 seconds) |
| 07:57:15 | → | merijn joins (~merijn@host-vr.cgnat-g.v4.dfn.nl) |
| 07:57:57 | mima_ | is now known as mima |
| 07:58:36 | × | marinelli quits (~weechat@gateway/tor-sasl/marinelli) (Quit: marinelli) |
| 08:02:14 | × | merijn quits (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 260 seconds) |
| 08:08:39 | → | merijn joins (~merijn@host-vr.cgnat-g.v4.dfn.nl) |
| 08:08:54 | × | tzh quits (~tzh@c-76-115-131-146.hsd1.or.comcast.net) (Quit: zzz) |
| 08:09:24 | × | ColinRobinson quits (~juan@user/JuanDaugherty) (Quit: praxis.meansofproduction.biz (juan@acm.org)) |
| 08:14:16 | → | forell joins (~forell@user/forell) |
| 08:14:21 | × | merijn quits (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 276 seconds) |
| 08:15:23 | → | merijn joins (~merijn@host-vr.cgnat-g.v4.dfn.nl) |
| 08:17:02 | → | inca joins (~inca@pool-96-255-212-224.washdc.fios.verizon.net) |
| 08:17:19 | → | lxsameer joins (~lxsameer@Serene/lxsameer) |
| 08:20:16 | × | merijn quits (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 252 seconds) |
| 08:22:43 | × | inca quits (~inca@pool-96-255-212-224.washdc.fios.verizon.net) (Ping timeout: 276 seconds) |
| 08:26:02 | → | j1n37- joins (~j1n37@user/j1n37) |
| 08:26:03 | × | j1n37 quits (~j1n37@user/j1n37) (Ping timeout: 252 seconds) |
| 08:31:03 | → | merijn joins (~merijn@host-vr.cgnat-g.v4.dfn.nl) |
| 08:32:03 | × | turlando quits (~turlando@user/turlando) () |
| 08:32:51 | → | chele joins (~chele@user/chele) |
| 08:33:18 | × | califax quits (~califax@user/califx) (Read error: Connection reset by peer) |
| 08:33:18 | × | ChaiTRex quits (~ChaiTRex@user/chaitrex) (Read error: Connection reset by peer) |
| 08:33:18 | × | gmg quits (~user@user/gehmehgeh) (Read error: Connection reset by peer) |
| 08:33:18 | × | chiselfuse quits (~chiselfus@user/chiselfuse) (Read error: Connection reset by peer) |
| 08:33:18 | × | chexum quits (~quassel@gateway/tor-sasl/chexum) (Remote host closed the connection) |
| 08:33:30 | → | chexum joins (~quassel@gateway/tor-sasl/chexum) |
| 08:33:37 | → | califax joins (~califax@user/califx) |
| 08:33:41 | → | ChaiTRex joins (~ChaiTRex@user/chaitrex) |
| 08:33:56 | → | chiselfuse joins (~chiselfus@user/chiselfuse) |
| 08:33:59 | → | gmg joins (~user@user/gehmehgeh) |
| 08:34:00 | → | turlando joins (~turlando@user/turlando) |
| 08:35:35 | × | tcard quits (~tcard@2400:4051:5801:7500:cf17:befc:ff82:5303) (Quit: Leaving) |
| 08:36:03 | → | Googulator joins (~Googulato@81.183.235.203) |
| 08:36:16 | × | Igloo quits (~ian@2001:8b0:645c::210) (Ping timeout: 272 seconds) |
| 08:36:22 | × | merijn quits (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 276 seconds) |
| 08:40:44 | → | inca joins (~inca@pool-96-255-212-224.washdc.fios.verizon.net) |
| 08:42:23 | × | turlando quits (~turlando@user/turlando) () |
| 08:45:23 | × | inca quits (~inca@pool-96-255-212-224.washdc.fios.verizon.net) (Ping timeout: 245 seconds) |
| 08:46:40 | → | merijn joins (~merijn@host-vr.cgnat-g.v4.dfn.nl) |
| 08:47:59 | → | Igloo joins (~ian@81.2.99.210) |
| 08:52:06 | × | merijn quits (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 272 seconds) |
| 08:55:52 | × | acidjnk_new quits (~acidjnk@p200300d6e71c4f37f95626b479c3d9ea.dip0.t-ipconnect.de) (Ping timeout: 276 seconds) |
| 09:02:26 | → | merijn joins (~merijn@host-vr.cgnat-g.v4.dfn.nl) |
| 09:07:38 | → | lisbeths joins (uid135845@id-135845.lymington.irccloud.com) |
| 09:13:37 | → | sprotte24 joins (~sprotte24@p200300d16f1c5b0064420e97db58ee64.dip0.t-ipconnect.de) |
| 09:13:54 | × | merijn quits (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 252 seconds) |
| 09:14:24 | → | inca joins (~inca@pool-96-255-212-224.washdc.fios.verizon.net) |
| 09:19:55 | × | inca quits (~inca@pool-96-255-212-224.washdc.fios.verizon.net) (Ping timeout: 276 seconds) |
| 09:20:59 | × | lyxia quits (~lyxia@poisson.chat) (Quit: WeeChat 4.5.1) |
| 09:25:33 | → | merijn joins (~merijn@62.45.137.128) |
| 09:26:05 | → | inca joins (~inca@pool-96-255-212-224.washdc.fios.verizon.net) |
| 09:30:28 | × | merijn quits (~merijn@62.45.137.128) (Ping timeout: 268 seconds) |
| 09:30:58 | × | inca quits (~inca@pool-96-255-212-224.washdc.fios.verizon.net) (Ping timeout: 276 seconds) |
| 09:31:03 | × | hattckory quits (~hattckory@bras-base-toroon4524w-grc-30-70-27-118-207.dsl.bell.ca) (Ping timeout: 276 seconds) |
| 09:35:53 | → | hattckory joins (~hattckory@bras-base-toroon4524w-grc-30-70-27-118-207.dsl.bell.ca) |
| 09:40:43 | × | ljdarj quits (~Thunderbi@user/ljdarj) (Ping timeout: 276 seconds) |
| 09:41:15 | → | merijn joins (~merijn@host-vr.cgnat-g.v4.dfn.nl) |
| 09:41:57 | × | lortabac quits (~lortabac@2a01:e0a:541:b8f0:55ab:e185:7f81:54a4) (Ping timeout: 252 seconds) |
| 09:42:02 | → | tcard joins (~tcard@2400:4051:5801:7500:cf17:befc:ff82:5303) |
| 09:43:02 | → | inca joins (~inca@pool-96-255-212-224.washdc.fios.verizon.net) |
| 09:44:39 | → | Guest84 joins (~Guest99@194.89.25.85) |
| 09:44:43 | → | lyxia joins (~lyxia@poisson.chat) |
| 09:46:34 | × | merijn quits (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 276 seconds) |
| 09:51:52 | × | inca quits (~inca@pool-96-255-212-224.washdc.fios.verizon.net) (Ping timeout: 265 seconds) |
| 09:57:03 | → | merijn joins (~merijn@host-vr.cgnat-g.v4.dfn.nl) |
| 10:00:09 | → | lortabac joins (~lortabac@2a01:e0a:541:b8f0:55ab:e185:7f81:54a4) |
| 10:01:31 | × | xff0x quits (~xff0x@fsb6a9491c.tkyc517.ap.nuro.jp) (Ping timeout: 276 seconds) |
| 10:02:15 | × | merijn quits (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 276 seconds) |
| 10:04:15 | → | inca joins (~inca@pool-96-255-212-224.washdc.fios.verizon.net) |
| 10:05:40 | → | ljdarj joins (~Thunderbi@user/ljdarj) |
| 10:10:38 | → | merijn joins (~merijn@host-vr.cgnat-g.v4.dfn.nl) |
| 10:11:38 | × | inca quits (~inca@pool-96-255-212-224.washdc.fios.verizon.net) (Ping timeout: 245 seconds) |
| 10:15:49 | × | merijn quits (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 276 seconds) |
| 10:24:51 | → | inca joins (~inca@pool-96-255-212-224.washdc.fios.verizon.net) |
| 10:26:27 | → | merijn joins (~merijn@host-vr.cgnat-g.v4.dfn.nl) |
| 10:31:15 | × | merijn quits (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 244 seconds) |
| 10:31:18 | × | Googulator quits (~Googulato@81.183.235.203) (Ping timeout: 240 seconds) |
| 10:36:49 | roconnor_ | is now known as roconnor |
| 10:37:18 | × | Guest84 quits (~Guest99@194.89.25.85) (Ping timeout: 240 seconds) |
| 10:39:00 | × | inca quits (~inca@pool-96-255-212-224.washdc.fios.verizon.net) (Ping timeout: 244 seconds) |
| 10:40:36 | → | inca joins (~inca@pool-96-255-212-224.washdc.fios.verizon.net) |
| 10:42:13 | → | merijn joins (~merijn@host-vr.cgnat-g.v4.dfn.nl) |
| 10:46:22 | × | inca quits (~inca@pool-96-255-212-224.washdc.fios.verizon.net) (Ping timeout: 276 seconds) |
| 10:49:14 | × | sprotte24 quits (~sprotte24@p200300d16f1c5b0064420e97db58ee64.dip0.t-ipconnect.de) (Quit: Leaving) |
| 10:49:37 | × | merijn quits (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 276 seconds) |
| 10:51:00 | × | lortabac quits (~lortabac@2a01:e0a:541:b8f0:55ab:e185:7f81:54a4) (Ping timeout: 276 seconds) |
| 10:51:05 | × | comonad quits (~comonad@p200300d0274ac2004a3b1ffc163e1801.dip0.t-ipconnect.de) (Quit: WeeChat 4.6.0-dev) |
| 10:56:42 | → | Googulator joins (~Googulato@81.183.235.203) |
| 10:57:12 | → | lortabac joins (~lortabac@2a01:e0a:541:b8f0:55ab:e185:7f81:54a4) |
| 10:58:21 | → | inca joins (~inca@pool-96-255-212-224.washdc.fios.verizon.net) |
| 11:00:17 | → | merijn joins (~merijn@host-vr.cgnat-g.v4.dfn.nl) |
| 11:02:19 | → | jespada joins (~jespada@r167-61-120-190.dialup.adsl.anteldata.net.uy) |
| 11:05:44 | × | merijn quits (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 272 seconds) |
| 11:11:39 | → | merijn joins (~merijn@host-vr.cgnat-g.v4.dfn.nl) |
| 11:16:56 | × | merijn quits (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 265 seconds) |
| 11:27:26 | → | merijn joins (~merijn@host-vr.cgnat-g.v4.dfn.nl) |
| 11:34:08 | × | merijn quits (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 245 seconds) |
| 11:37:31 | → | Unicorn_Princess joins (~Unicorn_P@user/Unicorn-Princess/x-3540542) |
| 11:41:43 | → | JuanDaugherty joins (~juan@user/JuanDaugherty) |
| 11:45:28 | → | merijn joins (~merijn@host-vr.cgnat-g.v4.dfn.nl) |
| 11:45:36 | × | CiaoSen quits (~Jura@2a02:8071:64e1:da0:5a47:caff:fe78:33db) (Ping timeout: 276 seconds) |
| 11:46:32 | × | bitdex quits (~bitdex@gateway/tor-sasl/bitdex) (Quit: = "") |
| 11:50:22 | × | merijn quits (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 252 seconds) |
| 12:01:14 | → | merijn joins (~merijn@host-vr.cgnat-g.v4.dfn.nl) |
| 12:06:39 | × | merijn quits (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 260 seconds) |
| 12:12:39 | → | merijn joins (~merijn@host-vr.cgnat-g.v4.dfn.nl) |
| 12:13:54 | JuanDaugherty | is now known as ColinRobinson |
| 12:17:30 | × | merijn quits (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 252 seconds) |
| 12:17:52 | × | forell quits (~forell@user/forell) (Ping timeout: 252 seconds) |
| 12:18:33 | → | Smiles joins (uid551636@id-551636.lymington.irccloud.com) |
| 12:22:10 | <haskellbridge> | <thirdofmay18081814goya> data Pred a where |
| 12:22:10 | <haskellbridge> | ... long message truncated: https://kf8nh.com/_heisenbridge/media/kf8nh.com/IsqfhephrLUQZbBWOtaJJgoT/AzLVmVwqQEE (13 lines) |
| 12:22:26 | <haskellbridge> | <thirdofmay18081814goya> anyone have an idea what's the proper way to implement a class like this? |
| 12:24:30 | <haskellbridge> | <thirdofmay18081814goya> the idea is that we declare at the typelevel that a particular constant should be available ("predfuncs") in scope |
| 12:25:04 | → | xff0x joins (~xff0x@2405:6580:b080:900:46de:d563:2315:dd7b) |
| 12:28:27 | → | merijn joins (~merijn@host-vr.cgnat-g.v4.dfn.nl) |
| 12:32:09 | × | jespada quits (~jespada@r167-61-120-190.dialup.adsl.anteldata.net.uy) (Ping timeout: 260 seconds) |
| 12:33:37 | × | merijn quits (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 268 seconds) |
| 12:35:43 | → | jespada joins (~jespada@r179-25-2-204.dialup.adsl.anteldata.net.uy) |
| 12:36:19 | × | lisbeths quits (uid135845@id-135845.lymington.irccloud.com) (Quit: Connection closed for inactivity) |
| 12:38:31 | <haskellbridge> | <thirdofmay18081814goya> "instance WithPreds [a] (Nonempty :' []) where predfuncs = [assoc Nonempty]" worked |
| 12:41:56 | <haskellbridge> | <thirdofmay18081814goya> hm, ideally I'd want an instance "instance WithPreds [a] preds where predfuncs = map assoc preds" |
| 12:42:23 | <haskellbridge> | <thirdofmay18081814goya> using "preds" here makes ghc report that it's an illegal term-level use of type variable "preds" |
| 12:44:13 | → | merijn joins (~merijn@host-vr.cgnat-g.v4.dfn.nl) |
| 12:49:52 | × | merijn quits (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 276 seconds) |
| 12:51:10 | → | weary-traveler joins (~user@user/user363627) |
| 12:57:56 | → | merijn joins (~merijn@host-vr.cgnat-g.v4.dfn.nl) |
| 13:02:53 | × | merijn quits (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 245 seconds) |
| 13:13:39 | → | merijn joins (~merijn@host-vr.cgnat-g.v4.dfn.nl) |
| 13:20:34 | × | merijn quits (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 252 seconds) |
| 13:23:41 | → | amadaluzia joins (~amadaluzi@user/amadaluzia) |
| 13:23:43 | → | ft joins (~ft@p508db594.dip0.t-ipconnect.de) |
| 13:23:59 | ColinRobinson | is now known as JuanDaugherty |
| 13:31:42 | → | merijn joins (~merijn@host-vr.cgnat-g.v4.dfn.nl) |
| 13:32:51 | × | jespada quits (~jespada@r179-25-2-204.dialup.adsl.anteldata.net.uy) (Ping timeout: 276 seconds) |
| 13:35:16 | → | jespada joins (~jespada@r179-25-2-204.dialup.adsl.anteldata.net.uy) |
| 13:35:23 | × | vpan quits (~vpan@212.117.1.172) (Quit: Leaving.) |
| 13:37:19 | × | merijn quits (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 276 seconds) |
| 13:42:31 | JuanDaugherty | is now known as ColinRobinson |
| 13:45:23 | ← | L29Ah parts (~L29Ah@wikipedia/L29Ah) () |
| 13:46:10 | → | L29Ah joins (~L29Ah@wikipedia/L29Ah) |
| 13:47:30 | → | merijn joins (~merijn@host-vr.cgnat-g.v4.dfn.nl) |
| 13:51:24 | × | ColinRobinson quits (~juan@user/JuanDaugherty) (Quit: praxis.meansofproduction.biz (juan@acm.org)) |
| 13:52:34 | × | merijn quits (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 265 seconds) |
| 14:00:57 | × | infinity0 quits (~infinity0@pwned.gg) (Remote host closed the connection) |
| 14:01:06 | → | hiecaq joins (~hiecaq@user/hiecaq) |
| 14:02:14 | → | infinity0 joins (~infinity0@pwned.gg) |
| 14:03:16 | → | merijn joins (~merijn@host-vr.cgnat-g.v4.dfn.nl) |
| 14:05:17 | → | rbdr joins (~rbdr@dynamic-002-245-152-215.2.245.pool.telefonica.de) |
| 14:06:41 | × | rbdr quits (~rbdr@dynamic-002-245-152-215.2.245.pool.telefonica.de) (Client Quit) |
| 14:08:23 | → | acidjnk_new joins (~acidjnk@p200300d6e71c4f37f95626b479c3d9ea.dip0.t-ipconnect.de) |
| 14:08:34 | × | merijn quits (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 260 seconds) |
| 14:10:58 | × | hiecaq quits (~hiecaq@user/hiecaq) (Quit: ERC 5.6.0.30.1 (IRC client for GNU Emacs 30.0.92)) |
| 14:12:06 | → | hiecaq joins (~hiecaq@user/hiecaq) |
| 14:14:39 | → | merijn joins (~merijn@host-vr.cgnat-g.v4.dfn.nl) |
| 14:20:04 | × | merijn quits (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 260 seconds) |
| 14:26:08 | → | euleritian joins (~euleritia@dynamic-176-006-143-216.176.6.pool.telefonica.de) |
| 14:27:38 | × | Smiles quits (uid551636@id-551636.lymington.irccloud.com) (Quit: Connection closed for inactivity) |
| 14:37:35 | → | Sgeo joins (~Sgeo@user/sgeo) |
| 14:37:36 | × | lortabac quits (~lortabac@2a01:e0a:541:b8f0:55ab:e185:7f81:54a4) (Quit: WeeChat 4.5.2) |
| 14:44:41 | × | lambdabot quits (~lambdabot@haskell/bot/lambdabot) (Remote host closed the connection) |
| 14:46:13 | → | merijn joins (~merijn@host-vr.cgnat-g.v4.dfn.nl) |
| 14:54:01 | × | merijn quits (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 276 seconds) |
| 14:57:57 | × | euleritian quits (~euleritia@dynamic-176-006-143-216.176.6.pool.telefonica.de) (Ping timeout: 248 seconds) |
| 14:58:00 | × | chele quits (~chele@user/chele) (Remote host closed the connection) |
| 14:58:29 | → | euleritian joins (~euleritia@95.90.214.149) |
| 15:00:07 | <EvanR> | instance WithPreds [a] preds where predfuncs = map assoc preds indeed looks like you tried to use a type variable from the instance head (another universe) at the value level |
| 15:00:13 | → | lisbeths joins (uid135845@id-135845.lymington.irccloud.com) |
| 15:00:31 | × | acidjnk_new quits (~acidjnk@p200300d6e71c4f37f95626b479c3d9ea.dip0.t-ipconnect.de) (Ping timeout: 276 seconds) |
| 15:01:02 | → | rbdr joins (~rbdr@dynamic-002-245-152-215.2.245.pool.telefonica.de) |
| 15:04:17 | → | merijn joins (~merijn@host-vr.cgnat-g.v4.dfn.nl) |
| 15:05:19 | <EvanR> | I guess you want to find a way to reflect the type level list of things to the value level |
| 15:05:57 | <EvanR> | usually there's a class for that, or you make one |
| 15:09:00 | × | merijn quits (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 244 seconds) |
| 15:15:38 | → | merijn joins (~merijn@host-vr.cgnat-g.v4.dfn.nl) |
| 15:16:38 | <haskellbridge> | <thirdofmay18081814goya> makes sense, ty! |
| 15:20:54 | × | merijn quits (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 260 seconds) |
| 15:20:56 | → | Square2 joins (~Square@user/square) |
| 15:21:07 | × | pavonia quits (~user@user/siracusa) (Quit: Bye!) |
| 15:24:03 | → | Square joins (~Square4@user/square) |
| 15:26:43 | → | sprotte24 joins (~sprotte24@p200300d16f1c5b003c76b51cf90902ef.dip0.t-ipconnect.de) |
| 15:31:27 | → | merijn joins (~merijn@host-vr.cgnat-g.v4.dfn.nl) |
| 15:36:27 | → | notdabs joins (~Owner@2600:1700:69cf:9000:5926:6835:ef1d:9af3) |
| 15:36:29 | × | merijn quits (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 260 seconds) |
| 15:38:34 | → | wbrawner joins (~wbrawner@129.146.103.146) |
| 15:39:18 | × | Googulator quits (~Googulato@81.183.235.203) (Ping timeout: 240 seconds) |
| 15:47:13 | → | merijn joins (~merijn@host-vr.cgnat-g.v4.dfn.nl) |
| 15:52:31 | × | merijn quits (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 276 seconds) |
| 15:54:43 | → | sayurc joins (~sayurc@169.150.203.34) |
| 15:56:25 | → | lambdabot joins (~lambdabot@silicon.int-e.eu) |
| 15:56:25 | × | lambdabot quits (~lambdabot@silicon.int-e.eu) (Changing host) |
| 15:56:25 | → | lambdabot joins (~lambdabot@haskell/bot/lambdabot) |
| 15:56:25 | ChanServ | sets mode +v lambdabot |
| 16:00:15 | × | euphores quits (~SASL_euph@user/euphores) (Quit: Leaving.) |
| 16:03:03 | → | merijn joins (~merijn@host-vr.cgnat-g.v4.dfn.nl) |
| 16:07:46 | × | merijn quits (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 252 seconds) |
| 16:07:46 | × | sprotte24 quits (~sprotte24@p200300d16f1c5b003c76b51cf90902ef.dip0.t-ipconnect.de) (Quit: Leaving) |
| 16:08:18 | → | forell joins (~forell@user/forell) |
| 16:09:19 | × | poxel quits (~poxel@user/poxel) (Quit: WeeChat 4.6.0) |
| 16:11:44 | → | acidjnk_new joins (~acidjnk@p200300d6e71c4f37f95626b479c3d9ea.dip0.t-ipconnect.de) |
| 16:16:38 | → | merijn joins (~merijn@host-vr.cgnat-g.v4.dfn.nl) |
| 16:21:46 | × | merijn quits (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 276 seconds) |
| 16:26:45 | × | euleritian quits (~euleritia@95.90.214.149) (Ping timeout: 252 seconds) |
| 16:29:40 | → | euleritian joins (~euleritia@dynamic-176-006-132-211.176.6.pool.telefonica.de) |
| 16:32:01 | → | merijn joins (~merijn@host-vr.cgnat-g.v4.dfn.nl) |
| 16:34:22 | × | sord937 quits (~sord937@gateway/tor-sasl/sord937) (Quit: sord937) |
| 16:37:22 | × | merijn quits (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 276 seconds) |
| 16:41:36 | → | j1n37 joins (~j1n37@user/j1n37) |
| 16:43:13 | × | j1n37- quits (~j1n37@user/j1n37) (Ping timeout: 276 seconds) |
| 16:47:48 | → | merijn joins (~merijn@host-vr.cgnat-g.v4.dfn.nl) |
| 16:49:18 | × | acidjnk_new quits (~acidjnk@p200300d6e71c4f37f95626b479c3d9ea.dip0.t-ipconnect.de) (Ping timeout: 252 seconds) |
| 16:50:27 | × | ljdarj quits (~Thunderbi@user/ljdarj) (Ping timeout: 276 seconds) |
| 16:51:22 | → | Googulator joins (~Googulato@2a01-036d-0106-211a-315b-d519-517f-afe7.pool6.digikabel.hu) |
| 16:52:20 | → | euphores joins (~SASL_euph@user/euphores) |
| 16:52:51 | × | merijn quits (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 265 seconds) |
| 16:53:42 | × | lxsameer quits (~lxsameer@Serene/lxsameer) (Ping timeout: 276 seconds) |
| 16:54:01 | → | tzh joins (~tzh@c-76-115-131-146.hsd1.or.comcast.net) |
| 16:57:48 | → | machinedgod joins (~machinedg@d108-173-18-100.abhsia.telus.net) |
| 17:00:57 | → | target_i joins (~target_i@user/target-i/x-6023099) |
| 17:02:09 | → | acidjnk_new joins (~acidjnk@p200300d6e71c4f37fdfe54bbfe31434c.dip0.t-ipconnect.de) |
| 17:03:35 | → | merijn joins (~merijn@host-vr.cgnat-g.v4.dfn.nl) |
| 17:04:46 | × | hiecaq quits (~hiecaq@user/hiecaq) (Quit: ERC 5.6.0.30.1 (IRC client for GNU Emacs 30.0.92)) |
| 17:06:06 | <bwe> | How can I let the functions a variant of `TheseWriter` depending on which error has been collected on the way? https://paste.tomsmeding.com/tfhujvff |
| 17:06:51 | → | sprotte24 joins (~sprotte24@p200300d16f1c5b003c76b51cf90902ef.dip0.t-ipconnect.de) |
| 17:07:25 | <EvanR> | Writer can't inspect what was written already |
| 17:07:36 | <EvanR> | but State can |
| 17:08:38 | × | merijn quits (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 272 seconds) |
| 17:09:02 | <bwe> | …it appears to be as simple as going over the collected list to decide which `TheseWriter` variant should be returned. However, I am stuck at `calc3` because there no return value `Int` can be constructed. |
| 17:09:19 | <bwe> | EvanR: uuh, that sounds like this might be my initiation ritual to State. |
| 17:12:57 | <EvanR> | Writer is "write only" |
| 17:15:09 | <tomsmeding> | (that's why it's called "Writer") |
| 17:15:56 | → | CiaoSen joins (~Jura@2a02:8071:64e1:da0:5a47:caff:fe78:33db) |
| 17:16:16 | → | merijn joins (~merijn@host-vr.cgnat-g.v4.dfn.nl) |
| 17:17:18 | <EvanR> | smh "meaningful names" again |
| 17:17:36 | <EvanR> | shoulda just called it the Analysis monad |
| 17:20:55 | <ski> | an object in the category of commutative groups is always commutative. an object in the category of groups might or might not be commutative. working only with the abstract interface of "group", you cannot assume commutativity (and also cannot assume there's an example of non-commutativity) |
| 17:20:55 | × | CiaoSen quits (~Jura@2a02:8071:64e1:da0:5a47:caff:fe78:33db) (Ping timeout: 276 seconds) |
| 17:21:10 | <ski> | ditto, for instances of `MonadWriter' (barring knowing anything more about the instance, so that you're "abstract"), you can only assume the operations in the interface. so, can assume writing, cannot assume reading what's been written earlier |
| 17:21:24 | <ski> | @type censor |
| 17:21:25 | <lambdabot> | MonadWriter w m => (w -> w) -> m a -> m a |
| 17:21:27 | <ski> | @type pass |
| 17:21:28 | <lambdabot> | MonadWriter w m => m (a, w -> w) -> m a |
| 17:21:34 | × | merijn quits (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 276 seconds) |
| 17:24:05 | <ski> | (and then `Writer w' is basically the simplest possible (generic, in `w') instance of `MonadWriter') |
| 17:26:53 | × | euleritian quits (~euleritia@dynamic-176-006-132-211.176.6.pool.telefonica.de) (Read error: Connection reset by peer) |
| 17:27:10 | → | prasad joins (~Thunderbi@c-73-246-138-70.hsd1.in.comcast.net) |
| 17:27:12 | → | euleritian joins (~euleritia@ip5f5ad695.dynamic.kabel-deutschland.de) |
| 17:28:13 | <bwe> | EvanR: WriteButNotRead would be more explicit for the uninitiated:) |
| 17:28:35 | → | wootehfoot joins (~wootehfoo@user/wootehfoot) |
| 17:29:12 | <EvanR> | it's true, PHP has this weird ability to inspect anything that it's outputting to the output stream |
| 17:29:30 | <EvanR> | which has been abused for some seriously silly things |
| 17:29:39 | <ski> | why not `WriteButNotReadAndNotJumpEitherNorAbort' ? |
| 17:30:29 | <EvanR> | there's also the Reader which you usually run into before / at the same time as Writer |
| 17:30:31 | <ski> | there's a lot of stuff that `Writer' doesn't do |
| 17:30:48 | <EvanR> | you wouldn't expect Reader to be able to write |
| 17:31:49 | ski | prefers the names "input"/"environment"/"context"/"distribution" and "output"/"logging"/"summarizing" over "reader" and "writer", anyway .. |
| 17:32:03 | → | merijn joins (~merijn@host-vr.cgnat-g.v4.dfn.nl) |
| 17:32:37 | <ski> | mm. Unix allows write-only files, i suppose |
| 17:33:15 | <EvanR> | "dependency injection" |
| 17:33:33 | <EvanR> | call it that and haskell will hit the big time |
| 17:33:39 | <ski> | how does it inspect it, btw ? |
| 17:34:41 | ski | . o O ( "Avoid success at all costs." -- Haskell motto ) |
| 17:35:09 | <ski> | (was it Peyton Jones ? Marlow ?) |
| 17:35:17 | <EvanR> | PHP? you can read the output stream and alter it before it's "really" output from anyplace in the code |
| 17:35:39 | <ski> | as in read a buffer ? |
| 17:36:02 | <ski> | or as in dynamically replacing the current output stream, for a given block of code, nestedly ? |
| 17:36:56 | <ski> | (Scheme does the latter. and the old Edinburgh-style I/O of Prolog also does that) |
| 17:37:10 | × | merijn quits (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 276 seconds) |
| 17:37:23 | <EvanR> | https://www.php.net/manual/en/outcontrol.output-buffering.php |
| 17:37:55 | <EvanR> | at some point the output buffer was used like a generic communication channel between components it seems xD |
| 17:39:09 | → | peterbecich joins (~Thunderbi@syn-047-229-123-186.res.spectrum.com) |
| 17:40:57 | <ski> | (with-output-to-string (lambda () (display (list 2 3 5 7)))) ; => "(2 3 5 7)" |
| 17:42:18 | <EvanR> | that looks more sane than the PHP version |
| 17:42:24 | <EvanR> | output redirect |
| 17:43:20 | ← | L29Ah parts (~L29Ah@wikipedia/L29Ah) () |
| 17:43:27 | × | peterbecich quits (~Thunderbi@syn-047-229-123-186.res.spectrum.com) (Ping timeout: 252 seconds) |
| 17:43:51 | <ski> | (`display' is kinda like `print'. a Haskell version of `with-output-to-string' might be `withOutputToString :: IO a -> IO String'. note how this established a dynamic extent, over which the output is redirected, and outside of this extent (say later, or in other threads), output is still sent to the usual place) |
| 17:43:53 | → | L29Ah joins (~L29Ah@wikipedia/L29Ah) |
| 17:45:17 | <EvanR> | what about an inner block which unredirected the output |
| 17:45:26 | → | ljdarj joins (~Thunderbi@user/ljdarj) |
| 17:45:38 | <ski> | one would have to decide whether only the `Handle'-less operations should be affected, or also if you send explicitly to `stdout' |
| 17:45:52 | <ski> | how would it do that ? |
| 17:46:12 | <ski> | it could redirect back to the original `Handle', possibly |
| 17:46:34 | <EvanR> | (with-output-string (lambda () (without-output-to-stdout (lambda () (display (list 2 3 5 7)))))) |
| 17:46:52 | <ski> | or, i suppose one might allow some kind of "temporarily pop off the top output stream from a stack". but would there be any good reason for wanting to support this ? |
| 17:47:25 | <EvanR> | s/without/with/ |
| 17:47:51 | → | merijn joins (~merijn@host-vr.cgnat-g.v4.dfn.nl) |
| 17:50:13 | <ski> | checking Racket (which was where i tested this), i don't see an `with-output-to-port' ("port" is basically the Scheme equivalent of `Handle'). i do see `with-output-to-file', which takes a file path |
| 17:50:45 | <EvanR> | hah... so i wonder what happens if you nest these dynamic extents |
| 17:51:02 | <ski> | what you'd expect |
| 17:51:12 | <EvanR> | part of the input won't appear in the string |
| 17:51:20 | <EvanR> | part of the output won't appear in the string |
| 17:51:30 | <ski> | yep |
| 17:51:35 | <ski> | as intended |
| 17:51:48 | <EvanR> | with-output-to-dev-null |
| 17:52:02 | <ski> | it's similar to dynamic scoping of variables. or `local' in `MonadReader' |
| 17:52:33 | × | merijn quits (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 252 seconds) |
| 17:55:06 | <ski> | imagine `ReaderT (IORef Handle) IO', and looking up the current `Handle' when you do your basic I/O operations. and your "withIOHandle :: Handle -> ReaderT (IORef Handle) IO a -> ReaderT (IORef Handle) IO a' operation sets the ref, executes the action, and then sets back to the old handle (this would ignore multiple threads, though) |
| 17:57:34 | <ski> | (or, i guess, using a top-level `IORef', instead of `ReaderT', if you prefer ..) |
| 17:58:17 | <EvanR> | provocative idea |
| 17:59:55 | <ski> | not really that much, imho |
| 18:00:11 | <ski> | i suppose it depends on perspective |
| 18:00:23 | <ski> | but it would make things more composable |
| 18:00:35 | <EvanR> | globals are usually frowned upon xD |
| 18:00:42 | <ski> | being able to run an action more like it was a separate process |
| 18:00:56 | <ski> | (without actually having to spawn a separate process) |
| 18:01:23 | <EvanR> | otoh running an IO action with a custom set of "global" resources of all sorts, like the output handle, the RNG, etc |
| 18:01:36 | <monochrom> | stdin/out/err and FDs 0,1,2 have always been global variables (or worse). |
| 18:01:45 | <ski> | there's already stuff like |
| 18:01:47 | <ski> | @type System.Posix.IO.dupTo |
| 18:01:48 | <lambdabot> | System.Posix.Types.Fd -> System.Posix.Types.Fd -> IO System.Posix.Types.Fd |
| 18:01:48 | <ski> | yep |
| 18:02:00 | <EvanR> | the errno |
| 18:02:20 | <EvanR> | the FP rounding mode |
| 18:02:50 | <monochrom> | I actually gave my students the unix assignment of recursive stdin/out redirection. |
| 18:03:02 | <ski> | yes. those are generally bad for composability |
| 18:03:38 | <monochrom> | https://www.cs.utoronto.ca/~trebla/CSCB09-latest/a3/ |
| 18:03:39 | → | merijn joins (~merijn@host-vr.cgnat-g.v4.dfn.nl) |
| 18:03:49 | × | inca quits (~inca@pool-96-255-212-224.washdc.fios.verizon.net) (Ping timeout: 276 seconds) |
| 18:07:11 | → | inca joins (~inca@pool-96-255-212-224.washdc.fios.verizon.net) |
| 18:08:17 | × | krei-se- quits (~krei-se@p200300f1cfff4b89da9ef3fffe7fdac8.dip0.t-ipconnect.de) (Quit: ZNC 1.9.1 - https://znc.in) |
| 18:08:18 | × | merijn quits (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 245 seconds) |
| 18:13:49 | → | krei-se joins (~krei-se@p50829a06.dip0.t-ipconnect.de) |
| 18:15:19 | × | euleritian quits (~euleritia@ip5f5ad695.dynamic.kabel-deutschland.de) (Ping timeout: 260 seconds) |
| 18:16:12 | → | euleritian joins (~euleritia@dynamic-176-006-132-211.176.6.pool.telefonica.de) |
| 18:16:38 | × | inca quits (~inca@pool-96-255-212-224.washdc.fios.verizon.net) (Ping timeout: 245 seconds) |
| 18:17:37 | → | merijn joins (~merijn@host-vr.cgnat-g.v4.dfn.nl) |
| 18:21:22 | × | acidjnk_new quits (~acidjnk@p200300d6e71c4f37fdfe54bbfe31434c.dip0.t-ipconnect.de) (Ping timeout: 276 seconds) |
| 18:22:01 | × | jespada quits (~jespada@r179-25-2-204.dialup.adsl.anteldata.net.uy) (Quit: My Mac has gone to sleep. ZZZzzz…) |
| 18:22:54 | × | merijn quits (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 260 seconds) |
| 18:33:26 | → | merijn joins (~merijn@host-vr.cgnat-g.v4.dfn.nl) |
| 18:38:28 | × | euleritian quits (~euleritia@dynamic-176-006-132-211.176.6.pool.telefonica.de) (Read error: Connection reset by peer) |
| 18:38:47 | → | euleritian joins (~euleritia@ip5f5ad695.dynamic.kabel-deutschland.de) |
| 18:39:44 | ← | L29Ah parts (~L29Ah@wikipedia/L29Ah) () |
| 18:40:15 | → | L29Ah joins (~L29Ah@wikipedia/L29Ah) |
| 18:40:52 | × | merijn quits (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 276 seconds) |
| 18:45:52 | ← | L29Ah parts (~L29Ah@wikipedia/L29Ah) () |
| 18:46:06 | → | L29Ah joins (~L29Ah@wikipedia/L29Ah) |
| 18:47:01 | × | hololeap quits (~quassel@user/hololeap) (Quit: Bye) |
| 18:47:40 | × | rbdr quits (~rbdr@dynamic-002-245-152-215.2.245.pool.telefonica.de) (Quit: WeeChat 4.6.0) |
| 18:48:18 | × | weary-traveler quits (~user@user/user363627) (Remote host closed the connection) |
| 18:48:32 | → | rbdr joins (~rbdr@dynamic-002-245-152-215.2.245.pool.telefonica.de) |
| 18:49:07 | → | hololeap joins (~quassel@user/hololeap) |
| 18:51:28 | → | merijn joins (~merijn@host-vr.cgnat-g.v4.dfn.nl) |
| 18:52:58 | → | jespada joins (~jespada@r179-25-2-204.dialup.adsl.anteldata.net.uy) |
| 18:55:37 | → | sayurc_ joins (~sayurc@177.136.41.195) |
| 18:55:48 | × | merijn quits (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 252 seconds) |
| 18:55:49 | × | sayurc quits (~sayurc@169.150.203.34) (Ping timeout: 276 seconds) |
| 18:58:27 | → | j1n37- joins (~j1n37@user/j1n37) |
| 18:59:11 | → | ljdarj1 joins (~Thunderbi@user/ljdarj) |
| 18:59:43 | × | j1n37 quits (~j1n37@user/j1n37) (Ping timeout: 276 seconds) |
| 19:00:06 | × | caconym quits (~caconym@user/caconym) (Quit: bye) |
| 19:00:48 | → | caconym joins (~caconym@user/caconym) |
| 19:00:58 | → | acidjnk_new joins (~acidjnk@p200300d6e71c4f3760e43f0ee11d5618.dip0.t-ipconnect.de) |
| 19:01:55 | × | ljdarj quits (~Thunderbi@user/ljdarj) (Ping timeout: 252 seconds) |
| 19:01:55 | ljdarj1 | is now known as ljdarj |
| 19:06:51 | → | merijn joins (~merijn@host-vr.cgnat-g.v4.dfn.nl) |
| 19:11:32 | × | merijn quits (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 244 seconds) |
| 19:17:16 | × | sayurc_ quits (~sayurc@177.136.41.195) (Ping timeout: 276 seconds) |
| 19:17:17 | → | sayurc joins (~sayurc@169.150.203.34) |
| 19:18:38 | → | merijn joins (~merijn@host-vr.cgnat-g.v4.dfn.nl) |
| 19:20:00 | → | a_fantom joins (~fantom@2.219.56.221) |
| 19:20:06 | × | fantom quits (~fantom@2.219.56.221) (Ping timeout: 244 seconds) |
| 19:21:32 | → | __jmcantrell__ joins (~weechat@user/jmcantrell) |
| 19:21:33 | × | jmcantrell quits (644f1bed9a@user/jmcantrell) (Killed (tungsten.libera.chat (Nickname regained by services))) |
| 19:21:33 | __jmcantrell__ | is now known as jmcantrell |
| 19:21:42 | → | jmcantrell_ joins (644f1bed9a@user/jmcantrell) |
| 19:23:22 | → | fantom joins (~fantom@2.219.56.221) |
| 19:23:46 | × | merijn quits (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 276 seconds) |
| 19:24:01 | → | sayurc_ joins (~sayurc@177.136.41.195) |
| 19:24:25 | × | sayurc quits (~sayurc@169.150.203.34) (Ping timeout: 276 seconds) |
| 19:24:45 | × | a_fantom quits (~fantom@2.219.56.221) (Ping timeout: 244 seconds) |
| 19:26:02 | × | Googulator quits (~Googulato@2a01-036d-0106-211a-315b-d519-517f-afe7.pool6.digikabel.hu) (Quit: Client closed) |
| 19:26:18 | → | Googulator joins (~Googulato@2a01-036d-0106-211a-315b-d519-517f-afe7.pool6.digikabel.hu) |
| 19:26:58 | → | pavonia joins (~user@user/siracusa) |
| 19:27:04 | → | j1n37 joins (~j1n37@user/j1n37) |
| 19:27:15 | → | vanishingideal joins (~vanishing@user/vanishingideal) |
| 19:28:19 | × | j1n37- quits (~j1n37@user/j1n37) (Ping timeout: 276 seconds) |
| 19:34:25 | → | merijn joins (~merijn@host-vr.cgnat-g.v4.dfn.nl) |
| 19:37:46 | × | gmg quits (~user@user/gehmehgeh) (Quit: Leaving) |
| 19:39:06 | → | Owner_ joins (~Owner@2600:1700:69cf:9000:a8ba:1089:2e3e:b3d1) |
| 19:39:21 | × | jmcantrell quits (~weechat@user/jmcantrell) (Quit: WeeChat 4.6.1) |
| 19:39:21 | jmcantrell_ | is now known as jmcantrell |
| 19:40:01 | × | merijn quits (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 276 seconds) |
| 19:42:04 | × | notdabs quits (~Owner@2600:1700:69cf:9000:5926:6835:ef1d:9af3) (Ping timeout: 260 seconds) |
| 19:44:56 | × | euleritian quits (~euleritia@ip5f5ad695.dynamic.kabel-deutschland.de) (Read error: Connection reset by peer) |
| 19:45:30 | → | euleritian joins (~euleritia@95.90.214.149) |
| 19:49:09 | → | __jmcantrell__ joins (~weechat@user/jmcantrell) |
| 19:49:13 | jmcantrell | is now known as Guest8428 |
| 19:49:13 | × | Guest8428 quits (644f1bed9a@user/jmcantrell) (Killed (silver.libera.chat (Nickname regained by services))) |
| 19:49:13 | __jmcantrell__ | is now known as jmcantrell |
| 19:49:26 | → | jmcantrell_ joins (644f1bed9a@user/jmcantrell) |
| 19:50:13 | → | merijn joins (~merijn@host-vr.cgnat-g.v4.dfn.nl) |
| 19:52:02 | × | Owner_ quits (~Owner@2600:1700:69cf:9000:a8ba:1089:2e3e:b3d1) (Quit: Leaving) |
| 19:52:19 | → | notdabs joins (~Owner@2600:1700:69cf:9000:a8ba:1089:2e3e:b3d1) |
| 19:55:37 | × | merijn quits (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 276 seconds) |
| 19:56:46 | → | sayurc joins (~sayurc@169.150.203.34) |
| 19:56:47 | × | sayurc_ quits (~sayurc@177.136.41.195) (Ping timeout: 244 seconds) |
| 19:58:30 | × | acidjnk_new quits (~acidjnk@p200300d6e71c4f3760e43f0ee11d5618.dip0.t-ipconnect.de) (Ping timeout: 252 seconds) |
| 19:58:44 | → | acidjnk_new joins (~acidjnk@p200300d6e71c4f3781d551119ad8c4a9.dip0.t-ipconnect.de) |
| 19:59:25 | → | rvalue- joins (~rvalue@user/rvalue) |
| 20:00:23 | × | rvalue quits (~rvalue@user/rvalue) (Ping timeout: 265 seconds) |
| 20:02:19 | → | tromp joins (~textual@2001:1c00:3487:1b00:d08a:2428:1bec:2dd5) |
| 20:06:00 | → | merijn joins (~merijn@host-vr.cgnat-g.v4.dfn.nl) |
| 20:08:10 | rvalue- | is now known as rvalue |
| 20:09:22 | × | vanishingideal quits (~vanishing@user/vanishingideal) (Remote host closed the connection) |
| 20:10:51 | × | merijn quits (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 252 seconds) |
| 20:19:38 | → | merijn joins (~merijn@host-vr.cgnat-g.v4.dfn.nl) |
| 20:23:05 | → | cheater joins (~Username@user/cheater) |
| 20:24:08 | → | rekahsoft joins (~rekahsoft@bras-base-orllon1103w-grc-15-174-95-4-83.dsl.bell.ca) |
| 20:27:28 | × | merijn quits (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 276 seconds) |
| 20:28:18 | × | michalz quits (~michalz@185.246.207.205) (Remote host closed the connection) |
| 20:37:42 | → | merijn joins (~merijn@host-vr.cgnat-g.v4.dfn.nl) |
| 20:42:02 | × | merijn quits (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 252 seconds) |
| 20:43:35 | <EvanR> | in classic parser with external interface String -> Either Error Expr what's probably happening is a big expression is built up and you can only access it after it is known there was no error somewhere (result finally evaluates to Right something) |
| 20:44:14 | <EvanR> | but if it is the case that the likelihood of an error is very low, and you want to start processing the Expr lazily |
| 20:44:45 | <EvanR> | while taking some big performance trade off if there really is an error |
| 20:45:09 | <EvanR> | is there a type for that |
| 20:45:34 | <tomsmeding> | IO, and throw an IO exception (the error case is actually quite fast here) |
| 20:46:12 | <EvanR> | IO... lazily... huh |
| 20:46:14 | <tomsmeding> | ah no, I'm misremembering: it was using `String -> Expr` and throwing `error` on an error, then catching that in IO |
| 20:48:02 | <EvanR> | ok that sounds pretty good but could you somehow do it without IO |
| 20:48:12 | <tomsmeding> | you cannot catch asynchronous exceptions without IO, so no |
| 20:48:52 | <EvanR> | I seem to remember some suggestion from ski a million years ago ... like ... put the processing within the parser or something |
| 20:49:21 | <tomsmeding> | as in, instead of parsing an arithmetic expression, parse the evaluation of that expression? |
| 20:49:59 | <tomsmeding> | I've seen students do that when told to write a parser that just produces a syntax tree (their parser only ever produced the AST node for a literal number -- the evaluated expression) |
| 20:50:16 | <EvanR> | arithmetic might be a long shot because of reasons |
| 20:50:38 | <EvanR> | but something that could be done lazily |
| 20:51:04 | × | wootehfoot quits (~wootehfoo@user/wootehfoot) (Read error: Connection reset by peer) |
| 20:51:11 | <EvanR> | like size of expression |
| 20:51:13 | <EvanR> | or something |
| 20:51:14 | <tomsmeding> | if you put the processing inside the parser, you don't get automatic laziness -- you are instead forced to manually compute a little part of the result each time a little part of the expression becomes available |
| 20:52:02 | <EvanR> | or, an unparsing (e.g. in another language, assuming the languages would allow it) |
| 20:52:46 | <EvanR> | collapsing an expression incrementally, or streaming something generated from the expression could both benefit from starting sooner |
| 20:53:04 | → | merijn joins (~merijn@host-vr.cgnat-g.v4.dfn.nl) |
| 20:53:31 | <tomsmeding> | I don't think you're going to get any automatic laziness here |
| 20:53:44 | <EvanR> | what do you mean by automatic |
| 20:54:12 | × | ystael quits (~ystael@user/ystael) (Ping timeout: 276 seconds) |
| 20:54:13 | <tomsmeding> | in that you write a function that computes e.g. the size of an expression as if the whole expression is already evaluated, and then you do the "magic" of stuffing it inside the parser, and it's somehow computed lazily |
| 20:55:03 | <monochrom> | I don't know how to do: be incremental and fast when there will be no error in the future, but correct (gives Left error) and OK to be slow when there will be an error in the future. Basically incremental iff no access to future. |
| 20:55:11 | <EvanR> | each step of the parser could bang pattern the accumulator in that case |
| 20:55:11 | <tomsmeding> | if you can write your function as a fold (as in catamorphism), then you can replace expression constructors in your parser by the algebra of that fold and get "lazy" computation of your result |
| 20:55:14 | <monochrom> | But I know two options. |
| 20:55:17 | <tomsmeding> | but you have to do the expression as a fold manually |
| 20:55:55 | <tomsmeding> | EvanR: which accumulator? If you've just written a function that computes the final result, the only thing you can force is that final result -- which you can't, halway during parsing |
| 20:56:00 | <tomsmeding> | *halfway |
| 20:56:01 | <EvanR> | well, I don't think I was even thinking about a distinction between "automatic and manual" |
| 20:56:18 | <EvanR> | just not building an entire expression before starting the next stage |
| 20:56:18 | <tomsmeding> | and if you don't force anything, nothing will happen, so no streaming will happen |
| 20:56:31 | <EvanR> | well you're always forcing something somewhere |
| 20:56:43 | <monochrom> | 1. Assume no syntax error. But if you do detect a syntax error, use error, don't use Left. Then it is easier to be incremental (still requires clever coding). |
| 20:56:53 | <tomsmeding> | what I'm saying is: yes you can achieve what you want by putting the computation inside the parser, but it's not a magic wand: you'll have to do work to rewrite your computation to fit a very specific form for that to work |
| 20:57:05 | <tomsmeding> | and some computations cannot be rewritten in that special form at all |
| 20:57:20 | <tomsmeding> | (many, actually) |
| 20:57:39 | <EvanR> | not really looking for magic just existence xD |
| 20:57:40 | <monochrom> | 2. Do what SAX did (remember those?): Use ParserT (Cont r) so you can yield nodes/subtrees incrementally ASAP. |
| 20:57:48 | <EvanR> | SAX? |
| 20:57:54 | <tomsmeding> | EvanR: it doesn't even always exist, only if your computation can be written as a fold |
| 20:58:03 | × | merijn quits (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 268 seconds) |
| 20:58:13 | <tomsmeding> | monochrom: SAX is "emit events for each constructor parsed"? |
| 20:58:16 | <EvanR> | interesting theory |
| 20:58:22 | <EvanR> | if and only if it's a fold |
| 20:58:30 | <monochrom> | Remember that new paradigm of XML parsing where you tell the parser "here is my suite of callbacks" and the parser calls one callback per node? |
| 20:58:39 | <monochrom> | Yeah that. |
| 20:58:44 | <tomsmeding> | well, if you parser never inspects any trees it built, then the "if" holds -- not sure about the "only if" |
| 20:58:51 | <tomsmeding> | if your parser inspects trees it built, then things get more complicated |
| 20:59:08 | <monochrom> | It's trivial in Python, and if you know Cont, also trivial in Haskell. :) |
| 20:59:23 | <tomsmeding> | monochrom: the "new" in that sentence is a bit out of place :) |
| 20:59:43 | <monochrom> | It was new back then compared to other XML parsers way back then. |
| 21:00:00 | <tomsmeding> | undoubtedly |
| 21:00:17 | <monochrom> | It also broke a lot of programmers' minds. :) |
| 21:00:34 | <EvanR> | I had no idea XML was so keen on performance |
| 21:00:37 | <tomsmeding> | the first time I met it I honestly just found it needlessly messy |
| 21:00:44 | <EvanR> | it sounded like bloat mostly |
| 21:01:11 | <monochrom> | But it was a necessary invention for obvious reasons. Because before it, they did what you are seeing right now, taking forever to build a huge tree in memory until EOF. |
| 21:01:17 | × | Square quits (~Square4@user/square) (Ping timeout: 265 seconds) |
| 21:01:56 | <monochrom> | which was doubly unsustainable back then because they too didn't have more than 1GB RAM. |
| 21:01:56 | <geekosaur> | it had to be keen on performance, when a simple thing had to be represented as a huge bloated tree of tags |
| 21:02:28 | × | kimiamania quits (~65804703@user/kimiamania) (Quit: PegeLinux) |
| 21:02:52 | → | kimiamania9 joins (~65804703@user/kimiamania) |
| 21:03:30 | <EvanR> | well ParserT (Cont r) has just made my brain explode |
| 21:03:40 | <monochrom> | Oh yeah I just need the direction "incremental implies no access to future". |
| 21:04:24 | <EvanR> | you can only use Acme.now |
| 21:05:29 | × | euleritian quits (~euleritia@95.90.214.149) (Ping timeout: 260 seconds) |
| 21:05:44 | → | euleritian joins (~euleritia@dynamic-176-006-132-211.176.6.pool.telefonica.de) |
| 21:07:16 | <monochrom> | If the probability of syntax error is low enough to ignore: Step 1: Use e.g. "String -> (String, a)". Step 2: implement >>= like "m >>= k = \inp -> case m inp of ~(mid, a) -> ..." i.e. increase laziness in your >>=. |
| 21:07:51 | <monochrom> | (Step 3: If you do run into syntax error, use error/bottom, be partial.) |
| 21:08:51 | → | merijn joins (~merijn@host-vr.cgnat-g.v4.dfn.nl) |
| 21:09:09 | × | Pozyomka quits (~pyon@user/pyon) (Ping timeout: 252 seconds) |
| 21:11:10 | → | Pozyomka joins (~pyon@user/pyon) |
| 21:11:29 | <EvanR> | (warning reinventing a wheel probably) data Incremental a = InProgress a (Incremental a) | Done a | Failed |
| 21:11:59 | <tomsmeding> | is that for a parser of [a]? |
| 21:12:18 | <EvanR> | no the payload of InProgress is probably pointless here |
| 21:12:31 | <EvanR> | but I was thinking it was like, the accumulator for a number of expression nodes |
| 21:12:37 | <tomsmeding> | if the payload is not there, what's the point of emitting an InProgress? |
| 21:12:44 | <EvanR> | as a basic computation to do on a tree |
| 21:13:15 | <tomsmeding> | without the payload in InProgress, Incremental a is isomorphic to (Natural, Maybe a) |
| 21:13:21 | <EvanR> | for this problem, I don't know. But in general it would let you cancel out of a computation early |
| 21:13:29 | <tomsmeding> | with the payload, it's isomorphic to ([a], Maybe a) |
| 21:13:42 | <EvanR> | sure |
| 21:13:53 | <EvanR> | not sure |
| 21:14:13 | <tomsmeding> | its laziness properties are a bit different, sure |
| 21:14:21 | <EvanR> | e.g. an external agent could decide, this chain of InProgress is too long, give up |
| 21:14:31 | <tomsmeding> | but if this is not supposed to be a parser of [a], then I'm not sure what that 'a' is supposed to be :) |
| 21:14:32 | <EvanR> | but that's probably a different subject |
| 21:14:38 | <EvanR> | it's not a parser of a |
| 21:14:41 | <tomsmeding> | right, but what does that give you for your original question? |
| 21:15:29 | <EvanR> | the parser's result would not survive if I got what I was asking for |
| 21:15:33 | → | Tuplanolla joins (~Tuplanoll@91-159-69-59.elisa-laajakaista.fi) |
| 21:15:46 | × | merijn quits (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 252 seconds) |
| 21:15:46 | <EvanR> | it would be an intermediate |
| 21:16:11 | <EvanR> | alright the a would be an approximation of the computation |
| 21:16:15 | <tomsmeding> | but all the intermediates here are of the same type; would they be subtrees of the resulting expression? If so, how does the consumer know _which_ subtrees? |
| 21:16:23 | <EvanR> | i.e. if it was a count, the count would increase toward the final number |
| 21:16:37 | <EvanR> | or an eventual error |
| 21:17:12 | <tomsmeding> | (and if you're considering it to be a count, then you're simultaneously doing this idea of putting the computation inside the parser -- and then that idea _alone_ already gives you the required laziness, no need to also introduce Incremental) |
| 21:17:12 | <EvanR> | in this example the consumer would not know and not care |
| 21:17:31 | <EvanR> | sure |
| 21:17:51 | <EvanR> | guess I'll try it and then maybe get a better mental model of what's possible |
| 21:18:15 | × | rbdr quits (~rbdr@dynamic-002-245-152-215.2.245.pool.telefonica.de) (Ping timeout: 252 seconds) |
| 21:20:21 | × | Pozyomka quits (~pyon@user/pyon) (Ping timeout: 248 seconds) |
| 21:22:55 | <monochrom> | Yes it is a reinvented wheel. But don't worry! I think everyone reinvents that wheel instead of importing from a library. |
| 21:23:12 | <EvanR> | an XML library? |
| 21:23:42 | <monochrom> | Actually you want: data Incremental a = InProgress a (String -> Incremental a) | Done a | Failed |
| 21:23:56 | <tomsmeding> | (also, I think that reinventing wheels is a very good way of getting intuition for the design space) |
| 21:24:05 | <EvanR> | maybe it's like, instead of having the parser build the Expr tree, it applies a bunch of "builder" functions which might build a tree, or might do something else |
| 21:24:10 | <monochrom> | You want a String-> function there for feeding it the rest of input. |
| 21:24:21 | <EvanR> | SAX callbacks |
| 21:24:49 | <EvanR> | or "a fold" |
| 21:24:54 | <monochrom> | Or maybe not. It depends on the rest of your design. |
| 21:26:42 | → | merijn joins (~merijn@host-vr.cgnat-g.v4.dfn.nl) |
| 21:28:27 | <EvanR> | (your logic about needing to look into the future to decide if it should be slow is funny, it would be just fine if it's not slow) |
| 21:31:27 | × | merijn quits (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 252 seconds) |
| 21:32:39 | → | peterbecich joins (~Thunderbi@syn-047-229-123-186.res.spectrum.com) |
| 21:41:55 | × | peterbecich quits (~Thunderbi@syn-047-229-123-186.res.spectrum.com) (Quit: peterbecich) |
| 21:42:06 | → | ystael joins (~ystael@user/ystael) |
| 21:42:18 | → | peterbecich joins (~Thunderbi@syn-047-229-123-186.res.spectrum.com) |
| 21:42:27 | → | merijn joins (~merijn@host-vr.cgnat-g.v4.dfn.nl) |
| 21:45:53 | → | Pozyomka joins (~pyon@user/pyon) |
| 21:47:04 | × | merijn quits (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 260 seconds) |
| 21:52:14 | → | Guest87 joins (~Guest87@2620:72:0:1f18:f98c:1934:e021:b784) |
| 21:53:55 | × | machinedgod quits (~machinedg@d108-173-18-100.abhsia.telus.net) (Ping timeout: 276 seconds) |
| 21:57:51 | → | merijn joins (~merijn@host-vr.cgnat-g.v4.dfn.nl) |
| 22:02:07 | → | peterbecich1 joins (~Thunderbi@syn-047-229-123-186.res.spectrum.com) |
| 22:03:29 | <tomsmeding> | has there been a time when GHC.Generics did not produce balanced trees but instead a right- or left-leaning tree? |
| 22:04:37 | × | merijn quits (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 248 seconds) |
| 22:04:58 | × | peterbecich quits (~Thunderbi@syn-047-229-123-186.res.spectrum.com) (Ping timeout: 276 seconds) |
| 22:08:56 | × | peterbecich1 quits (~Thunderbi@syn-047-229-123-186.res.spectrum.com) (Ping timeout: 252 seconds) |
| 22:11:52 | × | tabaqui quits (~tabaqui@167.71.80.236) (Ping timeout: 252 seconds) |
| 22:12:17 | × | tromp quits (~textual@2001:1c00:3487:1b00:d08a:2428:1bec:2dd5) (Quit: My iMac has gone to sleep. ZZZzzz…) |
| 22:12:52 | → | emmanuelux joins (~emmanuelu@user/emmanuelux) |
| 22:15:53 | → | merijn joins (~merijn@host-vr.cgnat-g.v4.dfn.nl) |
| 22:21:13 | × | merijn quits (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 276 seconds) |
| 22:22:25 | × | target_i quits (~target_i@user/target-i/x-6023099) (Quit: leaving) |
| 22:25:14 | × | sayurc quits (~sayurc@169.150.203.34) (Quit: Konversation terminated!) |
| 22:25:51 | <geekosaur> | now, aiui |
| 22:26:06 | <geekosaur> | my understanding is that if you want balanced trees you want sop-generics |
| 22:26:12 | <tomsmeding> | other way round |
| 22:26:22 | <tomsmeding> | sop-generics produces a list of lists; GHC.Generics produces balanced trees |
| 22:26:34 | <tomsmeding> | % :seti -XDeriveGeneric |
| 22:26:34 | <yahb2> | <no output> |
| 22:26:50 | <tomsmeding> | % data T = A | B | C | D | E | F deriving (Show, Generic) |
| 22:26:50 | <yahb2> | <interactive>:61:48: error: [GHC-76037] ; Not in scope: type constructor or class ‘Generic’ |
| 22:26:55 | <tomsmeding> | % import GHC.Generics |
| 22:26:55 | <yahb2> | <no output> |
| 22:26:57 | <tomsmeding> | % data T = A | B | C | D | E | F deriving (Show, Generic) |
| 22:26:57 | <yahb2> | <no output> |
| 22:27:05 | <tomsmeding> | % :k! Rep T () |
| 22:27:05 | <yahb2> | Rep T () :: * ; = M1 ; D ; (MetaData "T" "Ghci13" "interactive" False) ; ((M1 C (MetaCons "A" PrefixI False) U1 ; :+: (M1 C (MetaCons "B" PrefixI False) U1 ; :+: M1 C (... |
| 22:27:08 | <tomsmeding> | meh |
| 22:27:26 | <tomsmeding> | %% :k! Rep T () |
| 22:27:27 | <yahb2> | https://paste.tomsmeding.com/PlhqwSXT |
| 22:28:07 | <tomsmeding> | (A + (B + C)) + (D + (E + F)) |
| 22:28:51 | × | gawen quits (~gawen@user/gawen) (Quit: cya) |
| 22:28:54 | <tomsmeding> | geekosaur: the "sop" in sop-generics is "sum-of-products", where "sum" is used a contrastive to "plus", like `sum` vs (+) |
| 22:31:37 | → | merijn joins (~merijn@host-vr.cgnat-g.v4.dfn.nl) |
| 22:35:14 | → | gawen joins (~gawen@user/gawen) |
| 22:36:39 | × | merijn quits (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 260 seconds) |
| 22:39:13 | → | peterbecich joins (~Thunderbi@syn-047-229-123-186.res.spectrum.com) |
| 22:42:05 | <emojelly> | pipes is so, so, so much faster than coroutines... |
| 22:42:19 | <EvanR> | pipes, haven't heard about that one for a minute |
| 22:43:38 | <emojelly> | For my specific needs it seems quite fitting. |
| 22:43:57 | → | sayurc joins (~sayurc@169.150.203.34) |
| 22:44:08 | × | __monty__ quits (~toonn@user/toonn) (Quit: leaving) |
| 22:44:42 | <EvanR> | > p (const Z) N Err "(a b ? d e f)" |
| 22:44:48 | <EvanR> | N [Z,Z,Err] |
| 22:44:54 | <EvanR> | this is not great for reasons |
| 22:45:13 | <EvanR> | though it is kind of lazy |
| 22:47:26 | → | merijn joins (~merijn@host-vr.cgnat-g.v4.dfn.nl) |
| 22:50:33 | × | gawen quits (~gawen@user/gawen) (Quit: cya) |
| 22:53:04 | × | merijn quits (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 276 seconds) |
| 22:56:24 | → | vanishingideal joins (~vanishing@user/vanishingideal) |
| 22:56:46 | → | gawen joins (~gawen@user/gawen) |
| 23:01:33 | <EvanR> | if you can get away with folding over tokens then clearly there is more laziness |
| 23:03:13 | → | merijn joins (~merijn@host-vr.cgnat-g.v4.dfn.nl) |
| 23:06:17 | → | bitdex joins (~bitdex@gateway/tor-sasl/bitdex) |
| 23:08:40 | × | merijn quits (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 276 seconds) |
| 23:09:51 | × | Tuplanolla quits (~Tuplanoll@91-159-69-59.elisa-laajakaista.fi) (Quit: Leaving.) |
| 23:11:33 | × | polyphem quits (~rod@pd9fbfc2f.dip0.t-ipconnect.de) (Ping timeout: 252 seconds) |
| 23:16:55 | × | Unicorn_Princess quits (~Unicorn_P@user/Unicorn-Princess/x-3540542) (Remote host closed the connection) |
| 23:20:05 | → | ljdarj1 joins (~Thunderbi@user/ljdarj) |
| 23:23:06 | × | ljdarj quits (~Thunderbi@user/ljdarj) (Ping timeout: 252 seconds) |
| 23:23:07 | ljdarj1 | is now known as ljdarj |
| 23:32:49 | → | prolic_ joins (~sasa@181.122.135.9) |
| 23:37:02 | → | merijn joins (~merijn@host-vr.cgnat-g.v4.dfn.nl) |
| 23:41:18 | × | ft quits (~ft@p508db594.dip0.t-ipconnect.de) (Ping timeout: 272 seconds) |
| 23:41:59 | × | merijn quits (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 260 seconds) |
| 23:42:29 | → | ft joins (~ft@p4fc2a6e6.dip0.t-ipconnect.de) |
| 23:50:46 | → | merijn joins (~merijn@host-vr.cgnat-g.v4.dfn.nl) |
| 23:51:53 | → | weary-traveler joins (~user@user/user363627) |
| 23:54:44 | × | sprotte24 quits (~sprotte24@p200300d16f1c5b003c76b51cf90902ef.dip0.t-ipconnect.de) (Read error: Connection reset by peer) |
| 23:55:42 | × | merijn quits (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 244 seconds) |
| 23:59:33 | × | lisbeths quits (uid135845@id-135845.lymington.irccloud.com) (Quit: Connection closed for inactivity) |
All times are in UTC on 2025-04-11.