///|
/// Evaluate string interpolation expressions
fn eval_string_interpolation(
parts : Array[(String, Expr?)],
input : Json,
env : Env,
) -> Iter[Json] raise InterpreterError {
let buf = StringBuilder::new()
for pair in parts {
let (text, expr_opt) = pair
buf.write_string(text)
match expr_opt {
Some(expr) =>
match eval_with_env(expr, input, env).collect() {
[String(s), ..] => buf.write_string(s)
[other, ..] => buf.write_string(@debug.to_string(other))
[] => ()
}
None => ()
}
}
Iter::singleton(Json::string(buf.to_string()))
}