
#8850: (Compositional) function mkWeakChan ------------------------------------+------------------------------------- Reporter: bholst | Owner: Type: feature request | Status: new Priority: normal | Milestone: Component: libraries/base | Version: 7.6.3 Keywords: | Operating System: Unknown/Multiple Architecture: Unknown/Multiple | Type of failure: Other Difficulty: Unknown | Test Case: Blocked By: | Blocking: Related Tickets: 7285 | ------------------------------------+------------------------------------- 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 }}} -- Ticket URL: http://ghc.haskell.org/trac/ghc/ticket/8850 GHC http://www.haskell.org/ghc/ The Glasgow Haskell Compiler