Name: hermit-syb
Version: 0.1.0.0
Synopsis: HERMIT plugin for optimizing Scrap-Your-Boilerplate traversals.
Description:
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:
.
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: . 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.
Category: Language, Optimization, Transformation
License: BSD3
License-file: LICENSE
Author: Michael D. Adams and Andrew Farmer
Maintainer: Andrew Farmer
Stability: alpha
Build-type: Simple
Cabal-version: >=1.14
Library
Ghc-options: -Wall
Exposed-modules:
HERMIT.Optimization.SYB
HERMIT.Optimization.SYB.Prelude
Build-depends:
base == 4.*,
ghc >= 7.6,
ghc-prim,
hermit >= 0.3.2.0,
syb,
template-haskell,
containers
Default-language: Haskell2010
Source-repository head
type: git
location: git://github.com/xich/hermit-syb.git