A functional quantum programming language