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

Safe HaskellNone
LanguageHaskell2010

Language.Haskell.Tools.Refactor.RefactorBase

Contents

Synopsis

Documentation

data RefactorCtx a Source #

The information a refactoring can use

Constructors

RefactorCtx 

Fields

Instances

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

Methods

ask :: RefactorT ann m (RefactorCtx ann) #

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

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

runRefactor :: (a ~ STWithNames n, TemplateAnnot a) => Ann Module a -> (Ann Module a -> Refactor n (Ann Module a)) -> Ghc (Either String (Ann Module a)) Source #

Performs the given refactoring, transforming it into a Ghc action

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

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

newtype RefactorT ann m ast Source #

Input and output information for the refactoring

Constructors

RefactorT 

Fields

Instances

MonadTrans (RefactorT ann) Source # 

Methods

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

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

Methods

ask :: RefactorT ann m (RefactorCtx ann) #

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

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

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

Methods

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

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

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

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

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

Methods

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

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

return :: a -> RefactorT ann m a #

fail :: String -> RefactorT ann m a #

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

Methods

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

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

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

Methods

pure :: a -> RefactorT ann m a #

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

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

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

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

Methods

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

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

Methods

getSession :: RefactorT ann m HscEnv #

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

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

Methods

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

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

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

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

type Refactor n = RefactorT (STWithNames n) (ExceptT String Ghc) Source #

The refactoring monad

type STWithNames n = NodeInfo (SemanticInfo n) SourceTemplate Source #

type RefactoredModule n = Refactor n (Ann Module (STWithNames n)) Source #

referenceName :: (Eq n, NamedThing n) => n -> Refactor n (Ann Name (STWithNames n)) Source #

referenceOperator :: (Eq n, NamedThing n) => n -> Refactor n (Ann Operator (STWithNames n)) Source #

referenceName' :: (Eq n, NamedThing n) => ([String] -> Name -> Ann nt (STWithNames n)) -> n -> Refactor n (Ann nt (STWithNames n)) Source #

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

referenceBy :: TemplateAnnot a => ([String] -> Name -> Ann nt a) -> Name -> [Ann ImportDecl a] -> Ann nt a 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 n 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 #