pub fn eval<F, O>(
    session_state: &mut SessionState,
    state: Option<&mut (dyn OpState + 'static)>,
    node: &Node<F, O>,
    input: SmallVec<[TValue; 4]>
) -> Result<SmallVec<[TValue; 4]>, Error>where
    F: Fact + Clone + 'static,
    O: Debug + Display + AsRef<dyn Op + 'static> + AsMut<dyn Op + 'static> + Clone + 'static,