use sim_kernel::{
Cx, LibId, OpKey, Result, Symbol,
standard::{publish_organ_claims, publish_organ_claims_for_lib},
};
pub fn sequence_organ_symbol() -> Symbol {
Symbol::qualified("organ", "sequence")
}
pub fn sequence_persistent_op_key() -> OpKey {
sequence_op_key("persistent")
}
pub fn sequence_lazy_op_key() -> OpKey {
sequence_op_key("lazy")
}
pub fn sequence_map_op_key() -> OpKey {
sequence_op_key("map")
}
pub fn sequence_filter_op_key() -> OpKey {
sequence_op_key("filter")
}
pub fn sequence_reduce_op_key() -> OpKey {
sequence_op_key("reduce")
}
pub fn sequence_for_op_key() -> OpKey {
sequence_op_key("for")
}
pub fn sequence_transduce_op_key() -> OpKey {
sequence_op_key("transduce")
}
pub fn sequence_op_keys() -> Vec<OpKey> {
[
sequence_persistent_op_key(),
sequence_lazy_op_key(),
sequence_map_op_key(),
sequence_filter_op_key(),
sequence_reduce_op_key(),
sequence_for_op_key(),
sequence_transduce_op_key(),
]
.into()
}
pub fn publish_sequence_organ_claims(cx: &mut Cx) -> Result<()> {
publish_organ_claims(cx, sequence_organ_symbol(), sequence_op_keys())
}
pub fn publish_sequence_organ_claims_for_lib(cx: &mut Cx, lib_id: LibId) -> Result<()> {
publish_organ_claims_for_lib(cx, lib_id, sequence_organ_symbol(), sequence_op_keys())
}
fn sequence_op_key(name: &str) -> OpKey {
OpKey::new(Symbol::new("sequence"), Symbol::new(name), 1)
}