The hermit-syb package

[Tags:bsd3, library]

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.


Dependencies base (==4.*), containers, ghc (>=7.6), ghc-prim, hermit (>=, syb, template-haskell [details]
License BSD3
Author Michael D. Adams and Andrew Farmer
Maintainer Andrew Farmer <>
Category Language, Optimization, Transformation
Source repository head: git clone git://
Uploaded Mon Nov 18 22:52:41 UTC 2013 by AndrewFarmer
Distributions NixOS:
Downloads 335 total (5 in the last 30 days)
0 []
Status Docs available [build log]
Successful builds reported [all 1 reports]
Hackage Matrix CI




Maintainer's Corner

For package maintainers and hackage trustees