
stringf FORMAT, LIST;

  stringf => {
    codes         => { ... },     # the conversions!
    prepare_input => sub { ... }, # deals with LIST as a whole
    iterator      => sub { ... }, # loops over markers, calling conversions
    formatter     => sub { ... }, # postproc output for common -3.1# behavior
  }

codes => {
  x => sub {
    my ($self, $input, $arg, $formatter) = @_;
    # input is also in $_

    return $str; # or \$str to avoid postprocessing
  },
}

kinda of conversions:

  stringf "format %x %y %z", $positional, $based, $interpolation;

  stringf "%x-%y...%z, $object_to_format

  stringf "This is the %{adj}s %{noun}s ever.", { adj => $a, noun => $n };

less likely:

  stringf "%x-%y...%z, $obj1, $obj2;

