1) Good luck annotating all potential cases of divide by zero or IO error, and all callers of those.
2) Everyone must pay the runtime cost of wrapping and unwrapping on every operation, even if nothing fails.
3) The type of a function that can fail in ways A and B isn't the same as the type of a function that can fail in ways B and A.
4) Good luck getting a stack trace.
I think unchecked exceptions are better for most applications, where errors are rare and have many different types.