Custom predicate would already work, but it might be nice to specify multiple shapes/basic-predicates like `m([m.OR(Number, String), fn])`