Have bang and Bang defined in our language (concrete and abstract).

Our error should contain more useful information than just the fact that some error occurred.

Operations which evaluate to a Bang on one of its branches should return a Bang.

Bang is its own type, so you may have to write inference rules for Bang. Often it is easier/better to just not define the error cases.