Solution (source code)

= Solution

The three outcomes, in printed order, are \b[`ZagType 'A'`], \b[`ZigType undefined`], and \b[a static type error].

In the first expression, <pattern matching> discovers that the first tail is nonempty, so the ignored first label, the <bottom value> $\bot$, is never demanded. The singleton `Cans 'A' Nil` returns `ZagType 'A'`.

In the second expression the tail is `Nal`, so the result is `ZigType` applied to the <bottom value>. Under <lazy evaluation> this has a defined outer constructor and an undefined field: `case lastZig (Cins undefined Nal) of ZigType _ -> True` yields `True`, whereas extracting or fully printing the payload fails. Thus the result is $\operatorname{ZigType}(\bot)$, not a wholly undefined outer value.

The original PDF really prints `Nil` in the third expression. `Cins` requires a tail of type `Zag b a`, whereas `Nil` has type `Zig c d`. These distinct <type constructors> cannot be unified. \b[There is no well-typed expression to evaluate], regardless of the undefined first label; replacing `Nil` by `Nal` would change the question.