In Dean Wampler's book, Programming Scala, 3rd Edition, there is an example with:
type Elem[X] = X match
  case String => Char
  case IterableOnce[t] => t
  case Array[t] => t
  case ? => X 
summon[Elem[List[Int]] =:= Int]
summon[Elem[Nil.type] =:= Nothing] 
It doesn't seem to be explained, at least in the surrounding context, why summon[Elem[Nil.type] =:= Nothing] and not summon[Elem[Nil.type] =:= Nil.type]. Why is this the case?
 
                        
As suggested in the comments,
NilextendsList[Nothing], thus yourcase IterableOnce[t] => tapplies andElem[Nil.type] =:= Nothing.