 | Yicho: A Combinator Library for Program Transformation | Contents | Index |
|
| Yicho | | Portability | portable | | Stability | experimental | | Maintainer | yokoyama@ipl.t.u-tokyo.ac.jp |
|
|
|
|
|
| Description |
| Yicho: a combinator library for program transformation.
Yicho web site is http://www.ipl.t.u-tokyo.ac.jp/yicho/
|
|
| Synopsis |
|
|
|
|
| Type Declarations
|
|
| type RuleY = ExpQ -> ExpY |
| rule
|
|
| type ExpY = Y ExpQ |
| an expression with the environment and failuire manipulation
|
|
| Basic Combinators
|
|
| (<==) |
| :: ExpQ | Pattern
| | -> ExpQ | Term
| | -> Y () | | | Match
|
|
|
| (==>) |
| :: ExpQ | Pattern
| | -> ExpQ | Expression to be replaced with
| | -> RuleY | | | Rule
|
|
|
| caseM :: ExpQ -> [RuleY] -> ExpY |
| Meta Case
|
|
| class Choice a where |
| | Methods | | (<+) :: a -> a -> a | | Deterministic Choice
|
| | Instances | |
|
|
| Lifted Match and Lifted Rule
|
|
| (<===) |
| :: ExpQ | Pattern
| | -> ExpY | Lifted term
| | -> Y () | | | Lifted Match
|
|
|
| (===>) |
| :: ExpQ | Pattern
| | -> ExpY | Lifted expression to be replaced with
| | -> RuleY | | | Lifted Rule
|
|
|
| Derivative Combinators
|
|
| try :: RuleY -> RuleY |
| try attempts to apply rule r, if possible. Otherwise, let it be.
|
|
| Directives
|
|
| using :: ExpY -> (String, Q [Dec]) -> ExpY |
| Setting definitions together with its module name in Y monad
|
|
| mkrules |
| :: String | Module Name
| | -> Q [Dec] | Declarations
| | -> RuleY | | | Make rules from declarations
|
|
|
| mkunfold |
| :: String | Module Name
| | -> Q [Dec] | Declarations
| | -> RuleY | | | -> RuleY | |
|
|
| Variable Generation
|
|
| pvar :: String -> Y ExpQ |
Generating a pattern variable
The following code changes the names each time it is called.
pvar = return . join . genvar . ($:)
|
|
| pvars :: [String] -> Y [ExpQ] |
| Generating pattern variables
|
|
| genPE :: String -> Int -> ([PatQ], [ExpQ]) |
|
| Beta-reduce
|
|
| betareduce :: Exp -> Exp |
|
| Lifting
|
|
| liftY :: Q a -> Y a |
| ExpQ -> ExpY : the inverse of runY
|
|
| Manipulating Monads
|
|
| runY :: Y (Q e) -> Q e |
| ExpY -> ExpQ : the inverse of liftY
|
|
| (@@) :: Monad m => (a -> m b) -> (t -> m a) -> t -> m b |
| Monad composition
|
|
| ret :: ExpQ -> ExpY |
| Lift from ExpQ to ExpY with instanciating bound variables in environment and
unfolding definitions kept in Y monad
|
|
| ret2 :: ExpQ -> ExpY |
| Lift from ExpQ to ExpY with instanciating bound variables in environment
|
|
| Pretty Printer
|
|
| prettyQ :: (Ppr a, Show a) => Q a -> IO () |
|
| prettyY :: (Ppr a, Show a) => Y (Q a) -> IO () |
|
| prettyExpY :: ExpY -> IO () |
|
| prettySubstY :: Y () -> IO () |
|
| prettyExpQ :: ExpQ -> IO () |
|
| putExpQ :: ExpQ -> IO () |
|
| putExpY :: ExpY -> IO () |
|
| Show
|
|
| putQ :: Show a => Q a -> IO () |
|
| putY :: Show a => Y (Q a) -> IO () |
|
| Light Pretty Printer
|
|
| Pretty printing functions ending L print out expressions without module names of variables
|
|
| prettyQL :: (Ppr a, Show a) => Q a -> IO () |
|
| prettyYL :: (Ppr a, Show a) => Y (Q a) -> IO () |
|
| prettyExpYL :: ExpY -> IO () |
|
| Tracer
|
|
| traceExpQ :: ExpQ -> ExpY |
|
| traceExpY :: ExpY -> ExpY |
|
| traceExpQL :: ExpQ -> ExpY |
|
| traceExpYL :: ExpY -> ExpY |
|
| Produced by Haddock version 0.6 |