Looks like `fail` will be runtime exception instead of `Failure`, maybe you should add another `Failure` constructor for this?