Curry: A functional logic programming language