This library aids in rewriting Haskell expressions correctly. It is intended for equational reasoning, semi-formal proofs etc, and designed to be easy to use. In essence, it lets you write
mySimplification :: Rewrite Integer
mySimplification = do
56 + 8 * 25
56 + 200
256
doneand then (for example in GHCi)
> check mySimplification
Seems legit!
The examples directory contains examples of how it can be used, as does the documentation.
Add easy-rewriting to the build-depends list in your .cabal file, or run cabal install easy-rewriting or stack install easy-rewriting.
Please refer to the documentation at Hackage.
You need GHC and Cabal.
If you're on NixOS, you can run nix-shell to start a shell where you can run cabal.
Build the package:
cabal build
Generate documentation:
cabal haddock
On NixOS, you can run nix-build to build everything.
If you get an error like ghc: can't find a package database ..., you might need to delete .ghc.environment.x86_64-linux-8.4.4 or similar.
It worked for me at least.
Run the test suite:
cabal test
Since the library is designed to be used quite interactively, you probably want to try it out in GHCi as well:
cabal new-build
ghci examples/Examples/Monad.hs
> import EasyRewriting
> checkAt (Just (Just True)) defineJoinUsingBind
Seems legit!
(cabal new-build creates a GHC environment file (e.g. .ghc.environment.x86_64-linux-8.4.4) which makes it possible to import EasyRewriting in GHCi without installing easy-rewriting globally.
If it doesn't work, you can try cabal install instead of cabal new-build.)
You can create and check rewrite chains on the fly using GHCi's multiline syntax (:{ ... :}):
cabal new-build
ghci
> :set -XRebindableSyntax -XNoImplicitPrelude
> import Prelude hiding ((>>))
> import EasyRewriting
> :{
| check $ do
| 8 + 5
| 5 + 8
| done
| :}
Seems legit!