I think this is a good idea, but I wonder if we could do a bit better?Weaks are already implemented as key/value pairs, what we really need is a way to specify that a data value is a primitive that is appropriate to be used as a weak key. Would it make sense to introduce a new typeclass:class WeakKey k wheremkWeakOn :: k -> v -> Maybe (IO ()) -> IO (Weak v)Then we could have implementations for MVar, IORef, TVar etc.John L.On Fri Nov 07 2014 at 9:02:25 AM Carter Schonwald <carter.schonwald@gmail.com> wrote:after reading current haddocks, so i could understand the current and proposed apis, I'm +1 on this.this would align with the api provided by weak pointer too._______________________________________________On Fri, Nov 7, 2014 at 11:16 AM, Edward Kmett <ekmett@gmail.com> wrote:We've had a ticket languishing in the trac for a couple of years that probably belongs as a libraries proposal:https://ghc.haskell.org/trac/ghc/ticket/7285#comment:6To summarize it here:In base 4.6 addMVarFinalizer is deprecated in favour of mkWeakMVar of typemkWeakMVar :: MVar a -> IO () -> IO (Weak (MVar a))
This type makes it inherently non-compositional. For instance, if we have a larger datatype T that contains an MVar somewhere inside then there in no way to define mkWeakT in terms of mkWeakMVar; instead, mkWeakT would have to be defined along the lines ofmkWeakT :: T a -> IO () -> IO (Weak (T a)) mkWeakT m@(MkT (MVar m#) _) f = IO $ \s -> case mkWeak# m# m f s of (# s1, w #) -> (# s1, Weak w #)
It would be better if the type of mkWeakMVar would change tomkWeakMVar :: MVar a -> v -> Maybe (IO ()) -> IO (Weak v)
(i.e., following mkWeak rather than mkWeakPtr).
(The same comment goes for related functions such as mkWeakIORef.)I'm personally in favor of the change, but wanted to seek wider community feedback.Thoughts?Discussion Period: 2 Weeks
_______________________________________________
Libraries mailing list
Libraries@haskell.org
http://www.haskell.org/mailman/listinfo/libraries
Libraries mailing list
Libraries@haskell.org
http://www.haskell.org/mailman/listinfo/libraries