type signatures for better error messages
fast division