Tuple1[T] =!= T for the same reason that
List(x) != x.
If it would be the case that
Tuple1[T] =:= T, then
T <:< Tuple1[T] would also be true (obviously). Since
Tuple1[T] <:< Product, that means that
T <:< Product for any
Tuple2[A, B] would be a subtype of (even equivalent to)
Tuple1[Tuple2[A, B]]. That would mean that your
WithEnv[(A, B), R] would non-deterministically choose to interpret
(A, B) as either
- a 2-ary tuple with
B, resulting in
A ?=> B ?=> R, or
- a 1-ary tuple with
(A, B), resulting in
(A, B) ?=> R.
I will let you imagine what more can go wrong from here.