planet-mitchell-0.1.0: Planet Mitchell

Safe HaskellNone
LanguageHaskell2010

IO

Contents

Synopsis

IO

data IO a #

A value of type IO a is a computation which, when performed, does some I/O before returning a value of type a.

There is really only one way to "perform" an I/O action: bind it to Main.main in your program. When your program is run, the I/O will be performed. It isn't possible to perform I/O from an arbitrary function, unless that function is itself in the IO monad and called at some point, directly or indirectly, from Main.main.

IO is a monad, so IO actions can be combined using either the do-notation or the >> and >>= operations from the Monad class.

Instances
Monad IO

Since: base-2.1

Instance details

Defined in GHC.Base

Methods

(>>=) :: IO a -> (a -> IO b) -> IO b #

(>>) :: IO a -> IO b -> IO b #

return :: a -> IO a #

fail :: String -> IO a #

Functor IO

Since: base-2.1

Instance details

Defined in GHC.Base

Methods

fmap :: (a -> b) -> IO a -> IO b #

(<$) :: a -> IO b -> IO a #

MonadFix IO

Since: base-2.1

Instance details

Defined in Control.Monad.Fix

Methods

mfix :: (a -> IO a) -> IO a #

MonadFail IO

Since: base-4.9.0.0

Instance details

Defined in Control.Monad.Fail

Methods

fail :: String -> IO a #

Applicative IO

Since: base-2.1

Instance details

Defined in GHC.Base

Methods

pure :: a -> IO a #

(<*>) :: IO (a -> b) -> IO a -> IO b #

liftA2 :: (a -> b -> c) -> IO a -> IO b -> IO c #

(*>) :: IO a -> IO b -> IO b #

(<*) :: IO a -> IO b -> IO a #

Alternative IO

Since: base-4.9.0.0

Instance details

Defined in GHC.Base

Methods

empty :: IO a #

(<|>) :: IO a -> IO a -> IO a #

some :: IO a -> IO [a] #

many :: IO a -> IO [a] #

MonadPlus IO

Since: base-4.9.0.0

Instance details

Defined in GHC.Base

Methods

mzero :: IO a #

mplus :: IO a -> IO a -> IO a #

MonadIO IO

Since: base-4.9.0.0

Instance details

Defined in Control.Monad.IO.Class

Methods

liftIO :: IO a -> IO a #

Compactable IO 
Instance details

Defined in Control.Compactable

Methods

compact :: IO (Maybe a) -> IO a #

separate :: IO (Either l r) -> (IO l, IO r) #

filter :: (a -> Bool) -> IO a -> IO a #

partition :: (a -> Bool) -> IO a -> (IO a, IO a) #

fmapMaybe :: Functor IO => (a -> Maybe b) -> IO a -> IO b #

fmapEither :: Functor IO => (a -> Either l r) -> IO a -> (IO l, IO r) #

applyMaybe :: Applicative IO => IO (a -> Maybe b) -> IO a -> IO b #

applyEither :: Applicative IO => IO (a -> Either l r) -> IO a -> (IO l, IO r) #

bindMaybe :: Monad IO => IO a -> (a -> IO (Maybe b)) -> IO b #

bindEither :: Monad IO => IO a -> (a -> IO (Either l r)) -> (IO l, IO r) #

traverseMaybe :: (Applicative g, Traversable IO) => (a -> g (Maybe b)) -> IO a -> g (IO b) #

traverseEither :: (Applicative g, Traversable IO) => (a -> g (Either l r)) -> IO a -> g (IO l, IO r) #

CompactFold IO 
Instance details

Defined in Control.Compactable

Methods

compactFold :: Foldable g => IO (g a) -> IO a #

separateFold :: Bifoldable g => IO (g a b) -> (IO a, IO b) #

fmapFold :: (Functor IO, Foldable g) => (a -> g b) -> IO a -> IO b #

fmapBifold :: (Functor IO, Bifoldable g) => (a -> g l r) -> IO a -> (IO l, IO r) #

applyFold :: (Applicative IO, Foldable g) => IO (a -> g b) -> IO a -> IO b #

applyBifold :: (Applicative IO, Bifoldable g) => IO (a -> g l r) -> IO a -> (IO l, IO r) #

bindFold :: (Monad IO, Foldable g) => IO a -> (a -> IO (g b)) -> IO b #

bindBifold :: (Monad IO, Bifoldable g) => IO a -> (a -> IO (g l r)) -> (IO l, IO r) #

traverseFold :: (Applicative h, Foldable g, Traversable IO) => (a -> h (g b)) -> IO a -> h (IO b) #

traverseBifold :: (Applicative h, Bifoldable g, Traversable IO) => (a -> h (g l r)) -> IO a -> h (IO l, IO r) #

MonadThrow IO 
Instance details

Defined in Control.Monad.Catch

Methods

throwM :: Exception e => e -> IO a #

MonadCatch IO 
Instance details

Defined in Control.Monad.Catch

Methods

catch :: Exception e => IO a -> (e -> IO a) -> IO a #

MonadMask IO 
Instance details

Defined in Control.Monad.Catch

Methods

mask :: ((forall a. IO a -> IO a) -> IO b) -> IO b #

uninterruptibleMask :: ((forall a. IO a -> IO a) -> IO b) -> IO b #

generalBracket :: IO a -> (a -> ExitCase b -> IO c) -> (a -> IO b) -> IO (b, c) #

PrimMonad IO 
Instance details

Defined in Control.Monad.Primitive

Associated Types

type PrimState IO :: * #

Methods

primitive :: (State# (PrimState IO) -> (#State# (PrimState IO), a#)) -> IO a #

Apply IO 
Instance details

Defined in Data.Functor.Bind.Class

Methods

(<.>) :: IO (a -> b) -> IO a -> IO b #

(.>) :: IO a -> IO b -> IO b #

(<.) :: IO a -> IO b -> IO a #

liftF2 :: (a -> b -> c) -> IO a -> IO b -> IO c #

Pointed IO 
Instance details

Defined in Data.Pointed

Methods

point :: a -> IO a #

PrimBase IO 
Instance details

Defined in Control.Monad.Primitive

Methods

internal :: IO a -> State# (PrimState IO) -> (#State# (PrimState IO), a#) #

Plus IO 
Instance details

Defined in Data.Functor.Plus

Methods

zero :: IO a #

Alt IO

This instance does not actually satisfy the (<.>) right distributive law It instead satisfies the "Left-Catch" law

Instance details

Defined in Data.Functor.Alt

Methods

(<!>) :: IO a -> IO a -> IO a #

some :: Applicative IO => IO a -> IO [a] #

many :: Applicative IO => IO a -> IO [a] #

Bind IO 
Instance details

Defined in Data.Functor.Bind.Class

Methods

(>>-) :: IO a -> (a -> IO b) -> IO b #

join :: IO (IO a) -> IO a #

Quasi IO 
Instance details

Defined in Language.Haskell.TH.Syntax

MonadUnliftIO IO 
Instance details

Defined in Control.Monad.IO.Unlift

Methods

askUnliftIO :: IO (UnliftIO IO) #

withRunInIO :: ((forall a. IO a -> IO a) -> IO b) -> IO b #

MonadError IOException IO 
Instance details

Defined in Control.Monad.Error.Class

Methods

throwError :: IOException -> IO a #

catchError :: IO a -> (IOException -> IO a) -> IO a #

MonadBase IO IO 
Instance details

Defined in Control.Monad.Base

Methods

liftBase :: IO α -> IO α #

() :=> (Monad IO) 
Instance details

Defined in Data.Constraint

Methods

ins :: () :- Monad IO #

() :=> (Functor IO) 
Instance details

Defined in Data.Constraint

Methods

ins :: () :- Functor IO #

() :=> (Applicative IO) 
Instance details

Defined in Data.Constraint

Methods

ins :: () :- Applicative IO #

Semigroup a => Semigroup (IO a)

Since: base-4.10.0.0

Instance details

Defined in GHC.Base

Methods

(<>) :: IO a -> IO a -> IO a #

sconcat :: NonEmpty (IO a) -> IO a #

stimes :: Integral b => b -> IO a -> IO a #

Monoid a => Monoid (IO a)

Since: base-4.9.0.0

Instance details

Defined in GHC.Base

Methods

mempty :: IO a #

mappend :: IO a -> IO a -> IO a #

mconcat :: [IO a] -> IO a #

a ~ () => PrintfType (IO a)

Since: base-4.7.0.0

Instance details

Defined in Text.Printf

Methods

spr :: String -> [UPrintf] -> IO a

a ~ () => HPrintfType (IO a)

Since: base-4.7.0.0

Instance details

Defined in Text.Printf

Methods

hspr :: Handle -> String -> [UPrintf] -> IO a

(Semigroup a) :=> (Semigroup (IO a)) 
Instance details

Defined in Data.Constraint

Methods

ins :: Semigroup a :- Semigroup (IO a) #

(Monoid a) :=> (Monoid (IO a)) 
Instance details

Defined in Data.Constraint

Methods

ins :: Monoid a :- Monoid (IO a) #

type PrimState IO 
Instance details

Defined in Control.Monad.Primitive

class Monad m => MonadIO (m :: * -> *) where #

Monads in which IO computations may be embedded. Any monad built by applying a sequence of monad transformers to the IO monad will be an instance of this class.

Instances should satisfy the following laws, which state that liftIO is a transformer of monads:

Minimal complete definition

liftIO

Methods

liftIO :: IO a -> m a #

Lift a computation from the IO monad.

Instances
MonadIO IO

Since: base-4.9.0.0

Instance details

Defined in Control.Monad.IO.Class

Methods

liftIO :: IO a -> IO a #

MonadIO Q 
Instance details

Defined in Language.Haskell.TH.Syntax

Methods

liftIO :: IO a -> Q a #

MonadIO Managed 
Instance details

Defined in Control.Monad.Managed

Methods

liftIO :: IO a -> Managed a #

MonadIO MomentIO 
Instance details

Defined in Reactive.Banana.Types

Methods

liftIO :: IO a -> MomentIO a #

MonadIO m => MonadIO (MaybeT m) 
Instance details

Defined in Control.Monad.Trans.Maybe

Methods

liftIO :: IO a -> MaybeT m a #

MonadIO m => MonadIO (ListT m) 
Instance details

Defined in List.Transformer

Methods

liftIO :: IO a -> ListT m a #

MonadIO m => MonadIO (LogicT m) 
Instance details

Defined in Control.Monad.Logic

Methods

liftIO :: IO a -> LogicT m a #

MonadIO m => MonadIO (IdentityT m) 
Instance details

Defined in Control.Monad.Trans.Identity

Methods

liftIO :: IO a -> IdentityT m a #

MonadIO m => MonadIO (ExceptT e m) 
Instance details

Defined in Control.Monad.Trans.Except

Methods

liftIO :: IO a -> ExceptT e m a #

(Functor f, MonadIO m) => MonadIO (FreeT f m) 
Instance details

Defined in Control.Monad.Trans.Free

Methods

liftIO :: IO a -> FreeT f m a #

(Error e, MonadIO m) => MonadIO (ErrorT e m) 
Instance details

Defined in Control.Monad.Trans.Error

Methods

liftIO :: IO a -> ErrorT e m a #

MonadIO m => MonadIO (StateT s m) 
Instance details

Defined in Control.Monad.Trans.State.Lazy

Methods

liftIO :: IO a -> StateT s m a #

MonadIO m => MonadIO (StateT s m) 
Instance details

Defined in Control.Monad.Trans.State.Strict

Methods

liftIO :: IO a -> StateT s m a #

MonadIO m => MonadIO (WriterT w m) 
Instance details

Defined in Control.Monad.Trans.Writer.CPS.Internal

Methods

liftIO :: IO a -> WriterT w m a #

MonadIO m => MonadIO (ReaderT r m) 
Instance details

Defined in Control.Monad.Trans.Reader

Methods

liftIO :: IO a -> ReaderT r m a #

(Stream s, MonadIO m) => MonadIO (ParsecT e s m) 
Instance details

Defined in Text.Megaparsec.Internal

Methods

liftIO :: IO a -> ParsecT e s m a #

MonadIO m => MonadIO (ContT r m) 
Instance details

Defined in Control.Monad.Trans.Cont

Methods

liftIO :: IO a -> ContT r m a #

fixIO :: (a -> IO a) -> IO a #

The implementation of mfix for IO. If the function passed to fixIO inspects its argument, the resulting action will throw FixIOException.

timeout :: MonadUnliftIO m => Int -> m a -> m (Maybe a) #

Unlifted timeout.

Since: unliftio-0.1.0.0

once :: IO a -> IO (IO a) #

Given an action, produce a wrapped action that runs at most once. If the function raises an exception, the same exception will be reraised each time.

let x ||| y = do t1 <- onceFork x; t2 <- onceFork y; t1; t2
\(x :: IO Int) -> void (once x) == return ()
\(x :: IO Int) -> join (once x) == x
\(x :: IO Int) -> (do y <- once x; y; y) == x
\(x :: IO Int) -> (do y <- once x; y ||| y) == x

onceFork :: IO a -> IO (IO a) #

Like once, but immediately starts running the computation on a background thread.

\(x :: IO Int) -> join (onceFork x) == x
\(x :: IO Int) -> (do a <- onceFork x; a; a) == x

Memoized IO

data Memoized a #

A "run once" value, with results saved. Extract the value with runMemoized. For single-threaded usage, you can use memoizeRef to create a value. If you need guarantees that only one thread will run the action at a time, use memoizeMVar.

Note that this type provides a Show instance for convenience, but not useful information can be provided.

Since: unliftio-0.2.8.0

Instances
Monad Memoized 
Instance details

Defined in UnliftIO.Memoize

Methods

(>>=) :: Memoized a -> (a -> Memoized b) -> Memoized b #

(>>) :: Memoized a -> Memoized b -> Memoized b #

return :: a -> Memoized a #

fail :: String -> Memoized a #

Functor Memoized 
Instance details

Defined in UnliftIO.Memoize

Methods

fmap :: (a -> b) -> Memoized a -> Memoized b #

(<$) :: a -> Memoized b -> Memoized a #

Applicative Memoized 
Instance details

Defined in UnliftIO.Memoize

Methods

pure :: a -> Memoized a #

(<*>) :: Memoized (a -> b) -> Memoized a -> Memoized b #

liftA2 :: (a -> b -> c) -> Memoized a -> Memoized b -> Memoized c #

(*>) :: Memoized a -> Memoized b -> Memoized b #

(<*) :: Memoized a -> Memoized b -> Memoized a #

Show (Memoized a) 
Instance details

Defined in UnliftIO.Memoize

Methods

showsPrec :: Int -> Memoized a -> ShowS #

show :: Memoized a -> String #

showList :: [Memoized a] -> ShowS #

runMemoized :: MonadIO m => Memoized a -> m a #

Extract a value from a Memoized, running an action if no cached value is available.

Since: unliftio-0.2.8.0

memoizeMVar :: MonadUnliftIO m => m a -> m (Memoized a) #

Same as memoizeRef, but uses an MVar to ensure that an action is only run once, even in a multithreaded application.

Since: unliftio-0.2.8.0

IO exceptions