|
RefactoringTheme | Portability | portable | Stability | experimental | Maintainer | Ralf Laemmel, Joost Visser |
|
|
|
|
|
Description |
This module is part of StrategyLib, a library of functional strategy
combinators, including combinators for generic traversal. This module
defines generic refactoring functionality. See the paper Towards
Generic Refactoring by Ralf Laemmel. See also
generic-refactoring in the examples directory. |
|
Synopsis |
|
class (Term abstr, Eq name, Term [abstr], Term apply) => Abstraction abstr name tpe apply | abstr -> name, abstr -> tpe, abstr -> apply, apply -> name, apply -> abstr where | | | eliminate :: (Term prog, Abstraction abstr name tpe apply) => TU [(name, tpe)] Identity -> TU [name] Identity -> (abstr -> Maybe abstr) -> prog -> Maybe prog | | introduce :: (Term prog, Abstraction abstr name tpe apply) => TU [(name, tpe)] Identity -> TU [name] Identity -> ([abstr] -> Maybe [abstr]) -> abstr -> prog -> Maybe prog | | extract :: (Term prog, Abstraction abstr name tpe apply) => TU [(name, tpe)] Identity -> TU [name] Identity -> (apply -> Maybe apply) -> ([abstr] -> [abstr]) -> ([abstr] -> Maybe [abstr]) -> ([(name, tpe)] -> apply -> Bool) -> name -> prog -> Maybe prog |
|
|
|
The abstraction interface |
|
class (Term abstr, Eq name, Term [abstr], Term apply) => Abstraction abstr name tpe apply | abstr -> name, abstr -> tpe, abstr -> apply, apply -> name, apply -> abstr where |
Class of abstractions | | Methods | getAbstrName :: abstr -> Maybe name | | getAbstrParas :: abstr -> Maybe [(name, tpe)] | | getAbstrBody :: abstr -> Maybe apply | | getApplyName :: apply -> Maybe name | | getApplyParas :: apply -> Maybe [(name, tpe)] | | constrAbstr :: name -> [(name, tpe)] -> apply -> Maybe abstr | | constrApply :: name -> [(name, tpe)] -> Maybe apply |
| | Instances | |
|
|
Removal |
|
eliminate |
:: (Term prog, Abstraction abstr name tpe apply) | | => TU [(name, tpe)] Identity | Identify declarations | -> TU [name] Identity | Identify references | -> (abstr -> Maybe abstr) | Unwrap abstraction | -> prog | Input program | -> Maybe prog | Output program | Remove an unused abstraction |
|
|
Insertion |
|
introduce |
:: (Term prog, Abstraction abstr name tpe apply) | | => TU [(name, tpe)] Identity | Identify declarations | -> TU [name] Identity | Identify references | -> ([abstr] -> Maybe [abstr]) | Unwrap scope with abstractions | -> abstr | Abstraction to be inserted | -> prog | Input program | -> Maybe prog | Output program | Insert a new abstraction |
|
|
Generic extraction (say fold) |
|
extract |
:: (Term prog, Abstraction abstr name tpe apply) | | => TU [(name, tpe)] Identity | Identify declarations | -> TU [name] Identity | Identify references | -> (apply -> Maybe apply) | Unwrap focus | -> ([abstr] -> [abstr]) | Wrap host | -> ([abstr] -> Maybe [abstr]) | Unwrap host | -> ([(name, tpe)] -> apply -> Bool) | Check focus | -> name | Name for abstraction | -> prog | Input program | -> Maybe prog | Output program | Extract an abstraction |
|
|
Produced by Haddock version 0.6 |