The problem with checked exceptions a-la Java is that the type system is not polymorphic. You need to list the exceptions you raise explicitly and there is no way to say &quot;I raise the same exceptions that this object I receive can raise&quot;