ghc-mtl-1.2.1.0: An mtl compatible version of the Ghc-Api monads and monad-transformers.

Safe HaskellNone
LanguageHaskell98

Control.Monad.Ghc

Synopsis

Documentation

data Ghc a #

Instances

Monad Ghc # 

Methods

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

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

return :: a -> Ghc a #

fail :: String -> Ghc a #

Functor Ghc # 

Methods

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

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

Applicative Ghc # 

Methods

pure :: a -> Ghc a #

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

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

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

MonadIO Ghc # 

Methods

liftIO :: IO a -> Ghc a #

GhcMonad Ghc # 
HasDynFlags Ghc # 
ExceptionMonad Ghc # 

Methods

gcatch :: Exception e => Ghc a -> (e -> Ghc a) -> Ghc a #

gmask :: ((Ghc a -> Ghc a) -> Ghc b) -> Ghc b #

gbracket :: Ghc a -> (a -> Ghc b) -> (a -> Ghc c) -> Ghc c #

gfinally :: Ghc a -> Ghc b -> Ghc a #

MonadThrow Ghc # 

Methods

throwM :: Exception e => e -> Ghc a

MonadMask Ghc # 

Methods

mask :: ((forall a. Ghc a -> Ghc a) -> Ghc b) -> Ghc b

uninterruptibleMask :: ((forall a. Ghc a -> Ghc a) -> Ghc b) -> Ghc b

MonadCatch Ghc # 

Methods

catch :: Exception e => Ghc a -> (e -> Ghc a) -> Ghc a

runGhc :: Maybe FilePath -> Ghc a -> IO a #

data GhcT m a #

Instances

MonadTrans GhcT # 

Methods

lift :: Monad m => m a -> GhcT m a #

Monad m => Monad (GhcT m) # 

Methods

(>>=) :: GhcT m a -> (a -> GhcT m b) -> GhcT m b #

(>>) :: GhcT m a -> GhcT m b -> GhcT m b #

return :: a -> GhcT m a #

fail :: String -> GhcT m a #

Functor m => Functor (GhcT m) # 

Methods

fmap :: (a -> b) -> GhcT m a -> GhcT m b #

(<$) :: a -> GhcT m b -> GhcT m a #

(Functor m, Monad m) => Applicative (GhcT m) # 

Methods

pure :: a -> GhcT m a #

(<*>) :: GhcT m (a -> b) -> GhcT m a -> GhcT m b #

(*>) :: GhcT m a -> GhcT m b -> GhcT m b #

(<*) :: GhcT m a -> GhcT m b -> GhcT m a #

MonadIO m => MonadIO (GhcT m) # 

Methods

liftIO :: IO a -> GhcT m a #

(Functor m, MonadIO m, MonadCatch m, MonadMask m) => GhcMonad (GhcT m) # 

Methods

getSession :: GhcT m HscEnv #

setSession :: HscEnv -> GhcT m () #

MonadIO m => HasDynFlags (GhcT m) # 
(MonadIO m, MonadCatch m, MonadMask m) => ExceptionMonad (GhcT m) # 

Methods

gcatch :: Exception e => GhcT m a -> (e -> GhcT m a) -> GhcT m a #

gmask :: ((GhcT m a -> GhcT m a) -> GhcT m b) -> GhcT m b #

gbracket :: GhcT m a -> (a -> GhcT m b) -> (a -> GhcT m c) -> GhcT m c #

gfinally :: GhcT m a -> GhcT m b -> GhcT m a #

MonadCatch m => MonadThrow (GhcT m) # 

Methods

throwM :: Exception e => e -> GhcT m a

(MonadIO m, MonadMask m) => MonadMask (GhcT m) # 

Methods

mask :: ((forall a. GhcT m a -> GhcT m a) -> GhcT m b) -> GhcT m b

uninterruptibleMask :: ((forall a. GhcT m a -> GhcT m a) -> GhcT m b) -> GhcT m b

(MonadIO m, MonadCatch m, MonadMask m) => MonadCatch (GhcT m) # 

Methods

catch :: Exception e => GhcT m a -> (e -> GhcT m a) -> GhcT m a

runGhcT :: (Functor m, MonadIO m, MonadCatch m, MonadMask m) => Maybe FilePath -> GhcT m a -> m a #

class (Functor m, MonadIO m, ExceptionMonad m, HasDynFlags m) => GhcMonad m where #

A monad that has all the features needed by GHC API calls.

In short, a GHC monad

  • allows embedding of IO actions,
  • can log warnings,
  • allows handling of (extensible) exceptions, and
  • maintains a current session.

If you do not use Ghc or GhcT, make sure to call initGhcMonad before any call to the GHC API functions can occur.

Minimal complete definition

getSession, setSession

Methods

getSession :: m HscEnv #

setSession :: HscEnv -> m () #

Instances

GhcMonad Ghc 
GhcMonad Ghc # 
ExceptionMonad m => GhcMonad (GhcT m) 

Methods

getSession :: GhcT m HscEnv #

setSession :: HscEnv -> GhcT m () #

(Functor m, MonadIO m, MonadCatch m, MonadMask m) => GhcMonad (GhcT m) # 

Methods

getSession :: GhcT m HscEnv #

setSession :: HscEnv -> GhcT m () #