Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/conal/lambda-ccc
Convert lambda expressions to CCC combinators
https://github.com/conal/lambda-ccc
Last synced: 19 days ago
JSON representation
Convert lambda expressions to CCC combinators
- Host: GitHub
- URL: https://github.com/conal/lambda-ccc
- Owner: conal
- License: other
- Created: 2013-05-20T19:44:45.000Z (over 11 years ago)
- Default Branch: master
- Last Pushed: 2016-02-23T19:35:05.000Z (over 8 years ago)
- Last Synced: 2024-02-17T10:37:10.152Z (9 months ago)
- Language: Haskell
- Size: 1.2 MB
- Stars: 144
- Watchers: 22
- Forks: 19
- Open Issues: 9
-
Metadata Files:
- Readme: README.md
- License: COPYING
Awesome Lists containing this project
README
Convert lambda expressions to CCC combinators and then to circuits.
Additional info:
* [Project notes](doc/notes.md).
* The talk [From Haskell to Hardware via CCCs](https://github.com/conal/talk-2015-haskell-to-hardware).
* Instructions in test/Tests.hs.Dependencies:
* GHC 7.8.2 or better
* KURE, [commit 7ce26aa](https://github.com/ku-fpg/kure/commit/7ce26aa)
* HERMIT, [commit 5557609](https://github.com/ku-fpg/hermit/commit/5557609)
* [hermit-extras](http://github.com/conal/hermit-extras)
* [circat](https://github.com/conal/circat), for circuit specification, display, and conversion to netlists.To use these versions of KURE and HERMIT, clone the repos (or pull if already cloned), and use "git checkout [commit-id]".
To try out:
* `cabal install` circat and lambda-ccc (in that order)
* In a shell, `cd` to lambda-ccc/test, and type `make`.
If all works, you'll see something like the following output:bash-3.2$ ./test
[starting HERMIT v0.5.0.1 on TreeTest.hs]
% ghc TreeTest.hs -fforce-recomp -O2 -dcore-lint -fsimple-list-literals -fexpose-all-unfoldings -fplugin=LambdaCCC.Monomorphize -fplugin-opt=LambdaCCC.Monomorphize:-v0 -fplugin-opt=LambdaCCC.Monomorphize:DoTree.hss -fplugin-opt=LambdaCCC.Monomorphize:resume -fplugin-opt=LambdaCCC.Monomorphize:*: -v0real 0m6.098s
user 0m5.968s
sys 0m0.245s
let f = \ ds -> abst (repr ds) in let f0 = \ ds -> let (a1,a'1) = repr (repr ds) in abst (repr (f a1) + repr (f a'1)) in let f1 = \ ds -> let (a1,a'1) = repr (repr ds) in abst (repr (f0 a1) + repr (f0 a'1)) in let f2 = \ eta -> let a = repr eta in abst (a * a) in let f3 = \ eta -> abst (let (a1,a'1) = repr (repr eta) in abst (f2 a1,f2 a'1)) in let f4 = \ eta -> abst (let (a1,a'1) = repr (repr eta) in abst (f3 a1,f3 a'1)) in \ x -> let (a1,a'1) = repr (let (a1,a'1) = repr (repr x) in abst (f4 a1,f4 a'1)) in repr (f1 a1) + repr (f1 a'1)
Wrote out/sumSquare-t3.pdf
Wrote out/sumSquare-t3.v.txtThe `.v.txt` file is Verilog code. Additionally the PDF will be displayed if the display code figures out how to on your system.
There are many other examples in `test/TreeTest.hs`. At any time, all examples but one are commented out.