docs: def val_factory(val, datatypes):
      """
      return an instance of `val` that is of type `datatype`.
      keep track of exceptions so we can produce meaningful error messages.
      """
      exceptions = []
      for dt in datatypes:
          try:
              if isinstance(val, dt):
                  return val
              return type_handler_object(val, dt)
          except Exception as e:
              exceptions.append(str(e))
      # if we get here, we never found a valid value. raise an error
      raise ValueError('val_factory: Unable to instantiate {val} from types {types}. Exceptions: {excs}'.
                       format(val=val, types=datatypes, excs=exceptions))