pub fn toposort<K, I>(
    input: impl IntoIterator<Item = K>,
    deps: impl Fn(&K) -> I
) -> Result<Vec<K>, TopoSortCycle>where
    K: Eq + Hash + Clone,
    I: Iterator<Item = K>,