effc959ea9
Now, by default, an error is raised if any branch of an expr has an inconsistent type. This isn't always what we want. The ternary operator, for example, doesn't really care if the condition's type doesn't match the branch arms. But it's a good default, and special cases can always override the type function with their own explicit typechecking.