docs: def from_definition(cls, defn, names={}):
          """
          A definition may contain the following members:
  
          - using: a dictionary of variables available for substitution
          - replace: a list of replacement definitions.
          """
          repls = map(Repl.from_defn, defn.get('replace', []))
          self = cls(repls)
          vars(self).update(names)
          vars(self).update(defn.get('using', {}))
          return self