1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | (&) :: a -> b -> (a, b) (&) = (,) infixr 9 & fullTuple :: (Int, (Bool, (Char, ()))) fullTuple = 3 & True & 's' & () -- replacing the "tails" of fullTuple with undefined. -- Notice how they all have the same type. undefined4 :: (Int, (Bool, (Char, ()))) undefined4 = undefined undefined3 :: (Int, (Bool, (Char, ()))) undefined3 = 3 & undefined undefined2 :: (Int, (Bool, (Char, ()))) undefined2 = 3 & True & undefined undefined1 :: (Int, (Bool, (Char, ()))) undefined1 = 3 & True & 's' & undefined |