Logs on 2024-11-08 (liberachat/#haskell)
| 00:00:29 | × | ChaiTRex quits (~ChaiTRex@user/chaitrex) (Remote host closed the connection) |
| 00:00:49 | × | jero98772 quits (~jero98772@2800:484:1d7c:cc00::1) (Remote host closed the connection) |
| 00:00:54 | → | ChaiTRex joins (~ChaiTRex@user/chaitrex) |
| 00:01:47 | → | merijn joins (~merijn@128-137-045-062.dynamic.caiway.nl) |
| 00:02:52 | × | machinedgod quits (~machinedg@d108-173-18-100.abhsia.telus.net) (Ping timeout: 272 seconds) |
| 00:07:06 | → | troojg joins (~troojg@user/troojg) |
| 00:11:38 | × | merijn quits (~merijn@128-137-045-062.dynamic.caiway.nl) (Ping timeout: 245 seconds) |
| 00:14:18 | × | sourcetarius quits (~sourcetar@user/sourcetarius) (Ping timeout: 244 seconds) |
| 00:19:32 | Feuermagier | is now known as Guest603 |
| 00:19:32 | × | Guest603 quits (~Feuermagi@user/feuermagier) (Killed (platinum.libera.chat (Nickname regained by services))) |
| 00:21:25 | × | acidjnk quits (~acidjnk@p200300d6e7283f9509f155732eb456c8.dip0.t-ipconnect.de) (Ping timeout: 260 seconds) |
| 00:22:09 | → | peterbecich joins (~Thunderbi@syn-047-229-123-186.res.spectrum.com) |
| 00:23:31 | → | merijn joins (~merijn@128-137-045-062.dynamic.caiway.nl) |
| 00:26:25 | × | xff0x quits (~xff0x@2405:6580:b080:900:759a:e3d6:c0c3:b78a) (Ping timeout: 248 seconds) |
| 00:26:42 | × | comonad quits (~comonad@p200300d0272bda000e01a379c24cc428.dip0.t-ipconnect.de) (Ping timeout: 244 seconds) |
| 00:28:34 | → | comonad joins (~comonad@p200300d027186300edf824b7b80a34ff.dip0.t-ipconnect.de) |
| 00:28:49 | × | merijn quits (~merijn@128-137-045-062.dynamic.caiway.nl) (Ping timeout: 260 seconds) |
| 00:37:02 | → | user363627 joins (~user@user/user363627) |
| 00:39:18 | → | merijn joins (~merijn@128-137-045-062.dynamic.caiway.nl) |
| 00:40:45 | × | weary-traveler quits (~user@user/user363627) (Ping timeout: 252 seconds) |
| 00:41:46 | → | Tuplanolla joins (~Tuplanoll@91-159-69-59.elisa-laajakaista.fi) |
| 00:44:03 | → | jero98772 joins (~jero98772@2800:484:1d7c:cc00::1) |
| 00:44:38 | × | jero98772 quits (~jero98772@2800:484:1d7c:cc00::1) (Remote host closed the connection) |
| 00:44:42 | × | merijn quits (~merijn@128-137-045-062.dynamic.caiway.nl) (Ping timeout: 276 seconds) |
| 00:44:56 | <yin> | point me to the right place to file it and i will |
| 00:46:01 | <geekosaur> | https://gitlab.haskell.org/ghc/ghc/-/issues you will need a GitLab account |
| 00:46:26 | → | merijn joins (~merijn@128-137-045-062.dynamic.caiway.nl) |
| 00:51:03 | <yin> | why am i being asked for gitlab login credentials on haskell.org? |
| 00:51:10 | <yin> | this can't be right |
| 00:51:51 | × | merijn quits (~merijn@128-137-045-062.dynamic.caiway.nl) (Ping timeout: 276 seconds) |
| 00:52:42 | <geekosaur> | because browsers are dumb? I get that all the time, chrome asks me whether I want to use wiki or gitlab creds |
| 00:53:00 | <geekosaur> | because "obviously" a subdomain is the same auth domain |
| 00:53:18 | × | ljdarj quits (~Thunderbi@user/ljdarj) (Ping timeout: 252 seconds) |
| 00:56:14 | <yin> | no this is not the right way to do auth |
| 00:56:49 | <yin> | either someone made a mistake or i'm misunderstanding something |
| 00:56:49 | × | sprotte24 quits (~sprotte24@p200300d16f05e000c862cdd7b290d75c.dip0.t-ipconnect.de) (Read error: Connection reset by peer) |
| 00:59:19 | <geekosaur> | that might be a question for #haskell-infrastructure then |
| 00:59:42 | <yin> | ah, this is not OAuth for gitlab.com. it's just for haskell.org's gitlab instance |
| 00:59:45 | <user363627> | yin: the gitlab login credentials being asked would be for the instance being served at gitlab.haskell.org as opposed to gitlab.com |
| 00:59:54 | <user363627> | yes |
| 01:00:16 | <yin> | so i was misunderstanding something after all :) |
| 01:00:25 | <user363627> | :) |
| 01:01:08 | × | peterbecich quits (~Thunderbi@syn-047-229-123-186.res.spectrum.com) (Ping timeout: 272 seconds) |
| 01:01:53 | <monochrom> | Tangentailly, a few days ago some of us learned that DNS is not suffix-closed, i.e., subscriptions.techstreet.com resolves fine, but techstreet.com does not exist at all. |
| 01:02:13 | → | merijn joins (~merijn@128-137-045-062.dynamic.caiway.nl) |
| 01:02:23 | <geekosaur> | …approved |
| 01:02:52 | <yin> | yeah you can mess with DNS records in a myriad of ways |
| 01:04:01 | <yin> | i personaly thing the whole of DNS is broken in more ways than one, but yeah... |
| 01:04:08 | <monochrom> | Haha I need to make a website such that www.monochrom.org says "Haskell is great!" and yet monochrom.org says "Haskell sucks!" |
| 01:07:13 | × | merijn quits (~merijn@128-137-045-062.dynamic.caiway.nl) (Ping timeout: 252 seconds) |
| 01:09:51 | × | troojg quits (~troojg@user/troojg) (Remote host closed the connection) |
| 01:17:34 | <yin> | better yet, make http:// suck and https:// great |
| 01:17:59 | → | merijn joins (~merijn@128-137-045-062.dynamic.caiway.nl) |
| 01:18:14 | × | JuanDaugherty quits (~juan@user/JuanDaugherty) (Quit: JuanDaugherty) |
| 01:19:02 | → | xff0x joins (~xff0x@fsb6a9491c.tkyc517.ap.nuro.jp) |
| 01:22:32 | → | Unicorn_Princess joins (~Unicorn_P@user/Unicorn-Princess/x-3540542) |
| 01:23:14 | × | merijn quits (~merijn@128-137-045-062.dynamic.caiway.nl) (Ping timeout: 260 seconds) |
| 01:27:49 | <probie> | monochrom: you don't need to mess with DNS records for that, you just need to speak HTTP >= 1.1 |
| 01:28:59 | <monochrom> | That's true. |
| 01:33:47 | → | merijn joins (~merijn@128-137-045-062.dynamic.caiway.nl) |
| 01:34:06 | × | paddymahoney quits (~paddymaho@pool-99-250-10-137.cpe.net.cable.rogers.com) (Ping timeout: 276 seconds) |
| 01:36:00 | × | califax quits (~califax@user/califx) (Remote host closed the connection) |
| 01:37:10 | → | califax joins (~califax@user/califx) |
| 01:38:29 | × | merijn quits (~merijn@128-137-045-062.dynamic.caiway.nl) (Ping timeout: 248 seconds) |
| 01:40:09 | → | merijn joins (~merijn@128-137-045-062.dynamic.caiway.nl) |
| 01:44:54 | × | merijn quits (~merijn@128-137-045-062.dynamic.caiway.nl) (Ping timeout: 246 seconds) |
| 01:55:57 | → | merijn joins (~merijn@128-137-045-062.dynamic.caiway.nl) |
| 01:58:28 | → | paddymahoney joins (~paddymaho@pool-99-250-10-137.cpe.net.cable.rogers.com) |
| 02:00:46 | × | merijn quits (~merijn@128-137-045-062.dynamic.caiway.nl) (Ping timeout: 252 seconds) |
| 02:03:09 | <yin> | it depends on how much you want it to suck >:) |
| 02:11:41 | → | merijn joins (~merijn@128-137-045-062.dynamic.caiway.nl) |
| 02:12:49 | × | Pixi quits (~Pixi@user/pixi) (Quit: Leaving) |
| 02:16:14 | × | merijn quits (~merijn@128-137-045-062.dynamic.caiway.nl) (Ping timeout: 244 seconds) |
| 02:17:29 | × | notzmv quits (~daniel@user/notzmv) (Ping timeout: 260 seconds) |
| 02:18:25 | → | sam113101 joins (~sam@modemcable220.199-203-24.mc.videotron.ca) |
| 02:18:52 | × | Tuplanolla quits (~Tuplanoll@91-159-69-59.elisa-laajakaista.fi) (Quit: Leaving.) |
| 02:25:01 | → | Pixi joins (~Pixi@user/pixi) |
| 02:25:32 | × | euleritian quits (~euleritia@ip4d16fc38.dynamic.kabel-deutschland.de) (Remote host closed the connection) |
| 02:26:24 | → | euleritian joins (~euleritia@77.22.252.56) |
| 02:27:30 | → | merijn joins (~merijn@128-137-045-062.dynamic.caiway.nl) |
| 02:28:09 | × | euleritian quits (~euleritia@77.22.252.56) (Remote host closed the connection) |
| 02:29:00 | → | euleritian joins (~euleritia@77.22.252.56) |
| 02:32:24 | × | merijn quits (~merijn@128-137-045-062.dynamic.caiway.nl) (Ping timeout: 252 seconds) |
| 02:33:37 | × | euleritian quits (~euleritia@77.22.252.56) (Remote host closed the connection) |
| 02:33:56 | → | euleritian joins (~euleritia@77.22.252.56) |
| 02:34:43 | × | Unicorn_Princess quits (~Unicorn_P@user/Unicorn-Princess/x-3540542) (Remote host closed the connection) |
| 02:37:30 | → | lol_ joins (~lol@2603:3016:1e01:b9c0:ecfb:26af:1f31:67a5) |
| 02:41:42 | × | jcarpenter2 quits (~lol@2603:3016:1e01:b9c0:c43d:6fb:2607:cd8b) (Ping timeout: 276 seconds) |
| 02:43:00 | × | longlongdouble quits (~longlongd@2405:201:5c16:135:1989:242:cab1:419a) (Ping timeout: 276 seconds) |
| 02:43:17 | → | merijn joins (~merijn@128-137-045-062.dynamic.caiway.nl) |
| 02:50:00 | × | merijn quits (~merijn@128-137-045-062.dynamic.caiway.nl) (Ping timeout: 246 seconds) |
| 03:01:25 | → | merijn joins (~merijn@128-137-045-062.dynamic.caiway.nl) |
| 03:05:10 | → | peterbecich joins (~Thunderbi@syn-047-229-123-186.res.spectrum.com) |
| 03:09:20 | × | merijn quits (~merijn@128-137-045-062.dynamic.caiway.nl) (Ping timeout: 252 seconds) |
| 03:20:54 | → | merijn joins (~merijn@128-137-045-062.dynamic.caiway.nl) |
| 03:25:47 | × | merijn quits (~merijn@128-137-045-062.dynamic.caiway.nl) (Ping timeout: 255 seconds) |
| 03:33:54 | × | Tisoxin quits (~Ikosit@user/ikosit) (Ping timeout: 252 seconds) |
| 03:36:42 | → | merijn joins (~merijn@128-137-045-062.dynamic.caiway.nl) |
| 03:40:37 | × | bastelfreak quits (bastelfrea@libera/staff/VoxPupuli.bastelfreak) (Ping timeout: 620 seconds) |
| 03:41:42 | × | merijn quits (~merijn@128-137-045-062.dynamic.caiway.nl) (Ping timeout: 252 seconds) |
| 03:46:46 | → | bastelfreak joins (bastelfrea@libera/staff/VoxPupuli.bastelfreak) |
| 03:47:02 | → | Tisoxin joins (~Ikosit@user/ikosit) |
| 03:50:52 | × | td_ quits (~td@i5387092D.versanet.de) (Ping timeout: 272 seconds) |
| 03:52:00 | → | xdminsy joins (~xdminsy@117.147.71.147) |
| 03:52:08 | → | td_ joins (~td@i53870904.versanet.de) |
| 03:52:30 | → | merijn joins (~merijn@128-137-045-062.dynamic.caiway.nl) |
| 03:57:38 | × | merijn quits (~merijn@128-137-045-062.dynamic.caiway.nl) (Ping timeout: 248 seconds) |
| 04:00:21 | × | cjay quits (cjay@nerdbox.nerd2nerd.org) (Ping timeout: 248 seconds) |
| 04:01:09 | × | peterbecich quits (~Thunderbi@syn-047-229-123-186.res.spectrum.com) (Ping timeout: 260 seconds) |
| 04:05:03 | user363627 | is now known as weary-traveler |
| 04:08:17 | → | merijn joins (~merijn@128-137-045-062.dynamic.caiway.nl) |
| 04:11:55 | → | cjay joins (cjay@nerdbox.nerd2nerd.org) |
| 04:13:24 | × | merijn quits (~merijn@128-137-045-062.dynamic.caiway.nl) (Ping timeout: 260 seconds) |
| 04:24:04 | → | merijn joins (~merijn@128-137-045-062.dynamic.caiway.nl) |
| 04:24:06 | → | ih1d_ joins (~ih1d@24.139.109.18) |
| 04:24:22 | <ih1d_> | hello! |
| 04:25:05 | <ih1d_> | anybody have good resources for ffi and linking c libraries to projects (using pkg-config etc.) |
| 04:31:33 | × | merijn quits (~merijn@128-137-045-062.dynamic.caiway.nl) (Ping timeout: 276 seconds) |
| 04:42:07 | → | merijn joins (~merijn@128-137-045-062.dynamic.caiway.nl) |
| 04:45:07 | → | aforemny joins (~aforemny@2001:9e8:6cda:5700:b93:b66b:84fb:f5e8) |
| 04:46:20 | × | aforemny_ quits (~aforemny@i59F4C67C.versanet.de) (Ping timeout: 255 seconds) |
| 04:47:06 | × | merijn quits (~merijn@128-137-045-062.dynamic.caiway.nl) (Ping timeout: 244 seconds) |
| 04:47:49 | → | merijn joins (~merijn@128-137-045-062.dynamic.caiway.nl) |
| 04:49:34 | <jackdk> | ih1d_: if you don't mind GPL, you could crib https://git.sr.ht/~jack/libtelnet-haskell - it's a simple lib with a pkg-config dependency |
| 04:50:07 | <jackdk> | https://www.youtube.com/watch?v=y95WtkWCmKg I think this FFI talk was the one I saw years ago and thought was valuable |
| 04:52:39 | × | merijn quits (~merijn@128-137-045-062.dynamic.caiway.nl) (Ping timeout: 260 seconds) |
| 04:54:57 | <int-e> | There are many FFI bindings on Hackage that you could base this on. There's a question of scale... if there are many functions to bind, looking into c2hs may be worthwhile. Or, if it's humongous, adapting c2hs (gtk does that with gtk2hs-buildtools ...) |
| 04:58:25 | × | poscat quits (~poscat@user/poscat) (Ping timeout: 248 seconds) |
| 05:03:33 | → | merijn joins (~merijn@128-137-045-062.dynamic.caiway.nl) |
| 05:05:20 | → | poscat joins (~poscat@user/poscat) |
| 05:10:10 | × | merijn quits (~merijn@128-137-045-062.dynamic.caiway.nl) (Ping timeout: 248 seconds) |
| 05:21:40 | → | merijn joins (~merijn@128-137-045-062.dynamic.caiway.nl) |
| 05:27:04 | × | merijn quits (~merijn@128-137-045-062.dynamic.caiway.nl) (Ping timeout: 260 seconds) |
| 05:37:29 | → | merijn joins (~merijn@128-137-045-062.dynamic.caiway.nl) |
| 05:40:08 | → | michalz joins (~michalz@185.246.207.217) |
| 05:42:23 | × | merijn quits (~merijn@128-137-045-062.dynamic.caiway.nl) (Ping timeout: 244 seconds) |
| 05:45:14 | × | Smiles quits (uid551636@id-551636.lymington.irccloud.com) (Quit: Connection closed for inactivity) |
| 05:53:17 | → | merijn joins (~merijn@128-137-045-062.dynamic.caiway.nl) |
| 05:54:29 | × | Square quits (~Square4@user/square) (Ping timeout: 260 seconds) |
| 05:58:20 | × | merijn quits (~merijn@128-137-045-062.dynamic.caiway.nl) (Ping timeout: 255 seconds) |
| 06:02:32 | → | poscat0x04 joins (~poscat@user/poscat) |
| 06:03:29 | × | poscat quits (~poscat@user/poscat) (Ping timeout: 248 seconds) |
| 06:07:08 | → | merijn joins (~merijn@128-137-045-062.dynamic.caiway.nl) |
| 06:14:15 | × | merijn quits (~merijn@128-137-045-062.dynamic.caiway.nl) (Ping timeout: 276 seconds) |
| 06:17:54 | → | takuan joins (~takuan@178-116-218-225.access.telenet.be) |
| 06:22:56 | × | jle` quits (~jle`@syn-023-240-075-236.res.spectrum.com) (Ping timeout: 252 seconds) |
| 06:24:54 | → | jle` joins (~jle`@2603:8001:3b02:84d4:71c9:147c:d31f:c8d0) |
| 06:25:10 | → | merijn joins (~merijn@128-137-045-062.dynamic.caiway.nl) |
| 06:29:53 | × | merijn quits (~merijn@128-137-045-062.dynamic.caiway.nl) (Ping timeout: 252 seconds) |
| 06:32:45 | × | euleritian quits (~euleritia@77.22.252.56) (Ping timeout: 252 seconds) |
| 06:33:45 | → | euleritian joins (~euleritia@dynamic-176-006-132-027.176.6.pool.telefonica.de) |
| 06:41:00 | → | merijn joins (~merijn@128-137-045-062.dynamic.caiway.nl) |
| 06:42:10 | → | rvalue- joins (~rvalue@user/rvalue) |
| 06:43:19 | × | rvalue quits (~rvalue@user/rvalue) (Ping timeout: 260 seconds) |
| 06:45:38 | × | merijn quits (~merijn@128-137-045-062.dynamic.caiway.nl) (Ping timeout: 248 seconds) |
| 06:48:09 | rvalue- | is now known as rvalue |
| 06:50:39 | → | acidjnk joins (~acidjnk@p200300d6e7283f561805fdf183b39650.dip0.t-ipconnect.de) |
| 06:54:50 | × | housemate quits (~housemate@146.70.66.228) (Ping timeout: 252 seconds) |
| 06:56:44 | → | merijn joins (~merijn@128-137-045-062.dynamic.caiway.nl) |
| 06:56:49 | → | housemate joins (~housemate@146.70.66.228) |
| 07:01:26 | × | merijn quits (~merijn@128-137-045-062.dynamic.caiway.nl) (Ping timeout: 244 seconds) |
| 07:01:58 | → | tromp joins (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl) |
| 07:05:26 | → | longlongdouble joins (~longlongd@2405:201:5c16:135:1989:242:cab1:419a) |
| 07:07:30 | → | xff0x_ joins (~xff0x@fsb6a9491c.tkyc517.ap.nuro.jp) |
| 07:07:59 | × | xff0x quits (~xff0x@fsb6a9491c.tkyc517.ap.nuro.jp) (Ping timeout: 260 seconds) |
| 07:08:09 | → | merijn joins (~merijn@128-137-045-062.dynamic.caiway.nl) |
| 07:13:09 | × | merijn quits (~merijn@128-137-045-062.dynamic.caiway.nl) (Ping timeout: 252 seconds) |
| 07:21:09 | × | ft quits (~ft@p4fc2a216.dip0.t-ipconnect.de) (Quit: leaving) |
| 07:23:55 | → | merijn joins (~merijn@128-137-045-062.dynamic.caiway.nl) |
| 07:28:43 | × | merijn quits (~merijn@128-137-045-062.dynamic.caiway.nl) (Ping timeout: 245 seconds) |
| 07:29:03 | × | tromp quits (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl) (Quit: My iMac has gone to sleep. ZZZzzz…) |
| 07:30:45 | × | longlongdouble quits (~longlongd@2405:201:5c16:135:1989:242:cab1:419a) (Ping timeout: 252 seconds) |
| 07:34:50 | → | longlongdouble joins (~longlongd@2405:201:5c16:135:1989:242:cab1:419a) |
| 07:36:45 | → | misterfish joins (~misterfis@84.53.85.146) |
| 07:39:42 | → | merijn joins (~merijn@128-137-045-062.dynamic.caiway.nl) |
| 07:44:57 | → | lortabac joins (~lortabac@2a01:e0a:541:b8f0:55ab:e185:7f81:54a4) |
| 07:45:12 | × | merijn quits (~merijn@128-137-045-062.dynamic.caiway.nl) (Ping timeout: 272 seconds) |
| 07:48:53 | → | Lord_of_Life_ joins (~Lord@user/lord-of-life/x-2819915) |
| 07:49:36 | × | Lord_of_Life quits (~Lord@user/lord-of-life/x-2819915) (Ping timeout: 246 seconds) |
| 07:49:37 | × | longlongdouble quits (~longlongd@2405:201:5c16:135:1989:242:cab1:419a) (Remote host closed the connection) |
| 07:50:04 | → | longlongdouble joins (~longlongd@2405:201:5c16:135:1989:242:cab1:419a) |
| 07:50:51 | × | longlongdouble quits (~longlongd@2405:201:5c16:135:1989:242:cab1:419a) (Remote host closed the connection) |
| 07:51:49 | Lord_of_Life_ | is now known as Lord_of_Life |
| 07:52:36 | × | tcard quits (~tcard@2400:4051:5801:7500:cf17:befc:ff82:5303) (Quit: Leaving) |
| 07:55:30 | → | merijn joins (~merijn@128-137-045-062.dynamic.caiway.nl) |
| 07:55:37 | → | peterbecich joins (~Thunderbi@syn-047-229-123-186.res.spectrum.com) |
| 08:00:04 | × | caconym quits (~caconym@user/caconym) (Quit: bye) |
| 08:00:42 | → | caconym joins (~caconym@user/caconym) |
| 08:01:05 | × | Sgeo__ quits (~Sgeo@user/sgeo) (Read error: Connection reset by peer) |
| 08:02:21 | → | tcard joins (~tcard@2400:4051:5801:7500:cf17:befc:ff82:5303) |
| 08:02:24 | × | merijn quits (~merijn@128-137-045-062.dynamic.caiway.nl) (Ping timeout: 252 seconds) |
| 08:02:39 | × | xff0x_ quits (~xff0x@fsb6a9491c.tkyc517.ap.nuro.jp) (Ping timeout: 252 seconds) |
| 08:05:09 | → | longlongdouble joins (~longlongd@2405:201:5c16:135:1989:242:cab1:419a) |
| 08:05:28 | × | misterfish quits (~misterfis@84.53.85.146) (Ping timeout: 272 seconds) |
| 08:08:17 | × | euleritian quits (~euleritia@dynamic-176-006-132-027.176.6.pool.telefonica.de) (Ping timeout: 248 seconds) |
| 08:09:08 | → | euleritian joins (~euleritia@ip4d16fc38.dynamic.kabel-deutschland.de) |
| 08:09:10 | → | merijn joins (~merijn@128-137-045-062.dynamic.caiway.nl) |
| 08:10:17 | → | alexherbo2 joins (~alexherbo@2a02-8440-3208-7a55-0804-3604-71e5-a155.rev.sfr.net) |
| 08:11:29 | × | longlongdouble quits (~longlongd@2405:201:5c16:135:1989:242:cab1:419a) (Ping timeout: 248 seconds) |
| 08:13:10 | → | longlongdouble joins (~longlongd@2405:201:5c16:135:1989:242:cab1:419a) |
| 08:14:09 | × | merijn quits (~merijn@128-137-045-062.dynamic.caiway.nl) (Ping timeout: 248 seconds) |
| 08:21:40 | → | kenran joins (~void@user/kenran) |
| 08:24:58 | → | merijn joins (~merijn@128-137-045-062.dynamic.caiway.nl) |
| 08:25:42 | → | tromp joins (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl) |
| 08:28:48 | × | ham2 quits (~ham@user/ham) (Ping timeout: 252 seconds) |
| 08:30:04 | × | merijn quits (~merijn@128-137-045-062.dynamic.caiway.nl) (Ping timeout: 260 seconds) |
| 08:30:07 | × | alexherbo2 quits (~alexherbo@2a02-8440-3208-7a55-0804-3604-71e5-a155.rev.sfr.net) (Remote host closed the connection) |
| 08:32:26 | → | ham2 joins (~ham@user/ham) |
| 08:40:45 | → | merijn joins (~merijn@128-137-045-062.dynamic.caiway.nl) |
| 08:45:34 | × | merijn quits (~merijn@128-137-045-062.dynamic.caiway.nl) (Ping timeout: 252 seconds) |
| 08:52:15 | × | peterbecich quits (~Thunderbi@syn-047-229-123-186.res.spectrum.com) (Ping timeout: 246 seconds) |
| 08:54:57 | × | longlongdouble quits (~longlongd@2405:201:5c16:135:1989:242:cab1:419a) (Remote host closed the connection) |
| 08:56:10 | → | longlongdouble joins (~longlongd@2405:201:5c16:135:1989:242:cab1:419a) |
| 08:56:29 | → | merijn joins (~merijn@128-137-045-062.dynamic.caiway.nl) |
| 08:59:57 | × | longlongdouble quits (~longlongd@2405:201:5c16:135:1989:242:cab1:419a) (Remote host closed the connection) |
| 09:00:03 | → | ljdarj joins (~Thunderbi@user/ljdarj) |
| 09:10:46 | → | xff0x joins (~xff0x@om126254173224.33.openmobile.ne.jp) |
| 09:11:11 | → | longlongdouble joins (~longlongd@2405:201:5c16:135:1989:242:cab1:419a) |
| 09:20:31 | × | paddymahoney quits (~paddymaho@pool-99-250-10-137.cpe.net.cable.rogers.com) (Quit: Leaving) |
| 09:22:25 | × | longlongdouble quits (~longlongd@2405:201:5c16:135:1989:242:cab1:419a) (Remote host closed the connection) |
| 09:26:14 | → | longlongdouble joins (~longlongd@2405:201:5c16:135:1989:242:cab1:419a) |
| 09:30:47 | × | tzh quits (~tzh@c-76-115-131-146.hsd1.or.comcast.net) (Quit: zzz) |
| 09:32:50 | × | ih1d_ quits (~ih1d@24.139.109.18) (Quit: leaving) |
| 09:37:27 | × | rembo10 quits (~rembo10@main.remulis.com) (Quit: ZNC 1.8.2 - https://znc.in) |
| 09:38:01 | × | longlongdouble quits (~longlongd@2405:201:5c16:135:1989:242:cab1:419a) (Remote host closed the connection) |
| 09:38:57 | → | rembo10 joins (~rembo10@main.remulis.com) |
| 09:41:22 | → | longlongdouble joins (~longlongd@2405:201:5c16:135:1989:242:cab1:419a) |
| 09:42:05 | → | lxsameer joins (~lxsameer@Serene/lxsameer) |
| 09:42:43 | × | ljdarj quits (~Thunderbi@user/ljdarj) (Ping timeout: 264 seconds) |
| 09:52:14 | → | kuribas joins (~user@ip-188-118-57-242.reverse.destiny.be) |
| 09:59:45 | × | driib318 quits (~driib@vmi931078.contaboserver.net) (Quit: The Lounge - https://thelounge.chat) |
| 10:00:23 | → | driib318 joins (~driib@vmi931078.contaboserver.net) |
| 10:04:02 | × | tromp quits (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl) (Quit: My iMac has gone to sleep. ZZZzzz…) |
| 10:05:18 | → | ih1d_ joins (~ih1d@24.139.109.18) |
| 10:05:38 | × | ih1d_ quits (~ih1d@24.139.109.18) (Client Quit) |
| 10:12:19 | × | mulk quits (~mulk@pd95146e9.dip0.t-ipconnect.de) (Ping timeout: 260 seconds) |
| 10:12:50 | → | ljdarj joins (~Thunderbi@user/ljdarj) |
| 10:13:39 | → | mulk joins (~mulk@pd95146e9.dip0.t-ipconnect.de) |
| 10:28:06 | × | Flow_ quits (~none@gentoo/developer/flow) (Quit: WeeChat 4.4.2) |
| 10:28:22 | → | Flow_ joins (~none@gentoo/developer/flow) |
| 10:28:48 | → | Smiles joins (uid551636@id-551636.lymington.irccloud.com) |
| 10:29:47 | → | ubert joins (~Thunderbi@178.165.164.236.wireless.dyn.drei.com) |
| 10:32:25 | Flow_ | is now known as flow |
| 10:35:58 | → | tromp joins (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl) |
| 10:38:34 | × | kenran quits (~void@user/kenran) (Remote host closed the connection) |
| 10:40:44 | × | longlongdouble quits (~longlongd@2405:201:5c16:135:1989:242:cab1:419a) (Ping timeout: 260 seconds) |
| 10:43:10 | × | lortabac quits (~lortabac@2a01:e0a:541:b8f0:55ab:e185:7f81:54a4) (Quit: WeeChat 4.4.2) |
| 10:47:52 | × | ih1d quits (~ih1d@24.139.109.18) (Remote host closed the connection) |
| 10:50:14 | × | xff0x quits (~xff0x@om126254173224.33.openmobile.ne.jp) (Read error: Connection reset by peer) |
| 10:50:47 | → | sord937 joins (~sord937@gateway/tor-sasl/sord937) |
| 10:51:44 | × | mulk quits (~mulk@pd95146e9.dip0.t-ipconnect.de) (Ping timeout: 255 seconds) |
| 10:55:28 | → | mulk joins (~mulk@pd95146e9.dip0.t-ipconnect.de) |
| 11:15:00 | → | chele joins (~chele@user/chele) |
| 11:18:43 | × | kuribas quits (~user@ip-188-118-57-242.reverse.destiny.be) (Remote host closed the connection) |
| 11:18:56 | → | kuribas joins (~user@ip-188-118-57-242.reverse.destiny.be) |
| 11:31:13 | × | merijn quits (~merijn@128-137-045-062.dynamic.caiway.nl) (Ping timeout: 245 seconds) |
| 11:31:22 | → | vpan joins (~vpan@212.117.1.172) |
| 11:36:52 | → | lortabac joins (~lortabac@2a01:e0a:541:b8f0:55ab:e185:7f81:54a4) |
| 11:44:17 | → | merijn joins (~merijn@128-137-045-062.dynamic.caiway.nl) |
| 11:45:21 | × | euleritian quits (~euleritia@ip4d16fc38.dynamic.kabel-deutschland.de) (Ping timeout: 248 seconds) |
| 11:45:39 | → | euleritian joins (~euleritia@dynamic-176-006-140-137.176.6.pool.telefonica.de) |
| 11:51:08 | × | merijn quits (~merijn@128-137-045-062.dynamic.caiway.nl) (Ping timeout: 255 seconds) |
| 11:51:53 | → | merijn joins (~merijn@128-137-045-062.dynamic.caiway.nl) |
| 12:00:23 | × | mulk quits (~mulk@pd95146e9.dip0.t-ipconnect.de) (Ping timeout: 245 seconds) |
| 12:02:33 | → | mulk joins (~mulk@pd95146e9.dip0.t-ipconnect.de) |
| 12:13:20 | → | xff0x joins (~xff0x@2405:6580:b080:900:833e:a4a2:2f15:5b32) |
| 12:24:03 | × | euleritian quits (~euleritia@dynamic-176-006-140-137.176.6.pool.telefonica.de) (Read error: Connection reset by peer) |
| 12:24:14 | → | euleritian joins (~euleritia@77.22.252.56) |
| 12:28:08 | → | sourcetarius joins (~sourcetar@user/sourcetarius) |
| 12:32:09 | × | visilii quits (~visilii@85.172.77.90) (Ping timeout: 260 seconds) |
| 12:35:48 | × | poscat0x04 quits (~poscat@user/poscat) (Ping timeout: 276 seconds) |
| 12:35:58 | <yin> | turns out record update syntax is weirder than i thought https://gitlab.haskell.org/ghc/ghc/-/issues/25456 |
| 12:43:22 | → | poscat joins (~poscat@user/poscat) |
| 12:43:27 | <yin> | i thought i got over my hate for record syntax... |
| 12:44:16 | <Rembane> | Welcome back yin! :/ |
| 12:45:06 | × | poscat quits (~poscat@user/poscat) (Client Quit) |
| 12:47:09 | → | poscat joins (~poscat@user/poscat) |
| 12:51:33 | × | mceresa quits (~mceresa@user/mceresa) (Read error: error:0A000119:SSL routines::decryption failed or bad record mac) |
| 12:52:04 | <yin> | philosophically, are records just a data structure that we give the compiler permission to optimize however it sees fit or is there something more to it? |
| 12:52:24 | <kqr> | Text.Printf does not come with an instance for Text. When I poke around I see some suggestions to use Data.Text.Format instead. Is this actually preferred? I find very little comparison online. The use case is not large templating but creating a Show instance for a custom numeric type – so I'm hesitant to reach for something that's not in base. |
| 12:53:22 | <Rembane> | yin: IIRC it's syntactic sugar for not having to write out all the access functions and save functions for a datatype. |
| 12:54:13 | × | poscat quits (~poscat@user/poscat) (Quit: Bye) |
| 12:54:21 | → | alexherbo2 joins (~alexherbo@2a02-8440-3309-f88a-dc43-ac5e-6a5b-79bd.rev.sfr.net) |
| 12:56:39 | <yin> | Rembane: yes but how is their structure implemented internally? |
| 12:56:57 | → | poscat joins (~poscat@user/poscat) |
| 12:57:06 | → | BolzmannPain joins (~BolzmannP@user/BolzmannPain) |
| 12:57:13 | <opqdonut> | I wouldn't expect using or not using record syntax to affect the runtime characteristics |
| 12:57:39 | <opqdonut> | but I have no idea what GHC actually does |
| 12:57:45 | <Rembane> | yin: As product types plus some functions. Like the `data` types with many arguments without the record stuff. |
| 12:57:57 | <Leary> | yin: It's a matter of interface, not representation. With regular product types, you only have positional notation for manipulating contained values. Records just let you specify them with names instead. |
| 12:59:04 | → | ih1d joins (~ih1d@24.139.109.18) |
| 13:00:21 | × | ih1d quits (~ih1d@24.139.109.18) (Client Quit) |
| 13:01:14 | <yin> | i guess i'm thinking about the performance of product types in general comparing to, say, HashMap |
| 13:01:38 | → | ash3en joins (~Thunderbi@2a03:7846:b6eb:101:93ac:a90a:da67:f207) |
| 13:03:14 | <yin> | maybe i abuse record updating |
| 13:07:14 | × | BolzmannPain quits (~BolzmannP@user/BolzmannPain) (Quit: Client closed) |
| 13:08:19 | → | mceresa joins (~mceresa@user/mceresa) |
| 13:08:31 | × | manwithluck quits (manwithluc@gateway/vpn/protonvpn/manwithluck) (Remote host closed the connection) |
| 13:13:27 | → | manwithluck joins (manwithluc@gateway/vpn/protonvpn/manwithluck) |
| 13:13:49 | → | rvalue- joins (~rvalue@user/rvalue) |
| 13:14:29 | × | rvalue quits (~rvalue@user/rvalue) (Ping timeout: 248 seconds) |
| 13:16:06 | × | ash3en quits (~Thunderbi@2a03:7846:b6eb:101:93ac:a90a:da67:f207) (Ping timeout: 276 seconds) |
| 13:21:43 | rvalue- | is now known as rvalue |
| 13:27:50 | × | Smiles quits (uid551636@id-551636.lymington.irccloud.com) (Quit: Connection closed for inactivity) |
| 13:29:02 | × | sand-witch quits (~m-mzmz6l@vmi833741.contaboserver.net) (Remote host closed the connection) |
| 13:30:39 | × | hughjfchen quits (~hughjfche@vmi556545.contaboserver.net) (Ping timeout: 260 seconds) |
| 13:33:00 | → | sand-witch joins (~m-mzmz6l@vmi833741.contaboserver.net) |
| 13:33:37 | × | L29Ah quits (~L29Ah@wikipedia/L29Ah) (Ping timeout: 248 seconds) |
| 13:34:48 | × | weary-traveler quits (~user@user/user363627) (Remote host closed the connection) |
| 13:36:48 | × | euleritian quits (~euleritia@77.22.252.56) (Ping timeout: 252 seconds) |
| 13:37:41 | → | euleritian joins (~euleritia@dynamic-176-006-140-137.176.6.pool.telefonica.de) |
| 13:38:27 | × | sourcetarius quits (~sourcetar@user/sourcetarius) (Quit: sourcetarius) |
| 13:38:58 | → | hughjfchen joins (~hughjfche@vmi556545.contaboserver.net) |
| 13:46:47 | × | euleritian quits (~euleritia@dynamic-176-006-140-137.176.6.pool.telefonica.de) (Ping timeout: 255 seconds) |
| 13:47:33 | → | euleritian joins (~euleritia@dynamic-176-007-148-106.176.7.pool.telefonica.de) |
| 13:50:05 | × | euleritian quits (~euleritia@dynamic-176-007-148-106.176.7.pool.telefonica.de) (Read error: Connection reset by peer) |
| 13:50:23 | → | euleritian joins (~euleritia@77.22.252.56) |
| 13:50:37 | Awoobis | is now known as gAy_Dragon |
| 13:51:41 | → | dontdieych2 joins (~quassel@user/dontdieych2) |
| 13:51:55 | → | dontdieych2_ joins (~quassel@user/dontdieych2) |
| 13:54:34 | × | dontdieych2 quits (~quassel@user/dontdieych2) (Client Quit) |
| 13:54:58 | × | dontdieych2_ quits (~quassel@user/dontdieych2) (Client Quit) |
| 13:55:34 | → | user363627 joins (~user@user/user363627) |
| 13:56:06 | user363627 | is now known as weary-traveler |
| 13:56:35 | × | tromp quits (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl) (Quit: My iMac has gone to sleep. ZZZzzz…) |
| 13:56:55 | → | dontdieych2 joins (~quassel@user/dontdieych2) |
| 13:58:51 | × | dontdieych2 quits (~quassel@user/dontdieych2) (Client Quit) |
| 14:01:05 | → | emfrom joins (~emfrom@37.170.21.237) |
| 14:01:34 | <yin> | maybe not |
| 14:05:59 | <Rembane> | yin: How are you using records? |
| 14:10:08 | × | ubert quits (~Thunderbi@178.165.164.236.wireless.dyn.drei.com) (Quit: ubert) |
| 14:10:30 | → | ubert joins (~Thunderbi@178.165.164.236.wireless.dyn.drei.com) |
| 14:10:57 | → | Digitteknohippie joins (~user@user/digit) |
| 14:11:10 | × | Digit quits (~user@user/digit) (Ping timeout: 252 seconds) |
| 14:13:33 | <yin> | i think my MO is passing state around as a huge record with all the "global" variables |
| 14:14:07 | × | sord937 quits (~sord937@gateway/tor-sasl/sord937) (Remote host closed the connection) |
| 14:14:31 | → | sord937 joins (~sord937@gateway/tor-sasl/sord937) |
| 14:14:54 | × | emfrom quits (~emfrom@37.170.21.237) (Remote host closed the connection) |
| 14:17:18 | Digitteknohippie | is now known as Digit |
| 14:17:38 | <yin> | state that gets updated many times a second. stuff like this: `... = (step st { μ = Play , θ = now (θ st) }) { μ = Pause }` |
| 14:19:14 | × | alexherbo2 quits (~alexherbo@2a02-8440-3309-f88a-dc43-ac5e-6a5b-79bd.rev.sfr.net) (Remote host closed the connection) |
| 14:19:33 | → | alexherbo2 joins (~alexherbo@2a02-8440-3309-f88a-dc43-ac5e-6a5b-79bd.rev.sfr.net) |
| 14:19:34 | <yin> | (weird example that was just right in front of me) (also i try to avoid optics like the plague) |
| 14:20:19 | → | JuanDaugherty joins (~juan@user/JuanDaugherty) |
| 14:24:33 | → | Smiles joins (uid551636@id-551636.lymington.irccloud.com) |
| 14:25:21 | → | tromp joins (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl) |
| 14:26:12 | <Rembane> | yin: That sounds reasonable. Have you checked out some of the language extensions that were created to make records a byt more ergonomic? |
| 14:26:31 | → | L29Ah joins (~L29Ah@wikipedia/L29Ah) |
| 14:28:05 | <yin> | such as? |
| 14:28:18 | × | euleritian quits (~euleritia@77.22.252.56) (Ping timeout: 245 seconds) |
| 14:28:33 | → | euleritian joins (~euleritia@dynamic-176-007-148-106.176.7.pool.telefonica.de) |
| 14:28:51 | <yin> | i recently started using pattern synonyms, but just because the use case *really* asked for it, not because i like it |
| 14:28:59 | × | JuanDaugherty quits (~juan@user/JuanDaugherty) (Quit: JuanDaugherty) |
| 14:31:48 | → | ft joins (~ft@p4fc2a216.dip0.t-ipconnect.de) |
| 14:33:12 | → | notzmv joins (~daniel@user/notzmv) |
| 14:34:46 | <Rembane> | yin: These: https://ghc.gitlab.haskell.org/ghc/doc/users_guide/exts/records.html |
| 14:37:00 | → | ljdarj1 joins (~Thunderbi@user/ljdarj) |
| 14:38:25 | → | longlongdouble joins (~longlongd@2405:201:5c16:135:1989:242:cab1:419a) |
| 14:38:45 | × | ubert quits (~Thunderbi@178.165.164.236.wireless.dyn.drei.com) (Ping timeout: 246 seconds) |
| 14:40:14 | × | ljdarj quits (~Thunderbi@user/ljdarj) (Ping timeout: 244 seconds) |
| 14:40:14 | ljdarj1 | is now known as ljdarj |
| 14:57:13 | × | enikar quits (~enikar@user/enikar) (Quit: WeeChat 3.0) |
| 14:57:37 | → | enikar joins (~enikar@user/enikar) |
| 15:00:27 | × | tromp quits (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl) (Quit: My iMac has gone to sleep. ZZZzzz…) |
| 15:01:28 | → | tromp joins (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl) |
| 15:05:23 | × | alexherbo2 quits (~alexherbo@2a02-8440-3309-f88a-dc43-ac5e-6a5b-79bd.rev.sfr.net) (Remote host closed the connection) |
| 15:07:10 | <merijn> | kqr: I mean, Printf is kinda yikes, so I would definitely avoid that |
| 15:07:37 | × | son0p quits (~ff@186.121.30.70) (Ping timeout: 244 seconds) |
| 15:08:18 | <merijn> | kqr: ah, wait, custom numeric types suggest what you *really* want is "convert number to string with control over decimals, etc." yes? |
| 15:09:28 | <merijn> | kqr: Which suggest what you really want might be in base's Numeric module :) |
| 15:12:17 | <merijn> | yin: Why avoid optics like the plague? |
| 15:15:48 | → | ash3en joins (~Thunderbi@2a03:7846:b6eb:101:93ac:a90a:da67:f207) |
| 15:15:57 | × | ash3en quits (~Thunderbi@2a03:7846:b6eb:101:93ac:a90a:da67:f207) (Client Quit) |
| 15:25:00 | → | Square2 joins (~Square@user/square) |
| 15:28:14 | → | willscripted joins (~willscrip@72.85.164.116) |
| 15:30:39 | × | lxsameer quits (~lxsameer@Serene/lxsameer) (Ping timeout: 260 seconds) |
| 15:34:01 | × | willscripted quits (~willscrip@72.85.164.116) (Changing host) |
| 15:34:01 | → | willscripted joins (~willscrip@user/willscripted) |
| 15:46:22 | → | misterfish joins (~misterfis@84.53.85.146) |
| 15:55:09 | × | misterfish quits (~misterfis@84.53.85.146) (Ping timeout: 244 seconds) |
| 15:55:56 | × | tromp quits (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl) (Quit: My iMac has gone to sleep. ZZZzzz…) |
| 16:00:50 | × | GdeVolpiano quits (~GdeVolpia@user/GdeVolpiano) (Quit: WeeChat 4.4.2) |
| 16:05:08 | → | JuanDaugherty joins (~juan@user/JuanDaugherty) |
| 16:06:04 | × | lortabac quits (~lortabac@2a01:e0a:541:b8f0:55ab:e185:7f81:54a4) (Quit: WeeChat 4.4.2) |
| 16:12:33 | → | willx joins (~willscrip@72.85.164.116) |
| 16:13:52 | × | willx quits (~willscrip@72.85.164.116) (Changing host) |
| 16:13:52 | → | willx joins (~willscrip@user/willscripted) |
| 16:14:07 | → | GdeVolpiano joins (~GdeVolpia@user/GdeVolpiano) |
| 16:15:27 | × | JuanDaugherty quits (~juan@user/JuanDaugherty) (Quit: JuanDaugherty) |
| 16:15:56 | → | tromp joins (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl) |
| 16:16:58 | × | willx quits (~willscrip@user/willscripted) (Client Quit) |
| 16:17:51 | → | rachelambda joins (~rachelamb@cust-95-80-25-71.csbnet.se) |
| 16:19:38 | <yin> | merijn: i could write a dozen paragraphs about it but it all comes down to personal stylistic preferences (mostly) |
| 16:21:38 | <merijn> | I mean, I rarely use optics, but sometimes they just make things infinitely easier :) |
| 16:26:26 | × | merijn quits (~merijn@128-137-045-062.dynamic.caiway.nl) (Ping timeout: 248 seconds) |
| 16:27:24 | → | merijn joins (~merijn@128-137-045-062.dynamic.caiway.nl) |
| 16:31:19 | × | L29Ah quits (~L29Ah@wikipedia/L29Ah) (Ping timeout: 260 seconds) |
| 16:32:03 | <haskellbridge> | <Bowuigi> yin "mostly" implies that you have non-stylistic arguments too, what are they? |
| 16:32:16 | → | user363627 joins (~user@user/user363627) |
| 16:32:20 | × | merijn quits (~merijn@128-137-045-062.dynamic.caiway.nl) (Ping timeout: 252 seconds) |
| 16:34:32 | × | willscripted quits (~willscrip@user/willscripted) (Quit: Client closed) |
| 16:35:25 | → | willscripted joins (~willscrip@user/willscripted) |
| 16:36:22 | × | weary-traveler quits (~user@user/user363627) (Ping timeout: 252 seconds) |
| 16:41:06 | → | lxsameer joins (~lxsameer@Serene/lxsameer) |
| 16:42:11 | × | willscripted quits (~willscrip@user/willscripted) (Quit: willscripted) |
| 16:42:21 | × | user363627 quits (~user@user/user363627) (Quit: Konversation terminated!) |
| 16:43:09 | → | merijn joins (~merijn@128-137-045-062.dynamic.caiway.nl) |
| 16:45:56 | → | willscripted joins (~willscrip@user/willscripted) |
| 16:46:22 | × | willscripted quits (~willscrip@user/willscripted) (Client Quit) |
| 16:46:41 | → | willscripted joins (~willscrip@user/willscripted) |
| 16:46:47 | <yin> | apart from introducing complexity, hard to reason about performance penalties and arguably inevitably leaky abstractions, which i guess you can say still belongs to the realm of stylistic preference, i think it goes against one of the main reasons why *I* choose to use Haskell, which is managing complexity and making things more maintainable (for some definition of maintainable) |
| 16:47:52 | <EvanR> | leaky abstractions? in optics? |
| 16:48:28 | <EvanR> | I guess I heard of this or that "lens that's not a true lens" or something |
| 16:49:57 | × | willscripted quits (~willscrip@user/willscripted) (Client Quit) |
| 16:49:59 | × | merijn quits (~merijn@128-137-045-062.dynamic.caiway.nl) (Ping timeout: 260 seconds) |
| 16:50:15 | → | willscripted joins (~willscrip@user/willscripted) |
| 16:51:46 | <yin> | that starts getting into the dozen paragraphs i can't commit to writing right now |
| 16:53:02 | × | euleritian quits (~euleritia@dynamic-176-007-148-106.176.7.pool.telefonica.de) (Read error: Connection reset by peer) |
| 16:53:20 | → | euleritian joins (~euleritia@77.22.252.56) |
| 16:53:33 | <yin> | i think that if i get myself into a place where optics would make thing easier, it's because i'm doing something wrong. structured the program the wrong way or something like that |
| 16:53:53 | <yin> | but i completely accept that people find it useful |
| 16:54:16 | <EvanR> | leaky abstractions is just a strong relatively verifiable claim |
| 16:54:27 | <haskellbridge> | <magic_rb> I need help with parsing, ive been banging my head against this one for far too long, ive the following simple DSL https://paste.tomsmeding.com/s7OHAeBW and while i can parse "("people" -> tags)" i cannot parse "("bar" -> tags) || ("foo" -> tags)" and i for the life of me cannot figure out why |
| 16:54:51 | <EvanR> | nested quotation marks? |
| 16:55:11 | <EvanR> | sounds tricky |
| 16:55:14 | <haskellbridge> | <magic_rb> uh, my bridge may have screwed it up, ignore the out ones |
| 16:55:18 | <geekosaur> | yin, I think optics or not is more of a stylistic choice. and Haskell is not Python with its "there is only One True Way" mentality |
| 16:55:27 | <haskellbridge> | <magic_rb> ("bar" -> tags) || ("foo" -> tags) like that |
| 16:55:49 | <EvanR> | are -> and || operators with precedence |
| 16:56:01 | <EvanR> | or not because parens required |
| 16:56:13 | <haskellbridge> | <magic_rb> i have no idea how to do that, i now assume that parens are gonna be there |
| 16:56:25 | <EvanR> | ok then ignore me |
| 16:56:40 | <haskellbridge> | <magic_rb> its just: between (symbol "(") (symbol ")") parseOp <|> parseOpEqual <|> parseOpNot <|> parseOpIn <|> parseOpOr <|> parseOpAnd |
| 16:59:40 | <EvanR> | magic_rb is it that your have too many "space" in your parser for parseOpIn and symbol... |
| 17:00:17 | <EvanR> | kind of hard to follow the logic at that level |
| 17:00:29 | <haskellbridge> | <magic_rb> Left (ParseErrorBundle {bundleErrors = TrivialError 17 (Just (Tokens ('|' :| ""))) (fromList [Label ('w' :| "hite space"),EndOfInput]) :| [], bundlePosState = PosState {pstateInput = "("bar" -> tags ) || ("foo" -> tags )", pstateOffset = 0, pstateSourcePos = SourcePos {sourceName = "", sourceLine = Pos 1, sourceColumn = Pos 1}, pstateTabWidth = Pos 8, pstateLinePrefix = ""}}) |
| 17:00:35 | <haskellbridge> | <magic_rb> thats the failure |
| 17:00:50 | <haskellbridge> | <magic_rb> and 17 is the first | char |
| 17:01:11 | → | merijn joins (~merijn@128-137-045-062.dynamic.caiway.nl) |
| 17:01:14 | <EvanR> | there's gotta be a human readable version of that error |
| 17:02:46 | <haskellbridge> | <sm> Yes megaparsec can give a very pretty version |
| 17:02:54 | <EvanR> | but if it fails on the first or second | character the problem must be something to do with the "or" expression parser |
| 17:03:21 | <EvanR> | does `symbol "||"` do what you think it does |
| 17:03:37 | <haskellbridge> | <magic_rb> sm: im trying to figure out that now |
| 17:03:39 | <EvanR> | and is space being consumed at the end of each construction properly |
| 17:04:07 | <tomsmeding> | megaparsec doesn't backtrack unless you tell it to |
| 17:04:28 | <tomsmeding> | magic_rb: your parser is going to see the '(' which makes the first alternative of parseOp happy, so you recurse into parseOp |
| 17:04:46 | <tomsmeding> | then it tries the 'between' again which fails, but it makes progress in parseOpEqual by parsing `"bar"` |
| 17:04:51 | × | tromp quits (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl) (Quit: My iMac has gone to sleep. ZZZzzz…) |
| 17:05:00 | <tomsmeding> | so then it expects `==` but it gets something else (namely `||`) and it bails out |
| 17:05:15 | <tomsmeding> | wrap `try` around the parse* alternatives in your <|> sequence in parseOp |
| 17:05:58 | <mauke> | shouldn't the between "(" ")" parser be listed last? |
| 17:06:15 | → | user363627 joins (~user@user/user363627) |
| 17:06:21 | <tomsmeding> | mauke: why? |
| 17:06:26 | <haskellbridge> | <magic_rb> if i do that it gets into an infinite loop (putting it last) |
| 17:06:29 | × | merijn quits (~merijn@128-137-045-062.dynamic.caiway.nl) (Ping timeout: 260 seconds) |
| 17:06:39 | <haskellbridge> | <sm> Also use megaparsec’s dbg to see what’s happening |
| 17:06:43 | × | kuribas quits (~user@ip-188-118-57-242.reverse.destiny.be) (Quit: ERC (IRC client for Emacs 27.1)) |
| 17:06:55 | <tomsmeding> | magic_rb: yes because you also have left recursion |
| 17:07:04 | <mauke> | ok, I might have misunderstood the structure of the parser ... right |
| 17:07:11 | <haskellbridge> | <magic_rb> im so lost lmao |
| 17:07:22 | <tomsmeding> | parseOpOr starts by parsing parseOp, so if the between, parseOpEqual, parseOpNot and parseOpIn parsers fail, then you're going to loop parseOp -> parseOpOr -> parseOp -> parseOpOr -> ... |
| 17:07:36 | <tomsmeding> | this is called "left recursion" in a grammar |
| 17:08:44 | <tomsmeding> | magic_rb: this doesn't use a parser library, it does things manually, but it's a nice intro into multiple precedence levels (* goes before +, etc.) and how to handle them in a parser |
| 17:09:10 | <EvanR> | since parens are required you don't have to know anything about precedence but you do need to avoid left recursion |
| 17:09:39 | <tomsmeding> | that hfm article cheats out by parsing all operators as right-associative (i.e. `a + b + c` means `a + (b + c)`, not `(a + b) + c`), which avoids the left-recursion problem |
| 17:09:43 | × | acidjnk quits (~acidjnk@p200300d6e7283f561805fdf183b39650.dip0.t-ipconnect.de) (Ping timeout: 264 seconds) |
| 17:09:52 | <tomsmeding> | but I suspect the same cheating solution would work for you too |
| 17:09:52 | <EvanR> | did you link something |
| 17:10:02 | <tomsmeding> | did I not? oh |
| 17:10:04 | <tomsmeding> | http://learn.hfm.io/expressions.html |
| 17:10:24 | <haskellbridge> | <sm> Thank you EvanR 😅 |
| 17:11:14 | <haskellbridge> | <magic_rb> ok ill read that thing over the weekend and come back to my thing after it... i did not anticipate parsing being so difficult |
| 17:11:58 | <EvanR> | i.e. (a == tags) || (c -> tags) || (e -> tags) can get away with not associating or precedencing |
| 17:12:29 | <mauke> | left recursion is basically just a function unconditionally calling itself |
| 17:12:37 | <mauke> | which obviously cannot terminate |
| 17:12:39 | <EvanR> | and these operators except for == seem to make no sense when chained xD |
| 17:12:45 | <EvanR> | er except for || |
| 17:12:55 | × | vpan quits (~vpan@212.117.1.172) (Quit: Leaving.) |
| 17:13:03 | <EvanR> | (ignore for the moment we chain -> in haskell and potentially == in C) |
| 17:14:17 | <EvanR> | magic_rb, your language seems pretty straightforward, it's probably just a small bug somewhere |
| 17:14:30 | <tomsmeding> | I think there are two bugs: missing 'try', and left recursion |
| 17:14:50 | <haskellbridge> | <magic_rb> i have try |
| 17:15:16 | <tomsmeding> | magic_rb: your parser for `||` wants an op on both sides |
| 17:15:17 | <haskellbridge> | <magic_rb> https://paste.tomsmeding.com/hq0SOVbH |
| 17:15:20 | <tomsmeding> | that isn't going to work |
| 17:15:42 | <tomsmeding> | because you're already parsing an op, and when you're at the beginning of parseOpOr you don't know yet if there will be a `||` coming |
| 17:15:42 | <EvanR> | something like, term = try p1 <|> try p2 <|> try p3 <|> try p4, if any of those might test more than 1 character before failing |
| 17:16:21 | <haskellbridge> | <magic_rb> tomsmeding: ok so what do i do to make it work :) |
| 17:16:31 | <tomsmeding> | magic_rb: I think the 'try' around the between parser is technically unnecessary because megaparsec does backtrack if the very first primitive parser in a branch fails, and `symbol` does only one primitive thing |
| 17:16:58 | → | merijn joins (~merijn@128-137-045-062.dynamic.caiway.nl) |
| 17:17:06 | <tomsmeding> | magic_rb: honestly the easiest is to make some precedence levels |
| 17:17:16 | <tomsmeding> | like in arithmetic, you have +,- and */= |
| 17:17:20 | <tomsmeding> | er, *,/ |
| 17:17:20 | <haskellbridge> | <magic_rb> because i could probably parse this manually, as in tokenize the thing and then hammer it into a tree. I wanted to do megaparsec tho |
| 17:17:20 | → | ubert joins (~Thunderbi@178.165.164.236.wireless.dyn.drei.com) |
| 17:17:34 | <haskellbridge> | <magic_rb> tomsmeding: okay, yeah sure, how do i do that in megaparsec :) |
| 17:17:44 | <tomsmeding> | make one function for each precedence level |
| 17:18:05 | <mauke> | wasn't there a precedence parser generator somewhere? |
| 17:18:05 | <haskellbridge> | <magic_rb> ah so split "parseOp" into multiple levels |
| 17:18:35 | <tomsmeding> | e.g. in arithmetic, make parsePlusMinus, parseTimesDivide, parseAtom; parsePlusMinus first calls parseTimesDivide to get the a non-`+-` thing, then it tries + or - |
| 17:18:36 | <EvanR> | are we just ignoring the information that there will only ever be (a op b), two things parenthesized |
| 17:18:44 | <tomsmeding> | EvanR: that's irrelevant |
| 17:18:51 | → | son0p joins (~ff@186.115.69.167) |
| 17:18:53 | <EvanR> | sure it will still work but be unnecessary |
| 17:19:16 | <tomsmeding> | if you want every single binary op to be parenthesised, you're just saying "I have two precedence levels: operators and parentheses" |
| 17:19:20 | <EvanR> | by seeing if the first character is ( or " you know what to do |
| 17:19:22 | <tomsmeding> | you still need to put parentheses in a separate thing |
| 17:19:41 | <tomsmeding> | because otherwise what is the parser going to do if it sees "a && b || c" |
| 17:19:45 | <EvanR> | recurse or begin a binary term |
| 17:19:48 | <tomsmeding> | sure, it's invalid, but currently it'll loop |
| 17:20:07 | <EvanR> | got it, ignoring the information about there only ever being (a op b) |
| 17:20:10 | <tomsmeding> | the very easiest version is to require _every_ binary operation to be wrapped in parentheses |
| 17:20:17 | <tomsmeding> | including the top level |
| 17:20:17 | <EvanR> | that's what I said |
| 17:20:22 | <EvanR> | no |
| 17:20:23 | <tomsmeding> | but then you still have two functions! |
| 17:20:37 | <tomsmeding> | parseParenthesised, which calls out to parseOp which does the <|> chain |
| 17:20:43 | <tomsmeding> | which calls parseParenthesised again |
| 17:21:00 | <EvanR> | as long as you don't have an infinite series of ((((((... that's fine |
| 17:21:08 | <tomsmeding> | if you then want parentheses at the top level to be optional, you can start with parseParenthesised <|> parseOp at the top level |
| 17:21:14 | × | ljdarj quits (~Thunderbi@user/ljdarj) (Ping timeout: 265 seconds) |
| 17:21:16 | <tomsmeding> | EvanR: how would the parser look then :p |
| 17:21:38 | <EvanR> | I think they just need try around several choices in the <|> chain |
| 17:21:48 | <tomsmeding> | EvanR: they already have that, now there's left recursion |
| 17:21:53 | <tomsmeding> | in || and in && |
| 17:21:53 | <haskellbridge> | <magic_rb> ^ |
| 17:22:17 | <EvanR> | not in the version I'm seeing |
| 17:22:23 | <tomsmeding> | they posted a new paste |
| 17:22:26 | <tomsmeding> | https://paste.tomsmeding.com/hq0SOVbH |
| 17:22:44 | <EvanR> | that's not doing direct left recursion it tests for ( first |
| 17:22:58 | <EvanR> | it can fail before recursing |
| 17:23:04 | <mauke> | that's only half the code |
| 17:23:14 | <mauke> | I suspect mutual recursion |
| 17:23:15 | <tomsmeding> | okay so for `a || b`, the first character is not ( |
| 17:23:29 | <haskellbridge> | <magic_rb> https://paste.tomsmeding.com/wsx4oGSc so now have that, how exactly does that get me anywhere |
| 17:23:29 | <tomsmeding> | so then it enters, at some point, parseOpOr, because the previous ones fail |
| 17:23:35 | <tomsmeding> | then it recurses to parseOp immediately |
| 17:23:37 | <tomsmeding> | this is left recursion |
| 17:24:01 | <EvanR> | the structure is a bit weird, this is supposedly "parse operator expression, parseOp" but it's try to parse a "primary" (parenthesized expression) |
| 17:24:08 | <tomsmeding> | magic_rb: what is the top level? |
| 17:24:10 | <EvanR> | which is something else |
| 17:24:23 | <haskellbridge> | <magic_rb> tomsmeding: i dont have that yet, not sure what is it supposed to be |
| 17:24:38 | <mauke> | https://markkarpov.com/tutorial/megaparsec.html#parsing-expressions |
| 17:24:47 | <mauke> | has anyone mentioned this yet? |
| 17:25:05 | <tomsmeding> | that's cheating, that uses buildExpressionParser :p |
| 17:25:26 | <tomsmeding> | uh, makeExprParser (it's called buildExpressionParser in parsec) |
| 17:25:29 | <EvanR> | sorry, I brought that up first but, but since it's just (a op b), it's overkill |
| 17:25:48 | <EvanR> | but I see that might be wrong because you can do term || term || term || term |
| 17:25:54 | <mauke> | works, though |
| 17:26:02 | <haskellbridge> | <magic_rb> (and i think id like to know how to do it myself, because im completely lost right now) |
| 17:26:15 | <haskellbridge> | <magic_rb> mauke: if i cared about what works only i wouldnt be writing haskell :) |
| 17:26:33 | × | merijn quits (~merijn@128-137-045-062.dynamic.caiway.nl) (Ping timeout: 265 seconds) |
| 17:26:54 | <tomsmeding> | magic_rb: is it `==` and `->` are at the same level, they go before `&&`, and `&&` goes before `||`? |
| 17:26:59 | <EvanR> | the classic way is to divide the term language into primary expression and operator expression, and (...) is a primary not an operator |
| 17:27:50 | <EvanR> | so those two kinds of expression correspond with 2 parsers |
| 17:27:53 | <haskellbridge> | <magic_rb> tomsmeding: uh, ive no clue, ive confused myself beyond reason. Ill pick this up later, i gotta run anyway |
| 17:28:14 | <haskellbridge> | <magic_rb> thanks everyone for trying to help me :) |
| 17:28:30 | <EvanR> | I confused myself by try to dumb down the language xD |
| 17:28:43 | <EvanR> | without chaining different operators |
| 17:28:48 | <haskellbridge> | <sm> hello, I am once again urging you to insert dbg or at least trace calls in every parse step so you can see operationally what is happening, it’s very difficult to mentally debug parser combinators |
| 17:28:56 | <haskellbridge> | <sm> :) |
| 17:29:15 | <haskellbridge> | <magic_rb> will do, after i figure out how to actually use that :) and read it :) |
| 17:29:37 | <haskellbridge> | <sm> 👍 |
| 17:29:49 | <haskellbridge> | <magic_rb> tom asked me what bound tighter and my brains response was "uh, && before || yes" |
| 17:30:05 | <haskellbridge> | <magic_rb> i think im done for now 😂, thanks again |
| 17:30:08 | <mauke> | the traditional way to do rec-descent infix expressions is to have a hierarchy of expression parsers. like expr3 = do { expr2; op "+"; expr3 }; expr2 = do { expr1; op "*"; expr 2 }; expr1 = do { expr0; op "**"; expr1 } expr0 = between "(" ")" expr3 <|> term |
| 17:30:37 | <haskellbridge> | <magic_rb> wouldnt that mean you cant have "(4 + 3) + 2"? |
| 17:30:53 | <haskellbridge> | <sm> You are worthy opponent, parser combinators, but they shall return ✊ |
| 17:31:07 | <mauke> | no, that would work fine |
| 17:31:27 | <mauke> | we start in expr3 (the top level) |
| 17:32:26 | <mauke> | then we immediately climb down the hierarchy to expr0, which consumes the leading "(" |
| 17:33:11 | <mauke> | then we try expr3 again. (current call stack: expr3 -> expr2 -> expr1 -> expr0 -> between -> expr3) |
| 17:33:53 | <mauke> | the inner instance of expr3 climbs down the hierarchy again, but this time there is no "(" to be consumed, so expr0 tries term |
| 17:34:00 | <mauke> | which presumably successfully consumes 4 |
| 17:34:01 | <EvanR> | so basically, try "(" term ")" last |
| 17:34:42 | <mauke> | then we return all the way back up the hierarchy, trying all operators in turn (and failing), until we arrive at expr3 again and op "+" succeeds |
| 17:35:20 | <mauke> | then expr3 calls itself (because for simplicity, all of my operators are right associative) |
| 17:35:34 | → | briandaed joins (~root@185.234.210.211) |
| 17:35:47 | <mauke> | which adds another round of expr3 -> expr2 -> expr1 -> expr0 -> term, where we consume 3 |
| 17:36:13 | → | wootehfoot joins (~wootehfoo@user/wootehfoot) |
| 17:36:34 | <mauke> | on the way back up, no operator parser succeeds in consuming ")", so expr3 returns back into 'between' |
| 17:36:47 | <mauke> | which does consume ")" |
| 17:36:48 | × | wootehfoot quits (~wootehfoo@user/wootehfoot) (Max SendQ exceeded) |
| 17:37:10 | → | merijn joins (~merijn@128-137-045-062.dynamic.caiway.nl) |
| 17:37:42 | → | wootehfoot joins (~wootehfoo@user/wootehfoot) |
| 17:38:05 | → | tromp joins (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl) |
| 17:38:07 | <mauke> | btw, call stack at the point where we consume "3": expr3 -> expr2 -> expr1 -> expr0 -> between -> expr3 -> expr3 -> expr2 -> expr1 -> expr0 -> term |
| 17:39:08 | <mauke> | after "3": expr3 -> expr2 -> expr1 -> expr0 -> between |
| 17:39:52 | <mauke> | so when 'between' consumes ")", we return back up the expr hierarchy and try all the possible operators on the way up |
| 17:40:12 | → | acidjnk joins (~acidjnk@p200300d6e7283f5628026389afde3b8f.dip0.t-ipconnect.de) |
| 17:40:19 | <mauke> | which only succeeds at the top level, with expr3 -> op "+", because the next symbol is a "+" |
| 17:41:06 | <mauke> | for the final "2", we basically do the same thing again: expr3 -> expr3 -> expr2 -> expr1 -> expr0 -> term |
| 17:41:21 | <mauke> | (two expr3 at the start because after seeing "+", expr3 calls itself) |
| 17:42:09 | × | merijn quits (~merijn@128-137-045-062.dynamic.caiway.nl) (Ping timeout: 248 seconds) |
| 17:42:59 | → | econo_ joins (uid147250@id-147250.tinside.irccloud.com) |
| 17:43:01 | <mauke> | (I hope at least some of this made some sense) |
| 17:45:35 | <EvanR> | *parsing made easy* xD |
| 17:47:14 | → | Sgeo joins (~Sgeo@user/sgeo) |
| 17:48:34 | → | shapr joins (~user@4.30.215.226) |
| 17:50:44 | × | longlongdouble quits (~longlongd@2405:201:5c16:135:1989:242:cab1:419a) (Remote host closed the connection) |
| 17:52:22 | <haskellbridge> | <magic_rb> mauke i kind of get what youre saying. But ill have to bang my head against it some more to actually make sense of it |
| 17:52:56 | → | merijn joins (~merijn@128-137-045-062.dynamic.caiway.nl) |
| 17:53:30 | → | longlongdouble joins (~longlongd@2405:201:5c16:135:1989:242:cab1:419a) |
| 17:54:05 | → | misterfish joins (~misterfis@84.53.85.146) |
| 17:57:53 | × | merijn quits (~merijn@128-137-045-062.dynamic.caiway.nl) (Ping timeout: 255 seconds) |
| 18:04:19 | × | tromp quits (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl) (Quit: My iMac has gone to sleep. ZZZzzz…) |
| 18:08:06 | → | Unicorn_Princess joins (~Unicorn_P@user/Unicorn-Princess/x-3540542) |
| 18:08:20 | × | sord937 quits (~sord937@gateway/tor-sasl/sord937) (Quit: sord937) |
| 18:08:23 | × | chele quits (~chele@user/chele) (Remote host closed the connection) |
| 18:08:44 | → | merijn joins (~merijn@128-137-045-062.dynamic.caiway.nl) |
| 18:09:19 | × | xdminsy quits (~xdminsy@117.147.71.147) (Read error: Connection reset by peer) |
| 18:13:38 | × | merijn quits (~merijn@128-137-045-062.dynamic.caiway.nl) (Ping timeout: 248 seconds) |
| 18:14:35 | → | tzh joins (~tzh@c-76-115-131-146.hsd1.or.comcast.net) |
| 18:19:41 | × | mud quits (~mud@user/kadoban) (Quit: quit) |
| 18:22:51 | → | mud joins (~mud@user/kadoban) |
| 18:23:18 | → | merijn joins (~merijn@128-137-045-062.dynamic.caiway.nl) |
| 18:24:57 | × | pointlessslippe1 quits (~pointless@62.106.85.17) (Read error: Connection reset by peer) |
| 18:25:46 | × | longlongdouble quits (~longlongd@2405:201:5c16:135:1989:242:cab1:419a) (Remote host closed the connection) |
| 18:28:08 | → | longlongdouble joins (~longlongd@2405:201:5c16:135:1989:242:cab1:419a) |
| 18:30:01 | × | merijn quits (~merijn@128-137-045-062.dynamic.caiway.nl) (Ping timeout: 252 seconds) |
| 18:30:03 | × | longlongdouble quits (~longlongd@2405:201:5c16:135:1989:242:cab1:419a) (Remote host closed the connection) |
| 18:30:18 | → | pointlessslippe1 joins (~pointless@62.106.85.17) |
| 18:37:54 | × | misterfish quits (~misterfis@84.53.85.146) (Ping timeout: 260 seconds) |
| 18:39:56 | × | AWizzArd quits (~code@user/awizzard) (Ping timeout: 252 seconds) |
| 18:40:03 | → | AWizzArd joins (~code@gehrels.uberspace.de) |
| 18:40:18 | × | noctux quits (~noctux@user/noctux) (Ping timeout: 252 seconds) |
| 18:40:21 | × | shapr quits (~user@4.30.215.226) (Quit: walk home) |
| 18:41:20 | → | merijn joins (~merijn@128-137-045-062.dynamic.caiway.nl) |
| 18:41:49 | → | longlongdouble joins (~longlongd@2405:201:5c16:135:1989:242:cab1:419a) |
| 18:42:27 | × | pavonia quits (~user@user/siracusa) (Quit: Bye!) |
| 18:42:33 | → | Tuplanolla joins (~Tuplanoll@91-159-69-59.elisa-laajakaista.fi) |
| 18:42:58 | → | noctux joins (~noctux@user/noctux) |
| 18:45:53 | <kqr> | merijn, Numeric looks good for what I need. Thanks! |
| 18:46:39 | × | merijn quits (~merijn@128-137-045-062.dynamic.caiway.nl) (Ping timeout: 260 seconds) |
| 18:46:41 | × | longlongdouble quits (~longlongd@2405:201:5c16:135:1989:242:cab1:419a) (Read error: Connection reset by peer) |
| 18:47:01 | → | longlongdouble joins (~longlongd@169.150.196.101) |
| 18:50:41 | × | longlongdouble quits (~longlongd@169.150.196.101) (Remote host closed the connection) |
| 18:51:12 | × | user363627 quits (~user@user/user363627) (Quit: Konversation terminated!) |
| 18:51:13 | <famubu> | I was looking at the wikipedia page for monad in category theory: https://en.wikipedia.org/wiki/Monad_(category_theory)#Formal_definition |
| 18:51:16 | <famubu> | The commutative diagram and properties mention both `T ηand `η T`. |
| 18:51:19 | <famubu> | What is the difference between the two? |
| 18:51:31 | <famubu> | I could understand `η T` part. It does the 'opposite' of flattening. |
| 18:51:35 | <famubu> | is a functor. That means it's like a function whose 'argument' is a category, right? And `η` is a natural transformation, not a category. |
| 18:51:49 | <famubu> | * `T` is a functor. |
| 18:51:56 | <famubu> | I am not that familiar with category theory. |
| 18:56:51 | <tomsmeding> | famubu: a functor from C to C' consists of a mapping from Ob C to Ob C' and a mapping from the arrows in C to the arrows in C' |
| 18:57:09 | → | longlongdouble joins (~longlongd@169.150.196.101) |
| 18:57:56 | <tomsmeding> | if you have a natural transformation between two functors T1 and T2, and a functor T, then you can build a natural transformation from T . T1 to T . T2 |
| 18:58:10 | <tomsmeding> | they denote that by applying T to the natural transformation |
| 18:58:37 | <tomsmeding> | see e.g. the third commutative diagram: you have mu_X on the bottom arrow, and T(mu_X) on the top arrow |
| 18:58:51 | <tomsmeding> | the difference is that the source and target of T(mu_X) have an additional T() around them |
| 18:59:51 | → | merijn joins (~merijn@128-137-045-062.dynamic.caiway.nl) |
| 19:00:09 | <tomsmeding> | I'm not sure what I just said is correct |
| 19:00:18 | <tomsmeding> | perhaps wait until someone like ncf comes along lol |
| 19:03:09 | <ncf> | famubu: those are whiskerings |
| 19:03:29 | <ncf> | also called horizontal compositions: https://en.wikipedia.org/wiki/Natural_transformation#Operations_with_natural_transformations |
| 19:04:06 | <ncf> | in haskell, Tη is fmap @T pure, while ηT is pure @(T a) |
| 19:04:30 | × | merijn quits (~merijn@128-137-045-062.dynamic.caiway.nl) (Ping timeout: 252 seconds) |
| 19:04:40 | → | shapr joins (~user@2601:19c:417e:5434:6d2c:aeb2:81b3:3df4) |
| 19:05:10 | <ncf> | or pure @T @(T a) |
| 19:06:05 | <famubu> | Okay, looks like I got a few terms to look up. Thanks. Had seen horizonatal composition mentioned in the wikipedia article. Reading nlab now. |
| 19:06:06 | <ncf> | ah, https://en.wikipedia.org/wiki/Natural_transformation#Whiskering |
| 19:07:03 | × | longlongdouble quits (~longlongd@169.150.196.101) (Ping timeout: 245 seconds) |
| 19:07:43 | <kqr> | Hm. I'm looking at doing some validation in an Attoparsec parser and I want to fail the parse if the validation fails – ideally with a value of some custom error type. I feel like I have done this before but I cannot for the life of me figure out how I did it now. |
| 19:11:15 | <kaol> | ExceptT is one option. |
| 19:11:41 | <kqr> | Hm. I'd hoped I could hook into the parser monad itself, but maybe it doesn't support failure in the way I think of it? |
| 19:11:50 | <tomsmeding> | it has `fail` if you're okay with strings |
| 19:12:57 | <tomsmeding> | and the type that `fail` uses in the parser monad looks pretty monomorphically String |
| 19:13:19 | <geekosaur> | afaik `fail` itself requires it? |
| 19:13:43 | <tomsmeding> | "requires"? |
| 19:13:57 | <geekosaur> | https://downloads.haskell.org/ghc/latest/docs/libraries/base-4.20.0.0-1f57/Control-Monad-Fail.html#v:fail |
| 19:14:09 | <geekosaur> | `fail :: String -> m a` |
| 19:14:16 | <tomsmeding> | sure, but the Parser monad doesn't support anything more general than String |
| 19:14:17 | <kaol> | Are you sure you didn't do it with megaparsec the last time? It has more knobs including type variable for the error type. |
| 19:14:19 | <tomsmeding> | is what I meant |
| 19:15:14 | → | merijn joins (~merijn@128-137-045-062.dynamic.caiway.nl) |
| 19:17:50 | × | Smiles quits (uid551636@id-551636.lymington.irccloud.com) (Quit: Connection closed for inactivity) |
| 19:20:17 | × | merijn quits (~merijn@128-137-045-062.dynamic.caiway.nl) (Ping timeout: 248 seconds) |
| 19:24:37 | → | tromp joins (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl) |
| 19:28:37 | → | JuanDaugherty joins (~juan@user/JuanDaugherty) |
| 19:29:58 | → | user363627 joins (~user@user/user363627) |
| 19:31:01 | → | merijn joins (~merijn@128-137-045-062.dynamic.caiway.nl) |
| 19:32:01 | → | peterbecich joins (~Thunderbi@syn-047-229-123-186.res.spectrum.com) |
| 19:34:25 | <darkling> | I are Beard. |
| 19:34:33 | <darkling> | *Beered. |
| 19:36:02 | × | merijn quits (~merijn@128-137-045-062.dynamic.caiway.nl) (Ping timeout: 252 seconds) |
| 19:40:04 | → | Smiles joins (uid551636@id-551636.lymington.irccloud.com) |
| 19:45:34 | <EvanR> | .oO( parse don't validate ? ) |
| 19:46:49 | → | merijn joins (~merijn@128-137-045-062.dynamic.caiway.nl) |
| 19:46:55 | → | alexherbo2 joins (~alexherbo@2a02-8440-3200-3777-6c66-54b5-7b86-7066.rev.sfr.net) |
| 19:47:11 | → | misterfish joins (~misterfis@84.53.85.146) |
| 19:47:54 | × | JuanDaugherty quits (~juan@user/JuanDaugherty) (Quit: JuanDaugherty) |
| 19:49:10 | <darkling> | -ECHANNEL |
| 19:49:12 | <darkling> | Sorry. |
| 19:49:42 | <briandaed> | no need to sorry |
| 19:50:01 | <yin> | is there a better way to write ` f x | Pattern <- g x , y <- g x = h y ; ...` ? |
| 19:50:38 | <geekosaur> | use an as-pattern? |
| 19:50:56 | <yin> | p@Pattern ? |
| 19:50:59 | <geekosaur> | `| y@Pattern <- g x = …` |
| 19:51:07 | <yin> | nice, that works. ty |
| 19:51:13 | <geekosaur> | with parens around `Pattern` as needed |
| 19:51:30 | <mauke> | f (g -> y@Pattern) = |
| 19:51:37 | <yin> | makes sense. i'm still getting used to patterns |
| 19:51:48 | × | merijn quits (~merijn@128-137-045-062.dynamic.caiway.nl) (Ping timeout: 252 seconds) |
| 19:56:23 | × | alexherbo2 quits (~alexherbo@2a02-8440-3200-3777-6c66-54b5-7b86-7066.rev.sfr.net) (Remote host closed the connection) |
| 19:56:42 | → | alexherbo2 joins (~alexherbo@2a02-8440-3200-3777-6c66-54b5-7b86-7066.rev.sfr.net) |
| 20:00:01 | × | caconym quits (~caconym@user/caconym) (Quit: bye) |
| 20:00:40 | → | caconym joins (~caconym@user/caconym) |
| 20:02:21 | × | peterbecich quits (~Thunderbi@syn-047-229-123-186.res.spectrum.com) (Ping timeout: 252 seconds) |
| 20:02:37 | → | merijn joins (~merijn@128-137-045-062.dynamic.caiway.nl) |
| 20:07:45 | × | merijn quits (~merijn@128-137-045-062.dynamic.caiway.nl) (Ping timeout: 248 seconds) |
| 20:07:55 | <shapr> | I use Nix and I switch GHC and cabal versions between projects, I think that's the cause of this warning? Warning: Parsing the index cache failed (Data.Binary.Get.runGet at position 16: Non-matching structured hashes: |
| 20:08:37 | <shapr> | Is there a 'fix' ? Maybe Cabal can save an index cache per version? |
| 20:10:22 | × | tromp quits (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl) (Quit: My iMac has gone to sleep. ZZZzzz…) |
| 20:11:24 | <briandaed> | https://github.com/haskell/cabal/issues/6659 |
| 20:13:22 | <shapr> | briandaed: thanks! |
| 20:15:31 | → | tromp joins (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl) |
| 20:15:34 | → | L29Ah joins (~L29Ah@wikipedia/L29Ah) |
| 20:18:24 | → | merijn joins (~merijn@128-137-045-062.dynamic.caiway.nl) |
| 20:18:26 | × | Natch quits (~natch@c-92-34-7-158.bbcust.telenor.se) (Read error: Connection reset by peer) |
| 20:19:17 | → | peterbecich joins (~Thunderbi@syn-047-229-123-186.res.spectrum.com) |
| 20:19:19 | <yin> | what about `f x | y@Pattern { z = minBound } = ...` ? |
| 20:19:32 | <yin> | is there an ergonomic way of achieving this? |
| 20:20:21 | <yin> | sorry i mean |
| 20:20:35 | <yin> | f x | y@Pattern { z = minBound } <- g x = ... |
| 20:21:01 | <tomsmeding> | yin: you mean matching on a constant instead of a constructor? |
| 20:21:11 | <tomsmeding> | patterns don't allow thus, use a separate guard |
| 20:21:16 | <tomsmeding> | *this |
| 20:21:45 | <tomsmeding> | | y@Pattern { z = zval } <- g x, zval == minBound = ... |
| 20:22:00 | <tomsmeding> | or | y <- g x, z y == minBound = ... |
| 20:22:37 | <tomsmeding> | if you want to get funky you can also `| y@Pattern { z = ((== minBound) -> True) } <- g x = ...` using ViewPatterns but... perhaps don't :D |
| 20:23:20 | × | merijn quits (~merijn@128-137-045-062.dynamic.caiway.nl) (Ping timeout: 252 seconds) |
| 20:34:12 | → | merijn joins (~merijn@128-137-045-062.dynamic.caiway.nl) |
| 20:34:53 | <sm> | @where+ stack-ghcup https://www.haskell.org/ghcup/guide/#stack-integration |
| 20:34:53 | <lambdabot> | Done. |
| 20:35:26 | <sm> | briandaed your nick is breaking my brain :) |
| 20:37:16 | <briandaed> | I stole it from someone probably, not sure from whom |
| 20:38:17 | <yin> | tomsmeding: ty. i'm trying to avoid funkyness |
| 20:38:45 | <yin> | just restructured everything so i don't have to match any of that |
| 20:38:48 | × | merijn quits (~merijn@128-137-045-062.dynamic.caiway.nl) (Ping timeout: 244 seconds) |
| 20:50:01 | → | merijn joins (~merijn@128-137-045-062.dynamic.caiway.nl) |
| 20:53:48 | × | haskellbridge quits (~hackager@syn-024-093-192-219.res.spectrum.com) (Remote host closed the connection) |
| 20:54:37 | → | haskellbridge joins (~hackager@syn-024-093-192-219.res.spectrum.com) |
| 20:54:37 | ChanServ | sets mode +v haskellbridge |
| 20:55:09 | × | merijn quits (~merijn@128-137-045-062.dynamic.caiway.nl) (Ping timeout: 260 seconds) |
| 20:56:28 | → | merijn joins (~merijn@128-137-045-062.dynamic.caiway.nl) |
| 21:01:06 | × | merijn quits (~merijn@128-137-045-062.dynamic.caiway.nl) (Ping timeout: 252 seconds) |
| 21:05:44 | <hololeap> | % :t Node |
| 21:05:44 | <yahb2> | <interactive>:1:1: error: [GHC-88464] ; Data constructor not in scope: Node |
| 21:05:55 | <hololeap> | % import Data.Tree |
| 21:05:55 | <yahb2> | <no output> |
| 21:05:57 | <hololeap> | % :t Node |
| 21:05:57 | <yahb2> | Node :: a -> [Tree a] -> Tree a |
| 21:08:20 | <hololeap> | could (toList :: Tree a -> [a]) be considered a forgetful functor? |
| 21:11:32 | × | briandaed quits (~root@185.234.210.211) (Remote host closed the connection) |
| 21:12:10 | → | merijn joins (~merijn@128-137-045-062.dynamic.caiway.nl) |
| 21:14:20 | → | machinedgod joins (~machinedg@d108-173-18-100.abhsia.telus.net) |
| 21:16:15 | <SrPx> | is it not possible to import a static string into a haskell executable? |
| 21:16:19 | <SrPx> | at compile time |
| 21:16:31 | <tomsmeding> | SrPx: https://hackage.haskell.org/package/file-embed |
| 21:16:38 | <SrPx> | ty |
| 21:17:14 | × | merijn quits (~merijn@128-137-045-062.dynamic.caiway.nl) (Ping timeout: 252 seconds) |
| 21:20:39 | × | misterfish quits (~misterfis@84.53.85.146) (Ping timeout: 260 seconds) |
| 21:21:50 | <geekosaur> | or the mechanism that uses, which is via TH |
| 21:26:46 | × | peterbecich quits (~Thunderbi@syn-047-229-123-186.res.spectrum.com) (Ping timeout: 252 seconds) |
| 21:27:58 | → | merijn joins (~merijn@128-137-045-062.dynamic.caiway.nl) |
| 21:28:29 | × | lxsameer quits (~lxsameer@Serene/lxsameer) (Ping timeout: 255 seconds) |
| 21:28:57 | × | famubu quits (~famubu@14.139.174.50) (Ping timeout: 246 seconds) |
| 21:32:54 | × | merijn quits (~merijn@128-137-045-062.dynamic.caiway.nl) (Ping timeout: 260 seconds) |
| 21:34:21 | → | visilii joins (~visilii@85.172.77.90) |
| 21:37:10 | → | yvan-sraka joins (uid419690@id-419690.lymington.irccloud.com) |
| 21:43:45 | → | merijn joins (~merijn@128-137-045-062.dynamic.caiway.nl) |
| 21:44:38 | benjaminl | is now known as olivial |
| 21:50:36 | × | merijn quits (~merijn@128-137-045-062.dynamic.caiway.nl) (Ping timeout: 252 seconds) |
| 21:59:02 | → | weary-traveler joins (~user@user/user363627) |
| 21:59:14 | → | ljdarj joins (~Thunderbi@user/ljdarj) |
| 22:01:48 | → | merijn joins (~merijn@128-137-045-062.dynamic.caiway.nl) |
| 22:02:32 | × | user363627 quits (~user@user/user363627) (Ping timeout: 265 seconds) |
| 22:06:44 | × | merijn quits (~merijn@128-137-045-062.dynamic.caiway.nl) (Ping timeout: 252 seconds) |
| 22:13:43 | → | Everything joins (~Everythin@178-133-144-57.mobile.vf-ua.net) |
| 22:17:21 | → | sprotte24 joins (~sprotte24@p200300d16f0bb9000907ce5a9cbe4fad.dip0.t-ipconnect.de) |
| 22:17:35 | → | merijn joins (~merijn@128-137-045-062.dynamic.caiway.nl) |
| 22:17:47 | × | michalz quits (~michalz@185.246.207.217) (Remote host closed the connection) |
| 22:18:20 | <jle`> | is there any way to get cabal to be explicit about its -isystem includes when building c? it doesn't seem to include the c standard headers or c++ ones either when doing c++ |
| 22:18:37 | <jle`> | it builds fine but i'm triyng to use bear to generate compile_commands.json |
| 22:18:42 | <jle`> | i wonder if this is a ghc thing or a cabal thing ... |
| 22:19:28 | <geekosaur> | neither, `-isystem` should usually not be touched and I'm pretty sure neither cabal nor ghc does |
| 22:19:56 | → | Natch joins (~natch@c-92-34-7-158.bbcust.telenor.se) |
| 22:20:04 | <geekosaur> | unless cross-compiling, which ghc is poor at and cabal more or less doesn't support as yet |
| 22:21:27 | <geekosaur> | (both would have to know way too much about the machine they're building on to generate them themselves) |
| 22:22:09 | <geekosaur> | ghc in particular hands as much as possible off to the C compiler to figure out |
| 22:22:29 | × | merijn quits (~merijn@128-137-045-062.dynamic.caiway.nl) (Ping timeout: 252 seconds) |
| 22:23:21 | <monochrom> | Oh hey jle` I read your free applicative article (found via HWN) and the related free alternative article. Very interesting! |
| 22:23:48 | <darkling> | Does ghc actually transpile to C, or does it just use some part of the back-end of a C compiler? (code generation and ASM-level optimisations, say?) |
| 22:24:04 | <geekosaur> | ghc hasn't transpiled to C since 7.2 |
| 22:24:16 | <monochrom> | GHC no longer goes through C. It goes to asm or llvm. |
| 22:24:35 | <geekosaur> | FFI export stubs and C stubs for CApiFFI go through the C compiler, though |
| 22:24:44 | <darkling> | Glad to hear it. (I'm old enough to remember cfront for C++). :) |
| 22:24:51 | <monochrom> | me too |
| 22:24:58 | <jle`> | monochrom: thanks! appreciate it, it was fun to write :) |
| 22:25:10 | <geekosaur> | and linking is done via the C compiler so ghc doesn;t have to know the location of system libraries or how exactly you link the C RTS into a program |
| 22:25:35 | <jle`> | ah yeah i am specifically talking about FFI |
| 22:25:52 | <jle`> | geekosaur: ah that makes sense. it lets gcc/g++ handle where to find implicit system libraries |
| 22:25:57 | × | takuan quits (~takuan@178-116-218-225.access.telenet.be) (Remote host closed the connection) |
| 22:26:03 | <geekosaur> | and includes, which is your problem |
| 22:26:05 | <monochrom> | It was a simpler time. Then again, I could not bring 100 CDs worth of music with me back then, now any smartphone can do it. |
| 22:26:23 | <darkling> | Linking, I'm happy to hand off. ASM-level optimisation from some abstract machine-code representation, likewise. But I wouldn't describe either of those as "C compiler". |
| 22:26:30 | <geekosaur> | (in particular, C++ includes on Debian/Ubuntu will depend on which version of the C++ includes/libraries are active) |
| 22:26:54 | <jle`> | hm. yeah, i was thinking, Cmake has its CMAKE_CXX_IMPLICIT_INCLUDE_DIRECTORIES option but that's because it actually does handle locating system libs |
| 22:27:16 | <geekosaur> | your best bet is to use gcc -v to get them from the C compiler |
| 22:27:31 | <jle`> | ah yeah then i can't use bear -- cabal build unfortunately |
| 22:27:51 | <jle`> | i noticed it does incude -isystem to the extra-libs: items, maybe i could hack into that somehow |
| 22:33:22 | → | merijn joins (~merijn@128-137-045-062.dynamic.caiway.nl) |
| 22:35:54 | → | robobub joins (uid248673@id-248673.uxbridge.irccloud.com) |
| 22:38:09 | × | merijn quits (~merijn@128-137-045-062.dynamic.caiway.nl) (Ping timeout: 244 seconds) |
| 22:38:14 | <yin> | i added a git sourced package to my project's dependencies. how can i ask cabal to get update it? (i made some changes to the remote package) |
| 22:38:52 | → | ph88 joins (~ph88@2a02:8109:9e26:c800:b98:f687:dbac:9c4b) |
| 22:39:26 | <yin> | do i have to `cabal clean` completely? |
| 22:39:42 | <geekosaur> | generally dependencies of that variety are pinned, and it's up to you to determine compatibility of new commits and update the pin appropriately |
| 22:40:30 | <geekosaur> | if you insist on circumventing this (say, by pinning the HEAD of a branch), yes, you need `cabal clean` because this is not how it expects to work |
| 22:44:48 | <geekosaur> | (git submodules also don't work the way you want) |
| 22:48:31 | × | gorignak quits (~gorignak@user/gorignak) (Quit: quit) |
| 22:49:05 | × | Smiles quits (uid551636@id-551636.lymington.irccloud.com) (Quit: Connection closed for inactivity) |
| 22:49:15 | → | merijn joins (~merijn@128-137-045-062.dynamic.caiway.nl) |
| 22:49:24 | × | Tuplanolla quits (~Tuplanoll@91-159-69-59.elisa-laajakaista.fi) (Quit: Leaving.) |
| 22:51:50 | <yin> | right |
| 22:53:17 | × | tromp quits (~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl) (Quit: My iMac has gone to sleep. ZZZzzz…) |
| 22:54:02 | × | merijn quits (~merijn@128-137-045-062.dynamic.caiway.nl) (Ping timeout: 252 seconds) |
| 22:54:25 | <yin> | what about hls? |
| 22:58:03 | <geekosaur> | what about it? it doesn't care about such things, it defers them to cabal/stack |
| 22:58:25 | <yin> | no, i solved it |
| 22:58:44 | <yin> | had to clear ~/.cache/hie-bios/myproject-* |
| 22:59:42 | <yin> | i'll to things the right way from now on |
| 23:00:22 | <yin> | don't quote me on that |
| 23:01:56 | <geekosaur> | sadly I don't know of a good way to clean the HIE cache. I recently nuked mine completely and started over because it became confused about my switching branches in my ghc checkout |
| 23:02:28 | × | kaskal quits (~kaskal@213-147-165-220.nat.highway.webapn.at) (Ping timeout: 252 seconds) |
| 23:05:01 | → | merijn joins (~merijn@128-137-045-062.dynamic.caiway.nl) |
| 23:09:41 | → | emfrom joins (~emfrom@37.168.24.65) |
| 23:09:48 | × | merijn quits (~merijn@128-137-045-062.dynamic.caiway.nl) (Ping timeout: 252 seconds) |
| 23:20:50 | → | merijn joins (~merijn@128-137-045-062.dynamic.caiway.nl) |
| 23:27:45 | × | merijn quits (~merijn@128-137-045-062.dynamic.caiway.nl) (Ping timeout: 252 seconds) |
| 23:29:06 | → | kaskal joins (~kaskal@213-147-165-220.nat.highway.webapn.at) |
| 23:32:54 | × | alexherbo2 quits (~alexherbo@2a02-8440-3200-3777-6c66-54b5-7b86-7066.rev.sfr.net) (Remote host closed the connection) |
| 23:35:48 | → | sw4n joins (~sw4n@2605:59c0:40f0:9610:756d:bb84:d4bb:9b76) |
| 23:37:28 | × | sw4n quits (~sw4n@2605:59c0:40f0:9610:756d:bb84:d4bb:9b76) (Remote host closed the connection) |
| 23:38:54 | → | merijn joins (~merijn@128-137-045-062.dynamic.caiway.nl) |
| 23:42:34 | × | forell_ quits (~forell@host-178-216-90-220.sta.tvknaszapraca.pl) (Ping timeout: 260 seconds) |
| 23:43:45 | × | merijn quits (~merijn@128-137-045-062.dynamic.caiway.nl) (Ping timeout: 248 seconds) |
| 23:46:53 | × | yvan-sraka quits (uid419690@id-419690.lymington.irccloud.com) (Quit: Connection closed for inactivity) |
| 23:48:24 | × | acidjnk quits (~acidjnk@p200300d6e7283f5628026389afde3b8f.dip0.t-ipconnect.de) (Ping timeout: 252 seconds) |
| 23:54:41 | → | merijn joins (~merijn@128-137-045-062.dynamic.caiway.nl) |
| 23:54:50 | × | Everything quits (~Everythin@178-133-144-57.mobile.vf-ua.net) (Quit: leaving) |
| 23:59:16 | × | merijn quits (~merijn@128-137-045-062.dynamic.caiway.nl) (Ping timeout: 244 seconds) |
All times are in UTC on 2024-11-08.