packages feed

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 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: