hermit-syb: HERMIT plugin for optimizing Scrap-Your-Boilerplate traversals.

[ bsd3, language, library, optimization, transformation- ] [ Propose Tags ]

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

Maintainer's Corner

Package maintainers

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 NixOS:0.1.0.0
Reverse Dependencies 1 direct, 0 indirect [details]
Downloads 986 total (4 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]