Taming a functional language