ghc-9.8.0.20230929: The GHC API
Safe HaskellNone
LanguageHaskell2010

GHC.Data.IOEnv

Description

The IO Monad with an environment

The environment is passed around as a Reader monad but as its in the IO monad, mutable references can be used for updating state.

Synopsis

Documentation

data IOEnv env a Source #

Instances

Instances details
Quasi TcM Source # 
Instance details

Defined in GHC.Tc.Gen.Splice

MonadFail (IOEnv m) Source # 
Instance details

Defined in GHC.Data.IOEnv

Methods

fail :: String -> IOEnv m a Source #

MonadFix (IOEnv env) Source # 
Instance details

Defined in GHC.Data.IOEnv

Methods

mfix :: (a -> IOEnv env a) -> IOEnv env a Source #

MonadIO (IOEnv env) Source # 
Instance details

Defined in GHC.Data.IOEnv

Methods

liftIO :: IO a -> IOEnv env a Source #

Alternative (IOEnv env) Source # 
Instance details

Defined in GHC.Data.IOEnv

Methods

empty :: IOEnv env a Source #

(<|>) :: IOEnv env a -> IOEnv env a -> IOEnv env a Source #

some :: IOEnv env a -> IOEnv env [a] Source #

many :: IOEnv env a -> IOEnv env [a] Source #

Applicative (IOEnv m) Source # 
Instance details

Defined in GHC.Data.IOEnv

Methods

pure :: a -> IOEnv m a Source #

(<*>) :: IOEnv m (a -> b) -> IOEnv m a -> IOEnv m b Source #

liftA2 :: (a -> b -> c) -> IOEnv m a -> IOEnv m b -> IOEnv m c Source #

(*>) :: IOEnv m a -> IOEnv m b -> IOEnv m b Source #

(<*) :: IOEnv m a -> IOEnv m b -> IOEnv m a Source #

Functor (IOEnv env) Source # 
Instance details

Defined in GHC.Data.IOEnv

Methods

fmap :: (a -> b) -> IOEnv env a -> IOEnv env b Source #

(<$) :: a -> IOEnv env b -> IOEnv env a Source #

Monad (IOEnv m) Source # 
Instance details

Defined in GHC.Data.IOEnv

Methods

(>>=) :: IOEnv m a -> (a -> IOEnv m b) -> IOEnv m b Source #

(>>) :: IOEnv m a -> IOEnv m b -> IOEnv m b Source #

return :: a -> IOEnv m a Source #

MonadPlus (IOEnv env) Source # 
Instance details

Defined in GHC.Data.IOEnv

Methods

mzero :: IOEnv env a Source #

mplus :: IOEnv env a -> IOEnv env a -> IOEnv env a Source #

MonadCatch (IOEnv env) Source # 
Instance details

Defined in GHC.Data.IOEnv

Methods

catch :: (HasCallStack, Exception e) => IOEnv env a -> (e -> IOEnv env a) -> IOEnv env a Source #

MonadMask (IOEnv env) Source # 
Instance details

Defined in GHC.Data.IOEnv

Methods

mask :: HasCallStack => ((forall a. IOEnv env a -> IOEnv env a) -> IOEnv env b) -> IOEnv env b Source #

uninterruptibleMask :: HasCallStack => ((forall a. IOEnv env a -> IOEnv env a) -> IOEnv env b) -> IOEnv env b Source #

generalBracket :: HasCallStack => IOEnv env a -> (a -> ExitCase b -> IOEnv env c) -> (a -> IOEnv env b) -> IOEnv env (b, c) Source #

MonadThrow (IOEnv env) Source # 
Instance details

Defined in GHC.Data.IOEnv

Methods

throwM :: (HasCallStack, Exception e) => e -> IOEnv env a Source #

ContainsDynFlags env => HasDynFlags (IOEnv env) Source # 
Instance details

Defined in GHC.Data.IOEnv

ContainsHooks env => HasHooks (IOEnv env) Source # 
Instance details

Defined in GHC.Data.IOEnv

Methods

getHooks :: IOEnv env Hooks Source #

MonadThings (IOEnv (Env DsGblEnv DsLclEnv)) Source # 
Instance details

Defined in GHC.HsToCore.Monad

MonadThings (IOEnv (Env TcGblEnv TcLclEnv)) Source # 
Instance details

Defined in GHC.Tc.Utils.Env

MonadUnique (IOEnv (Env gbl lcl)) Source # 
Instance details

Defined in GHC.Tc.Utils.Monad

ContainsModule env => HasModule (IOEnv env) Source # 
Instance details

Defined in GHC.Data.IOEnv

Methods

getModule :: IOEnv env Module Source #

ContainsLogger env => HasLogger (IOEnv env) Source # 
Instance details

Defined in GHC.Data.IOEnv

Methods

getLogger :: IOEnv env Logger Source #

failM :: IOEnv env a Source #

getEnv :: IOEnv env env Source #

setEnv :: env' -> IOEnv env' a -> IOEnv env a Source #

Perform a computation with a different environment

updEnv :: (env -> env') -> IOEnv env' a -> IOEnv env a Source #

Perform a computation with an altered environment

runIOEnv :: env -> IOEnv env a -> IO a Source #

tryM :: IOEnv env r -> IOEnv env (Either IOEnvFailure r) Source #

fixM :: (a -> IOEnv env a) -> IOEnv env a Source #

data IORef a Source #

A mutable variable in the IO monad.

>>> import Data.IORef
>>> r <- newIORef 0
>>> readIORef r
0
>>> writeIORef r 1
>>> readIORef r
1
>>> atomicWriteIORef r 2
>>> readIORef r
2
>>> modifyIORef' r (+ 1)
>>> readIORef r
3
>>> atomicModifyIORef' r (\a -> (a + 1, ()))
>>> readIORef r
4

See also STRef and MVar.

Instances

Instances details
NFData1 IORef

Since: deepseq-1.4.3.0

Instance details

Defined in Control.DeepSeq

Methods

liftRnf :: (a -> ()) -> IORef a -> () Source #

NFData (IORef a)

NOTE: Only strict in the reference and not the referenced value.

Since: deepseq-1.4.2.0

Instance details

Defined in Control.DeepSeq

Methods

rnf :: IORef a -> () Source #

Eq (IORef a)

Pointer equality.

Since: base-4.0.0.0

Instance details

Defined in GHC.IORef

Methods

(==) :: IORef a -> IORef a -> Bool #

(/=) :: IORef a -> IORef a -> Bool #

newMutVar :: a -> IOEnv env (IORef a) Source #

readMutVar :: IORef a -> IOEnv env a Source #

writeMutVar :: IORef a -> a -> IOEnv env () Source #

updMutVar :: IORef a -> (a -> a) -> IOEnv env () Source #

atomicUpdMutVar :: IORef a -> (a -> (a, b)) -> IOEnv env b Source #

Atomically update the reference. Does not force the evaluation of the new variable contents. For strict update, use atomicUpdMutVar'.

atomicUpdMutVar' :: IORef a -> (a -> (a, b)) -> IOEnv env b Source #

Strict variant of atomicUpdMutVar.