-- >>

newTMVar :: a -> STM (TMVar a)
newTMVar a = do
  t <- newTVar (Just a)
  return (TMVar t)

-- <<newEmptyTMVar
newTMVar :: a -> STM (TMVar a)
newTMVar a = do
  t <- newTVar (Just a)
  return (TMVar t)

-- <<newEmptyTMVar
newTMVar a = do
  t <- newTVar (Just a)
  return (TMVar t)

-- <<newEmptyTMVar