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>,