pub fn lazy_sequence_value(
cx: &mut Cx,
producer: SequenceProducer,
) -> Result<Value>Expand description
Wrap a SequenceProducer as a runtime sequence Value.
The primary entry point for constructing lazy sequences: builds a
LazySequence and boxes it as an opaque kernel object.
ยงExamples
use std::sync::Arc;
use sim_kernel::{Cx, DefaultFactory, NoopEvalPolicy, Symbol};
use sim_lib_sequence::{force_sequence_bounded, lazy_sequence_value};
let mut cx = Cx::new(Arc::new(NoopEvalPolicy), Arc::new(DefaultFactory));
// A producer of two elements, then exhaustion.
let seq = lazy_sequence_value(&mut cx, Arc::new(|cx: &mut Cx, index| {
if index >= 2 {
return Ok(None);
}
let value = cx
.factory()
.number_literal(Symbol::qualified("test", "u64"), index.to_string())?;
Ok(Some(value))
}))?;
let forced = force_sequence_bounded(&mut cx, &seq, 8, "doc")?;
assert_eq!(forced.len(), 2);