
Yes, sort of. You can use that to tell if a certain *constructor* has been collected, but that's not always so helpful. For instance, if you make a weak pointer to a list, and find that it's been collected, that just means the first (:) constructor has been collected. It may well be that the rest of the list spine and all its elements are still live. I ran into this problem trying to find out if an Array had been collected. It turned out that the Array constructor that holds the array bounds had been, but the actual Array# holding the elements was still around! Ah, thanks, that clears it up somewhat
I'm not sure what the deal is there exactly, but my *guess* is that GHC may never actually bother allocating x or z at all. Finalizers are not guaranteed to ever run; they're a sort of "please, if you have the time" kind of thing. Ah, you mean the literals may fall under this? https://ghc.haskell.org/trac/ghc/wiki/Commentary/Rts/Storage/GC/CAFs?redirec... Or are they optimized away because never actually used? Thanks, I learned something. I changed the program to perform an operation and print out the result with the values, but the finalizer still didn't run - I might shelve this one for later examination. Thank you,
Elise