use super::traits::*;
use crate::array::*;
use crate::finite_function::*;
pub trait Spider<K: ArrayKind>: Arrow {
fn dagger(&self) -> Self;
fn spider(s: FiniteFunction<K>, t: FiniteFunction<K>, w: Self::Object) -> Option<Self>;
fn half_spider(s: FiniteFunction<K>, w: Self::Object) -> Option<Self> {
let t = FiniteFunction::<K>::identity(s.target());
Self::spider(s, t, w)
}
}