There is so much weird here that comes of tuples being like an HList type and not a type product.
The name unit to me implies the unit of the type product operation, which is how the ML family including Haskell uses it. (x, y) : T1 * T2. And maybe you write that type as (T1, T2) if you want. A tuple of one type isn’t a thing because it’s just the type, and the product of a type with unit is the identity. T * () = T = () * T. The type product is associative. T1 * (T2 * T3) = (T1 * T2) * T3. There are usually syntactic features making it different structurally which you need for stuff to make sense with opaque types, but… significantly, you never need a tuple of a single type in this model to be different from the type itself.
But here in Scala tuples aren’t type products, they’re heterogenous lists. This is very useful for being able to analyze and synthesize types with them. So that cat is out of the bag. *: isn’t a type product, it isn’t associative. () isn’t a unit type even if we call it that because we don’t actually have an operator for it to be a unit. A list of one item does need to be different from a single item, and here we are.
Anyway… I felt I should say something because I think this impedance mismatch is part of the frustration and confusion and misunderstanding here.
(And it’s all exacerbated because for a lot of people their first introduction to the term is Python’s “tuple” which has nothing to do with any of this and instead just means “immutable list”.)