hermit: Haskell Equational Reasoning Model-to-Implementation Tunnel
HERMIT uses Haskell to express semi-formal models, efficient implementations, and provide a bridging DSL to describe via stepwise refinement the connection between these models and implementations. The key transformation in the bridging DSL is the worker/wrapper transformation.
This is a pre-alpha `please give feedback' release. Shortcomings/gotchas include:
Command line completion is ad hoc at the moment.
Parser needs to be reimplemented with a parsing library.
log command prints linearly, even if command history is a tree.
The fold rewrite can only fold syntactically equivalent (up to parameters of the function you are folding) expressions.
RULES have issues with forall types.
Different core comes out depending on whether you ascribe explicit type signatures.
A number of rewrites don't enforce preconditions. ex: cast elimination always works, even if the cast is necessary
Examples can be found in the examples sub-directory.
$ cd examples/reverse
Example of running a script.
$ hermit Reverse.hs Reverse.hss resume [starting HERMIT v0.1.1.0 on Reverse.hs] % ghc Reverse.hs -fforce-recomp -O2 -dcore-lint -fsimple-list-literals -fplugin=HERMIT -fplugin-opt=HERMIT:main:Main: -fplugin-opt=HERMIT:main:Main:resume [1 of 2] Compiling HList ( HList.hs, HList.o ) Loading package ghc-prim ... linking ... done. ... Loading package hermit-0.1.1.0 ... linking ... done. [2 of 2] Compiling Main ( Reverse.hs, Reverse.o ) Linking Reverse ... $ ./Reverse ....
Example of interactive use.
$ hermit Reverse.hs [starting HERMIT v0.1.1.0 on Reverse.hs] % ghc Reverse.hs -fforce-recomp -O2 -dcore-lint -fsimple-list-literals -fplugin=HERMIT -fplugin-opt=HERMIT:main:Main: [1 of 2] Compiling HList ( HList.hs, HList.o ) Loading package ghc-prim ... linking ... done. ... Loading package hermit-0.1.1.0 ... linking ... done. [2 of 2] Compiling Main ( Reverse.hs, Reverse.o ) module main:Main where rev ∷ ∀ a . [] a -> [] a unwrap ∷ ∀ a . ([] a -> [] a) -> [] a -> H a wrap ∷ ∀ a . ([] a -> H a) -> [] a -> [] a main ∷ IO () main ∷ IO () hermit<0> ...
To resume compile, use resume.
... hermit<0> resume hermit<0> Linking Reverse ... $
Modules
[Index]
- HERMIT
- Language
- HERMIT
- Language.HERMIT.Context
- Language.HERMIT.CoreExtra
- Language.HERMIT.Dictionary
- Language.HERMIT.Expr
- Language.HERMIT.External
- Language.HERMIT.Interp
- Language.HERMIT.Kernel
- Language.HERMIT.Kure
- Language.HERMIT.Monad
- Language.HERMIT.Plugin
- Language.HERMIT.PrettyPrinter
- Primitive
- Language.HERMIT.Primitive.AlphaConversion
- Language.HERMIT.Primitive.Debug
- Language.HERMIT.Primitive.Fold
- Language.HERMIT.Primitive.GHC
- Language.HERMIT.Primitive.Inline
- Language.HERMIT.Primitive.Kure
- Language.HERMIT.Primitive.Local
- Language.HERMIT.Primitive.Navigation
- Language.HERMIT.Primitive.New
- Language.HERMIT.Primitive.Unfold
- Language.HERMIT.Primitive.Utils
- Shell
- HERMIT
Downloads
- hermit-0.1.1.0.tar.gz [browse] (Cabal source package)
- Package description (revised from the package)
Note: This package has metadata revisions in the cabal description newer than included in the tarball. To unpack the package including the revisions, use 'cabal get'.
Maintainer's Corner
For package maintainers and hackage trustees
Candidates
- No Candidates
Versions [RSS] | 0.0, 0.1.1.0, 0.1.1.1, 0.1.2.0, 0.1.4.0, 0.1.6.0, 0.1.8.0, 0.2.0.0, 0.3.0.0, 0.3.1.0, 0.3.2.0, 0.4.0.0, 0.5.0.0, 0.6.0.0, 0.7.0.0, 0.7.1.0, 1.0.0.0, 1.0.1 |
---|---|
Dependencies | aeson (>=0.6.0.0), ansi-terminal (>=0.5.5), base (>=4 && <5), containers (>=0.4.2.1), data-default (>=0.4), ghc (>=7.4), haskeline (>=0.6.4.7 && <0.7), kure (>=2.2.5 && <3.0), marked-pretty (>=0.1), mtl (>=2.0.1.0), process, stm (>=2.2.0.1), template-haskell (>=2.7.0.0), text (>=0.11.1.13) [details] |
License | BSD-3-Clause |
Author | Andrew Farmer, Andy Gill, Ed Komp, Neil Sculthorpe |
Maintainer | Andy Gill <andygill@ku.edu> |
Revised | Revision 1 made by AndrewFarmer at 2015-09-19T23:04:21Z |
Category | Language, Formal Methods, Optimization, Transformation, Refactoring, Reflection |
Uploaded | by AndrewFarmer at 2012-08-25T02:22:14Z |
Distributions | |
Reverse Dependencies | 2 direct, 0 indirect [details] |
Executables | hermit |
Downloads | 17186 total (2 in the last 30 days) |
Rating | (no votes yet) [estimated by Bayesian average] |
Your Rating | |
Status | Docs uploaded by user Build status unknown [no reports yet] |