- class MonadIO m => MonadInvertIO m where
- data InvertedIO m :: * -> *
- type InvertedArg m
- invertIO :: m a -> InvertedArg m -> IO (InvertedIO m a)
- revertIO :: (InvertedArg m -> IO (InvertedIO m a)) -> m a
- finally :: MonadInvertIO m => m a -> m b -> m a
- catch :: (Exception e, MonadInvertIO m) => m a -> (e -> m a) -> m a
- block :: MonadInvertIO m => m a -> m a
- unblock :: MonadInvertIO m => m a -> m a
- bracket :: MonadInvertIO m => m a -> (a -> m b) -> (a -> m c) -> m c
- bracket_ :: MonadInvertIO m => m a -> m b -> m c -> m c
- onException :: MonadInvertIO m => m a -> m b -> m a
- alloca :: (Storable a, MonadInvertIO m) => (Ptr a -> m b) -> m b
- allocaBytes :: MonadInvertIO m => Int -> (Ptr a -> m b) -> m b
- withForeignPtr :: MonadInvertIO m => ForeignPtr a -> (Ptr a -> m b) -> m b
Typeclass
class MonadIO m => MonadInvertIO m whereSource
data InvertedIO m :: * -> *Source
type InvertedArg m Source
invertIO :: m a -> InvertedArg m -> IO (InvertedIO m a)Source
revertIO :: (InvertedArg m -> IO (InvertedIO m a)) -> m aSource
MonadInvertIO IO | |
MonadInvertIO m => MonadInvertIO (IdentityT m) | |
(Monoid w, MonadInvertIO m) => MonadInvertIO (WriterT w m) | |
MonadInvertIO m => MonadInvertIO (StateT s m) | |
MonadInvertIO m => MonadInvertIO (ReaderT r m) | |
(Error e, MonadInvertIO m) => MonadInvertIO (ErrorT e m) | |
MonadInvertIO m => MonadInvertIO (MEitherT e m) |
Exceptions
finally :: MonadInvertIO m => m a -> m b -> m aSource
catch :: (Exception e, MonadInvertIO m) => m a -> (e -> m a) -> m aSource
block :: MonadInvertIO m => m a -> m aSource
unblock :: MonadInvertIO m => m a -> m aSource
bracket :: MonadInvertIO m => m a -> (a -> m b) -> (a -> m c) -> m cSource
There is a very important distinction between this function and
bracket_
: in this version, the monadic side effects from the
initialization function and kept, while in bracket_ they are discarded.
bracket_ :: MonadInvertIO m => m a -> m b -> m c -> m cSource
See bracket
.
onException :: MonadInvertIO m => m a -> m b -> m aSource
Memory allocation
alloca :: (Storable a, MonadInvertIO m) => (Ptr a -> m b) -> m bSource
allocaBytes :: MonadInvertIO m => Int -> (Ptr a -> m b) -> m bSource
withForeignPtr :: MonadInvertIO m => ForeignPtr a -> (Ptr a -> m b) -> m bSource