Any thoughts on Ceylon-style union and intersection types?

Here's one case for intersection types: multiple upper bounds in generic functions (but I guess it applies to generic classes too). The documentation gives this example:

fun cloneWhenGreater<T : Comparable<T>>(list : List<T>, threshold : T) : List<T>
    where T : Cloneable {
  return list when {it > threshold} map {it.clone()}
}

Here, T has to be a subtype of Comparable<T> and it also has to be a subtype of Cloneable. Which in fact means that T has to be a subtype of an intersection type Comparable<T> & Cloneable, right? I think I'd like that more than the where syntax, which feels more like a hack. But, if I remember correctly, there are other usecases for the where clause, so this itself wouldn't be enough to get rid of it :-(