acquire :: Lock -> IO (Acquisition Lock)
acquire l = do
  val <- takeMVar $ lock l
  return $ Acquisition (putMVar (lock l) val)
acquire :: Lock -> IO (Acquisition Lock)
acquire l = do
  val <- takeMVar $ lock l
  return $ Acquisition (putMVar (lock l) val)
acquire l = do
  val <- takeMVar $ lock l
  return $ Acquisition (putMVar (lock l) val)