<div dir="auto">Whoops! Thanks for pointing that out. I'll fix it and push new docs. There's not much magic in that part of the code itself; the nasty magic is knowing that the first pointer in any record is in the same position in its heap object as the first component of a pair. Speaking of which, do you have any idea if it'll work for non-record types whose constructors all have the same first field? I'm guessing yes, but I haven't experimented yet.</div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Fri, Mar 10, 2023, 3:27 AM Tom Smeding <<a href="mailto:x@tomsmeding.com">x@tomsmeding.com</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Hi David,<br>
<br>
Fancy stuffs!<br>
<br>
Wondering how much magic was going on in implementing this, I saw that <br>
atomicModifyIORef2Native misses the haddock marker '|' in the source; <br>
thus your extensive doc comment doesn't show up on hackage.<br>
<br>
Cheers,<br>
Tom<br>
<br>
On 10/03/2023 03:01, David Feuer wrote:<br>
> I just put together a new package, atomic-modify-general, for<br>
> generalizations of the `atomicModifyIORef` operation. In particular:<br>
><br>
> 1. Versions that allow a result of an arbitrary type (not necessarily<br>
> a pair), where the caller passes in an extraction function. These work<br>
> with `Array` and `SmallArray` from `primitive` as well as `IORef`.<br>
> 2. A version that works with record types (not just pairs) whose first<br>
> field is the new value to install in the `IORef`. This uses<br>
> implementation details of the `atomicModifyMutVar#` primop as well as<br>
> GHC's heap object layout to achieve better performance.<br>
><br>
> Please try it out and let me know how it goes, and what extras you may want!<br>
><br>
> Hackage: <a href="https://hackage.haskell.org/package/atomic-modify-general-0.1.0.0" rel="noreferrer noreferrer" target="_blank">https://hackage.haskell.org/package/atomic-modify-general-0.1.0.0</a><br>
> _______________________________________________<br>
> Haskell-Cafe mailing list<br>
> To (un)subscribe, modify options or view archives go to:<br>
> <a href="http://mail.haskell.org/cgi-bin/mailman/listinfo/haskell-cafe" rel="noreferrer noreferrer" target="_blank">http://mail.haskell.org/cgi-bin/mailman/listinfo/haskell-cafe</a><br>
> Only members subscribed via the mailman list are allowed to post.<br>
<br>
_______________________________________________<br>
Haskell-Cafe mailing list<br>
To (un)subscribe, modify options or view archives go to:<br>
<a href="http://mail.haskell.org/cgi-bin/mailman/listinfo/haskell-cafe" rel="noreferrer noreferrer" target="_blank">http://mail.haskell.org/cgi-bin/mailman/listinfo/haskell-cafe</a><br>
Only members subscribed via the mailman list are allowed to post.</blockquote></div>