Abstract `predicateable` trait to macro and implement `having`