Are we close to sharing implementation between throwing and non-throwing predicates?

I think what you want would be this change in the language where every function would throw which enables you to create a single generic version of your function: