Quipper is an embedded, scalable functional programming language for quantum computing. It provides, among other things:
>
A high-level circuit description language. This includes gate-by-gate descriptions of circuit fragments, as well as powerful operators for assembling and manipulating circuits.
>
A monadic semantics, allowing for a mixture of procedural and declarative programming styles.
>
Built-in facilities for automatic synthesis of reversible quantum circuits, including from classical code.
>
Support for hierarchical circuits.
>
Extensible quantum data types.
>
Programmable circuit transformers.
>
Support for three execution phases: compile time, circuit generation time, and circuit execution time. A dynamic lifting operation to allow circuit generation to be parametric on values generated at circuit execution time.
>
Extensive libraries of quantum functions, including: libraries for quantum integer and fixed-point arithmetic; the Quantum Fourier transform; an efficient Qram implementation; libraries for simulation of pseudo-classical circuits, Stabilizer circuits, and arbitrary circuits; libraries for exact and approximate decomposition of circuits into specific gate sets.
http://www.mathstat.dal.ca/~selinger/quipper/