SimpleDomainError が throws じゃダメな理由がわかりました。Optional と Simple domain error が区別されることも意味がありますが、 Simple domain error が Recoverable error と区別されることにも意味がありそうです。struct SimpleDomainError: Error {} は、当然ですが Simple domain error なので、エラーが発生したという情報しか持たないわけです。