module Control.Concurrent.STM.TMVar.Class where import Control.Concurrent.STM (STM) import qualified Control.Concurrent.STM.TMVar as TMVar class TMVarWrite var where putTMVar :: var a -> a -> STM () tryPutTMVar :: var a -> a -> STM Bool instance TMVarWrite TMVar.TMVar where putTMVar = TMVar.putTMVar {-# INLINE putTMVar #-} tryPutTMVar = TMVar.tryPutTMVar {-# INLINE tryPutTMVar #-} class TMVarRead var where takeTMVar :: var a -> STM a readTMVar :: var a -> STM a tryTakeTMVar :: var a -> STM (Maybe a) instance TMVarRead TMVar.TMVar where takeTMVar = TMVar.takeTMVar {-# INLINE takeTMVar #-} readTMVar = TMVar.readTMVar {-# INLINE readTMVar #-} tryTakeTMVar = TMVar.tryTakeTMVar {-# INLINE tryTakeTMVar #-}