use hamelin_lib::func::defs::Transform;
use crate::eval::evaluator::invoke_closure;
use crate::registry::EvalRegistry;
use crate::value::Value;
pub fn register(registry: &mut EvalRegistry) {
registry.register_eval::<Transform>(|mut bindings| {
let array_value = bindings.take_by_name("array")?;
let closure_value = bindings.take_by_name("lambda")?;
if array_value.is_null() {
return Ok(Value::Null);
}
let elements = array_value.require_array()?;
let closure = closure_value.require_closure()?;
let mut results = Vec::with_capacity(elements.len());
for elem in elements {
let result = invoke_closure(&closure, vec![elem])?;
results.push(result);
}
Ok(Value::Array(results))
});
}