This pattern is extremely repetitive and can be abstracted: ```rs let args = args.evaluate_once(registry)?; let tag = args.name_tag(); let input = args.input; let stream = async_stream! { let values: Vec = input.values.collect().await; let mut concat_string = String::new(); let mut latest_tag: Option = None; for value in values { latest_tag = Some(value_tag.clone()); let value_span = value.tag.span; match &value.value { UntaggedValue::Primitive(Primitive::String(s)) => { concat_string.push_str(&s); concat_string.push_str("\n"); } _ => yield Err(ShellError::labeled_error_with_secondary( "Expected a string from pipeline", "requires string input", name_span, "value originates from here", value_span, )), } } ``` Mandatory and Optional in parse_command trace_remaining? select_fields and select_fields take unnecessary Tag Value#value should be Value#untagged Unify dictionary building, probably around a macro sys plugin in own crate textview in own crate Combine atomic and atomic_parse in parser at_end_possible_ws needs to be comment and separator sensitive Eliminate unnecessary `nodes` parser #[derive(HasSpan)] Figure out a solution for the duplication in stuff like NumberShape vs. NumberExpressionShape use `struct Expander` from signature.rs