code: def mf(pred, props=None, value_fn=None, props_on_match=False, priority=None):
      
  
      if isinstance(pred, BaseMatcher):
          ret = pred if props_on_match else pred.props
  
      if isinstance(pred, basestring) or \
         type(pred).__name__ == 'SRE_Pattern':
          ret = RegexMatcher(pred, props=props, value_fn=value_fn)
  
      if isinstance(pred, set):
          return OverlayMatcher(pred, props=props, value_fn=value_fn)
  
      if isinstance(pred, list):
          deps = [p for p in pred if isinstance(p, BaseMatcher)]
          ret = ListMatcher([mf(p, props_on_match=True) for p in pred],
                            props=props, value_fn=value_fn,
                            dependencies=deps)
  
      if priority is not None:
          ret.priority = priority
  
      return ret
docs: Matcher factory.