Serokell’s Work on GHC: Dependent Types, Part 5
Haskell Community [Unofficial]
June 2, 2026
Correct!
If your module is compiled with
NoListTuplePuns, then(Int, Bool) :: Tuple2 Type Type, and theTupletype family maps it toTuple2 Int Bool. That’s the intended usage.But that’s not all. If you compile with
ListTuplePuns, then(Int, Bool) :: Type, because it already isTuple2 Int Bool, and then applyingTupleis identity.
So the Tuple type family works regardless of (No)ListTuplePuns. Now that I’ve spelled this out, it’s also occurred to me that this means Tuple is idempotent, i.e. forall x. Tuple (Tuple x) = Tuple x.
Discussion in the ATmosphere