transitiveClosure

fun <T> Set<T>.transitiveClosure(accumulate: Boolean = true, function: (T) -> Set<T>): Set<T>
fun <T> List<T>.transitiveClosure(function: (T) -> List<T>): List<T>