mkWeakMVar :: StrictMVar a -> IO () -> IO (Weak (StrictMVar a))
mkWeakMVar q@(StrictMVar (MVar m#)) f = IO $ \s ->
#if MIN_VERSION_base(4,9,0)
  case mkWeak# m# q (unIO f) s of (# s', w #) -> (# s', Weak w #)
#else
  case mkWeak# m# q f s of (# s', w #) -> (# s', Weak w #)
#endif
mkWeakMVar :: StrictMVar a -> IO () -> IO (Weak (StrictMVar a))
mkWeakMVar q@(StrictMVar (MVar m#)) f = IO $ \s ->
#if MIN_VERSION_base(4,9,0)
  case mkWeak# m# q (unIO f) s of (# s', w #) -> (# s', Weak w #)
#else
  case mkWeak# m# q f s of (# s', w #) -> (# s', Weak w #)
#endif
mkWeakMVar q@(StrictMVar (MVar m#)) f = IO $ \s ->
#if MIN_VERSION_base(4,9,0)
  case mkWeak# m# q (unIO f) s of (# s', w #) -> (# s', Weak w #)
#else
  case mkWeak# m# q f s of (# s', w #) -> (# s', Weak w #)
#endif