ghc-mod-5.5.0.0: Happy Haskell Programming

Safe HaskellNone
LanguageHaskell2010

Language.Haskell.GhcMod.Monad.Types

Contents

Synopsis

Monad Types

type GhcModT m = GmT (GmOutT m)

newtype GmlT m a

Constructors

GmlT 

Fields

unGmlT :: GhcModT m a
 

Instances

MonadTrans GmlT 
MonadTransControl GmlT 
MonadBaseControl IO m => MonadBase IO (GmlT m) 
MonadBaseControl IO m => MonadBaseControl IO (GmlT m) 
Monad m => MonadError GhcModError (GmlT m) 
Monad m => Monad (GmlT m) 
Functor m => Functor (GmlT m) 
Monad m => Applicative (GmlT m) 
Monad m => Alternative (GmlT m) 
Monad m => MonadPlus (GmlT m) 
(Monad m, GmEnv (GhcModT m)) => GmEnv (GmlT m) 
(Monad m, GmLog (GhcModT m)) => GmLog (GmlT m) 
Monad m => GmOut (GmlT m) 
(Monad m, GmState (GhcModT m)) => GmState (GmlT m) 
type StT GmlT a = StT GmT a 
type StM (GmlT m) a = StM (GmT m) a 

type GmGhc m = (IOish m, GhcMonad m)

type IOish m = (Functor m, MonadIO m, MonadBaseControl IO m, ExceptionMonad m)

A constraint alias (-XConstraintKinds) to make functions dealing with GhcModT somewhat cleaner.

Basicially an IOish m => m is a Monad supporting arbitrary IO and exception handling. Usually this will simply be IO but we parametrise it in the exported API so users have the option to use a custom inner monad.

Environment, state and logging

data GhcModEnv

Constructors

GhcModEnv 

data GmGhcSession

Constructors

GmGhcSession 

Accessing GhcModEnv, GhcModState and GhcModLog

data GhcModError

Constructors

GMENoMsg

Unknown error

GMEString String

Some Error with a message. These are produced mostly by fail calls on GhcModT.

GMECabalConfigure GhcModError

Configuring a cabal project failed.

GMEStackConfigure GhcModError

Configuring a stack project failed.

GMEStackBootstrap GhcModError

Bootstrapping stack environment failed (process exited with failure)

GMECabalCompAssignment [(Either FilePath ModuleName, Set ChComponentName)]

Could not find a consistent component assignment for modules

GMEProcess String String [String] (Either Int GhcModError)

Launching an operating system process failed. Fields in order: function, command, arguments, (stdout, stderr, exitcode)

GMENoCabalFile

No cabal file found.

GMETooManyCabalFiles [FilePath]

Too many cabal files found.

type Gm m = (GmEnv m, GmState m, GmLog m, GmOut m)

class Monad m => GmEnv m where

Minimal complete definition

(gmeAsk | gmeReader), gmeLocal

Methods

gmeAsk :: m GhcModEnv

gmeReader :: (GhcModEnv -> a) -> m a

gmeLocal :: (GhcModEnv -> GhcModEnv) -> m a -> m a

Instances

(Monad m, GmEnv (GhcModT m)) => GmEnv (GmlT m) 
Monad m => GmEnv (GmT m) 
GmEnv m => GmEnv (GmOutT m) 
GmEnv m => GmEnv (JournalT GhcModLog m) 
GmEnv m => GmEnv (StateT s m) 
GmEnv m => GmEnv (ErrorT GhcModError m) 

class Monad m => GmState m where

Minimal complete definition

gmsState | gmsGet, gmsPut

Methods

gmsGet :: m GhcModState

gmsPut :: GhcModState -> m ()

gmsState :: (GhcModState -> (a, GhcModState)) -> m a

Instances

GmState m => GmState (MaybeT m) 
(Monad m, GmState (GhcModT m)) => GmState (GmlT m) 
Monad m => GmState (GmT m) 
GmState m => GmState (StateT s m) 
Monad m => GmState (StateT GhcModState m) 

class Monad m => GmLog m where

Methods

gmlJournal :: GhcModLog -> m ()

gmlHistory :: m GhcModLog

gmlClear :: m ()

Instances

(Monad m, GmLog m) => GmLog (MaybeT m) 
(Monad m, GmLog (GhcModT m)) => GmLog (GmlT m) 
Monad m => GmLog (GmT m) 
GmLog m => GmLog (GmOutT m) 
Monad m => GmLog (LogDiscardT m) 
Monad m => GmLog (JournalT GhcModLog m) 
(Monad m, GmLog m) => GmLog (ReaderT r m) 
(Monad m, GmLog m) => GmLog (StateT s m) 
(Monad m, GmLog m, Error e) => GmLog (ErrorT e m) 

class Monad m => GmOut m where

Methods

gmoAsk :: m GhcModOut

Instances

GmOut m => GmOut (MaybeT m) 
Monad m => GmOut (GmlT m) 
GmOut m => GmOut (GmT m) 
Monad m => GmOut (GmOutT m) 
GmOut m => GmOut (JournalT w m) 
GmOut m => GmOut (StateT s m) 

cradle :: GmEnv m => m Cradle

withOptions :: GmEnv m => (Options -> Options) -> m a -> m a

Re-exporting convenient stuff

class MonadIOC m => MonadIO m where

Methods

liftIO :: IO a -> m a

gmlGetSession :: (MonadIO m, MonadBaseControl IO m) => GmlT m HscEnv

Get the underlying GHC session

gmlSetSession :: (MonadIO m, MonadBaseControl IO m) => HscEnv -> GmlT m ()

Set the underlying GHC session