Is IsIterableOnce class hierarchy needed?

Only recently I have had a look at how IsIterableOnce et al. works and was surprised to see the whole hierarchy. Now, if you are willing to do some casting (and there is enough of it in the collection package anyway), I would implement it as a single value class:

class IsIterableOnce[Repr] private (private val convert :Repr => IterableOnce[_]) extends AnyVal {
	type A
	type CC[a] <: IterableOnce[a]
	def apply(coll :Repr) :CC[A] = convert(coll).asInstanceOf[CC[A]]
}
object IsIterableOnce {
	private[this] val instance = new IsIterableOnce[IterableOnce[_]](identity[IterableOnce[_]])

	type IsIterable[Repr] = IsIterableOnce[Repr] { type CC[a] <: Iterable[a] }
	type IsSeq[Repr] = IsIterableOnce[Repr] { type CC[a] <: Seq[a] }
	//etc.

	implicit def iterableIsIterable[CC0[a] <: IterableOnce[a], A0]
			:IsIterableOnce[CC0[A0]] { type A = A0; type CC[a] = CC0[a] } =
		instance.asInstanceOf[IsIterableOnce[CC0[A0]] { type A = A0; type CC[a] = CC0[a] }]

	def apply[Repr, CC0[a] <: IterableOnce[a], A0](convert :Repr => CC0[A0])
			:IsIterableOnce[CC0[A0]] { type A = A0; type CC[a] = CC0[a] } =
		instance.asInstanceOf[IsIterableOnce[CC0[A0]] { type A = A0; type CC[a] = CC0[a] }]
}

You could also inline it if you wanted and replaced private constructor with private[collection].
Do you think it would be a worthwile improvement (I am assuming with the next makeover of the collection framework)?
Yes or no, this technique has served me well in many cases, especially when implicit evidence tree is large.