hermit-syb: HERMIT plugin for optimizing Scrap-Your-Boilerplate traversals.
A HERMIT plugin for GHC which optimizes SYB generic traversals to achieve equivalent performance to hand-written traversals.
Details can be found in the paper: http://michaeldadams.org/papers/syb-opt/
Note: This compiler plugin requires GHC 7.8 (or HEAD) and specially compiled copies of base, ghc-prim, and syb. Up-to-date instructions can be found at: https://github.com/ku-fpg/hermit/wiki/GHC-HEAD. We are working to lift these requirements.
As an example, we apply the optimization to Foo.hs, which contains the following code:
module Main where import Data.Generics import HERMIT.Optimization.SYB.Prelude main :: IO () main = print (mapInt (+1) [1..10]) mapInt :: (Int -> Int) -> [Int] -> [Int] mapInt f = everywhere (mkT f)
Note that importing HERMIT.Optimization.SYB.Prelude
is required in any module targeted for optimization.
To compile Foo.hs with the optimization:
$ hermit Foo.hs -opt=HERMIT.Optimization.SYB +Main mapInt
This invokes GHC with a specific set of flags. These flags may be used instead of the hermit
program itself, or placed in a cabal file.
The first argument to HERMIT is the target file. Next is the -opt flag, which specifies the plugin name.
Then follows one or more target module names, each beginning with a plus sign. After each target module is a list of targeted functions.
The distinguished interactive
target will run the optimization on any other targets and then enter the HERMIT interactive shell.
The distinguished 'interactive-only' target will open the HERMIT shell before optimization.
HERMIT commands specific to this optimization are available for interactive use.
Downloads
- hermit-syb-0.1.0.0.tar.gz [browse] (Cabal source package)
- Package description (as included in the package)
Maintainer's Corner
For package maintainers and hackage trustees
Candidates
- No Candidates
Versions [RSS] | 0.1.0.0 |
---|---|
Dependencies | base (>=4 && <5), containers, ghc (>=7.6), ghc-prim, hermit (>=0.3.2.0), syb, template-haskell [details] |
License | BSD-3-Clause |
Author | Michael D. Adams and Andrew Farmer |
Maintainer | Andrew Farmer <afarmer@ittc.ku.edu> |
Category | Language, Optimization, Transformation |
Source repo | head: git clone git://github.com/xich/hermit-syb.git |
Uploaded | by AndrewFarmer at 2013-11-18T22:52:41Z |
Distributions | |
Reverse Dependencies | 1 direct, 0 indirect [details] |
Downloads | 1068 total (3 in the last 30 days) |
Rating | (no votes yet) [estimated by Bayesian average] |
Your Rating | |
Status | Docs available [build log] Successful builds reported [all 1 reports] |