unliftio 0.2.0.0 → 0.2.1.0
raw patch · 5 files changed
+317/−2 lines, 5 filesdep +stmdep ~deepseqPVP: major bump suggested
API removals or changes: PVP suggests a major version bump
Dependencies added: stm
Dependency ranges changed: deepseq
API changes (from Hackage documentation)
+ UnliftIO.IO: BlockBuffering :: Maybe Int -> BufferMode
+ UnliftIO.IO: LineBuffering :: BufferMode
+ UnliftIO.IO: NoBuffering :: BufferMode
+ UnliftIO.IO: data BufferMode :: *
+ UnliftIO.IO: data SeekMode :: *
+ UnliftIO.IO: hClose :: MonadIO m => Handle -> m ()
+ UnliftIO.IO: hFileSize :: MonadIO m => Handle -> m Integer
+ UnliftIO.IO: hFlush :: MonadIO m => Handle -> m ()
+ UnliftIO.IO: hGetBuffering :: MonadIO m => Handle -> m BufferMode
+ UnliftIO.IO: hGetEcho :: MonadIO m => Handle -> m Bool
+ UnliftIO.IO: hIsClosed :: MonadIO m => Handle -> m Bool
+ UnliftIO.IO: hIsEOF :: MonadIO m => Handle -> m Bool
+ UnliftIO.IO: hIsOpen :: MonadIO m => Handle -> m Bool
+ UnliftIO.IO: hIsReadable :: MonadIO m => Handle -> m Bool
+ UnliftIO.IO: hIsSeekable :: MonadIO m => Handle -> m Bool
+ UnliftIO.IO: hIsTerminalDevice :: MonadIO m => Handle -> m Bool
+ UnliftIO.IO: hIsWritable :: MonadIO m => Handle -> m Bool
+ UnliftIO.IO: hReady :: MonadIO m => Handle -> m Bool
+ UnliftIO.IO: hSeek :: MonadIO m => Handle -> SeekMode -> Integer -> m ()
+ UnliftIO.IO: hSetBuffering :: MonadIO m => Handle -> BufferMode -> m ()
+ UnliftIO.IO: hSetEcho :: MonadIO m => Handle -> Bool -> m ()
+ UnliftIO.IO: hSetFileSize :: MonadIO m => Handle -> Integer -> m ()
+ UnliftIO.IO: hTell :: MonadIO m => Handle -> m Integer
+ UnliftIO.IO: hWaitForInput :: MonadIO m => Handle -> Int -> m Bool
+ UnliftIO.IO: stderr :: Handle
+ UnliftIO.IO: stdin :: Handle
+ UnliftIO.IO: stdout :: Handle
+ UnliftIO.STM: atomically :: MonadIO m => STM a -> m a
+ UnliftIO.STM: checkSTM :: Bool -> STM ()
+ UnliftIO.STM: cloneTChan :: () => TChan a -> STM TChan a
+ UnliftIO.STM: data STM a :: * -> *
+ UnliftIO.STM: data TBQueue a :: * -> *
+ UnliftIO.STM: data TChan a :: * -> *
+ UnliftIO.STM: data TMVar a :: * -> *
+ UnliftIO.STM: data TQueue a :: * -> *
+ UnliftIO.STM: data TVar a :: * -> *
+ UnliftIO.STM: dupTChan :: () => TChan a -> STM TChan a
+ UnliftIO.STM: isEmptyTBQueue :: () => TBQueue a -> STM Bool
+ UnliftIO.STM: isEmptyTChan :: () => TChan a -> STM Bool
+ UnliftIO.STM: isEmptyTMVar :: () => TMVar a -> STM Bool
+ UnliftIO.STM: isEmptyTQueue :: () => TQueue a -> STM Bool
+ UnliftIO.STM: isFullTBQueue :: () => TBQueue a -> STM Bool
+ UnliftIO.STM: mkWeakTMVar :: MonadUnliftIO m => TMVar a -> m () -> m (Weak (TMVar a))
+ UnliftIO.STM: mkWeakTVar :: MonadUnliftIO m => TVar a -> m () -> m (Weak (TVar a))
+ UnliftIO.STM: modifyTVar :: () => TVar a -> (a -> a) -> STM ()
+ UnliftIO.STM: modifyTVar' :: () => TVar a -> (a -> a) -> STM ()
+ UnliftIO.STM: newBroadcastTChan :: () => STM TChan a
+ UnliftIO.STM: newBroadcastTChanIO :: MonadIO m => m (TChan a)
+ UnliftIO.STM: newEmptyTMVar :: () => STM TMVar a
+ UnliftIO.STM: newEmptyTMVarIO :: MonadIO m => m (TMVar a)
+ UnliftIO.STM: newTBQueue :: () => Int -> STM TBQueue a
+ UnliftIO.STM: newTBQueueIO :: MonadIO m => Int -> m (TBQueue a)
+ UnliftIO.STM: newTChan :: () => STM TChan a
+ UnliftIO.STM: newTChanIO :: MonadIO m => m (TChan a)
+ UnliftIO.STM: newTMVar :: () => a -> STM TMVar a
+ UnliftIO.STM: newTMVarIO :: MonadIO m => a -> m (TMVar a)
+ UnliftIO.STM: newTQueue :: () => STM TQueue a
+ UnliftIO.STM: newTQueueIO :: MonadIO m => m (TQueue a)
+ UnliftIO.STM: newTVar :: () => a -> STM TVar a
+ UnliftIO.STM: newTVarIO :: MonadIO m => a -> m (TVar a)
+ UnliftIO.STM: peekTBQueue :: () => TBQueue a -> STM a
+ UnliftIO.STM: peekTChan :: () => TChan a -> STM a
+ UnliftIO.STM: peekTQueue :: () => TQueue a -> STM a
+ UnliftIO.STM: putTMVar :: () => TMVar a -> a -> STM ()
+ UnliftIO.STM: readTBQueue :: () => TBQueue a -> STM a
+ UnliftIO.STM: readTChan :: () => TChan a -> STM a
+ UnliftIO.STM: readTMVar :: () => TMVar a -> STM a
+ UnliftIO.STM: readTQueue :: () => TQueue a -> STM a
+ UnliftIO.STM: readTVar :: () => TVar a -> STM a
+ UnliftIO.STM: readTVarIO :: MonadIO m => TVar a -> m a
+ UnliftIO.STM: registerDelay :: MonadIO m => Int -> m (TVar Bool)
+ UnliftIO.STM: retrySTM :: STM a
+ UnliftIO.STM: swapTMVar :: () => TMVar a -> a -> STM a
+ UnliftIO.STM: swapTVar :: () => TVar a -> a -> STM a
+ UnliftIO.STM: takeTMVar :: () => TMVar a -> STM a
+ UnliftIO.STM: tryPeekTBQueue :: () => TBQueue a -> STM Maybe a
+ UnliftIO.STM: tryPeekTChan :: () => TChan a -> STM Maybe a
+ UnliftIO.STM: tryPeekTQueue :: () => TQueue a -> STM Maybe a
+ UnliftIO.STM: tryReadTBQueue :: () => TBQueue a -> STM Maybe a
+ UnliftIO.STM: tryReadTChan :: () => TChan a -> STM Maybe a
+ UnliftIO.STM: tryReadTMVar :: () => TMVar a -> STM Maybe a
+ UnliftIO.STM: tryReadTQueue :: () => TQueue a -> STM Maybe a
+ UnliftIO.STM: tryTakeTMVar :: () => TMVar a -> STM Maybe a
+ UnliftIO.STM: unGetTBQueue :: () => TBQueue a -> a -> STM ()
+ UnliftIO.STM: unGetTChan :: () => TChan a -> a -> STM ()
+ UnliftIO.STM: unGetTQueue :: () => TQueue a -> a -> STM ()
+ UnliftIO.STM: writeTBQueue :: () => TBQueue a -> a -> STM ()
+ UnliftIO.STM: writeTChan :: () => TChan a -> a -> STM ()
+ UnliftIO.STM: writeTQueue :: () => TQueue a -> a -> STM ()
+ UnliftIO.STM: writeTVar :: () => TVar a -> a -> STM ()
- UnliftIO.Async: asyncThreadId :: Async a -> ThreadId
+ UnliftIO.Async: asyncThreadId :: () => Async a -> ThreadId
- UnliftIO.Async: pollSTM :: Async a -> STM (Maybe (Either SomeException a))
+ UnliftIO.Async: pollSTM :: () => Async a -> STM Maybe Either SomeException a
- UnliftIO.Async: waitAnyCatchSTM :: [Async a] -> STM (Async a, Either SomeException a)
+ UnliftIO.Async: waitAnyCatchSTM :: () => [Async a] -> STM (Async a, Either SomeException a)
- UnliftIO.Async: waitAnySTM :: [Async a] -> STM (Async a, a)
+ UnliftIO.Async: waitAnySTM :: () => [Async a] -> STM (Async a, a)
- UnliftIO.Async: waitBothSTM :: Async a -> Async b -> STM (a, b)
+ UnliftIO.Async: waitBothSTM :: () => Async a -> Async b -> STM (a, b)
- UnliftIO.Async: waitCatchSTM :: Async a -> STM (Either SomeException a)
+ UnliftIO.Async: waitCatchSTM :: () => Async a -> STM Either SomeException a
- UnliftIO.Async: waitEitherCatchSTM :: Async a -> Async b -> STM (Either (Either SomeException a) (Either SomeException b))
+ UnliftIO.Async: waitEitherCatchSTM :: () => Async a -> Async b -> STM Either Either SomeException a Either SomeException b
- UnliftIO.Async: waitEitherSTM :: Async a -> Async b -> STM (Either a b)
+ UnliftIO.Async: waitEitherSTM :: () => Async a -> Async b -> STM Either a b
- UnliftIO.Async: waitEitherSTM_ :: Async a -> Async b -> STM ()
+ UnliftIO.Async: waitEitherSTM_ :: () => Async a -> Async b -> STM ()
- UnliftIO.Async: waitSTM :: Async a -> STM a
+ UnliftIO.Async: waitSTM :: () => Async a -> STM a
- UnliftIO.Exception: assert :: Bool -> a -> a
+ UnliftIO.Exception: assert :: () => Bool -> a -> a
Files
- ChangeLog.md +5/−0
- src/UnliftIO.hs +2/−0
- src/UnliftIO/IO.hs +138/−0
- src/UnliftIO/STM.hs +168/−0
- unliftio.cabal +4/−2
ChangeLog.md view
@@ -1,3 +1,8 @@+## 0.2.1.0++* Add `UnliftIO.STM`+* Add a number of functions to `UnliftIO.IO`+ ## 0.2.0.0 * Remove `monad-logger` instances (moved into `monad-logger` itself in
src/UnliftIO.hs view
@@ -6,6 +6,7 @@ , module UnliftIO.IO , module UnliftIO.IORef , module UnliftIO.MVar+ , module UnliftIO.STM , module UnliftIO.Temporary , module UnliftIO.Timeout ) where@@ -17,5 +18,6 @@ import UnliftIO.IO import UnliftIO.IORef import UnliftIO.MVar+import UnliftIO.STM import UnliftIO.Temporary import UnliftIO.Timeout
src/UnliftIO/IO.hs view
@@ -4,8 +4,32 @@ module UnliftIO.IO ( IOMode (..) , Handle+ , IO.stdin+ , IO.stdout+ , IO.stderr , withFile , withBinaryFile+ , hClose+ , hFlush+ , hFileSize+ , hSetFileSize+ , hIsEOF+ , IO.BufferMode (..)+ , hSetBuffering+ , hGetBuffering+ , hSeek+ , IO.SeekMode+ , hTell+ , hIsOpen+ , hIsClosed+ , hIsReadable+ , hIsWritable+ , hIsSeekable+ , hIsTerminalDevice+ , hSetEcho+ , hGetEcho+ , hWaitForInput+ , hReady ) where import qualified System.IO as IO@@ -23,3 +47,117 @@ -- @since 0.1.0.0 withBinaryFile :: MonadUnliftIO m => FilePath -> IOMode -> (Handle -> m a) -> m a withBinaryFile fp mode inner = withRunInIO $ \run -> IO.withBinaryFile fp mode $ run . inner++-- | Lifted version of 'IO.hClose'+--+-- @since 0.2.1.0+hClose :: MonadIO m => Handle -> m ()+hClose = liftIO . IO.hClose++-- | Lifted version of 'IO.hFlush'+--+-- @since 0.2.1.0+hFlush :: MonadIO m => Handle -> m ()+hFlush = liftIO . IO.hFlush++-- | Lifted version of 'IO.hFileSize'+--+-- @since 0.2.1.0+hFileSize :: MonadIO m => Handle -> m Integer+hFileSize = liftIO . IO.hFileSize++-- | Lifted version of 'IO.hSetFileSize'+--+-- @since 0.2.1.0+hSetFileSize :: MonadIO m => Handle -> Integer -> m ()+hSetFileSize h = liftIO . IO.hSetFileSize h++-- | Lifted version of 'IO.hIsEOF'+--+-- @since 0.2.1.0+hIsEOF :: MonadIO m => Handle -> m Bool+hIsEOF = liftIO . IO.hIsEOF++-- | Lifted version of 'IO.hSetBuffering'+--+-- @since 0.2.1.0+hSetBuffering :: MonadIO m => Handle -> IO.BufferMode -> m ()+hSetBuffering h = liftIO . IO.hSetBuffering h++-- | Lifted version of 'IO.hGetBuffering'+--+-- @since 0.2.1.0+hGetBuffering :: MonadIO m => Handle -> m IO.BufferMode+hGetBuffering = liftIO . IO.hGetBuffering++-- | Lifted version of 'IO.hSeek'+--+-- @since 0.2.1.0+hSeek :: MonadIO m => Handle -> IO.SeekMode -> Integer -> m ()+hSeek h s = liftIO . IO.hSeek h s++-- | Lifted version of 'IO.hTell'+--+-- @since 0.2.1.0+hTell :: MonadIO m => Handle -> m Integer+hTell = liftIO . IO.hTell++-- | Lifted version of 'IO.hIsOpen'+--+-- @since 0.2.1.0+hIsOpen :: MonadIO m => Handle -> m Bool+hIsOpen = liftIO . IO.hIsOpen++-- | Lifted version of 'IO.hIsClosed'+--+-- @since 0.2.1.0+hIsClosed :: MonadIO m => Handle -> m Bool+hIsClosed = liftIO . IO.hIsClosed++-- | Lifted version of 'IO.hIsReadable'+--+-- @since 0.2.1.0+hIsReadable :: MonadIO m => Handle -> m Bool+hIsReadable = liftIO . IO.hIsReadable++-- | Lifted version of 'IO.hIsWritable'+--+-- @since 0.2.1.0+hIsWritable :: MonadIO m => Handle -> m Bool+hIsWritable = liftIO . IO.hIsWritable++-- | Lifted version of 'IO.hIsSeekable'+--+-- @since 0.2.1.0+hIsSeekable :: MonadIO m => Handle -> m Bool+hIsSeekable = liftIO . IO.hIsSeekable++-- | Lifted version of 'IO.hIsTerminalDevice'+--+-- @since 0.2.1.0+hIsTerminalDevice :: MonadIO m => Handle -> m Bool+hIsTerminalDevice = liftIO . IO.hIsTerminalDevice++-- | Lifted version of 'IO.hSetEcho'+--+-- @since 0.2.1.0+hSetEcho :: MonadIO m => Handle -> Bool -> m ()+hSetEcho h = liftIO . IO.hSetEcho h++-- | Lifted version of 'IO.hGetEcho'+--+-- @since 0.2.1.0+hGetEcho :: MonadIO m => Handle -> m Bool+hGetEcho = liftIO . IO.hGetEcho++-- | Lifted version of 'IO.hWaitForInput'+--+-- @since 0.2.1.0+hWaitForInput :: MonadIO m => Handle -> Int -> m Bool+hWaitForInput h = liftIO . IO.hWaitForInput h++-- | Lifted version of 'IO.hReady'+--+-- @since 0.2.1.0+hReady :: MonadIO m => Handle -> m Bool+hReady = liftIO . IO.hReady
+ src/UnliftIO/STM.hs view
@@ -0,0 +1,168 @@+-- | Lifted version of "Control.Concurrent.STM"+--+-- @since 0.2.1.0+module UnliftIO.STM+ ( -- * Core+ STM.STM+ , atomically+ , retrySTM+ , checkSTM++ -- * TVar+ , STM.TVar+ , newTVarIO+ , readTVarIO+ , STM.newTVar+ , STM.readTVar+ , STM.writeTVar+ , STM.modifyTVar+ , STM.modifyTVar'+ , STM.swapTVar+ , registerDelay+ , mkWeakTVar++ -- * TMVar+ , STM.TMVar+ , STM.newTMVar+ , STM.newEmptyTMVar+ , newTMVarIO+ , newEmptyTMVarIO+ , STM.takeTMVar+ , STM.putTMVar+ , STM.readTMVar+ , STM.tryReadTMVar+ , STM.swapTMVar+ , STM.tryTakeTMVar+ , STM.isEmptyTMVar+ , mkWeakTMVar++ -- * TChan+ , STM.TChan+ , STM.newTChan+ , newTChanIO+ , STM.newBroadcastTChan+ , newBroadcastTChanIO+ , STM.dupTChan+ , STM.cloneTChan+ , STM.readTChan+ , STM.tryReadTChan+ , STM.peekTChan+ , STM.tryPeekTChan+ , STM.writeTChan+ , STM.unGetTChan+ , STM.isEmptyTChan++ -- * TQueue+ , STM.TQueue+ , STM.newTQueue+ , newTQueueIO+ , STM.readTQueue+ , STM.tryReadTQueue+ , STM.peekTQueue+ , STM.tryPeekTQueue+ , STM.writeTQueue+ , STM.unGetTQueue+ , STM.isEmptyTQueue++ -- * TBQueue+ , STM.TBQueue+ , STM.newTBQueue+ , newTBQueueIO+ , STM.readTBQueue+ , STM.tryReadTBQueue+ , STM.peekTBQueue+ , STM.tryPeekTBQueue+ , STM.writeTBQueue+ , STM.unGetTBQueue+ , STM.isEmptyTBQueue+ , STM.isFullTBQueue+ ) where++import Control.Concurrent.STM (STM, TVar, TMVar, TChan, TQueue, TBQueue)+import qualified Control.Concurrent.STM as STM+import Control.Monad.IO.Unlift+import System.Mem.Weak (Weak)++-- | Lifted version of 'STM.atomically'+--+-- @since 0.2.1.0+atomically :: MonadIO m => STM a -> m a+atomically = liftIO . STM.atomically++-- | Renamed 'STM.retry' for unqualified export+--+-- @since 0.2.1.0+retrySTM :: STM a+retrySTM = STM.retry++-- | Renamed 'STM.check' for unqualified export+--+-- @since 0.2.1.0+checkSTM :: Bool -> STM ()+checkSTM = STM.check++-- | Lifted version of 'STM.newTVarIO'+--+-- @since 0.2.1.0+newTVarIO :: MonadIO m => a -> m (TVar a)+newTVarIO = liftIO . STM.newTVarIO++-- | Lifted version of 'STM.readTVarIO'+--+-- @since 0.2.1.0+readTVarIO :: MonadIO m => TVar a -> m a+readTVarIO = liftIO . STM.readTVarIO++-- | Lifted version of 'STM.registerDelay'+--+-- @since 0.2.1.0+registerDelay :: MonadIO m => Int -> m (TVar Bool)+registerDelay = liftIO . STM.registerDelay++-- | Lifted version of 'STM.mkWeakTVar'+--+-- @since 0.2.1.0+mkWeakTVar :: MonadUnliftIO m => TVar a -> m () -> m (Weak (TVar a))+mkWeakTVar var final = withRunInIO $ \run -> STM.mkWeakTVar var (run final)++-- | Lifted version of 'STM.newTMVarIO'+--+-- @since 0.2.1.0+newTMVarIO :: MonadIO m => a -> m (TMVar a)+newTMVarIO = liftIO . STM.newTMVarIO++-- | Lifted version of 'STM.newEmptyTMVarIO'+--+-- @since 0.2.1.0+newEmptyTMVarIO :: MonadIO m => m (TMVar a)+newEmptyTMVarIO = liftIO STM.newEmptyTMVarIO++-- | Lifted version of 'STM.mkWeakTMVar'+--+-- @since 0.2.1.0+mkWeakTMVar :: MonadUnliftIO m => TMVar a -> m () -> m (Weak (TMVar a))+mkWeakTMVar var final = withRunInIO $ \run -> STM.mkWeakTMVar var (run final)++-- | Lifted version of 'STM.newTChanIO'+--+-- @since 0.2.1.0+newTChanIO :: MonadIO m => m (TChan a)+newTChanIO = liftIO STM.newTChanIO++-- | Lifted version of 'STM.newBroadcastTChanIO'+--+-- @since 0.2.1.0+newBroadcastTChanIO :: MonadIO m => m (TChan a)+newBroadcastTChanIO = liftIO STM.newBroadcastTChanIO++-- | Lifted version of 'STM.newTQueueIO'+--+-- @since 0.2.1.0+newTQueueIO :: MonadIO m => m (TQueue a)+newTQueueIO = liftIO STM.newTQueueIO++-- | Lifted version of 'STM.newTBQueueIO'+--+-- @since 0.2.1.0+newTBQueueIO :: MonadIO m => Int -> m (TBQueue a)+newTBQueueIO = liftIO . STM.newTBQueueIO
unliftio.cabal view
@@ -2,10 +2,10 @@ -- -- see: https://github.com/sol/hpack ----- hash: 6ca5582046f74fd2e94f44a1652944e0bceb39a5a715a49b0615c8eafd8f573e+-- hash: 3d617105f39ba722d85acf902a79e88a36deefc409b7655ae9d69526e65b648f name: unliftio-version: 0.2.0.0+version: 0.2.1.0 synopsis: The MonadUnliftIO typeclass for unlifting monads to IO (batteries included) description: Please see the README.md file for details. category: Control@@ -31,6 +31,7 @@ , deepseq , directory , filepath+ , stm >=2.4.3 , transformers , unliftio-core if !os(Windows)@@ -45,6 +46,7 @@ UnliftIO.IO UnliftIO.IORef UnliftIO.MVar+ UnliftIO.STM UnliftIO.Temporary UnliftIO.Timeout other-modules: