2025/09/16

2025-09-16 00:01:42 +0200AndreiDuma(~AndreiDum@user/AndreiDuma) AndreiDuma
2025-09-16 00:02:18 +0200peterbecich(~Thunderbi@syn-172-222-149-049.res.spectrum.com) (Ping timeout: 265 seconds)
2025-09-16 00:03:33 +0200merijn(~merijn@host-vr.cgnat-g.v4.dfn.nl) merijn
2025-09-16 00:08:38 +0200merijn(~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 256 seconds)
2025-09-16 00:10:53 +0200pavonia(~user@user/siracusa) siracusa
2025-09-16 00:13:34 +0200arandombit(~arandombi@user/arandombit) (Ping timeout: 260 seconds)
2025-09-16 00:15:00 +0200arandombit(~arandombi@user/arandombit) arandombit
2025-09-16 00:19:22 +0200merijn(~merijn@host-vr.cgnat-g.v4.dfn.nl) merijn
2025-09-16 00:19:29 +0200arandombit(~arandombi@user/arandombit) (Ping timeout: 248 seconds)
2025-09-16 00:19:31 +0200trickard_trickard
2025-09-16 00:20:38 +0200arandombit(~arandombi@user/arandombit) arandombit
2025-09-16 00:21:21 +0200AndreiDuma(~AndreiDum@user/AndreiDuma) (Ping timeout: 252 seconds)
2025-09-16 00:21:42 +0200Sgeo(~Sgeo@user/sgeo) Sgeo
2025-09-16 00:22:27 +0200emmanuelux(~emmanuelu@user/emmanuelux) emmanuelux
2025-09-16 00:24:38 +0200merijn(~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 260 seconds)
2025-09-16 00:25:09 +0200Alleria(~Alleria@user/alleria) (Remote host closed the connection)
2025-09-16 00:25:48 +0200arandombit(~arandombi@user/arandombit) (Ping timeout: 260 seconds)
2025-09-16 00:25:48 +0200Alleria(~Alleria@user/alleria) Alleria
2025-09-16 00:26:27 +0200arandombit(~arandombi@2603:7000:4600:ffbe:21ee:ceac:8353:7a15)
2025-09-16 00:26:27 +0200arandombit(~arandombi@2603:7000:4600:ffbe:21ee:ceac:8353:7a15) (Changing host)
2025-09-16 00:26:27 +0200arandombit(~arandombi@user/arandombit) arandombit
2025-09-16 00:28:39 +0200acidjnk(~acidjnk@p200300d6e717197300fd7e96ed6c05af.dip0.t-ipconnect.de) (Ping timeout: 250 seconds)
2025-09-16 00:29:01 +0200ljdarj(~Thunderbi@user/ljdarj) (Ping timeout: 255 seconds)
2025-09-16 00:30:38 +0200Googulator58Googulator
2025-09-16 00:35:08 +0200merijn(~merijn@host-vr.cgnat-g.v4.dfn.nl) merijn
2025-09-16 00:38:29 +0200rvalue-(~rvalue@about/hackers/rvalue) rvalue
2025-09-16 00:39:48 +0200rvalue(~rvalue@about/hackers/rvalue) (Ping timeout: 256 seconds)
2025-09-16 00:39:55 +0200merijn(~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 248 seconds)
2025-09-16 00:43:31 +0200califax(~califax@user/califx) (Quit: ZNC 1.8.2 - https://znc.in)
2025-09-16 00:43:50 +0200califax(~califax@user/califx) califx
2025-09-16 00:46:07 +0200arandombit(~arandombi@user/arandombit) (Quit: arandombit)
2025-09-16 00:47:21 +0200Guest9690(~ds@2a02:8071:884:db60:f6b3:1ff:fe2f:d0a)
2025-09-16 00:47:49 +0200rvalue-rvalue
2025-09-16 00:49:10 +0200Lycurgus(~juan@user/Lycurgus) (Quit: alsoknownas.renjuan.org ( juan@acm.org ))
2025-09-16 00:50:39 +0200trickard(~trickard@cpe-56-98-47-163.wireline.com.au) (Read error: Connection reset by peer)
2025-09-16 00:50:51 +0200trickard_(~trickard@cpe-56-98-47-163.wireline.com.au)
2025-09-16 00:50:56 +0200merijn(~merijn@host-vr.cgnat-g.v4.dfn.nl) merijn
2025-09-16 00:52:13 +0200Guest9690(~ds@2a02:8071:884:db60:f6b3:1ff:fe2f:d0a) (Client Quit)
2025-09-16 00:55:36 +0200peterbecich(~Thunderbi@syn-172-222-149-049.res.spectrum.com) peterbecich
2025-09-16 00:55:52 +0200merijn(~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 248 seconds)
2025-09-16 00:56:22 +0200Guest6702(~ds@2a02:8071:884:db60:f6b3:1ff:fe2f:d0a)
2025-09-16 01:05:08 +0200peterbecich(~Thunderbi@syn-172-222-149-049.res.spectrum.com) (Ping timeout: 265 seconds)
2025-09-16 01:06:15 +0200peterbecich(~Thunderbi@syn-172-222-149-049.res.spectrum.com) peterbecich
2025-09-16 01:06:43 +0200merijn(~merijn@host-vr.cgnat-g.v4.dfn.nl) merijn
2025-09-16 01:07:29 +0200vanishingideal(~vanishing@user/vanishingideal) (Ping timeout: 248 seconds)
2025-09-16 01:11:18 +0200Alleria(~Alleria@user/alleria) (Ping timeout: 260 seconds)
2025-09-16 01:11:46 +0200merijn(~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 255 seconds)
2025-09-16 01:14:47 +0200sprotte24(~sprotte24@p200300d16f206a00f427621420b32ac2.dip0.t-ipconnect.de) (Quit: Leaving)
2025-09-16 01:16:52 +0200Guest6702(~ds@2a02:8071:884:db60:f6b3:1ff:fe2f:d0a) (Quit: ZNC 1.8.2+deb3.1+deb12u1 - https://znc.in)
2025-09-16 01:17:44 +0200Tuplanolla(~Tuplanoll@91-159-69-59.elisa-laajakaista.fi) (Quit: Leaving.)
2025-09-16 01:19:56 +0200Alleria(~Alleria@user/alleria) Alleria
2025-09-16 01:20:12 +0200sajenim(~sajenim@user/sajenim) (Ping timeout: 252 seconds)
2025-09-16 01:21:40 +0200chromoblob(~chromoblo@user/chromob1ot1c) (Remote host closed the connection)
2025-09-16 01:21:56 +0200chromoblob(~chromoblo@user/chromob1ot1c) chromoblob\0
2025-09-16 01:22:31 +0200merijn(~merijn@host-vr.cgnat-g.v4.dfn.nl) merijn
2025-09-16 01:25:06 +0200ljdarj(~Thunderbi@user/ljdarj) ljdarj
2025-09-16 01:29:19 +0200merijn(~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 250 seconds)
2025-09-16 01:40:33 +0200merijn(~merijn@host-vr.cgnat-g.v4.dfn.nl) merijn
2025-09-16 01:41:30 +0200trickard_(~trickard@cpe-56-98-47-163.wireline.com.au) (Read error: Connection reset by peer)
2025-09-16 01:41:44 +0200trickard_(~trickard@cpe-56-98-47-163.wireline.com.au)
2025-09-16 01:45:22 +0200merijn(~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 260 seconds)
2025-09-16 01:49:28 +0200trickard_(~trickard@cpe-56-98-47-163.wireline.com.au) (Read error: Connection reset by peer)
2025-09-16 01:52:11 +0200trickard_(~trickard@cpe-56-98-47-163.wireline.com.au)
2025-09-16 01:52:22 +0200sajenim(~sajenim@user/sajenim) sajenim
2025-09-16 01:52:37 +0200trickard_trickard
2025-09-16 01:56:21 +0200merijn(~merijn@host-vr.cgnat-g.v4.dfn.nl) merijn
2025-09-16 01:58:15 +0200peterbecich(~Thunderbi@syn-172-222-149-049.res.spectrum.com) (Ping timeout: 245 seconds)
2025-09-16 02:01:29 +0200merijn(~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 260 seconds)
2025-09-16 02:10:59 +0200mange(~mange@user/mange) mange
2025-09-16 02:11:29 +0200Lycurgus(~juan@user/Lycurgus) Lycurgus
2025-09-16 02:11:50 +0200trickard(~trickard@cpe-56-98-47-163.wireline.com.au) (Read error: Connection reset by peer)
2025-09-16 02:12:04 +0200trickard_(~trickard@cpe-56-98-47-163.wireline.com.au)
2025-09-16 02:12:08 +0200merijn(~merijn@host-vr.cgnat-g.v4.dfn.nl) merijn
2025-09-16 02:16:51 +0200merijn(~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 252 seconds)
2025-09-16 02:16:54 +0200trickard_(~trickard@cpe-56-98-47-163.wireline.com.au) (Read error: Connection reset by peer)
2025-09-16 02:21:06 +0200weary-traveler(~user@user/user363627) user363627
2025-09-16 02:22:09 +0200trickard_(~trickard@cpe-56-98-47-163.wireline.com.au)
2025-09-16 02:27:57 +0200merijn(~merijn@host-vr.cgnat-g.v4.dfn.nl) merijn
2025-09-16 02:33:25 +0200merijn(~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 256 seconds)
2025-09-16 02:42:35 +0200xff0x(~xff0x@2405:6580:b080:900:8846:d27a:34b2:3e5) (Ping timeout: 248 seconds)
2025-09-16 02:44:01 +0200merijn(~merijn@host-vr.cgnat-g.v4.dfn.nl) merijn
2025-09-16 02:48:49 +0200merijn(~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 248 seconds)
2025-09-16 02:53:22 +0200StatisticalIndep(~Statistic@2a02:3035:666:b7d5:4e00:1517:7b0c:d0aa)
2025-09-16 02:59:50 +0200merijn(~merijn@host-vr.cgnat-g.v4.dfn.nl) merijn
2025-09-16 03:06:56 +0200merijn(~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 265 seconds)
2025-09-16 03:17:53 +0200merijn(~merijn@host-vr.cgnat-g.v4.dfn.nl) merijn
2025-09-16 03:19:36 +0200ljdarj(~Thunderbi@user/ljdarj) (Ping timeout: 256 seconds)
2025-09-16 03:22:10 +0200 <StatisticalIndep> Hi. Can someone help me with Hackage documentation. It is way too often that I come across an important library that is entirely undocumented in the sense of how it is meant to be used, and only documented as a reference. Making is impossible to figure out the intended use. … In some cases it just points to some research papers. I don’t want to
2025-09-16 03:22:10 +0200 <StatisticalIndep> read a 50 page research paper. There should be a documentation of the intended use at the top of the page, no? … Am I missing something? Or is that just the current state of things?
2025-09-16 03:22:26 +0200merijn(~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 256 seconds)
2025-09-16 03:23:00 +0200trickard_trickard
2025-09-16 03:30:32 +0200 <yin> not unusual. you can usually guide yourself by the types and clicking functions to see their definition
2025-09-16 03:30:55 +0200 <yin> the language facilitates this
2025-09-16 03:31:50 +0200 <yin> but if you're finding documentation lacking, i'd suggest to move on to better documented library alternatives
2025-09-16 03:31:59 +0200Alleria(~Alleria@user/alleria) (Remote host closed the connection)
2025-09-16 03:32:56 +0200Alleria(~Alleria@user/alleria) Alleria
2025-09-16 03:33:12 +0200 <Lycurgus> in the spectrum of langs where the code is supposed to be self documenting, aside from inline and decorative comments, haskell is closer to the smalltalk end
2025-09-16 03:33:23 +0200merijn(~merijn@host-vr.cgnat-g.v4.dfn.nl) merijn
2025-09-16 03:34:14 +0200 <Lycurgus> but libs have APIs and their sigs, the effective protocol implied can suffice
2025-09-16 03:38:15 +0200merijn(~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 252 seconds)
2025-09-16 03:43:44 +0200merijn(~merijn@host-vr.cgnat-g.v4.dfn.nl) merijn
2025-09-16 03:44:08 +0200Lycurgus(~juan@user/Lycurgus) (Quit: alsoknownas.renjuan.org ( juan@acm.org ))
2025-09-16 03:47:21 +0200berberman(~berberman@user/berberman) (Quit: ZNC 1.10.1 - https://znc.in)
2025-09-16 03:47:49 +0200jmcantrell_(~weechat@user/jmcantrell) jmcantrell
2025-09-16 03:47:53 +0200jmcantrell_jmcantrell
2025-09-16 03:48:29 +0200merijn(~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 256 seconds)
2025-09-16 03:49:05 +0200berberman(~berberman@user/berberman) berberman
2025-09-16 03:52:22 +0200tabaqui(~tabaqui@167.71.80.236) tabaqui
2025-09-16 03:52:39 +0200xff0x(~xff0x@fsb6a9491c.tkyc517.ap.nuro.jp)
2025-09-16 03:53:53 +0200 <geekosaur> also I'd note that most relevant research papers are (a) short (b) not too technical (c) quite readable
2025-09-16 03:55:14 +0200 <geekosaur> there are exceptions, but in many of those cases (e.g. Parsec) the "research paper" is more like a users guide anyway
2025-09-16 03:55:37 +0200 <geekosaur> (exceptions to point (a), at least)
2025-09-16 03:57:09 +0200OftenFaded(~OftenFade@user/tisktisk) (Ping timeout: 250 seconds)
2025-09-16 03:59:30 +0200merijn(~merijn@host-vr.cgnat-g.v4.dfn.nl) merijn
2025-09-16 04:00:28 +0200 <StatisticalIndep> yin: Well, the cases in point would be things like Control.Arrow, the regex libraries, the printf function, or the entire generics/SYB black magic. But even basic Foldable/Traversable have some nasty catches, where it is just implied you know that that seemingly entirely unrelated more generic function, in this case, works to do the job of a common
2025-09-16 04:00:28 +0200 <StatisticalIndep> expected function that seems to be just missing. Without a guide, that is impossible to find! … And that the types can tell you what a function does, seems to be an old mantra, but really, even basic math operations prove that wrong. (What does (Int -> Int -> Int) do? XD) Unless you make a `type` for each of them, to give them descriptive
2025-09-16 04:00:28 +0200 <StatisticalIndep> identifiers, of course. ;) …
2025-09-16 04:01:21 +0200 <StatisticalIndep> geekosaur: Parsec was a positive exception indeed. I liked it quite a lot.
2025-09-16 04:02:25 +0200 <StatisticalIndep> geekosaur: Though we should really get rid of that “Parsec from Temu” that forms the basis of the Read class. I actually thought it was meant to be used outside of GHC’s automatic deriving! ;)
2025-09-16 04:04:18 +0200arandombit(~arandombi@user/arandombit) arandombit
2025-09-16 04:04:20 +0200 <StatisticalIndep> geekosaur: Amen to your comment about research papers. (I wish there was an easy way to learn what it takes to write a research paper. It seems to require a whole basket of arcane rituals to be acceptable. ;)
2025-09-16 04:04:27 +0200merijn(~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 250 seconds)
2025-09-16 04:06:17 +0200poscat0x04(~poscat@user/poscat) poscat
2025-09-16 04:07:41 +0200poscat(~poscat@user/poscat) (Ping timeout: 244 seconds)
2025-09-16 04:11:48 +0200 <StatisticalIndep> BTW: Am I using the wrong language, for trying to write a library that offers persistent variable? As in: Can be used like a variable (ok maybe IORef), but is a pointer (and size) in a file on disk. It seems Haskell is very averse to the strategy of just loading a chunk of data from disk into RAM and then setting a pointer to a data structure to
2025-09-16 04:11:49 +0200 <StatisticalIndep> that chunk. Making it hard, but possibly necessary to retain Haskell’s reliability guarantees?
2025-09-16 04:13:53 +0200 <jackdk> StatisticalIndep: does https://hackage.haskell.org/package/mmap-0.5.9/docs/System-IO-MMap.html look like it might solve your problem? I'm not sure I understand what problem you're trying to solve yet
2025-09-16 04:15:18 +0200merijn(~merijn@host-vr.cgnat-g.v4.dfn.nl) merijn
2025-09-16 04:16:25 +0200 <StatisticalIndep> jackdk: Ultimately, to leave a mark on the universe that improves the wisdom and happiness of humanity. 😁
2025-09-16 04:16:49 +0200 <jackdk> StatisticalIndep: a fine ultimate goal, but do you have a subgoal in-between?
2025-09-16 04:16:53 +0200nschoe(~nschoe@2a01:e0a:8e:a190:eb80:e362:f8e1:aa2f) (Quit: ZNC 1.8.2 - https://znc.in)
2025-09-16 04:17:10 +0200nschoe(~nschoe@82-65-202-30.subs.proxad.net) nschoe
2025-09-16 04:20:01 +0200merijn(~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 248 seconds)
2025-09-16 04:21:55 +0200Alleria(~Alleria@user/alleria) (Quit: Textual IRC Client: www.textualapp.com)
2025-09-16 04:31:06 +0200merijn(~merijn@host-vr.cgnat-g.v4.dfn.nl) merijn
2025-09-16 04:36:05 +0200merijn(~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 256 seconds)
2025-09-16 04:38:02 +0200arandombit(~arandombi@user/arandombit) (Ping timeout: 260 seconds)
2025-09-16 04:40:12 +0200 <StatisticalIndep> jackdk: To stop people from always assuming the thing I said I want is not the right solution for the thing I want it for. (The “XY problem” fallacy.) 😁 … (Or in this case, there is no deeper reason. I want to explore writing a library that offers transparently persistent variables. Nothing more.)
2025-09-16 04:42:48 +0200 <jackdk> StatisticalIndep: Well I'd probably look at building something that used the https://hackage.haskell.org/package/StateVar interface, and then back it with either the mmap link from before (remember to use a `bracket` function to ensure that you unmap even if an exception is thrown) or some other file io
2025-09-16 04:43:49 +0200 <StatisticalIndep> System.IO.MMap looks pretty good, btw. If only there was no marshalling.
2025-09-16 04:45:10 +0200arandombit(~arandombi@2603:7000:4600:ffbe:21ee:ceac:8353:7a15)
2025-09-16 04:45:10 +0200arandombit(~arandombi@2603:7000:4600:ffbe:21ee:ceac:8353:7a15) (Changing host)
2025-09-16 04:45:10 +0200arandombit(~arandombi@user/arandombit) arandombit
2025-09-16 04:45:18 +0200 <StatisticalIndep> Ah, yes, StateVar was a pretty nice experience, when I used SDL. Comes really close to it, indeed.
2025-09-16 04:46:31 +0200 <StatisticalIndep> jackdk: Thanks a lot!
2025-09-16 04:46:53 +0200merijn(~merijn@host-vr.cgnat-g.v4.dfn.nl) merijn
2025-09-16 04:47:21 +0200 <geekosaur> re marshaling: requiring STorable doesn't seem like much of an issue, and you would need it anyway because Haskell values aren't designed to be meaningful outside of Haskell's heap
2025-09-16 04:48:24 +0200 <StatisticalIndep> Interesting: The Storable instances for basic types seem to be implemented inside GHC, and the libraries just use stuff like (writeWordOffAddr# = writeWordOffAddr#). So there is probably no actual marshalling work, and it’s fast and 1:1.
2025-09-16 04:50:15 +0200 <StatisticalIndep> geekosaur: Yes, that’s probably my core pet peeve with how Haskell in implemented. It makes interoperation hard. But I get why it was chosen. The whole point was that all types should be checked at compile time, not at runtime. (Hence also things like dynamic libraries and variants with types that aren’t know at compile time yet, being hard or
2025-09-16 04:50:15 +0200 <StatisticalIndep> impossible.)
2025-09-16 04:51:37 +0200 <geekosaur> not only that, but Haskell's implementation of types allows for laziness in the form of thunks, which wouldn't be meaningful to non-Haskell code (a "value" can be a Haskell function that computes the value when demanded)
2025-09-16 04:51:38 +0200 <StatisticalIndep> geekosaur: That was what I needed to hear btw: Marshalling is needed in _any_ case. Because the values don’t have type info attached to them and it’s not that simple anyway within Haskell. :)
2025-09-16 04:51:43 +0200 <StatisticalIndep> Yup.
2025-09-16 04:52:01 +0200 <geekosaur> which also requires that everything live in Haskell's heap and non-Haskell code not have access to that heap
2025-09-16 04:52:09 +0200 <StatisticalIndep> And after all, those are all things I came to Haskell for, because I liked them. So now I have to live with it.:D
2025-09-16 04:52:47 +0200merijn(~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 265 seconds)
2025-09-16 04:53:31 +0200 <StatisticalIndep> Internally though, the fully evaluated values are of course just normal pointers and words and such, right? Just boxed in boxed boxes that are boxed more than the boss on boxyourboss.com was. ;)
2025-09-16 04:53:42 +0200 <geekosaur> actually I don't see how "doesn't have type information" is related. it's not like C values do
2025-09-16 04:53:58 +0200 <StatisticalIndep> OK, true.
2025-09-16 04:54:39 +0200 <geekosaur> they are… until ADTs get involved. (what representation do you expect a Data.Map to have?)
2025-09-16 04:54:58 +0200 <StatisticalIndep> I guess my mindset came from having seen diagrams of how GHC stores data in memory. Like how lists are linked lists of boxed values. Lots more pointers than one would think.
2025-09-16 04:54:59 +0200 <geekosaur> *Data.Map.Map
2025-09-16 04:55:22 +0200arandombit(~arandombi@user/arandombit) (Ping timeout: 256 seconds)
2025-09-16 04:55:56 +0200 <geekosaur> right, and all those pointers introduce places where a value could be computed lazily
2025-09-16 04:56:28 +0200 <geekosaur> (if you don't have optimization enabled, even the strict values have them, but optimization unboxes whenever possible)
2025-09-16 04:58:26 +0200 <StatisticalIndep> I probably expect a Map to internally be stored as an array of pointers, with pointers to keys and to values being interleaved? Or something a bit smarter with fewer pointers. ;)
2025-09-16 04:58:38 +0200StatisticalIndep(~Statistic@2a02:3035:666:b7d5:4e00:1517:7b0c:d0aa) (Quit: Client closed)
2025-09-16 04:58:50 +0200StatisticalIndep(~Statistic@2a02:3035:666:b7d5:4e00:1517:7b0c:d0aa)
2025-09-16 04:59:35 +0200 <geekosaur> Maps are actually more complex than that: "The implementation of Map is based on size balanced binary trees (or trees of bounded balance)" (from the documentation)
2025-09-16 04:59:48 +0200 <StatisticalIndep> Ah, yes, i remembered something like that!
2025-09-16 05:00:55 +0200 <geekosaur> which is another reason you must marshal/unmarshal, because it's asking far too much for other languages to have to figure out how Map is a size-balanced binary tree or Seq is a fingertree, etc.
2025-09-16 05:01:15 +0200 <StatisticalIndep> Yep.
2025-09-16 05:01:51 +0200 <hololeap> makes sense that Map is a binary tree, given the (Ord k) constraint on most operations
2025-09-16 05:03:14 +0200 <StatisticalIndep> I just wish I could tell Haskell: to point every pointer to an Int, in e.g. a fixey list of Ints, to a pointer location in a block of mmapped data that contains unboxed ints in exactly the same format as GHC expects them.
2025-09-16 05:03:56 +0200merijn(~merijn@host-vr.cgnat-g.v4.dfn.nl) merijn
2025-09-16 05:04:08 +0200 <geekosaur> hypothetically could be done. would really complicate GC, though
2025-09-16 05:04:25 +0200arandombit(~arandombi@2603:7000:4600:ffbe:21ee:ceac:8353:7a15)
2025-09-16 05:04:25 +0200arandombit(~arandombi@2603:7000:4600:ffbe:21ee:ceac:8353:7a15) (Changing host)
2025-09-16 05:04:25 +0200arandombit(~arandombi@user/arandombit) arandombit
2025-09-16 05:04:28 +0200 <geekosaur> and probably make it a lot more expensive, if it has to check if every pointer actually lives in the heap or not
2025-09-16 05:04:31 +0200 <StatisticalIndep> hololeap: It also makes sense from a standpoint of variables being constants in Haskell, and there hence being no such thing as an “insertion”. (The tree has to be reconstructed from the zipper instead.)
2025-09-16 05:05:50 +0200 <StatisticalIndep> geekosaur: Oh, I forgot about GC. Okay, that seals the deal. All those features are more valuable than having that bit of non-marshalled mapping elegance.
2025-09-16 05:07:21 +0200 <geekosaur> we do actually have such a thing as pinned memory, but it's only applicable to ByteArray# and it's handled via an exception list (and I seem to recall hearing of programs that heavily use ByteStrings getting slow because the exception list isn't very efficient?)
2025-09-16 05:08:33 +0200 <geekosaur> GC assumes pinned memory is an exception, not the rule
2025-09-16 05:08:40 +0200merijn(~merijn@host-vr.cgnat-g.v4.dfn.nl) (Ping timeout: 245 seconds)
2025-09-16 05:10:38 +0200aforemny(~aforemny@2001:9e8:6cce:4800:55ab:c43e:17dc:ff6c) aforemny
2025-09-16 05:11:14 +0200aforemny_(~aforemny@i59F4C711.versanet.de) (Ping timeout: 256 seconds)
2025-09-16 05:13:13 +0200 <hololeap> made me remember this: https://www.channable.com/tech/lessons-in-managing-haskell-memory
2025-09-16 05:16:56 +0200 <StatisticalIndep> In any case, (mmapWithFilePtr "mm" ReadWrite Nothing $ \ (p, _) -> sequence_ $ zipWith (\ c i -> poke (plusPtr p i) c) "ME GO TOO FAR!" [0..]) works nicely enough. ;) (Yes, I know this will break with multi-byte chars.)
2025-09-16 05:19:43 +0200merijn(~merijn@host-vr.cgnat-g.v4.dfn.nl) merijn