Logs on 2025-12-11 (liberachat/#haskell)
| 00:07:09 | × | ljdarj quits (~Thunderbi@user/ljdarj) (Read error: Connection reset by peer) |
| 00:08:06 | → | merijn joins (~merijn@host-vr.cgnat-g.v4.dfn.nl) |
| 00:12:55 | × | merijn quits (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 246 seconds) |
| 00:15:08 | × | pabs3 quits (~pabs3@user/pabs3) (Read error: Connection reset by peer) |
| 00:16:00 | → | pabs3 joins (~pabs3@user/pabs3) |
| 00:23:04 | × | p3n quits (~p3n@217.198.124.246) (Quit: ZNC 1.10.1 - https://znc.in) |
| 00:23:11 | → | p3n_ joins (~p3n@2a00:19a0:3:7c:0:d9c6:7cf6:1) |
| 00:23:52 | → | merijn joins (~merijn@host-vr.cgnat-g.v4.dfn.nl) |
| 00:28:48 | × | merijn quits (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 260 seconds) |
| 00:33:09 | → | Sgeo__ joins (~Sgeo@user/sgeo) |
| 00:34:31 | × | ycp quits (~znc@user/dragestil) (Ping timeout: 244 seconds) |
| 00:35:14 | → | ycp joins (~znc@user/dragestil) |
| 00:36:04 | × | Sgeo_ quits (~Sgeo@user/sgeo) (Ping timeout: 244 seconds) |
| 00:39:39 | → | merijn joins (~merijn@host-vr.cgnat-g.v4.dfn.nl) |
| 00:40:49 | × | trickard_ quits (~trickard@cpe-83-98-47-163.wireline.com.au) (Read error: Connection reset by peer) |
| 00:41:02 | → | trickard_ joins (~trickard@cpe-83-98-47-163.wireline.com.au) |
| 00:41:58 | × | larsivi quits (~larsivi@user/larsivi) (Ping timeout: 246 seconds) |
| 00:44:04 | × | merijn quits (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 246 seconds) |
| 00:47:55 | × | Raito_Bezarius quits (~Raito@libera/contributor/wireguard.tunneler.raito-bezarius) (Ping timeout: 246 seconds) |
| 00:48:27 | × | trickard_ quits (~trickard@cpe-83-98-47-163.wireline.com.au) (Read error: Connection reset by peer) |
| 00:51:04 | → | trickard_ joins (~trickard@cpe-83-98-47-163.wireline.com.au) |
| 00:55:15 | → | merijn joins (~merijn@host-vr.cgnat-g.v4.dfn.nl) |
| 00:59:56 | × | merijn quits (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 256 seconds) |
| 01:02:28 | → | Raito_Bezarius joins (~Raito@libera/contributor/wireguard.tunneler.raito-bezarius) |
| 01:05:04 | × | jle` quits (~jle`@2603:8001:3b00:11:ed74:b35d:c320:7e16) (Ping timeout: 246 seconds) |
| 01:05:59 | → | jle` joins (~jle`@2603:8001:3b00:11:a23f:f454:6842:2ec4) |
| 01:09:09 | × | hsw quits (~hsw@112-104-86-252.adsl.dynamic.seed.net.tw) (Quit: Leaving) |
| 01:09:16 | × | xff0x quits (~xff0x@2405:6580:b080:900:9fc6:fc26:b514:683b) (Ping timeout: 246 seconds) |
| 01:10:17 | × | Tuplanolla quits (~Tuplanoll@91-152-225-194.elisa-laajakaista.fi) (Quit: Leaving.) |
| 01:10:41 | → | merijn joins (~merijn@host-vr.cgnat-g.v4.dfn.nl) |
| 01:15:15 | × | merijn quits (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 240 seconds) |
| 01:19:20 | → | larsivi joins (~larsivi@user/larsivi) |
| 01:24:46 | → | divlamir_ joins (~divlamir@user/divlamir) |
| 01:24:50 | × | divlamir quits (~divlamir@user/divlamir) (Read error: Connection reset by peer) |
| 01:25:38 | divlamir_ | is now known as divlamir |
| 01:26:24 | → | merijn joins (~merijn@host-vr.cgnat-g.v4.dfn.nl) |
| 01:26:25 | × | acidjnk quits (~acidjnk@p200300d6e717192391252480cf04477b.dip0.t-ipconnect.de) (Ping timeout: 246 seconds) |
| 01:28:08 | → | bggd_ joins (~bgg@2a01:e0a:fd5:f510:327d:b50f:5899:99de) |
| 01:30:27 | × | trickard_ quits (~trickard@cpe-83-98-47-163.wireline.com.au) (Read error: Connection reset by peer) |
| 01:30:40 | → | trickard_ joins (~trickard@cpe-83-98-47-163.wireline.com.au) |
| 01:31:49 | × | merijn quits (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 264 seconds) |
| 01:32:46 | × | califax quits (~califax@user/califx) (Remote host closed the connection) |
| 01:34:29 | → | omidmash5 joins (~omidmash@user/omidmash) |
| 01:36:31 | × | omidmash quits (~omidmash@user/omidmash) (Ping timeout: 244 seconds) |
| 01:36:31 | omidmash5 | is now known as omidmash |
| 01:40:46 | trickard_ | is now known as trickard |
| 01:42:14 | → | merijn joins (~merijn@host-vr.cgnat-g.v4.dfn.nl) |
| 01:43:38 | → | califax joins (~califax@user/califx) |
| 01:45:22 | × | chromoblob quits (~chromoblo@user/chromob1ot1c) (Remote host closed the connection) |
| 01:45:38 | → | chromoblob joins (~chromoblo@user/chromob1ot1c) |
| 01:46:57 | × | merijn quits (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 244 seconds) |
| 01:49:31 | × | timide quits (~timide@user/timide) (Ping timeout: 246 seconds) |
| 01:49:53 | × | sp1ff` quits (~user@2601:1c2:4c00:6820::c593) (Remote host closed the connection) |
| 01:55:08 | × | ephemient quits (uid407513@user/ephemient) (Quit: Connection closed for inactivity) |
| 01:58:01 | → | merijn joins (~merijn@host-vr.cgnat-g.v4.dfn.nl) |
| 01:58:32 | → | timide joins (~timide@user/timide) |
| 02:01:21 | → | xff0x joins (~xff0x@fsb6a9491c.tkyc517.ap.nuro.jp) |
| 02:02:31 | × | merijn quits (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 240 seconds) |
| 02:05:00 | × | bggd_ quits (~bgg@2a01:e0a:fd5:f510:327d:b50f:5899:99de) (Remote host closed the connection) |
| 02:08:19 | <Pozyomka> | Why is does XMonad.keys have type “XConfig l -> XConfig Layout -> Data.Map.Internal.Map (ButtonMask, KeySym) (X ())”? The first XConfig, I can understand, it's the XConfig record we're projecting from. But why would we need a second record? |
| 02:10:16 | × | spew quits (~spew@user/spew) (Quit: nyaa~) |
| 02:11:20 | <geekosaur> | because it's not a Map, it's a function that produces a Map. the function is passed the current configuration, mostly so it can extract the modMask |
| 02:12:14 | <geekosaur> | https://github.com/xmonad/xmonad/blob/master/src/XMonad/Config.hs#L181-L243 |
| 02:13:06 | <geekosaur> | also note like 194 which extracts the current layoutHook and hard sets it to reinitialize layouts |
| 02:13:47 | → | merijn joins (~merijn@host-vr.cgnat-g.v4.dfn.nl) |
| 02:13:50 | <geekosaur> | and line 233 which extracts the workspaces |
| 02:18:13 | × | merijn quits (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 246 seconds) |
| 02:18:55 | × | myxos quits (~myxos@wsip-70-166-126-146.ph.ph.cox.net) (Ping timeout: 264 seconds) |
| 02:23:57 | <Pozyomka> | Ah, thanks... I guess I just find it hard to reason about non-positive types: “Part of the data of a configuration is a function that takes another configuration...” |
| 02:27:19 | → | myxos joins (~myxos@wsip-70-166-126-146.ph.ph.cox.net) |
| 02:29:17 | → | merijn joins (~merijn@host-vr.cgnat-g.v4.dfn.nl) |
| 02:35:01 | <geekosaur> | it takes the same configuration. there's just no way to relay the configuration it came from to it automatically, so xmonad has to do `keys conf conf` |
| 02:35:35 | <geekosaur> | (hypothetically you could even call the function directly, but I can't think of a good reason to do so. xmonad users have surprised me in the past, though) |
| 02:35:55 | × | merijn quits (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 240 seconds) |
| 02:37:49 | × | karenw quits (~karenw@user/karenw) (Ping timeout: 264 seconds) |
| 02:44:07 | × | vanishingideal quits (~vanishing@user/vanishingideal) (Ping timeout: 264 seconds) |
| 02:45:54 | → | vanishingideal joins (~vanishing@user/vanishingideal) |
| 02:47:20 | → | merijn joins (~merijn@host-vr.cgnat-g.v4.dfn.nl) |
| 02:51:35 | × | merijn quits (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 240 seconds) |
| 02:52:05 | × | trickard quits (~trickard@cpe-83-98-47-163.wireline.com.au) (Read error: Connection reset by peer) |
| 02:52:18 | → | trickard_ joins (~trickard@cpe-83-98-47-163.wireline.com.au) |
| 02:57:35 | × | rekahsoft quits (~rekahsoft@70.51.99.245) (Ping timeout: 240 seconds) |
| 02:58:00 | → | Lycurgus joins (~juan@user/Lycurgus) |
| 03:01:02 | → | hsw joins (~hsw@112-104-86-252.adsl.dynamic.seed.net.tw) |
| 03:02:43 | → | merijn joins (~merijn@host-vr.cgnat-g.v4.dfn.nl) |
| 03:06:50 | → | ryanbooker joins (uid4340@id-4340.hampstead.irccloud.com) |
| 03:07:49 | × | merijn quits (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 264 seconds) |
| 03:09:26 | × | img quits (~img@user/img) (Quit: ZNC 1.10.1 - https://znc.in) |
| 03:10:39 | → | img joins (~img@user/img) |
| 03:11:55 | × | vanishingideal quits (~vanishing@user/vanishingideal) (Ping timeout: 240 seconds) |
| 03:14:04 | → | vanishingideal joins (~vanishing@user/vanishingideal) |
| 03:17:22 | × | nschoe quits (~nschoe@82-65-202-30.subs.proxad.net) (Ping timeout: 246 seconds) |
| 03:18:27 | → | merijn joins (~merijn@host-vr.cgnat-g.v4.dfn.nl) |
| 03:23:15 | → | nschoe joins (~nschoe@82-65-202-30.subs.proxad.net) |
| 03:23:19 | × | merijn quits (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 246 seconds) |
| 03:34:12 | → | merijn joins (~merijn@host-vr.cgnat-g.v4.dfn.nl) |
| 03:35:55 | × | Lycurgus quits (~juan@user/Lycurgus) (Quit: alsoknownas.renjuan.org ( juan@acm.org )) |
| 03:38:55 | × | merijn quits (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 240 seconds) |
| 03:41:55 | × | trickard_ quits (~trickard@cpe-83-98-47-163.wireline.com.au) (Read error: Connection reset by peer) |
| 03:42:08 | → | trickard_ joins (~trickard@cpe-83-98-47-163.wireline.com.au) |
| 03:49:54 | × | omidmash quits (~omidmash@user/omidmash) (Quit: The Lounge - https://thelounge.chat) |
| 03:50:01 | → | merijn joins (~merijn@host-vr.cgnat-g.v4.dfn.nl) |
| 03:54:19 | → | omidmash joins (~omidmash@user/omidmash) |
| 03:54:28 | × | merijn quits (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 246 seconds) |
| 04:05:30 | → | merijn joins (~merijn@host-vr.cgnat-g.v4.dfn.nl) |
| 04:10:15 | × | merijn quits (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 240 seconds) |
| 04:21:18 | → | merijn joins (~merijn@host-vr.cgnat-g.v4.dfn.nl) |
| 04:25:55 | × | merijn quits (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 240 seconds) |
| 04:33:17 | × | weary-traveler quits (~user@user/user363627) (Remote host closed the connection) |
| 04:37:05 | → | merijn joins (~merijn@host-vr.cgnat-g.v4.dfn.nl) |
| 04:41:35 | × | merijn quits (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 240 seconds) |
| 04:47:17 | → | merijn joins (~merijn@host-vr.cgnat-g.v4.dfn.nl) |
| 04:52:13 | × | merijn quits (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 246 seconds) |
| 04:52:55 | × | machinedgod quits (~machinedg@d75-159-126-101.abhsia.telus.net) (Ping timeout: 240 seconds) |
| 04:56:53 | → | peterbecich joins (~Thunderbi@71.84.33.135) |
| 05:00:42 | × | jmcantrell quits (~weechat@user/jmcantrell) (Ping timeout: 244 seconds) |
| 05:03:05 | → | merijn joins (~merijn@host-vr.cgnat-g.v4.dfn.nl) |
| 05:07:15 | × | merijn quits (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 240 seconds) |
| 05:14:45 | × | finsternis quits (~X@23.226.237.192) (Read error: Connection reset by peer) |
| 05:15:38 | → | bitdex joins (~bitdex@gateway/tor-sasl/bitdex) |
| 05:16:36 | × | ryanbooker quits (uid4340@id-4340.hampstead.irccloud.com) (Quit: Connection closed for inactivity) |
| 05:18:32 | → | merijn joins (~merijn@host-vr.cgnat-g.v4.dfn.nl) |
| 05:20:55 | trickard_ | is now known as trickard |
| 05:24:55 | × | merijn quits (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 240 seconds) |
| 05:26:47 | → | deptype joins (~deptype@2406:b400:3a:9d2f:fd44:bbca:9ef1:b046) |
| 05:27:03 | <iqubic> | If I have a `Map k v` is there a function of type `Map k v -> k -> Bool` that tells me if said key is present in the Map? |
| 05:27:41 | <iqubic> | It's member and notMemember that I want. |
| 05:36:35 | → | merijn joins (~merijn@host-vr.cgnat-g.v4.dfn.nl) |
| 05:41:35 | × | merijn quits (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 240 seconds) |
| 05:50:53 | × | ChaiTRex quits (~ChaiTRex@user/chaitrex) (Ping timeout: 252 seconds) |
| 05:51:30 | → | takuan joins (~takuan@d8D86B9E9.access.telenet.be) |
| 05:52:32 | → | merijn joins (~merijn@host-vr.cgnat-g.v4.dfn.nl) |
| 05:52:49 | → | ChaiTRex joins (~ChaiTRex@user/chaitrex) |
| 05:54:35 | × | iqubic quits (~sophia@2601:602:9203:1660:767a:e6b6:2f4b:e37e) (Remote host closed the connection) |
| 05:54:43 | <Leary> | @tell Wygyulmage Looks like it's because it's defined in terms of `deleteBy`, but with the arguments flipped to be consistent with `\\`. I wouldn't call that a /deep/ reason though, and you could perhaps change it by complaining at the CLC. |
| 05:54:43 | <lambdabot> | Consider it noted. |
| 05:56:58 | × | merijn quits (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 246 seconds) |
| 06:07:59 | → | merijn joins (~merijn@host-vr.cgnat-g.v4.dfn.nl) |
| 06:10:16 | × | peterbecich quits (~Thunderbi@71.84.33.135) (Ping timeout: 246 seconds) |
| 06:12:35 | × | merijn quits (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 240 seconds) |
| 06:14:14 | × | Pozyomka quits (~pyon@user/pyon) (Quit: brb) |
| 06:19:14 | → | ephemient joins (uid407513@user/ephemient) |
| 06:19:41 | → | Pozyomka joins (~pyon@user/pyon) |
| 06:23:43 | → | merijn joins (~merijn@host-vr.cgnat-g.v4.dfn.nl) |
| 06:28:40 | × | merijn quits (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 245 seconds) |
| 06:32:46 | × | Pozyomka quits (~pyon@user/pyon) (Quit: brb) |
| 06:34:27 | → | Pozyomka joins (~pyon@user/pyon) |
| 06:34:29 | → | euphores joins (~SASL_euph@user/euphores) |
| 06:39:30 | → | merijn joins (~merijn@host-vr.cgnat-g.v4.dfn.nl) |
| 06:41:20 | <int-e> | Leary: you had an extra 'y' |
| 06:41:54 | <int-e> | (I noticed because I tried finding the question) |
| 06:43:35 | × | haritz quits (~hrtz@user/haritz) (Quit: ZNC 1.8.2+deb3.1+deb12u1 - https://znc.in) |
| 06:44:08 | × | merijn quits (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 240 seconds) |
| 06:45:44 | <Leary> | Geh. That's what happens when no tab-complete. |
| 06:47:11 | <Leary> | @clear-messages |
| 06:47:11 | <lambdabot> | Messages cleared. |
| 06:47:27 | <Leary> | @tell Wygulmage Looks like it's because it's defined in terms of `deleteBy`, but with the arguments flipped to be consistent with `\\`. I wouldn't call that a /deep/ reason though, and you could perhaps change it by complaining at the CLC. |
| 06:47:27 | <lambdabot> | Consider it noted. |
| 06:47:52 | → | acidjnk joins (~acidjnk@p200300d6e717192391252480cf04477b.dip0.t-ipconnect.de) |
| 06:50:09 | <int-e> | It's been that way since at least Haskell 98 though. (On the flip side, I don't remember ever using that function.) |
| 06:52:23 | <int-e> | Changing the orientation of the predicate would be one of the more insidious changes you could push onto users, since the code will still compile. |
| 06:53:30 | → | peterbecich joins (~Thunderbi@71.84.33.135) |
| 06:54:41 | <Leary> | Yeah, it probably won't happen. That said, it's probably not actually hard to warn/PR every single user on hackage. |
| 06:59:12 | × | marinelli quits (~weechat@gateway/tor-sasl/marinelli) (Quit: marinelli) |
| 07:02:54 | → | merijn joins (~merijn@host-vr.cgnat-g.v4.dfn.nl) |
| 07:07:35 | × | merijn quits (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 240 seconds) |
| 07:20:02 | → | jrm2 joins (~jrm@user/jrm) |
| 07:20:16 | × | jrm quits (~jrm@user/jrm) (Ping timeout: 246 seconds) |
| 07:21:38 | jrm2 | is now known as jrm |
| 07:46:17 | → | marinelli joins (~weechat@gateway/tor-sasl/marinelli) |
| 07:48:29 | → | lucabtz joins (~lucabtz@user/lucabtz) |
| 07:49:12 | → | sord937 joins (~sord937@gateway/tor-sasl/sord937) |
| 07:53:07 | × | ft quits (~ft@p508db844.dip0.t-ipconnect.de) (Quit: leaving) |
| 07:56:50 | → | FirefoxDeHuk joins (~FirefoxDe@user/FirefoxDeHuk) |
| 07:58:02 | × | j1n37 quits (~j1n37@user/j1n37) (Quit: Ich bin der Welt abhanden gekommen) |
| 07:59:43 | × | tolt_ quits (~weechat-h@li219-154.members.linode.com) (Ping timeout: 240 seconds) |
| 07:59:45 | → | emmanuelux_ joins (~emmanuelu@user/emmanuelux) |
| 07:59:55 | → | haskellbridge_ joins (~hackager@96.28.224.214) |
| 07:59:55 | ChanServ | sets mode +v haskellbridge_ |
| 08:00:12 | → | j1n37 joins (~j1n37@user/j1n37) |
| 08:00:50 | → | tolt joins (~weechat-h@li219-154.members.linode.com) |
| 08:02:00 | → | jrm2 joins (~jrm@user/jrm) |
| 08:02:40 | × | pabs3 quits (~pabs3@user/pabs3) (Killed (platinum.libera.chat (Nickname regained by services))) |
| 08:02:44 | → | pabs3 joins (~pabs3@user/pabs3) |
| 08:02:48 | → | takuan_dozo joins (~takuan@d8D86B9E9.access.telenet.be) |
| 08:04:15 | × | emmanuelux quits (~emmanuelu@user/emmanuelux) (Read error: Connection reset by peer) |
| 08:04:15 | × | itaipu quits (~itaipu@168.121.97.28) (Ping timeout: 240 seconds) |
| 08:04:15 | × | haskellbridge quits (~hackager@96.28.224.214) (Ping timeout: 240 seconds) |
| 08:04:16 | × | jrm quits (~jrm@user/jrm) (Ping timeout: 240 seconds) |
| 08:04:16 | × | takuan quits (~takuan@d8D86B9E9.access.telenet.be) (Ping timeout: 240 seconds) |
| 08:04:16 | jrm2 | is now known as jrm |
| 08:04:31 | × | xff0x quits (~xff0x@fsb6a9491c.tkyc517.ap.nuro.jp) (Ping timeout: 240 seconds) |
| 08:04:35 | × | FANTOM quits (~fantom@90.244.161.115) (Ping timeout: 240 seconds) |
| 08:04:47 | haskellbridge_ | is now known as haskellbridge |
| 08:06:33 | → | xff0x joins (~xff0x@fsb6a9491c.tkyc517.ap.nuro.jp) |
| 08:06:59 | × | FirefoxDeHuk quits (~FirefoxDe@user/FirefoxDeHuk) (Quit: Client closed) |
| 08:08:00 | → | humasect joins (~humasect@dyn-192-249-132-90.nexicom.net) |
| 08:08:17 | → | tromp joins (~textual@2001:1c00:3487:1b00:dd4:56d:fd02:60e2) |
| 08:08:58 | → | SheRejoined joins (haveident@libera/staff/she/her) |
| 08:10:16 | × | She quits (haveident@libera/staff/she/her) (Read error: Connection reset by peer) |
| 08:10:16 | SheRejoined | is now known as She |
| 08:10:53 | → | FANTOM joins (~fantom@90.244.161.115) |
| 08:13:34 | → | itaipu joins (~itaipu@168.121.97.28) |
| 08:15:19 | × | arahael quits (~wetfoot@user/arahael) (Ping timeout: 265 seconds) |
| 08:18:53 | → | arahael joins (~wetfoot@user/arahael) |
| 08:19:49 | × | simplystuart quits (~simplystu@c-75-75-152-164.hsd1.pa.comcast.net) (Ping timeout: 264 seconds) |
| 08:20:01 | × | trickard quits (~trickard@cpe-83-98-47-163.wireline.com.au) (Read error: Connection reset by peer) |
| 08:20:14 | → | trickard_ joins (~trickard@cpe-83-98-47-163.wireline.com.au) |
| 08:20:31 | → | simplystuart joins (~simplystu@c-75-75-152-164.hsd1.pa.comcast.net) |
| 08:26:49 | → | chencheng57 joins (~chencheng@user/chencheng) |
| 08:28:18 | × | peterbecich quits (~Thunderbi@71.84.33.135) (Ping timeout: 260 seconds) |
| 08:29:09 | × | chencheng57 quits (~chencheng@user/chencheng) (Client Quit) |
| 08:31:41 | × | tzh quits (~tzh@c-76-115-131-146.hsd1.or.comcast.net) (Quit: zzz) |
| 08:35:46 | → | chele joins (~chele@user/chele) |
| 08:43:38 | × | Sgeo__ quits (~Sgeo@user/sgeo) (Read error: Connection reset by peer) |
| 08:55:20 | → | merijn joins (~merijn@77.242.116.146) |
| 09:09:48 | × | emmanuelux_ quits (~emmanuelu@user/emmanuelux) (Remote host closed the connection) |
| 09:13:55 | × | pabs3 quits (~pabs3@user/pabs3) (Read error: Connection reset by peer) |
| 09:14:52 | → | pabs3 joins (~pabs3@user/pabs3) |
| 09:18:37 | × | trickard_ quits (~trickard@cpe-83-98-47-163.wireline.com.au) (Read error: Connection reset by peer) |
| 09:18:51 | → | trickard_ joins (~trickard@cpe-83-98-47-163.wireline.com.au) |
| 09:20:03 | → | ljdarj joins (~Thunderbi@user/ljdarj) |
| 09:21:52 | → | gmg joins (~user@user/gehmehgeh) |
| 09:24:44 | → | kuribas joins (~user@ip-188-118-57-242.reverse.destiny.be) |
| 09:27:00 | × | olivial quits (~benjaminl@user/benjaminl) (Ping timeout: 245 seconds) |
| 09:37:47 | → | CiaoSen joins (~Jura@2a02:8071:64e1:da0:5a47:caff:fe78:33db) |
| 09:40:38 | × | arahael quits (~wetfoot@user/arahael) (Ping timeout: 260 seconds) |
| 09:41:14 | × | merijn quits (~merijn@77.242.116.146) (Ping timeout: 260 seconds) |
| 09:49:03 | → | olivial joins (~benjaminl@user/benjaminl) |
| 09:53:11 | → | merijn joins (~merijn@77.242.116.146) |
| 10:00:02 | → | haritz joins (~hrtz@2a01:4b00:bc2e:7000:d5af:a266:ca31:5ef8) |
| 10:00:02 | × | haritz quits (~hrtz@2a01:4b00:bc2e:7000:d5af:a266:ca31:5ef8) (Changing host) |
| 10:00:02 | → | haritz joins (~hrtz@user/haritz) |
| 10:01:31 | × | merijn quits (~merijn@77.242.116.146) (Ping timeout: 264 seconds) |
| 10:02:04 | × | tromp quits (~textual@2001:1c00:3487:1b00:dd4:56d:fd02:60e2) (Quit: My iMac has gone to sleep. ZZZzzz…) |
| 10:02:48 | × | L29Ah quits (~L29Ah@wikipedia/L29Ah) (Read error: Connection reset by peer) |
| 10:03:15 | × | trickard_ quits (~trickard@cpe-83-98-47-163.wireline.com.au) (Ping timeout: 240 seconds) |
| 10:03:31 | → | arahael joins (~wetfoot@user/arahael) |
| 10:05:25 | × | xff0x quits (~xff0x@fsb6a9491c.tkyc517.ap.nuro.jp) (Ping timeout: 264 seconds) |
| 10:06:08 | → | trickard_ joins (~trickard@cpe-83-98-47-163.wireline.com.au) |
| 10:08:51 | → | ljdarj1 joins (~Thunderbi@user/ljdarj) |
| 10:09:15 | × | ljdarj quits (~Thunderbi@user/ljdarj) (Ping timeout: 240 seconds) |
| 10:09:15 | ljdarj1 | is now known as ljdarj |
| 10:09:51 | → | tromp joins (~textual@2001:1c00:3487:1b00:dd4:56d:fd02:60e2) |
| 10:14:28 | → | merijn joins (~merijn@77.242.116.146) |
| 10:16:33 | × | yuuta quits (~YuutaW@infornography.yta.moe) (Ping timeout: 252 seconds) |
| 10:18:37 | → | ljdarj1 joins (~Thunderbi@user/ljdarj) |
| 10:18:46 | × | merijn quits (~merijn@77.242.116.146) (Ping timeout: 246 seconds) |
| 10:18:52 | → | Googulator joins (~Googulato@2a01-036d-0106-01cb-8583-2a78-a55c-bee5.pool6.digikabel.hu) |
| 10:20:15 | × | ljdarj quits (~Thunderbi@user/ljdarj) (Ping timeout: 240 seconds) |
| 10:20:15 | ljdarj1 | is now known as ljdarj |
| 10:30:37 | → | merijn joins (~merijn@77.242.116.146) |
| 10:34:55 | × | merijn quits (~merijn@77.242.116.146) (Ping timeout: 245 seconds) |
| 10:37:27 | → | merijn joins (~merijn@77.242.116.146) |
| 10:48:22 | → | YuutaW joins (~YuutaW@2404:f4c0:f9c3:502::100:6eef) |
| 10:49:15 | × | ljdarj quits (~Thunderbi@user/ljdarj) (Ping timeout: 240 seconds) |
| 10:55:41 | → | Googulator85 joins (~Googulato@2a01-036d-0106-01cb-8583-2a78-a55c-bee5.pool6.digikabel.hu) |
| 10:55:43 | × | Googulator quits (~Googulato@2a01-036d-0106-01cb-8583-2a78-a55c-bee5.pool6.digikabel.hu) (Quit: Client closed) |
| 10:58:52 | → | xff0x joins (~xff0x@2405:6580:b080:900:bfb6:36fd:6718:66b7) |
| 11:06:04 | → | Square joins (~Square4@user/square) |
| 11:15:35 | × | merijn quits (~merijn@77.242.116.146) (Ping timeout: 240 seconds) |
| 11:25:43 | × | Googulator85 quits (~Googulato@2a01-036d-0106-01cb-8583-2a78-a55c-bee5.pool6.digikabel.hu) (Quit: Client closed) |
| 11:25:50 | → | Googulator48 joins (~Googulato@2a01-036d-0106-01cb-8583-2a78-a55c-bee5.pool6.digikabel.hu) |
| 11:29:22 | → | merijn joins (~merijn@77.242.116.146) |
| 11:31:54 | × | euphores quits (~SASL_euph@user/euphores) (Quit: Leaving.) |
| 11:34:39 | × | jreicher quits (~user@user/jreicher) (Quit: brb) |
| 11:38:13 | → | __monty__ joins (~toonn@user/toonn) |
| 11:43:41 | → | euphores joins (~SASL_euph@user/euphores) |
| 11:45:01 | → | jreicher joins (~user@user/jreicher) |
| 11:51:20 | × | pavonia quits (~user@user/siracusa) (Quit: Bye!) |
| 11:58:03 | × | yin quits (~zero@user/zero) (Remote host closed the connection) |
| 12:00:14 | → | Jackneill_ joins (~Jackneill@178-164-177-109.pool.digikabel.hu) |
| 12:02:42 | × | Jackneill quits (~Jackneill@94-21-15-191.pool.digikabel.hu) (Ping timeout: 252 seconds) |
| 12:06:12 | → | yin joins (~zero@user/zero) |
| 12:08:25 | × | merijn quits (~merijn@77.242.116.146) (Ping timeout: 264 seconds) |
| 12:10:35 | × | trickard_ quits (~trickard@cpe-83-98-47-163.wireline.com.au) (Read error: Connection reset by peer) |
| 12:10:48 | → | trickard_ joins (~trickard@cpe-83-98-47-163.wireline.com.au) |
| 12:17:05 | → | merijn joins (~merijn@77.242.116.146) |
| 12:22:52 | × | tromp quits (~textual@2001:1c00:3487:1b00:dd4:56d:fd02:60e2) (Quit: My iMac has gone to sleep. ZZZzzz…) |
| 12:24:18 | → | L29Ah joins (~L29Ah@wikipedia/L29Ah) |
| 12:25:42 | × | trickard_ quits (~trickard@cpe-83-98-47-163.wireline.com.au) (Read error: Connection reset by peer) |
| 12:25:55 | → | trickard_ joins (~trickard@cpe-83-98-47-163.wireline.com.au) |
| 12:30:06 | → | karenw joins (~karenw@user/karenw) |
| 12:30:18 | × | karenw quits (~karenw@user/karenw) (Remote host closed the connection) |
| 12:31:20 | → | karenw joins (~karenw@user/karenw) |
| 12:35:14 | → | comerijn joins (~merijn@77.242.116.146) |
| 12:36:44 | → | fp joins (~Thunderbi@2001:708:20:1406::10c5) |
| 12:38:04 | × | merijn quits (~merijn@77.242.116.146) (Ping timeout: 246 seconds) |
| 12:39:16 | → | bggd_ joins (~bgg@2a01:e0a:fd5:f510:fb9e:194f:f1d5:eb88) |
| 12:45:41 | → | Googulator63 joins (~Googulato@2a01-036d-0106-01cb-8583-2a78-a55c-bee5.pool6.digikabel.hu) |
| 12:45:49 | × | Googulator48 quits (~Googulato@2a01-036d-0106-01cb-8583-2a78-a55c-bee5.pool6.digikabel.hu) (Quit: Client closed) |
| 12:47:14 | × | yin quits (~zero@user/zero) (Remote host closed the connection) |
| 12:49:01 | → | yin joins (~zero@user/zero) |
| 12:54:57 | × | yin quits (~zero@user/zero) (Remote host closed the connection) |
| 12:55:20 | → | yin joins (~zero@user/zero) |
| 13:05:29 | × | Pozyomka quits (~pyon@user/pyon) (Quit: brb) |
| 13:07:30 | ← | L29Ah parts (~L29Ah@wikipedia/L29Ah) () |
| 13:12:17 | × | humasect quits (~humasect@dyn-192-249-132-90.nexicom.net) (Remote host closed the connection) |
| 13:12:37 | × | comerijn quits (~merijn@77.242.116.146) (Ping timeout: 264 seconds) |
| 13:12:48 | → | Pozyomka joins (~pyon@user/pyon) |
| 13:13:57 | → | merijn joins (~merijn@77.242.116.146) |
| 13:15:54 | → | Googulator87 joins (~Googulato@2a01-036d-0106-01cb-8583-2a78-a55c-bee5.pool6.digikabel.hu) |
| 13:16:11 | × | trickard_ quits (~trickard@cpe-83-98-47-163.wireline.com.au) (Read error: Connection reset by peer) |
| 13:16:25 | → | trickard_ joins (~trickard@cpe-83-98-47-163.wireline.com.au) |
| 13:17:43 | × | Googulator63 quits (~Googulato@2a01-036d-0106-01cb-8583-2a78-a55c-bee5.pool6.digikabel.hu) (Quit: Client closed) |
| 13:34:09 | × | cawfee quits (root@2401:c080:3800:3460::babe) (Quit: WeeChat 4.7.1) |
| 13:34:55 | → | cawfee joins (root@2401:c080:3800:3460::babe) |
| 13:35:58 | × | cawfee quits (root@2401:c080:3800:3460::babe) (Client Quit) |
| 13:36:46 | → | cawfee joins (root@2401:c080:3800:3460::babe) |
| 13:41:47 | × | Googulator87 quits (~Googulato@2a01-036d-0106-01cb-8583-2a78-a55c-bee5.pool6.digikabel.hu) (Ping timeout: 272 seconds) |
| 13:42:45 | → | weary-traveler joins (~user@user/user363627) |
| 13:49:40 | → | tromp joins (~textual@2001:1c00:3487:1b00:dd4:56d:fd02:60e2) |
| 13:52:35 | × | Square quits (~Square4@user/square) (Ping timeout: 240 seconds) |
| 13:52:52 | × | fp quits (~Thunderbi@2001:708:20:1406::10c5) (Ping timeout: 256 seconds) |
| 14:00:39 | → | fp joins (~Thunderbi@wireless-86-50-140-30.open.aalto.fi) |
| 14:03:28 | × | fp quits (~Thunderbi@wireless-86-50-140-30.open.aalto.fi) (Remote host closed the connection) |
| 14:06:43 | → | Googulator87 joins (~Googulato@185.199.28.81) |
| 14:09:05 | → | rekahsoft joins (~rekahsoft@70.51.99.245) |
| 14:13:14 | → | Enrico63 joins (~Enrico63@host-212-171-79-170.retail.telecomitalia.it) |
| 14:13:15 | × | merijn quits (~merijn@77.242.116.146) (Ping timeout: 240 seconds) |
| 14:16:20 | × | Enrico63 quits (~Enrico63@host-212-171-79-170.retail.telecomitalia.it) (Client Quit) |
| 14:17:50 | → | fp joins (~Thunderbi@2001:708:150:10::7e06) |
| 14:18:53 | → | humasect joins (~humasect@dyn-192-249-132-90.nexicom.net) |
| 14:22:00 | <pounce> | does anybody know if there's a name for Functor f => (k -> f a) -> (k -> b) -> (k -> f b)? kind of like blah f g x = f x $> g x |
| 14:22:48 | → | Enrico63 joins (~Enrico63@host-212-171-79-170.retail.telecomitalia.it) |
| 14:25:39 | → | merijn joins (~merijn@77.242.116.146) |
| 14:29:57 | × | merijn quits (~merijn@77.242.116.146) (Ping timeout: 250 seconds) |
| 14:30:30 | <Leary> | pounce: Only `liftA2 ($>)`. |
| 14:31:11 | × | Googulator87 quits (~Googulato@185.199.28.81) (Ping timeout: 272 seconds) |
| 14:33:24 | × | fp quits (~Thunderbi@2001:708:150:10::7e06) (Ping timeout: 252 seconds) |
| 14:33:58 | → | merijn joins (~merijn@77.242.116.146) |
| 14:34:23 | → | tremon joins (~tremon@83.80.159.219) |
| 14:39:12 | <kuribas> | pounce: give it your own name :) |
| 14:39:44 | → | fp joins (~Thunderbi@2001:708:150:10::7e06) |
| 14:41:35 | × | merijn quits (~merijn@77.242.116.146) (Ping timeout: 240 seconds) |
| 14:42:11 | <kuribas> | I hate this error: Ambiguous type variable ‘a0’ arising from a use of ‘subQuery’ prevents the constraint ‘(ToQueryBuilder a0)’ from being solved. |
| 14:42:14 | × | fp quits (~Thunderbi@2001:708:150:10::7e06) (Remote host closed the connection) |
| 14:42:33 | <kuribas> | There is nothing that stops ghc from creating a hole for a0, no? |
| 14:42:39 | <kuribas> | This shouldn't be an error at all. |
| 14:43:25 | → | Sgeo joins (~Sgeo@user/sgeo) |
| 14:43:53 | <kuribas> | Well, with -fdefer-typed-holes |
| 14:44:57 | → | merijn joins (~merijn@77.242.116.146) |
| 14:45:59 | <kuribas> | I would expect ghc to infer constraints as much as possible with holes, but create another hole when it cannot resolve them. |
| 14:46:09 | <kuribas> | This would make working with typed holes so much better. |
| 14:46:38 | × | humasect quits (~humasect@dyn-192-249-132-90.nexicom.net) (Quit: Leaving...) |
| 14:49:43 | × | merijn quits (~merijn@77.242.116.146) (Ping timeout: 240 seconds) |
| 14:53:57 | → | L29Ah joins (~L29Ah@wikipedia/L29Ah) |
| 14:56:52 | → | merijn joins (~merijn@77.242.116.146) |
| 15:03:33 | → | raym joins (~ray@user/raym) |
| 15:03:50 | → | fp joins (~Thunderbi@130.233.70.102) |
| 15:06:07 | × | fp quits (~Thunderbi@130.233.70.102) (Client Quit) |
| 15:06:21 | × | euphores quits (~SASL_euph@user/euphores) (Quit: Leaving.) |
| 15:06:27 | → | fp joins (~Thunderbi@2001:708:20:1406::1370) |
| 15:08:31 | × | trickard_ quits (~trickard@cpe-83-98-47-163.wireline.com.au) (Read error: Connection reset by peer) |
| 15:08:44 | → | trickard_ joins (~trickard@cpe-83-98-47-163.wireline.com.au) |
| 15:11:17 | × | bitdex quits (~bitdex@gateway/tor-sasl/bitdex) (Quit: = "") |
| 15:12:11 | × | qqe quits (~qqq@185.54.20.98) (Quit: Lost terminal) |
| 15:12:41 | → | jmcantrell_ joins (~weechat@user/jmcantrell) |
| 15:16:31 | × | L29Ah quits (~L29Ah@wikipedia/L29Ah) (Ping timeout: 240 seconds) |
| 15:17:01 | × | tromp quits (~textual@2001:1c00:3487:1b00:dd4:56d:fd02:60e2) (Quit: My iMac has gone to sleep. ZZZzzz…) |
| 15:17:13 | × | CiaoSen quits (~Jura@2a02:8071:64e1:da0:5a47:caff:fe78:33db) (Ping timeout: 260 seconds) |
| 15:19:36 | × | fp quits (~Thunderbi@2001:708:20:1406::1370) (Ping timeout: 252 seconds) |
| 15:21:00 | → | deptype_ joins (~deptype@2406:b400:3a:9d2f:fd44:bbca:9ef1:b046) |
| 15:23:42 | → | L29Ah joins (~L29Ah@wikipedia/L29Ah) |
| 15:24:28 | → | Square joins (~Square4@user/square) |
| 15:24:54 | × | Enrico63 quits (~Enrico63@host-212-171-79-170.retail.telecomitalia.it) (Quit: Client closed) |
| 15:26:04 | × | jmcantrell_ quits (~weechat@user/jmcantrell) (Ping timeout: 246 seconds) |
| 15:42:12 | ← | L29Ah parts (~L29Ah@wikipedia/L29Ah) () |
| 15:42:54 | <tomsmeding> | kuribas: the context "I want to work with -fdefer-typed-holes" is very important there :p |
| 15:43:12 | <kuribas> | right :) |
| 15:46:02 | <merijn> | Of course you do |
| 15:46:17 | <merijn> | -fdefer-typed-holes is the greatest flag ever and whoever implemented it was a visionary genius |
| 15:46:29 | <tomsmeding> | well that turns this from "GHC's diagnostics are bad" into "-fdefer-typed-holes is not strong enough" |
| 15:46:39 | <tomsmeding> | which is a completely different thing, namely a feature request instead of a bug report |
| 15:46:55 | <merijn> | (I missed the context, btw) |
| 15:47:32 | <kuribas> | tomsmeding: A feature request I have been missing for 10 years or so :) |
| 15:47:39 | → | tromp joins (~textual@2001:1c00:3487:1b00:dd4:56d:fd02:60e2) |
| 15:49:00 | <kuribas> | merijn: it came from profo assistants, no? |
| 15:49:02 | <kuribas> | proof |
| 15:49:26 | <merijn> | kuribas: The ambiguous variable *is* an error and it cannot be solved |
| 15:49:32 | <merijn> | holes don't help you there |
| 15:50:22 | <kuribas> | If a0 is the type of a hole, I don't want an error. |
| 15:50:43 | <merijn> | Can you pastebin an example? |
| 15:50:59 | <kuribas> | I don't have an easy example right now. |
| 15:51:19 | <merijn> | kuribas: It didn't come from proof assistants |
| 15:51:23 | <merijn> | It was I, Dio! |
| 15:51:37 | <kuribas> | ah right :) |
| 15:51:46 | <kuribas> | Well, the hole thingy came from proof assistants, no? |
| 15:52:10 | <kuribas> | "Typed holes are a powerful feature in GHC inspired by Agda. But what are typed holes, and how do they help us write code? " |
| 15:52:10 | <merijn> | I saw -fdefer-type-errprs and I was like "man, that's useless. But also, it would be nice if I could run my code while it still had holes" |
| 15:52:35 | <kuribas> | indeed! |
| 15:53:08 | <kuribas> | And if you allow holes, why not allow missing constraints on those holes? |
| 16:00:01 | × | deptype_ quits (~deptype@2406:b400:3a:9d2f:fd44:bbca:9ef1:b046) (Quit: Leaving) |
| 16:00:24 | × | deptype quits (~deptype@2406:b400:3a:9d2f:fd44:bbca:9ef1:b046) (Read error: Connection reset by peer) |
| 16:02:49 | <merijn> | kuribas: You could try and fix it. I hacked that flag together when I barely knew haskell :p |
| 16:03:37 | <haskellbridge> | <matti palli> Allowing missing constraints is a bit problematic, since constraints is how we generate code. Indeed, holes are just an “undefined variable” error with a fancy message |
| 16:03:47 | × | Axman6 quits (~Axman6@user/axman6) (Remote host closed the connection) |
| 16:04:17 | <kuribas> | How are constraints "generating code"? |
| 16:04:40 | <kuribas> | constraints are just implicits. |
| 16:05:15 | × | yin quits (~zero@user/zero) (Remote host closed the connection) |
| 16:05:26 | <kuribas> | And the point is that the hole is not just "an error", but allows you to fill in the rest of the program, while leave out details. |
| 16:05:30 | → | yin joins (~zero@user/zero) |
| 16:05:30 | <haskellbridge> | <matti palli> that’s how the typechecker works, you solve constraint by emitting a “proof” that the constraint holds, and that contains the dictionary which contains the code |
| 16:06:05 | <kuribas> | You don't emit a "proof", the type inference does a proof search to find the right instance. |
| 16:06:46 | <haskellbridge> | <matti palli> yeah, and the right instance is the proof |
| 16:07:39 | <haskellbridge> | <matti palli> and it’s simultaneously the dictionary which contains the code, afaiu |
| 16:08:30 | <kuribas> | haskell doesn't really have "proofs". |
| 16:08:36 | <kuribas> | Due to bottom. |
| 16:09:33 | → | machinedgod joins (~machinedg@d75-159-126-101.abhsia.telus.net) |
| 16:10:09 | <kuribas> | Even so, proof assistants like agda and idris allow you to have holes as proofs. |
| 16:10:15 | <kuribas> | Then they are just "assumptions". |
| 16:10:15 | <lucabtz> | i remember a video of tsoding on youtube referring to implementing instances like the functor instance as "proving" something is a functor |
| 16:10:15 | <haskellbridge> | <matti palli> yeah sure, you can emit a “proof” that just contains error |
| 16:10:58 | <haskellbridge> | <matti palli> what I mean is that you solve the constraint and emit a witness that is the dictionary |
| 16:11:17 | <kuribas> | That's how large proofs are done, you treat some parts as "assumptions", and proof them later. Or they turn out to be false, and you have to abort the whole proof (or find another proof). |
| 16:12:12 | <haskellbridge> | <matti palli> sure, you can do that with undefined or error as well. but then you have the issue of ambiguous type variables, as you’ve encountered |
| 16:12:31 | <tomsmeding> | is the problem here that you want to be sure that the unsolvable constraint is _purely_ due to a typed hole? |
| 16:12:43 | <kuribas> | yeah |
| 16:12:56 | <tomsmeding> | because instantiating a typeclass dictionary argument with an error term is very much expressible in Core, at least |
| 16:13:22 | <tomsmeding> | it's just hard to draw the line between an arbitrary unsolved constraint and one that is "intuitively" part of the hole |
| 16:13:43 | <tomsmeding> | and replacing arbitrary unsolved constraints with errors (and thus not stopping compilation for them) is rather against the idea of -fdefer-typed-holes |
| 16:13:54 | <kuribas> | tomsmeding: isn't that use a graph on the typeclass dependencies? |
| 16:14:16 | <tomsmeding> | perhaps, but I expect you're going to have a lot of spurious dependencies |
| 16:14:23 | <tomsmeding> | also, the graph needs to include type variables |
| 16:16:03 | <tomsmeding> | one thing that's probably implementable (I say without having ever looked at the GHC typechecker) is instantiating any ambiguous unification variable with a special type such that unsolved constraints that mention that special type get magically solved with an error |
| 16:16:13 | <tomsmeding> | but that would be -fdefer-type-errors behaviour, not -fdefer-typed-holes |
| 16:16:59 | <kuribas> | tomsmeding: the hole gives rise to a type variable, which can be either unified with something, or remains "ambiguous". In the latter case you can trace which type classes depend on the ambiguous variable, no? |
| 16:17:07 | <haskellbridge> | <matti palli> You could get there by just giving a more specific type to the hole "_ :: blah", resolving the ambiguity |
| 16:17:12 | <tomsmeding> | "the hole gives rise to a type variable" is not a thing |
| 16:17:30 | <tomsmeding> | every term gives rise to potentially multiple unification variables, and a lot of those are equal |
| 16:17:44 | <tomsmeding> | you can track dependencies of everything, but that likely slows down type checking significantly |
| 16:18:31 | <tomsmeding> | if the type of the hole itself is the ambiguous type variable, then sure, it clearly "gives rise" to it (though even then, there's not at all necessarily a causal relationship!) |
| 16:19:04 | <tomsmeding> | what if you have `read undefined + _`; that has an ambiguous type, but is that type "given rise to" by the hole? |
| 16:19:08 | <tomsmeding> | how would GHC decide? |
| 16:19:10 | <haskellbridge> | <matti palli> tomsmeding: technically the type of the hole starts of as a type variable, but is then quickly unified with variables that exist in scope. |
| 16:19:16 | <tomsmeding> | right |
| 16:19:29 | <haskellbridge> | <matti palli> it never comes up with a completely new variable |
| 16:20:01 | <tomsmeding> | well, if the type of the hole starts off as a type variable, that variable was completely new, wasn't it? ;) |
| 16:20:34 | <haskellbridge> | <matti palli> well yes but it shouldn’t escape the scope (you’d get the skolem has escaped warning haha) |
| 16:20:47 | <tomsmeding> | but kuribas what do you think about my little example? |
| 16:21:30 | <haskellbridge> | <matti palli> but yeah you are completely right, the ambiguity isn’t introduced by the hole, it’s just that the hole isn’t resolving any ambiguity (nor should it!) |
| 16:21:59 | <tomsmeding> | you can try to deduce that fixing the type of the whole would resolve the ambiguity, perhaps |
| 16:22:16 | <tomsmeding> | but I'm not sure that characterises precisely what kuribas intends |
| 16:22:28 | <tomsmeding> | and also that feels like fragile code, especially in GHC where you have zonking |
| 16:22:37 | <kuribas> | tomsmeding: (read undefined :: Read a => a), after + it becomes (Read a, Num a), and (_ :: ?hole1), so after unifying with the hole, you have (Read ?hole, Num ?hole) => ?hole |
| 16:22:57 | <tomsmeding> | kuribas: or you have (Read a, Num a) => a, with the hole also of type a |
| 16:23:17 | <haskellbridge> | <matti palli> the type of the home becomes a, not the other way around |
| 16:23:21 | <tomsmeding> | GHC makes some arbitrary rewriting choice when handling the equality `a ~ ?hole` introduced by the + |
| 16:23:49 | <tomsmeding> | (it's not random, of course, but if it's the one I can probably flip it around by swapping the arguments to +) |
| 16:24:14 | <tomsmeding> | the point is, GHC's behaviour ought not to depend on which choice is made here |
| 16:24:28 | <kuribas> | tomsmeding: like you said, "read undefined" gives rise to a unification variable. |
| 16:24:54 | <tomsmeding> | because if it does depend on internal typechecker choices like these, then behaviour in practice will be highly unpredictable, which GHC in general considers worse than just not supporting the thing at all |
| 16:25:19 | <tomsmeding> | kuribas: if I write simply `read undefined` in a program without a hole, and I set -fdefer-typed-holes, should that result in an error? |
| 16:25:32 | <tomsmeding> | if so, my `read undefined + _` makes it ambiguous whether it should throw an error or not |
| 16:25:35 | <kuribas> | tomsmeding: in idris it doesn't :) |
| 16:25:44 | <tomsmeding> | then it's -fdefer-type-errors, not -fdefer-typed-holes |
| 16:25:49 | <kuribas> | tomsmeding: It'll happily generate an empty list of undefined type. |
| 16:25:57 | <tomsmeding> | `read undefined` has no holes in haskell |
| 16:26:26 | <kuribas> | tomsmeding: why should it? |
| 16:26:50 | <tomsmeding> | because if it doesn't, then -fdefer-typed-HOLES should not have an impact on GHC's behaviour when compiling `read undefined` |
| 16:27:21 | <tomsmeding> | (I guess the 'undefined' is a red herring in all of this, `read ""` works just as well) |
| 16:27:22 | <kuribas> | tomsmeding: well it doesn't? |
| 16:27:28 | → | sindu joins (~sindu@2.148.32.207.tmi.telenormobil.no) |
| 16:27:38 | <tomsmeding> | right |
| 16:27:49 | <kuribas> | tomsmeding: I tag ?hole as a unification variable belonging to a hole, and any constraints on it are deferred as well. |
| 16:28:01 | <tomsmeding> | and should `read "" + _` and `_ + read ""` have the same behaviour under -fdefer-typed-holes? |
| 16:28:29 | <kuribas> | yes |
| 16:28:43 | <tomsmeding> | but the unification variable resulting from `read ""` and the one resulting from `_` are the same to GHC |
| 16:28:54 | <tomsmeding> | so they're rewritten in some direction, and one of the two disappears |
| 16:29:18 | <kuribas> | tomsmeding: they are now, but like I said, I would tag it as belonging to a hole. |
| 16:29:30 | <tomsmeding> | what about `show (fromJust _)`? |
| 16:29:45 | <tomsmeding> | does the `a` in the `Maybe a` that is the type of `_`, arise from the hole? |
| 16:29:49 | <haskellbridge> | <matti palli> kuribas: but it doesn’t, it belongs to the undefined or the read |
| 16:30:19 | <tomsmeding> | matti: kuribas is arguing that a type variable "arising from" a hole originally should have a little tag saying so, and when unifying two type variables, you take the union of the tags |
| 16:30:21 | <tomsmeding> | I think |
| 16:30:28 | <tomsmeding> | ok I have to go, sorry |
| 16:30:29 | <kuribas> | tomsmeding: right |
| 16:30:36 | <tomsmeding> | good luck :p |
| 16:30:58 | × | lucabtz quits (~lucabtz@user/lucabtz) (Remote host closed the connection) |
| 16:31:46 | → | L29Ah joins (~L29Ah@wikipedia/L29Ah) |
| 16:32:06 | <haskellbridge> | <matti palli> tomsmeding: hmm yes interesting |
| 16:32:06 | <haskellbridge> | SPJ bugged me about this, saying we should add provenance to type variables for improved errors. If you had that you could improve holes as well |
| 16:32:30 | → | spew joins (~spew@user/spew) |
| 16:32:47 | <kuribas> | Yes "fromJust :: Maybe a -> a", then "?hole ~ Maybe ?sub_hole", and "Show ?sub_hole" is deferred. |
| 16:35:22 | × | bggd_ quits (~bgg@2a01:e0a:fd5:f510:fb9e:194f:f1d5:eb88) (Remote host closed the connection) |
| 16:40:12 | → | spew_ joins (~spew@user/spew) |
| 16:40:43 | × | spew quits (~spew@user/spew) (Ping timeout: 255 seconds) |
| 16:41:15 | × | merijn quits (~merijn@77.242.116.146) (Ping timeout: 240 seconds) |
| 16:41:16 | spew_ | is now known as spew |
| 16:41:35 | <haskellbridge> | <matti palli> Right. At the moment there is no distinction, and thinking about it might be that typechecking levels could be an issue, i.e. when do you unify with a hole type variable in the new schema |
| 16:41:38 | <haskellbridge> | interesting problem for sure |
| 16:42:20 | × | karenw quits (~karenw@user/karenw) (Ping timeout: 244 seconds) |
| 16:43:45 | × | tv quits (~tv@user/tv) (Read error: Connection reset by peer) |
| 16:45:02 | <dolio> | Even if you know the provenance of type variables, I don't know that the further idea makes sense. |
| 16:45:17 | → | merijn joins (~merijn@77.242.116.146) |
| 16:46:36 | yin | is now known as zero |
| 16:46:40 | zero | is now known as yin |
| 16:49:55 | × | merijn quits (~merijn@77.242.116.146) (Ping timeout: 240 seconds) |
| 16:53:17 | → | Guest87 joins (~Guest87@2405:201:d006:986f:5c73:3a20:69d:7d07) |
| 17:02:14 | → | merijn joins (~merijn@77.242.116.146) |
| 17:08:13 | × | skum quits (~skum@user/skum) (Quit: WeeChat 4.8.1) |
| 17:08:27 | → | milan joins (~milan@88.212.61.169) |
| 17:08:35 | × | merijn quits (~merijn@77.242.116.146) (Ping timeout: 240 seconds) |
| 17:09:49 | <milan> | Guyz Am I out of luck if I want to use Data.Text in application build with -XSafe? |
| 17:10:47 | × | spew quits (~spew@user/spew) (Read error: Connection reset by peer) |
| 17:12:55 | → | Tuplanolla joins (~Tuplanoll@91-152-225-194.elisa-laajakaista.fi) |
| 17:13:09 | → | spew joins (~spew@user/spew) |
| 17:15:42 | → | Googulator87 joins (~Googulato@2a01-036d-0106-01cb-8583-2a78-a55c-bee5.pool6.digikabel.hu) |
| 17:15:45 | × | trickard_ quits (~trickard@cpe-83-98-47-163.wireline.com.au) (Read error: Connection reset by peer) |
| 17:15:58 | → | trickard_ joins (~trickard@cpe-83-98-47-163.wireline.com.au) |
| 17:17:13 | → | tv joins (~tv@user/tv) |
| 17:18:27 | Googulator87 | is now known as Googulator |
| 17:20:30 | → | merijn joins (~merijn@77.242.116.146) |
| 17:21:59 | × | chele quits (~chele@user/chele) (Remote host closed the connection) |
| 17:25:13 | × | merijn quits (~merijn@77.242.116.146) (Ping timeout: 264 seconds) |
| 17:33:31 | → | tzh joins (~tzh@c-76-115-131-146.hsd1.or.comcast.net) |
| 17:36:23 | × | tromp quits (~textual@2001:1c00:3487:1b00:dd4:56d:fd02:60e2) (Quit: My iMac has gone to sleep. ZZZzzz…) |
| 17:36:36 | × | spew quits (~spew@user/spew) (Quit: nyaa~) |
| 17:37:14 | → | spew joins (~spew@user/spew) |
| 17:37:25 | → | merijn joins (~merijn@77.242.116.146) |
| 17:39:29 | × | gmg quits (~user@user/gehmehgeh) (Remote host closed the connection) |
| 17:41:14 | × | kuribas quits (~user@ip-188-118-57-242.reverse.destiny.be) (Ping timeout: 244 seconds) |
| 17:42:19 | × | merijn quits (~merijn@77.242.116.146) (Ping timeout: 264 seconds) |
| 17:45:07 | → | tccq joins (~user@user/tccq) |
| 17:46:33 | <gentauro> | I'm tryiing to build an old stack/cabal project, but I'm getting: `startProcess: posix_spawnp: does not exist`. Have anybody seen that before? |
| 17:46:45 | <gentauro> | *note*: I have the newest stack installed |
| 17:47:15 | <gentauro> | `Version 3.7.1, Git revision` |
| 17:48:35 | × | Googulator quits (~Googulato@2a01-036d-0106-01cb-8583-2a78-a55c-bee5.pool6.digikabel.hu) (Quit: Client closed) |
| 17:48:51 | → | Googulator joins (~Googulato@2a01-036d-0106-01cb-8583-2a78-a55c-bee5.pool6.digikabel.hu) |
| 17:54:00 | → | merijn joins (~merijn@77.242.116.146) |
| 17:54:35 | → | skum joins (~skum@user/skum) |
| 17:54:40 | × | ephemient quits (uid407513@user/ephemient) (Quit: Connection closed for inactivity) |
| 17:55:21 | <sm> | gentauro: doesn't ring a bell, but have you tried searching for that error message ? |
| 17:55:58 | int-e | would look for verbosity options or maybe use strace to figure out what program it's trying to execute |
| 17:56:28 | <sm> | anything at https://github.com/haskell/process/issues/247 ? |
| 17:56:38 | <geekosaur> | normally it says the program |
| 17:57:37 | <gentauro> | sm: it seems that the cached `Cabal-simple-…` placed in `~/.stack/setup-exe-cache/x86_64-linux-nix` become wacko. I cleansed that folder and now it works. |
| 17:57:51 | → | kuribas joins (~user@2a02:1808:cd:df9d:1dcb:cff3:20e8:95d8) |
| 17:58:08 | <gentauro> | geekosaur: yeah, it mentioned `Cabal-simple-…` |
| 17:58:17 | × | merijn quits (~merijn@77.242.116.146) (Ping timeout: 244 seconds) |
| 17:58:44 | <int-e> | (note that "not found" in an exec-like context doesn't necessarily mean that the executable itself is missing; it can also be a shared library that it depends on) |
| 17:59:01 | <gentauro> | I guess it happens from time to time on NixOS when I change the main channel (recently moved from 25.05 -> 25.11) |
| 17:59:32 | <int-e> | oh I suppose nix will change library paths all the time |
| 18:00:06 | <int-e> | anyway, it sunds like the issue is solved :) |
| 18:00:20 | <gentauro> | int-e: and sometimes remove support for old GHC. They do that cos the burden of maintaining all of it. So I do understand. |
| 18:00:28 | <gentauro> | int-e: it sure is. Thx :) |
| 18:00:46 | × | Googulator quits (~Googulato@2a01-036d-0106-01cb-8583-2a78-a55c-bee5.pool6.digikabel.hu) (Quit: Client closed) |
| 18:00:49 | → | Googulator24 joins (~Googulato@2a01-036d-0106-01cb-8583-2a78-a55c-bee5.pool6.digikabel.hu) |
| 18:00:57 | <sm> | gentauro: great. I guess "nuke things and start over" is our equivalent of "have you tried turning it off and on again" |
| 18:01:10 | <gentauro> | sm: xD |
| 18:01:21 | <sm> | sometimes it's the quickest thing to try |
| 18:01:40 | <gentauro> | sm: back in the good old days, I sed gentoo and compiled it all locally. I'm never going back to those days again xD |
| 18:01:57 | <gentauro> | I would rather spend my time producing code ;) |
| 18:02:47 | <haskellbridge> | <sm> sure, but sometimes it's quicker to move some dirs aside and let cabal/stack run in another window while you continue working on things that require thought |
| 18:02:56 | <geekosaur> | if that binary was left over from then, it might do it. "does not exist" can refer not to the binary, but to its ELF "interpreter" whose path might vary on different systems (well, shouldn't these days, but if it was old enough it might) |
| 18:03:27 | <geekosaur> | leading to confusing error messages because `exec` has no way to pass back precisely what wasn't found |
| 18:03:37 | <haskellbridge> | <sm> (not something I would do often, but sometimes the dumb hands-free test is worth doing) |
| 18:03:47 | <geekosaur> | in particular, it varies on NixOS |
| 18:03:55 | <geekosaur> | see `patchelf` |
| 18:04:09 | × | Guest87 quits (~Guest87@2405:201:d006:986f:5c73:3a20:69d:7d07) (Quit: Client closed) |
| 18:05:20 | <haskellbridge> | <sm> I guess my point is, as we work with computers and tools we are working with very complex state which will never be entirely bug free, sometimes it's more cost effective to try a state reset than to debug what's going wrong |
| 18:06:33 | × | Googulator24 quits (~Googulato@2a01-036d-0106-01cb-8583-2a78-a55c-bee5.pool6.digikabel.hu) (Quit: Client closed) |
| 18:06:43 | → | peterbecich joins (~Thunderbi@71.84.33.135) |
| 18:06:45 | → | tromp joins (~textual@2001:1c00:3487:1b00:dd4:56d:fd02:60e2) |
| 18:06:55 | → | Googulator24 joins (~Googulato@87-97-86-146.pool.digikabel.hu) |
| 18:07:18 | Googulator24 | is now known as Googulator |
| 18:09:19 | × | Square quits (~Square4@user/square) (Ping timeout: 240 seconds) |
| 18:09:21 | <gentauro> | haskellbridge: that's actually the foundation of Erlang right? We know we are gonna fail at some point, lets add that to the equation. |
| 18:10:23 | <EvanR> | well, transactional semantics are a good way to deal with that assumption |
| 18:10:38 | <EvanR> | which is not what erlang is usually promoting |
| 18:11:05 | <haskellbridge> | <sm> I know php is a good example, you get a fresh state every request |
| 18:11:46 | → | merijn joins (~merijn@77.242.116.146) |
| 18:11:49 | <haskellbridge> | <sm> that's running software rather than dev in process, but you know what I mean |
| 18:12:01 | <haskellbridge> | <sm> same principle |
| 18:12:45 | <haskellbridge> | <sm> I haven't used erlang, but yes that sounds right, they like to throw something away if it fails |
| 18:14:31 | <haskellbridge> | <Morj> I've been learning erlang recently, and haven't seen anything about transactional semantics. Sad |
| 18:14:39 | <EvanR> | ;_; |
| 18:14:44 | <haskellbridge> | <Morj> Sadder still is that I thought I finished learning |
| 18:15:06 | <Rembane> | Finally max level! |
| 18:15:27 | → | ft joins (~ft@p508db844.dip0.t-ipconnect.de) |
| 18:15:58 | <EvanR> | level 60, you're done |
| 18:16:10 | <EvanR> | return to the world |
| 18:18:46 | × | sord937 quits (~sord937@gateway/tor-sasl/sord937) (Quit: sord937) |
| 18:28:50 | → | target_i joins (~target_i@user/target-i/x-6023099) |
| 18:30:24 | × | spew quits (~spew@user/spew) (Quit: WeeChat 4.7.2) |
| 18:31:10 | × | pabs3 quits (~pabs3@user/pabs3) (Ping timeout: 245 seconds) |
| 18:36:55 | × | raym quits (~ray@user/raym) (Ping timeout: 240 seconds) |
| 18:38:35 | → | raym joins (~ray@user/raym) |
| 18:42:04 | × | kuribas quits (~user@2a02:1808:cd:df9d:1dcb:cff3:20e8:95d8) (Ping timeout: 246 seconds) |
| 18:43:13 | × | peterbecich quits (~Thunderbi@71.84.33.135) (Ping timeout: 264 seconds) |
| 18:43:27 | × | marinelli quits (~weechat@gateway/tor-sasl/marinelli) (Ping timeout: 252 seconds) |
| 18:45:22 | → | pabs3 joins (~pabs3@user/pabs3) |
| 18:45:28 | → | marinelli joins (~weechat@gateway/tor-sasl/marinelli) |
| 18:50:57 | × | __monty__ quits (~toonn@user/toonn) (Ping timeout: 256 seconds) |
| 18:57:06 | × | califax quits (~califax@user/califx) (Remote host closed the connection) |
| 18:57:28 | × | omidmash quits (~omidmash@user/omidmash) (Quit: The Lounge - https://thelounge.chat) |
| 18:58:38 | → | califax joins (~califax@user/califx) |
| 19:01:02 | × | Googulator quits (~Googulato@87-97-86-146.pool.digikabel.hu) (Quit: Client closed) |
| 19:01:09 | → | Googulator joins (~Googulato@87-97-86-146.pool.digikabel.hu) |
| 19:01:30 | × | califax quits (~califax@user/califx) (Remote host closed the connection) |
| 19:02:25 | → | califax joins (~califax@user/califx) |
| 19:03:05 | → | omidmash joins (~omidmash@user/omidmash) |
| 19:03:48 | × | tromp quits (~textual@2001:1c00:3487:1b00:dd4:56d:fd02:60e2) (Quit: My iMac has gone to sleep. ZZZzzz…) |
| 19:05:36 | × | ss4 quits (~wootehfoo@user/wootehfoot) (Read error: Connection reset by peer) |
| 19:06:47 | → | kuribas joins (~user@2a02:1808:cd:df9d:3fd8:99c:a12:7c8) |
| 19:14:21 | → | __monty__ joins (~toonn@user/toonn) |
| 19:15:43 | × | tabaqui1 quits (~tabaqui@167.71.80.236) (Ping timeout: 240 seconds) |
| 19:16:49 | × | merijn quits (~merijn@77.242.116.146) (Ping timeout: 264 seconds) |
| 19:20:28 | × | yin quits (~zero@user/zero) (Remote host closed the connection) |
| 19:23:36 | → | merijn joins (~merijn@77.242.116.146) |
| 19:24:40 | → | ljdarj joins (~Thunderbi@user/ljdarj) |
| 19:24:49 | × | califax quits (~califax@user/califx) (Remote host closed the connection) |
| 19:29:00 | → | tabaqui joins (~tabaqui@167.71.80.236) |
| 19:30:48 | → | Googulator58 joins (~Googulato@2a01-036d-0106-01cb-8583-2a78-a55c-bee5.pool6.digikabel.hu) |
| 19:30:51 | × | Googulator quits (~Googulato@87-97-86-146.pool.digikabel.hu) (Quit: Client closed) |
| 19:31:28 | → | Lord_of_Life_ joins (~Lord@user/lord-of-life/x-2819915) |
| 19:31:46 | × | Lord_of_Life quits (~Lord@user/lord-of-life/x-2819915) (Ping timeout: 246 seconds) |
| 19:32:48 | Lord_of_Life_ | is now known as Lord_of_Life |
| 19:35:59 | → | califax joins (~califax@user/califx) |
| 19:42:30 | × | vetkat quits (~vetkat@user/vetkat) (Read error: Connection reset by peer) |
| 19:42:53 | → | vetkat joins (~vetkat@user/vetkat) |
| 19:46:27 | → | humasect joins (~humasect@dyn-192-249-132-90.nexicom.net) |
| 19:47:07 | → | CiaoSen joins (~Jura@2a02:8071:64e1:da0:5a47:caff:fe78:33db) |
| 19:50:31 | × | polykernel quits (~polykerne@user/polykernel) (Remote host closed the connection) |
| 19:50:59 | → | polykernel joins (~polykerne@user/polykernel) |
| 19:57:33 | <bwe> | Reader & ReaderT: I've now grasped the concept of hiding an (read only) input argument within Reader. Also it's straightforward to have a nested structure of functions that propagate this way the argument to the terminal function. What causes frustration right now is: `ReaderT ReadArg Parser Result` when is which bind operator (`<-`) working in which context (and what does it expect), i.e. ReaderT or Parser? -- Can you recommend a tutorial / paper that wal |
| 19:57:33 | <bwe> | ks through some examples of this kind? |
| 19:59:18 | <haskellbridge> | <Zemyla> It's operating in the Reader context, and if you want to run a Parser value, you need to lift it. |
| 19:59:33 | <haskellbridge> | <Zemyla> Or else use a typeclass that lifts it automatically. |
| 20:00:33 | <bwe> | Zemyla: Do I want in this case something like `liftIO` but for Reader context? |
| 20:02:40 | <c_wraith> | :t lift |
| 20:02:41 | <lambdabot> | (MonadTrans t, Monad m) => m a -> t m a |
| 20:03:08 | <c_wraith> | that's... the *sole* operation specific to monad transformers |
| 20:03:54 | → | jmcantrell_ joins (~weechat@user/jmcantrell) |
| 20:03:59 | <bwe> | lift ... then is adding another layer of Reader to Parser so it matches up to the expected type |
| 20:04:52 | ← | kuribas parts (~user@2a02:1808:cd:df9d:3fd8:99c:a12:7c8) (ERC 5.5.0.29.1 (IRC client for GNU Emacs 29.3)) |
| 20:04:59 | <c_wraith> | there are some rules it must follow.. lift a >>= \x -> lift (f x) must be equivalent to lift (a >>= \x -> f x) |
| 20:05:12 | <c_wraith> | that's really the only rule you need, actually |
| 20:08:26 | → | Square2 joins (~Square@user/square) |
| 20:09:03 | <bwe> | Ok, thanks, that instantly relieves me of some frustration if I use that in my code. -- Then, what's the confusion about transformer libraries? There's one I am warned about whereas I should use the other. What's true? |
| 20:09:20 | <monochrom> | To a large extent, ReaderT makes more sense if you follow Typeclassopedia in reinventing ReaderT from scratch (or any of those transformers). |
| 20:11:06 | × | merijn quits (~merijn@77.242.116.146) (Ping timeout: 252 seconds) |
| 20:11:43 | <bwe> | Oh, I meant https://hackage.haskell.org/package/mtl vs. https://hackage.haskell.org/package/transformers |
| 20:11:56 | <c_wraith> | the funny thing is there is no argument there. |
| 20:12:01 | trickard_ | is now known as trickard |
| 20:12:11 | <c_wraith> | the argument is between mtl and monads-tf. mtl won. |
| 20:12:29 | <c_wraith> | transformers was created to share as much code as possible between mtl and monads-tf |
| 20:12:51 | <c_wraith> | transformers has all the actual implementations |
| 20:13:05 | <c_wraith> | mtl provides a slightly different API for them |
| 20:13:14 | <monochrom> | Yeah you must have been reading very outdated material. There was a divide two decades ago. They were unified since then. |
| 20:13:35 | <bwe> | That's interesting to learn. So my default is then any or just mtl? |
| 20:13:56 | <c_wraith> | I'm still mildly in favor of using transformers without the mtl layer, but I'm unconcerned. I'll go either way for compatibility |
| 20:14:00 | <monochrom> | Today, transformers defines ReaderT, and mtl defines the MonadReader class and puts ReaderT as an instance. That is all. |
| 20:14:14 | <monochrom> | (and mtl re-exports transformers) |
| 20:14:55 | × | jmcantrell_ quits (~weechat@user/jmcantrell) (Ping timeout: 240 seconds) |
| 20:15:48 | → | Googulator22 joins (~Googulato@2a01-036d-0106-01cb-8583-2a78-a55c-bee5.pool6.digikabel.hu) |
| 20:15:48 | × | Googulator58 quits (~Googulato@2a01-036d-0106-01cb-8583-2a78-a55c-bee5.pool6.digikabel.hu) (Quit: Client closed) |
| 20:16:43 | <dolio> | At some point mtl had everything directly in it, and then there were a couple of split up packages on top of transformers. But eventually mtl just got turned into essentially the same thing as the fundeps one. |
| 20:17:09 | <dolio> | Because it was silly having 3 things like mtl. |
| 20:17:41 | <bwe> | monochrom: that's complicated enough :) |
| 20:18:22 | <monochrom> | I used to tell fake news about it in the form of "Vienna Peace Conference established the Concert of MTL" >:) |
| 20:18:35 | <bwe> | https://play.haskell.org/saved/CIlt9hCq <- what's the right approach to mix Reader and non Reader parsers? I mean line 4. |
| 20:19:23 | <monochrom> | I thought you knew about `lift`? |
| 20:19:59 | × | humasect quits (~humasect@dyn-192-249-132-90.nexicom.net) (Remote host closed the connection) |
| 20:20:00 | <mauke> | why is there a runReaderT in there? |
| 20:20:26 | <monochrom> | I believe it is to reinvent `lift`. :) |
| 20:20:35 | <bwe> | mauke: because parserB and parser C are of type `Parser Result` |
| 20:20:52 | <mauke> | parserA <|> lift parserB <|> lift parserC ? |
| 20:21:20 | <monochrom> | Although, can you still use <|> at the ReaderT level? |
| 20:21:28 | <bwe> | okay, the thing then is that my working context is already ReaderT |
| 20:21:30 | <monochrom> | Ah probably yes. |
| 20:22:15 | <EvanR> | ReaderT, (one of) haskell's (many) answers to dependency injection |
| 20:24:20 | <c_wraith> | dependency injection is such a complicated name for "pass values around" |
| 20:26:28 | <EvanR> | haha |
| 20:26:50 | <monochrom> | I would say "higher-order functions" but OK! |
| 20:27:13 | <EvanR> | the dependency may not be a function |
| 20:27:34 | <monochrom> | <facetious> "callback" is a complicated way to say "continuation" </facectious> |
| 20:28:04 | <dolio> | I don't know which of those deserves to be considered more complicated. |
| 20:28:07 | <mauke> | lower-chrer |
| 20:28:29 | <EvanR> | dependency itself is kind a can of worms |
| 20:28:38 | <EvanR> | evokes a lot of infrastructure |
| 20:29:06 | <EvanR> | but here it boils down to, this express has free variables. But we're calling it a dependency |
| 20:29:11 | <EvanR> | expression |
| 20:32:14 | <monochrom> | Oh! Then "lambda lifting" :) |
| 20:32:25 | <bwe> | f xs = (_ . map returnsSomeReader $ xs) :: [Text] -> Reader Config [Result] -- how do I transform [Reader Config Result] to `Reader Config [Result]`? |
| 20:32:58 | <monochrom> | Does `sequence` do what you want? |
| 20:33:43 | → | humasect joins (~humasect@dyn-192-249-132-90.nexicom.net) |
| 20:35:00 | <mauke> | :t sequence |
| 20:35:01 | <lambdabot> | (Traversable t, Monad m) => t (m a) -> m (t a) |
| 20:35:11 | <mauke> | :t traverse |
| 20:35:12 | <lambdabot> | (Traversable t, Applicative f) => (a -> f b) -> t a -> f (t b) |
| 20:35:40 | <bwe> | My intuition led me to traverse :). |
| 20:36:18 | <mauke> | :t \f -> sequence . map f |
| 20:36:18 | <lambdabot> | Monad m => (a1 -> m a2) -> [a1] -> m [a2] |
| 20:36:39 | <mauke> | :t \f -> sequenceA . map f |
| 20:36:40 | <lambdabot> | Applicative f => (a1 -> f a2) -> [a1] -> f [a2] |
| 20:38:10 | → | AlexNoo joins (~AlexNoo@85.174.180.40) |
| 20:40:10 | <Leary> | bwe: Re mixing levels, this <https://play.haskell.org/saved/vdNe7NSH> is one option, but you're probably better off reversing the order of `ReaderT` and `ParsecT`, since that way the only operation you need to `lift` is `ask`. |
| 20:45:32 | <bwe> | Leary: …you do that with `k (`runReaderT` r)` right? |
| 20:47:41 | → | Wygulmage joins (~Wygulmage@user/Wygulmage) |
| 20:49:28 | × | humasect quits (~humasect@dyn-192-249-132-90.nexicom.net) (Remote host closed the connection) |
| 20:51:04 | → | humasect joins (~humasect@dyn-192-249-132-90.nexicom.net) |
| 20:55:25 | <Leary> | bwe: I'm not sure what you're asking. Regardless, the way I'd actually recommend goes like so: https://play.haskell.org/saved/8oJlQyYR |
| 20:55:46 | × | humasect quits (~humasect@dyn-192-249-132-90.nexicom.net) (Ping timeout: 246 seconds) |
| 20:56:42 | → | Square joins (~Square4@user/square) |
| 20:57:41 | × | Pixi__ quits (~Pixi@user/pixi) (Quit: Leaving) |
| 20:59:37 | × | Square2 quits (~Square@user/square) (Ping timeout: 246 seconds) |
| 21:02:13 | → | jmcantrell_ joins (~weechat@user/jmcantrell) |
| 21:02:53 | <bwe> | Leary: wow, that's actually beautiful. |
| 21:06:32 | <monochrom> | You can furthermore omit the `lift` because ParsercT e s (Reader r) is an instance of MonadReader too. (Generally, ParsecT e s m, if m is an instance of MonadReader). |
| 21:12:15 | × | target_i quits (~target_i@user/target-i/x-6023099) (Quit: leaving) |
| 21:13:58 | → | humasect joins (~humasect@dyn-192-249-132-90.nexicom.net) |
| 21:14:26 | × | humasect quits (~humasect@dyn-192-249-132-90.nexicom.net) (Remote host closed the connection) |
| 21:14:38 | → | humasect joins (~humasect@dyn-192-249-132-90.nexicom.net) |
| 21:14:56 | × | humasect quits (~humasect@dyn-192-249-132-90.nexicom.net) (Remote host closed the connection) |
| 21:23:19 | × | ChaiTRex quits (~ChaiTRex@user/chaitrex) (Ping timeout: 252 seconds) |
| 21:25:38 | → | ChaiTRex joins (~ChaiTRex@user/chaitrex) |
| 21:29:33 | → | karenw joins (~karenw@user/karenw) |
| 21:36:17 | → | Pixi joins (~Pixi@user/pixi) |
| 21:43:09 | → | humasect joins (~humasect@192.249.132.90) |
| 21:45:35 | × | Googulator22 quits (~Googulato@2a01-036d-0106-01cb-8583-2a78-a55c-bee5.pool6.digikabel.hu) (Quit: Client closed) |
| 21:45:44 | → | Googulator22 joins (~Googulato@2a01-036d-0106-01cb-8583-2a78-a55c-bee5.pool6.digikabel.hu) |
| 21:47:59 | <bwe> | thanks, mauke, monochrom, Leary, c_wraith and Zemyla |
| 21:48:37 | × | humasect quits (~humasect@192.249.132.90) (Ping timeout: 264 seconds) |
| 21:55:23 | × | milan quits (~milan@88.212.61.169) (Quit: WeeChat 4.5.2) |
| 21:56:27 | → | merijn joins (~merijn@host-vr.cgnat-g.v4.dfn.nl) |
| 21:57:07 | × | michalz quits (~michalz@185.246.207.215) (Remote host closed the connection) |
| 21:58:51 | × | Athas quits (athas@2a01:7c8:aaac:1cf:e9bb:9c42:9519:597d) (Quit: ZNC 1.9.1 - https://znc.in) |
| 21:59:03 | → | Athas joins (athas@sigkill.dk) |
| 22:01:15 | × | merijn quits (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 240 seconds) |
| 22:08:19 | → | merijn joins (~merijn@host-vr.cgnat-g.v4.dfn.nl) |
| 22:13:15 | × | merijn quits (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 245 seconds) |
| 22:15:51 | → | Googulator7 joins (~Googulato@2a01-036d-0106-01cb-8583-2a78-a55c-bee5.pool6.digikabel.hu) |
| 22:15:51 | × | Googulator22 quits (~Googulato@2a01-036d-0106-01cb-8583-2a78-a55c-bee5.pool6.digikabel.hu) (Quit: Client closed) |
| 22:24:11 | → | merijn joins (~merijn@host-vr.cgnat-g.v4.dfn.nl) |
| 22:28:55 | × | merijn quits (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 240 seconds) |
| 22:35:03 | × | Wygulmage quits (~Wygulmage@user/Wygulmage) (Ping timeout: 272 seconds) |
| 22:38:31 | → | humasect joins (~humasect@dyn-192-249-132-90.nexicom.net) |
| 22:39:13 | → | Everything joins (~Everythin@172-232-54-192.ip.linodeusercontent.com) |
| 22:40:09 | → | merijn joins (~merijn@host-vr.cgnat-g.v4.dfn.nl) |
| 22:40:49 | → | pavonia joins (~user@user/siracusa) |
| 22:44:15 | × | humasect quits (~humasect@dyn-192-249-132-90.nexicom.net) (Remote host closed the connection) |
| 22:44:18 | × | takuan_dozo quits (~takuan@d8D86B9E9.access.telenet.be) (Remote host closed the connection) |
| 22:45:49 | × | Googulator7 quits (~Googulato@2a01-036d-0106-01cb-8583-2a78-a55c-bee5.pool6.digikabel.hu) (Quit: Client closed) |
| 22:45:51 | → | Googulator9 joins (~Googulato@2a01-036d-0106-01cb-8583-2a78-a55c-bee5.pool6.digikabel.hu) |
| 22:46:43 | × | merijn quits (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 246 seconds) |
| 22:49:11 | × | st_aldini quits (~Thunderbi@2605:a601:a07c:7400:7a53:9ab0:188f:494f) (Quit: st_aldini) |
| 22:56:35 | × | sindu quits (~sindu@2.148.32.207.tmi.telenormobil.no) (Ping timeout: 240 seconds) |
| 22:58:11 | → | merijn joins (~merijn@host-vr.cgnat-g.v4.dfn.nl) |
| 22:59:35 | → | tromp joins (~textual@2001:1c00:3487:1b00:dd4:56d:fd02:60e2) |
| 23:00:30 | jmcantrell_ | is now known as jmcantrell |
| 23:02:12 | → | emmanuelux joins (~emmanuelu@user/emmanuelux) |
| 23:03:01 | × | merijn quits (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 250 seconds) |
| 23:04:06 | → | gmg joins (~user@user/gehmehgeh) |
| 23:10:10 | × | xff0x quits (~xff0x@2405:6580:b080:900:bfb6:36fd:6718:66b7) (Ping timeout: 246 seconds) |
| 23:12:33 | → | yin joins (~zero@user/zero) |
| 23:14:01 | → | merijn joins (~merijn@host-vr.cgnat-g.v4.dfn.nl) |
| 23:14:52 | → | xff0x joins (~xff0x@2405:6580:b080:900:bfb6:36fd:6718:66b7) |
| 23:18:31 | × | merijn quits (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 240 seconds) |
| 23:21:35 | × | yin quits (~zero@user/zero) (Remote host closed the connection) |
| 23:21:51 | → | yin joins (~zero@user/zero) |
| 23:26:29 | × | haskellbridge quits (~hackager@96.28.224.214) (Remote host closed the connection) |
| 23:28:56 | → | merijn joins (~merijn@host-vr.cgnat-g.v4.dfn.nl) |
| 23:30:51 | → | haskellbridge joins (~hackager@96.28.224.214) |
| 23:30:51 | ChanServ | sets mode +v haskellbridge |
| 23:33:37 | × | merijn quits (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 246 seconds) |
| 23:34:12 | × | tromp quits (~textual@2001:1c00:3487:1b00:dd4:56d:fd02:60e2) (Quit: My iMac has gone to sleep. ZZZzzz…) |
| 23:36:59 | → | tromp joins (~textual@2001:1c00:3487:1b00:dd4:56d:fd02:60e2) |
| 23:39:31 | × | tccq quits (~user@user/tccq) (Remote host closed the connection) |
| 23:39:50 | × | Pozyomka quits (~pyon@user/pyon) (Quit: WeeChat 4.8.1) |
| 23:40:42 | → | Pozyomka joins (~pyon@user/pyon) |
| 23:44:43 | → | merijn joins (~merijn@host-vr.cgnat-g.v4.dfn.nl) |
| 23:48:17 | × | tromp quits (~textual@2001:1c00:3487:1b00:dd4:56d:fd02:60e2) (Quit: My iMac has gone to sleep. ZZZzzz…) |
| 23:49:19 | × | merijn quits (~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 240 seconds) |
| 23:53:18 | × | ljdarj quits (~Thunderbi@user/ljdarj) (Ping timeout: 252 seconds) |
| 23:56:24 | × | CiaoSen quits (~Jura@2a02:8071:64e1:da0:5a47:caff:fe78:33db) (Ping timeout: 260 seconds) |
All times are in UTC on 2025-12-11.