Skip to main content

lazy_sequence_value

Function lazy_sequence_value 

Source
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);