  In this work we introduce Qumin, a novel quantum programming language with a
focus on providing an easy to use, minimalist, high-level, and easily
extensible platform for quantum programming. Qumin's design concentrates on
encompassing the various interactions between classical and quantum computation
via the use of two sublanguages: an untyped one that handles classical
preparation and control, and one linearly typed that explicitly handles quantum
routines. This allows the classical part of the language to be freely used for
general programming while placing restrictions on the quantum part that enforce
rules of quantum computing like the no-cloning of qubits.
  We describe both the language's theoretical foundations in terms of lambda
calculi and linear type systems, and more practical matters such as
implementations of algorithms and useful programming tools like matrix and
oracle generators that streamline the interaction of the classical and quantum
fragments of a program. Finally, we provide an experimental open-source
implementation of an interpreter, typechecker and related tools for the
language (which can be found in \url{https://github.com/wintershammer/QImp}).
