  Based on the connection between the categorical derivation of classical
programs from specifications and the category-theoretic approach to quantum
physics, this paper contributes to extending the laws of classical program
algebra to quantum programming. This aims at building correct-by-construction
quantum circuits to be deployed on quantum devices such as those available at
the IBM Q Experience. Quantum circuit reversibility is ensured by minimal
complements, extended recursively. Measurements are postponed to the end of
such recursive computations, termed "quantamorphisms", thus maximising the
quantum effect. Quantamorphisms are classical catamorphisms which, extended to
ensure quantum reversibility, implement quantum cycles (vulg. for-loops) and
quantum folds on lists. By Kleisli correspondence, quantamorphisms can be
written as monadic functional programs with quantum parameters. This enables
the use of Haskell, a monadic functional programming language, to perform the
experimental work. Such calculated quantum programs prepared in Haskell are
pushed through Quipper to the Qiskit interface to IBM Q quantum devices. The
generated quantum circuits - often quite large - exhibit the predicted
behaviour. However, running them on real quantum devices incurs into a
significant amount of errors. As quantum devices are constantly evolving, an
increase in reliability is likely in the near future, allowing for our programs
to run more accurately.
