haskell-tools-refactor-0.1.3.0: Refactoring Tool for Haskell

Safe HaskellNone
LanguageHaskell2010

Language.Haskell.Tools.Refactor.RefactorBase

Contents

Synopsis

Documentation

data RefactorCtx dom Source #

The information a refactoring can use

Constructors

RefactorCtx 

Fields

Instances

Monad m => MonadReader (RefactorCtx dom) (RefactorT dom m) Source # 

Methods

ask :: RefactorT dom m (RefactorCtx dom) #

local :: (RefactorCtx dom -> RefactorCtx dom) -> RefactorT dom m a -> RefactorT dom m a #

reader :: (RefactorCtx dom -> a) -> RefactorT dom m a #

runRefactor :: SemanticInfo' dom SameInfoModuleCls ~ ModuleInfo n => Ann Module dom SrcTemplateStage -> (Ann Module dom SrcTemplateStage -> RefactoredModule dom) -> Ghc (Either String (Ann Module dom SrcTemplateStage)) Source #

Performs the given refactoring, transforming it into a Ghc action

addGeneratedImports :: Monad m => ReaderT (RefactorCtx dom) m (Ann Module dom SrcTemplateStage, [Name]) -> ReaderT (RefactorCtx dom) m (Ann Module dom SrcTemplateStage) Source #

Adds the imports that bring names into scope that are needed by the refactoring

newtype RefactorT dom m a Source #

Input and output information for the refactoring

Constructors

RefactorT 

Fields

Instances

MonadTrans (RefactorT dom) Source # 

Methods

lift :: Monad m => m a -> RefactorT dom m a #

Monad m => MonadReader (RefactorCtx dom) (RefactorT dom m) Source # 

Methods

ask :: RefactorT dom m (RefactorCtx dom) #

local :: (RefactorCtx dom -> RefactorCtx dom) -> RefactorT dom m a -> RefactorT dom m a #

reader :: (RefactorCtx dom -> a) -> RefactorT dom m a #

Monad m => MonadWriter [Name] (RefactorT dom m) Source # 

Methods

writer :: (a, [Name]) -> RefactorT dom m a #

tell :: [Name] -> RefactorT dom m () #

listen :: RefactorT dom m a -> RefactorT dom m (a, [Name]) #

pass :: RefactorT dom m (a, [Name] -> [Name]) -> RefactorT dom m a #

Monad m => Monad (RefactorT dom m) Source # 

Methods

(>>=) :: RefactorT dom m a -> (a -> RefactorT dom m b) -> RefactorT dom m b #

(>>) :: RefactorT dom m a -> RefactorT dom m b -> RefactorT dom m b #

return :: a -> RefactorT dom m a #

fail :: String -> RefactorT dom m a #

Functor m => Functor (RefactorT dom m) Source # 

Methods

fmap :: (a -> b) -> RefactorT dom m a -> RefactorT dom m b #

(<$) :: a -> RefactorT dom m b -> RefactorT dom m a #

Applicative m => Applicative (RefactorT dom m) Source # 

Methods

pure :: a -> RefactorT dom m a #

(<*>) :: RefactorT dom m (a -> b) -> RefactorT dom m a -> RefactorT dom m b #

(*>) :: RefactorT dom m a -> RefactorT dom m b -> RefactorT dom m b #

(<*) :: RefactorT dom m a -> RefactorT dom m b -> RefactorT dom m a #

MonadIO m => MonadIO (RefactorT dom m) Source # 

Methods

liftIO :: IO a -> RefactorT dom m a #

GhcMonad m => GhcMonad (RefactorT dom m) Source # 

Methods

getSession :: RefactorT dom m HscEnv #

setSession :: HscEnv -> RefactorT dom m () #

(Monad m, HasDynFlags m) => HasDynFlags (RefactorT dom m) Source # 
ExceptionMonad m => ExceptionMonad (RefactorT dom m) Source # 

Methods

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

gmask :: ((RefactorT dom m a -> RefactorT dom m a) -> RefactorT dom m b) -> RefactorT dom m b #

gbracket :: RefactorT dom m a -> (a -> RefactorT dom m b) -> (a -> RefactorT dom m c) -> RefactorT dom m c #

gfinally :: RefactorT dom m a -> RefactorT dom m b -> RefactorT dom m a #

type Refactor dom = RefactorT dom (ExceptT String Ghc) Source #

The refactoring monad

type RefactoredModule dom = Refactor dom (Ann Module dom SrcTemplateStage) Source #

referenceName :: (SemanticInfo' dom SameInfoImportCls ~ ImportInfo n, Eq n, NamedThing n) => n -> Refactor dom (Ann Name dom SrcTemplateStage) Source #

referenceOperator :: (SemanticInfo' dom SameInfoImportCls ~ ImportInfo n, Eq n, NamedThing n) => n -> Refactor dom (Ann Operator dom SrcTemplateStage) Source #

referenceName' :: (SemanticInfo' dom SameInfoImportCls ~ ImportInfo n, Eq n, NamedThing n) => ([String] -> Name -> Ann nt dom SrcTemplateStage) -> n -> Refactor dom (Ann nt dom SrcTemplateStage) Source #

Create a name that references the definition. Generates an import if the definition is not yet imported.

referenceBy :: ([String] -> Name -> Ann nt dom SrcTemplateStage) -> Name -> [Ann ImportDecl dom SrcTemplateStage] -> Ann nt dom SrcTemplateStage Source #

Reference the name by the shortest suitable import

data NameClass Source #

Different classes of definitions that have different kind of names.

Constructors

Variable

Normal value definitions: functions, variables

Ctor

Data constructors

ValueOperator

Functions with operator-like names

DataCtorOperator

Constructors with operator-like names

SynonymOperator

Type definitions with operator-like names

classifyName :: Name -> Refactor dom NameClass Source #

Get which category does a given name belong to

nameValid :: NameClass -> String -> Bool Source #

Check if a given name is valid for a given kind of definition

Orphan instances

GhcMonad m => GhcMonad (ExceptT s m) Source # 

Methods

getSession :: ExceptT s m HscEnv #

setSession :: HscEnv -> ExceptT s m () #

(GhcMonad m, Monoid s) => GhcMonad (WriterT s m) Source # 

Methods

getSession :: WriterT s m HscEnv #

setSession :: HscEnv -> WriterT s m () #

ExceptionMonad m => ExceptionMonad (ExceptT s m) Source # 

Methods

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

gmask :: ((ExceptT s m a -> ExceptT s m a) -> ExceptT s m b) -> ExceptT s m b #

gbracket :: ExceptT s m a -> (a -> ExceptT s m b) -> (a -> ExceptT s m c) -> ExceptT s m c #

gfinally :: ExceptT s m a -> ExceptT s m b -> ExceptT s m a #

(ExceptionMonad m, Monoid s) => ExceptionMonad (WriterT s m) Source # 

Methods

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

gmask :: ((WriterT s m a -> WriterT s m a) -> WriterT s m b) -> WriterT s m b #

gbracket :: WriterT s m a -> (a -> WriterT s m b) -> (a -> WriterT s m c) -> WriterT s m c #

gfinally :: WriterT s m a -> WriterT s m b -> WriterT s m a #

GhcMonad m => GhcMonad (ReaderT * s m) Source # 

Methods

getSession :: ReaderT * s m HscEnv #

setSession :: HscEnv -> ReaderT * s m () #

ExceptionMonad m => ExceptionMonad (ReaderT * s m) Source # 

Methods

gcatch :: Exception e => ReaderT * s m a -> (e -> ReaderT * s m a) -> ReaderT * s m a #

gmask :: ((ReaderT * s m a -> ReaderT * s m a) -> ReaderT * s m b) -> ReaderT * s m b #

gbracket :: ReaderT * s m a -> (a -> ReaderT * s m b) -> (a -> ReaderT * s m c) -> ReaderT * s m c #

gfinally :: ReaderT * s m a -> ReaderT * s m b -> ReaderT * s m a #