2026/05/23

2026-05-23 00:00:49 +0000vetkat(~vetkat@user/vetkat) (Quit: So long, and thanks for all the fish)
2026-05-23 00:01:51 +0000vetkat(~vetkat@user/vetkat) vetkat
2026-05-23 00:03:26 +0000merijn(~merijn@62.45.136.136) merijn
2026-05-23 00:08:33 +0000merijn(~merijn@62.45.136.136) (Ping timeout: 250 seconds)
2026-05-23 00:19:13 +0000merijn(~merijn@host-cl.cgnat-g.v4.dfn.nl) merijn
2026-05-23 00:23:40 +0000merijn(~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 244 seconds)
2026-05-23 00:33:29 +0000DetourNe-(~DetourNet@user/DetourNetworkUK) DetourNetworkUK
2026-05-23 00:33:43 +0000DetourNetworkUK(~DetourNet@user/DetourNetworkUK) (Read error: Connection reset by peer)
2026-05-23 00:34:51 +0000merijn(~merijn@host-cl.cgnat-g.v4.dfn.nl) merijn
2026-05-23 00:35:43 +0000DetourNe-DetourNetworkUK
2026-05-23 00:40:09 +0000merijn(~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 272 seconds)
2026-05-23 00:41:43 +0000peterbecich(~Thunderbi@71.84.33.135) peterbecich
2026-05-23 00:45:06 +0000myxos(~myxos@67-1-178-42.tcso.qwest.net) (Ping timeout: 248 seconds)
2026-05-23 00:50:21 +0000merijn(~merijn@host-cl.cgnat-g.v4.dfn.nl) merijn
2026-05-23 00:55:28 +0000merijn(~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 265 seconds)
2026-05-23 01:05:32 +0000peterbecich(~Thunderbi@71.84.33.135) (Ping timeout: 240 seconds)
2026-05-23 01:06:08 +0000merijn(~merijn@host-cl.cgnat-g.v4.dfn.nl) merijn
2026-05-23 01:06:17 +0000myxos(~myxos@67-1-178-42.tcso.qwest.net) myxokephale
2026-05-23 01:08:36 +0000troojg(~troojg@user/troojg) troojg
2026-05-23 01:10:32 +0000merijn(~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 256 seconds)
2026-05-23 01:16:53 +0000foul_owl(~kerry@94.156.149.96) (Ping timeout: 272 seconds)
2026-05-23 01:17:47 +0000ncf(~ncf@monade.li) (Remote host closed the connection)
2026-05-23 01:21:32 +0000merijn(~merijn@host-cl.cgnat-g.v4.dfn.nl) merijn
2026-05-23 01:27:03 +0000ncf(~ncf@monade.li) ncf
2026-05-23 01:28:09 +0000merijn(~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 248 seconds)
2026-05-23 01:39:36 +0000merijn(~merijn@host-cl.cgnat-g.v4.dfn.nl) merijn
2026-05-23 01:44:46 +0000merijn(~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 265 seconds)
2026-05-23 01:52:24 +0000acidjnk_new3(~acidjnk@p200300d6e700e508282254f1e55c94a7.dip0.t-ipconnect.de) (Ping timeout: 245 seconds)
2026-05-23 01:53:00 +0000ncf(~ncf@monade.li) (Remote host closed the connection)
2026-05-23 01:54:13 +0000ncf(~ncf@monade.li) ncf
2026-05-23 01:55:23 +0000merijn(~merijn@host-cl.cgnat-g.v4.dfn.nl) merijn
2026-05-23 02:00:17 +0000merijn(~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 244 seconds)
2026-05-23 02:11:09 +0000merijn(~merijn@host-cl.cgnat-g.v4.dfn.nl) merijn
2026-05-23 02:12:57 +0000tremon(~tremon@83.80.159.219) tremon
2026-05-23 02:16:09 +0000merijn(~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 245 seconds)
2026-05-23 02:26:57 +0000merijn(~merijn@host-cl.cgnat-g.v4.dfn.nl) merijn
2026-05-23 02:27:35 +0000puke(~puke@014136001187.ctinets.com) (*.net *.split)
2026-05-23 02:27:58 +0000puke(~puke@014136001187.ctinets.com)
2026-05-23 02:32:16 +0000merijn(~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 251 seconds)
2026-05-23 02:35:15 +0000ricardomaps(~ricardoma@2804:14d:a040:81ea:a057:893f:21d0:8f42)
2026-05-23 02:36:39 +0000Eoco(~ian@128.101.131.218) Eoco
2026-05-23 02:38:02 +0000merijn(~merijn@host-cl.cgnat-g.v4.dfn.nl) merijn
2026-05-23 02:42:55 +0000merijn(~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 264 seconds)
2026-05-23 02:48:34 +0000xff0x(~xff0x@ai070051.d.east.v6connect.net) (Ping timeout: 265 seconds)
2026-05-23 02:51:19 +0000Inline(~noOne@ipservice-092-208-182-236.092.208.pools.vodafone-ip.de) (Ping timeout: 264 seconds)
2026-05-23 02:53:36 +0000merijn(~merijn@host-cl.cgnat-g.v4.dfn.nl) merijn
2026-05-23 02:54:20 +0000rainbyte(~rainbyte@181.47.219.3) (Quit: rainbyte)
2026-05-23 02:55:15 +0000ricardomaps(~ricardoma@2804:14d:a040:81ea:a057:893f:21d0:8f42) (Quit: ricardomaps)
2026-05-23 02:55:37 +0000xff0x(~xff0x@2405:6580:b080:900:31a:40c3:3c58:e32)
2026-05-23 02:58:03 +0000rainbyte(~rainbyte@181.47.219.3) rainbyte
2026-05-23 02:58:48 +0000merijn(~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 263 seconds)
2026-05-23 03:02:21 +0000emilym(~Thunderbi@user/emilym) emilym
2026-05-23 03:04:14 +0000fgarcia(~lei@user/fgarcia) fgarcia
2026-05-23 03:06:34 +0000emilym(~Thunderbi@user/emilym) (Ping timeout: 245 seconds)
2026-05-23 03:09:22 +0000merijn(~merijn@host-cl.cgnat-g.v4.dfn.nl) merijn
2026-05-23 03:10:06 +0000myxos(~myxos@67-1-178-42.tcso.qwest.net) (Ping timeout: 256 seconds)
2026-05-23 03:16:31 +0000merijn(~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 264 seconds)
2026-05-23 03:19:37 +0000bitdex(~bitdex@gateway/tor-sasl/bitdex) (Ping timeout: 252 seconds)
2026-05-23 03:24:42 +0000m(~travltux@user/travltux) (Quit: WeeChat 4.7.2)
2026-05-23 03:27:08 +0000m(~travltux@user/travltux) travltux
2026-05-23 03:27:32 +0000merijn(~merijn@host-cl.cgnat-g.v4.dfn.nl) merijn
2026-05-23 03:32:15 +0000merijn(~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 244 seconds)
2026-05-23 03:51:43 +0000myxos(~myxos@67-1-178-42.tcso.qwest.net) myxokephale
2026-05-23 04:03:25 +0000machinedgod(~machinedg@d172-219-48-230.abhsia.telus.net) (Remote host closed the connection)
2026-05-23 04:04:34 +0000humasect(~humasect@dyn-192-249-132-90.nexicom.net) humasect
2026-05-23 04:04:45 +0000machinedgod(~machinedg@172.219.48.230) machinedgod
2026-05-23 04:04:51 +0000machinedgod(~machinedg@172.219.48.230) (Client Quit)
2026-05-23 04:06:33 +0000troojg(~troojg@user/troojg) (Ping timeout: 248 seconds)
2026-05-23 04:15:22 +0000spew(~spew@user/spew) (Quit: nyaa~)
2026-05-23 04:25:32 +0000Jacqueline__(uid751191@id-751191.helmsley.irccloud.com)
2026-05-23 04:38:53 +0000merijn(~merijn@host-cl.cgnat-g.v4.dfn.nl) merijn
2026-05-23 04:43:47 +0000merijn(~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 252 seconds)
2026-05-23 04:54:37 +0000merijn(~merijn@host-cl.cgnat-g.v4.dfn.nl) merijn
2026-05-23 04:59:43 +0000merijn(~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 264 seconds)
2026-05-23 05:02:43 +0000takuan(~takuan@d8D86B9E9.access.telenet.be)
2026-05-23 05:10:26 +0000merijn(~merijn@host-cl.cgnat-g.v4.dfn.nl) merijn
2026-05-23 05:15:30 +0000merijn(~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 265 seconds)
2026-05-23 05:24:56 +0000euphores(~SASL_euph@user/euphores) (Quit: Leaving.)
2026-05-23 05:26:13 +0000merijn(~merijn@host-cl.cgnat-g.v4.dfn.nl) merijn
2026-05-23 05:29:25 +0000dibblego(~dibblego@haskell/developer/dibblego) (Ping timeout: 276 seconds)
2026-05-23 05:31:12 +0000merijn(~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 256 seconds)
2026-05-23 05:38:54 +0000euphores(~SASL_euph@user/euphores) euphores
2026-05-23 05:38:59 +0000dibblego(~dibblego@116.255.1.119)
2026-05-23 05:38:59 +0000dibblego(~dibblego@116.255.1.119) (Changing host)
2026-05-23 05:38:59 +0000dibblego(~dibblego@haskell/developer/dibblego) dibblego
2026-05-23 05:39:54 +0000merijn(~merijn@host-cl.cgnat-g.v4.dfn.nl) merijn
2026-05-23 05:43:48 +0000dibblego(~dibblego@haskell/developer/dibblego) (Ping timeout: 253 seconds)
2026-05-23 05:44:54 +0000tnt1(~Thunderbi@user/tnt1) tnt1
2026-05-23 05:46:49 +0000merijn(~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 248 seconds)
2026-05-23 05:47:40 +0000dibblego(~dibblego@116.255.1.119)
2026-05-23 05:47:40 +0000dibblego(~dibblego@116.255.1.119) (Changing host)
2026-05-23 05:47:40 +0000dibblego(~dibblego@haskell/developer/dibblego) dibblego
2026-05-23 05:49:04 +0000tnt1(~Thunderbi@user/tnt1) (Ping timeout: 245 seconds)
2026-05-23 05:51:35 +0000tnt1(~Thunderbi@user/tnt1) tnt1
2026-05-23 05:53:25 +0000haritz(~hrtz@user/haritz) (Quit: ZNC 1.8.2+deb3.1+deb12u1 - https://znc.in)
2026-05-23 05:57:57 +0000merijn(~merijn@host-cl.cgnat-g.v4.dfn.nl) merijn
2026-05-23 06:03:19 +0000merijn(~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 264 seconds)
2026-05-23 06:13:24 +0000dibblego(~dibblego@haskell/developer/dibblego) (Ping timeout: 263 seconds)
2026-05-23 06:13:45 +0000merijn(~merijn@host-cl.cgnat-g.v4.dfn.nl) merijn
2026-05-23 06:15:20 +0000dibblego(~dibblego@116-255-1-119.ip4.superloop.au)
2026-05-23 06:15:21 +0000dibblego(~dibblego@116-255-1-119.ip4.superloop.au) (Changing host)
2026-05-23 06:15:21 +0000dibblego(~dibblego@haskell/developer/dibblego) dibblego
2026-05-23 06:18:09 +0000merijn(~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 252 seconds)
2026-05-23 06:29:07 +0000merijn(~merijn@host-cl.cgnat-g.v4.dfn.nl) merijn
2026-05-23 06:34:11 +0000merijn(~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 272 seconds)
2026-05-23 06:40:53 +0000merijn(~merijn@host-cl.cgnat-g.v4.dfn.nl) merijn
2026-05-23 06:44:36 +0000metabulation(~wootehfoo@user/wootehfoot) (Quit: Leaving)
2026-05-23 06:45:18 +0000Jacqueline__(uid751191@id-751191.helmsley.irccloud.com) (Quit: Connection closed for inactivity)
2026-05-23 06:46:00 +0000merijn(~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 253 seconds)
2026-05-23 06:55:07 +0000ss4(~wootehfoo@user/wootehfoot) wootehfoot
2026-05-23 06:56:43 +0000merijn(~merijn@host-cl.cgnat-g.v4.dfn.nl) merijn
2026-05-23 07:01:27 +0000merijn(~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 245 seconds)
2026-05-23 07:12:29 +0000merijn(~merijn@host-cl.cgnat-g.v4.dfn.nl) merijn
2026-05-23 07:12:58 +0000Inline(~noOne@ipservice-092-208-182-236.092.208.pools.vodafone-ip.de) Inline
2026-05-23 07:17:17 +0000merijn(~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 253 seconds)
2026-05-23 07:20:07 +0000tnt1(~Thunderbi@user/tnt1) (Ping timeout: 264 seconds)
2026-05-23 07:22:56 +0000Googulator(~Googulato@84-236-52-41.pool.digikabel.hu) (Quit: Client closed)
2026-05-23 07:23:09 +0000Googulator(~Googulato@84-236-52-41.pool.digikabel.hu)
2026-05-23 07:27:44 +0000humasect(~humasect@dyn-192-249-132-90.nexicom.net) (Quit: Leaving...)
2026-05-23 07:28:22 +0000merijn(~merijn@host-cl.cgnat-g.v4.dfn.nl) merijn
2026-05-23 07:30:08 +0000poscat0x04(~poscat@user/poscat) (Remote host closed the connection)
2026-05-23 07:33:04 +0000poscat(~poscat@user/poscat) poscat
2026-05-23 07:35:14 +0000merijn(~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 248 seconds)
2026-05-23 07:40:22 +0000enoq(~enoq@2a05:1141:1fd:3b00:5934:e936:8f0a:3520) enoq
2026-05-23 07:41:57 +0000merijn(~merijn@host-cl.cgnat-g.v4.dfn.nl) merijn
2026-05-23 07:42:08 +0000 <enoq> been looking at kotlin conf talks and came across a value semantics talk; basically instead of lenses or deeply nested copies, the compiler takes care of that and is faster than writing mutating code by hand
2026-05-23 07:42:15 +0000tnt1(~Thunderbi@user/tnt1) tnt1
2026-05-23 07:42:35 +0000 <enoq> applied optimizations include flattening pointers
2026-05-23 07:43:03 +0000 <enoq> made me think: what if lenses were actually built into the compiler
2026-05-23 07:47:00 +0000merijn(~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 244 seconds)
2026-05-23 07:56:55 +0000tusko(~uwu@user/tusko) (Quit: Lost terminal)
2026-05-23 07:57:44 +0000merijn(~merijn@host-cl.cgnat-g.v4.dfn.nl) merijn
2026-05-23 07:58:34 +0000tnt1(~Thunderbi@user/tnt1) (Quit: tnt1)
2026-05-23 07:59:27 +0000tnt1(~Thunderbi@user/tnt1) tnt1
2026-05-23 08:02:44 +0000merijn(~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 265 seconds)
2026-05-23 08:07:11 +0000ss4wootehfoot
2026-05-23 08:14:15 +0000xff0x(~xff0x@2405:6580:b080:900:31a:40c3:3c58:e32) (Ping timeout: 272 seconds)
2026-05-23 08:14:31 +0000merijn(~merijn@host-cl.cgnat-g.v4.dfn.nl) merijn
2026-05-23 08:14:51 +0000xff0x(~xff0x@2405:6580:b080:900:dc8c:f72a:135a:db02)
2026-05-23 08:19:25 +0000tusko(~uwu@user/tusko) tusko
2026-05-23 08:19:31 +0000merijn(~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 264 seconds)
2026-05-23 08:21:57 +0000enoq(~enoq@2a05:1141:1fd:3b00:5934:e936:8f0a:3520) (Remote host closed the connection)
2026-05-23 08:29:54 +0000merijn(~merijn@host-cl.cgnat-g.v4.dfn.nl) merijn
2026-05-23 08:34:47 +0000merijn(~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 252 seconds)
2026-05-23 08:42:57 +0000merijn(~merijn@host-cl.cgnat-g.v4.dfn.nl) merijn
2026-05-23 08:44:41 +0000divlamir(~divlamir@user/divlamir) (Read error: Connection reset by peer)
2026-05-23 08:47:54 +0000merijn(~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 244 seconds)
2026-05-23 08:55:29 +0000Googulator(~Googulato@84-236-52-41.pool.digikabel.hu) (Quit: Client closed)
2026-05-23 08:55:44 +0000Googulator(~Googulato@84-236-52-41.pool.digikabel.hu)
2026-05-23 08:55:45 +0000divlamir(~divlamir@user/divlamir) divlamir
2026-05-23 08:58:03 +0000acidjnk_new3(~acidjnk@p200300d6e700e5081bf32954ce73307a.dip0.t-ipconnect.de)
2026-05-23 08:58:44 +0000merijn(~merijn@host-cl.cgnat-g.v4.dfn.nl) merijn
2026-05-23 09:00:33 +0000acidjnk_new(~acidjnk@p200300d6e700e570753f3d38cea48d7a.dip0.t-ipconnect.de)
2026-05-23 09:00:44 +0000tzh(~tzh@c-76-115-131-146.hsd1.or.comcast.net) (Quit: zzz)
2026-05-23 09:02:56 +0000emilym(~Thunderbi@user/emilym) emilym
2026-05-23 09:03:14 +0000acidjnk_new3(~acidjnk@p200300d6e700e5081bf32954ce73307a.dip0.t-ipconnect.de) (Ping timeout: 245 seconds)
2026-05-23 09:04:36 +0000merijn(~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 265 seconds)
2026-05-23 09:04:52 +0000jle`(~jle`@2603:8001:3b00:11::1fae) (Quit: WeeChat 4.8.1)
2026-05-23 09:06:59 +0000emilym(~Thunderbi@user/emilym) (Ping timeout: 245 seconds)
2026-05-23 09:08:21 +0000jle`(~jle`@23.240.67.73) jle`
2026-05-23 09:26:05 +0000marinelli(~weechat@gateway/tor-sasl/marinelli) (Quit: marinelli)
2026-05-23 09:39:29 +0000marinelli(~weechat@gateway/tor-sasl/marinelli) marinelli
2026-05-23 09:42:28 +0000target_i(~target_i@user/target-i/x-6023099) target_i
2026-05-23 09:43:58 +0000merijn(~merijn@host-cl.cgnat-g.v4.dfn.nl) merijn
2026-05-23 09:44:11 +0000karenw(~karenw@user/karenw) karenw
2026-05-23 09:48:39 +0000merijn(~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 245 seconds)
2026-05-23 09:55:31 +0000 <Rembane> Are the performance properties inherent to the lenses or could it also work to make the building blocks the lenses are made of that are already parts of the compiler have those optimizations?
2026-05-23 09:56:47 +0000 <jaror> I don't think it is specific to lenses. It is just in general in Haskell if you only update a small part of a large datastructure you still have to pay for reallocating the "spine"
2026-05-23 09:58:40 +0000 <jaror> Value semantics avoids this by giving each function a fresh copy of the whole value, so each function gets ownership of all its arguments and can freely mutate them.
2026-05-23 09:59:46 +0000merijn(~merijn@host-cl.cgnat-g.v4.dfn.nl) merijn
2026-05-23 10:00:05 +0000 <jaror> This copying has generally been considered too expensive in FP languages. Languages like Koka and Roc did experiment with a form of opportunistic mutation through reference counting.
2026-05-23 10:01:43 +0000DetourNetworkUK(~DetourNet@user/DetourNetworkUK) (Read error: Software caused connection abort)
2026-05-23 10:02:30 +0000DetourNetworkUK(~DetourNet@user/DetourNetworkUK) DetourNetworkUK
2026-05-23 10:04:24 +0000merijn(~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 244 seconds)
2026-05-23 10:04:52 +0000 <Rembane> Got it, this all seems very reasonable.
2026-05-23 10:05:21 +0000 <Rembane> It would be interesting to do some work on opportunistic mutation in Haskell.
2026-05-23 10:07:04 +0000 <Rembane> And since it is an intersting idea people have already done some work on it: https://www.microsoft.com/en-us/research/wp-content/uploads/2023/05/fbip.pdf
2026-05-23 10:09:51 +0000 <jaror> Yeah that seems like a promising approach
2026-05-23 10:15:33 +0000merijn(~merijn@host-cl.cgnat-g.v4.dfn.nl) merijn
2026-05-23 10:22:33 +0000merijn(~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 248 seconds)
2026-05-23 10:23:13 +0000 <jaror> I think laziness does make it quite a bit harder though
2026-05-23 10:26:07 +0000 <jaror> Also quite a restriction:
2026-05-23 10:26:08 +0000 <jaror> We enforce this in our calculus by only
2026-05-23 10:26:08 +0000 <jaror> allowing top-level functions (rather than arbitrary closures) as arguments in our fully in-place
2026-05-23 10:26:08 +0000 <jaror> calculus, effectively making it second-order.
2026-05-23 10:27:34 +0000karenw(~karenw@user/karenw) (Quit: Deep into that darkness peering...)
2026-05-23 10:32:57 +0000puke(~puke@014136001187.ctinets.com) (*.net *.split)
2026-05-23 10:33:21 +0000puke(~puke@014136001187.ctinets.com)
2026-05-23 10:33:37 +0000merijn(~merijn@host-cl.cgnat-g.v4.dfn.nl) merijn
2026-05-23 10:38:51 +0000merijn(~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 265 seconds)
2026-05-23 10:44:59 +0000merijn(~merijn@host-cl.cgnat-g.v4.dfn.nl) merijn
2026-05-23 10:50:04 +0000merijn(~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 270 seconds)
2026-05-23 10:50:08 +0000 <[exa]> jaror: does the vector-simple have any portability implications/improvements?
2026-05-23 10:50:27 +0000 <jaror> I'm not sure what portability problems there are with vector
2026-05-23 10:51:04 +0000 <jaror> vector-simple does use GHC's primops extensively
2026-05-23 10:51:04 +0000 <[exa]> I mean, not directly (you depend on GHC :D ) but would it be easier to implement the necessary compiler tooling for this in a hypothetical new compiler or so?
2026-05-23 10:51:59 +0000 <jaror> Yes I think it would be easier to adapt to other compilers
2026-05-23 10:52:07 +0000 <[exa]> anyway the package looks Ok to me, I'd recommend switching to completely 3rd-person narrative in the readme ("theirs" and "ours" vs "vector" and "vector-simple")
2026-05-23 10:52:36 +0000 <jaror> vector relies a lot of GHC's optimizations in addition to just the primops they use
2026-05-23 10:52:55 +0000 <jaror> s/a lot of/a lot on/
2026-05-23 10:53:49 +0000 <[exa]> also would be great if you could provide exact numbers on overhead (there's like 2+n words estimate written down now, would be great to have exact numbers in hand together with what actual `vector` overhead looks like)
2026-05-23 10:54:19 +0000 <jaror> 2+n should be exact
2026-05-23 10:54:36 +0000 <[exa]> "much faster to build from scratch" -- you mean rewrite by hand, or build with ghc?
2026-05-23 10:55:11 +0000 <[exa]> (btw apologies for a bit of reviewer mood here ^ :D it's good, there's just always so many tiny things to clarify)
2026-05-23 10:55:13 +0000 <jaror> build with ghc, perhaps "compile if not cached" is a better description
2026-05-23 10:55:35 +0000 <jaror> Yeah, I appreciate the feedback
2026-05-23 10:55:37 +0000 <[exa]> ah yes then write "compile" and perhaps point to lack of dependencies
2026-05-23 10:56:39 +0000 <[exa]> btw as far as I get it the main use-case for users is for programs that have lots of tiny vectors, right? I'd throw that into the main description.
2026-05-23 10:58:26 +0000 <jaror> I don't think that's specifically the main use case. I think this will be my go-to package for anything but the case where I need large mutable arrays.
2026-05-23 10:59:07 +0000 <[exa]> Rembane: re "performance properties of lenses" -- I somehow got the feeling that prolens exploited stuff inherent to compilers in a weird way ( (->) is a profunctor that is used there instead of Identity, thus it saves a level of wrapery over the plain (->) that ghc is very good at handling of). Thought it might be relevant to have a look there.
2026-05-23 10:59:09 +0000 <jaror> I now often use lists where I think I really should use vectors/arrays instead, but there is no lightweight simple array/vector package.
2026-05-23 10:59:45 +0000Sgeo(~Sgeo@user/sgeo) (Read error: Connection reset by peer)
2026-05-23 10:59:45 +0000 <int-e> Vector has, let me think, a tag, two indices, a length, a size, n indices, ceil(n/1024) extra words (assuming 8 byte words)
2026-05-23 11:00:31 +0000 <jaror> a length and a size?
2026-05-23 11:00:48 +0000 <[exa]> afaik as with reserve() from C
2026-05-23 11:00:56 +0000merijn(~merijn@host-cl.cgnat-g.v4.dfn.nl) merijn
2026-05-23 11:01:11 +0000 <int-e> wait, it's worse, isn't it? (Mutable)Array# can't be unpacked, so there's a pointer and another tag?
2026-05-23 11:01:43 +0000 <jaror> It's just:
2026-05-23 11:01:43 +0000 <jaror> data Vector a = Vector {-# UNPACK #-} !Int
2026-05-23 11:01:43 +0000 <jaror> {-# UNPACK #-} !Int
2026-05-23 11:01:43 +0000 <jaror> {-# UNPACK #-} !(Array a)
2026-05-23 11:02:16 +0000 <[exa]> that's the simple vector or the vector vector?
2026-05-23 11:02:34 +0000 <jaror> So two ints for the slicing and an unpacked `Array` which is just the length and the total size for the card table (indeed) and then n + ceil(n/1024)
2026-05-23 11:02:40 +0000 <jaror> that's the normal vector
2026-05-23 11:02:44 +0000 <int-e> Array is data Array a = Array { array#: Array# a } and Array# a has that size and length and elements and a card table
2026-05-23 11:03:03 +0000 <jaror> Oh, won't that be unpacked twice?
2026-05-23 11:03:38 +0000 <jaror> Yeah, I guess
2026-05-23 11:03:47 +0000 <int-e> No, for that it would have to be unpacked into the Array type. And that wouldn't work with the GC which treats Array# (= a frozen mutable array) specially.
2026-05-23 11:04:14 +0000 <jaror> You can unpack Array#, I believe
2026-05-23 11:04:24 +0000 <jaror> GHC is not warning me about it at least
2026-05-23 11:05:08 +0000 <int-e> That just means it doesn't explicitly hate the pragma. I don't think it *can* actually unpack it.
2026-05-23 11:05:17 +0000 <jaror> Oh annoying
2026-05-23 11:05:34 +0000 <jaror> I saw this old note and thought something must have happened by now: https://gitlab.haskell.org/ghc/ghc/-/wikis/unpacking-arrays
2026-05-23 11:05:43 +0000merijn(~merijn@host-cl.cgnat-g.v4.dfn.nl) (Ping timeout: 264 seconds)
2026-05-23 11:08:53 +0000 <jaror> I'm also now realizing that perhaps vector is not the best name since it seems to be more associated with dynamically resizable or at least slice-able arrays
2026-05-23 11:13:37 +0000Square(~Square@user/square) Square
2026-05-23 11:16:33 +0000merijn(~merijn@host-cl.cgnat-g.v4.dfn.nl) merijn
2026-05-23 11:17:52 +0000weary-traveler(~user@user/user363627) user363627