(Compositional) function mkWeakChan
Following the existing functions mkWeakIORef and mkWeakMVar, I'd like to have a function mkWeakChan with the following type signature, similar to that of mkWeakMVar requested by ticket #7285:
mkWeakChan :: Chan a -> v -> Maybe (IO ()) -> IO (Weak v)
The implementation of Chan is private, so it is not easily possible to implement it yourself. The implementation of both functions may look like the following:
mkWeakMVar :: MVar a -> v -> Maybe (IO ()) -> IO (Weak v)
mkWeakMVar (MVar m#) v (Just f) = IO $ \s ->
case mkWeak# m# v f s of (# s1, w #) -> (# s1, Weak w #)
mkWeakMVar (MVar m#) v Nothing = IO $ \s ->
case mkWeakNoFinalizer# m# v s of { (# s1, w #) -> (# s1, Weak w #) }
mkWeakChan :: Chan a -> v -> Maybe (IO ()) -> IO (Weak v)
mkWeakChan c@(Chan readVar writeVar) v f = do
_ <- mkWeakMVar readVar writeVar Nothing
mkWeakMVar writeVar v f
Trac metadata
Trac field | Value |
---|---|
Version | 7.6.3 |
Type | FeatureRequest |
TypeOfFailure | OtherFailure |
Priority | normal |
Resolution | Unresolved |
Component | libraries/base |
Test case | |
Differential revisions | |
BlockedBy | |
Related | #7285 |
Blocking | |
CC | |
Operating system | |
Architecture |