fmapidundefined== Pair undefinedundefined-- because of laziness in the second operand of <*> we get:
pure id<*>undefined== Pair undefinedundefined-- if the second operand is matched strictly, and the first one lazily,-- then we get:undefined<*> pure undefined== Pair undefinedundefined
pure ($undefined)<*>undefined==undefined-- given that fmap matches strict now, since lazy matching is incorrect
sequenceA (fmap Identity undefined)== Identity (Pair undefinedundefined)

In contrast to that the strict pattern matching is correct in this respect:

It is a good idea to comply with these laws
since they minimize the surprise of the users of your data type,
including yourself.

If you use strict record fields (denoted with

!

)
then there is no

(Pair undefinedundefined)

,
only

undefined

.

That is, in this case the laws would hold
independent of the mode of pattern matching.
However, this shall not suggest,
that using strict record fields is generally preferred. In particular, strict record fields also violate the functor laws! The normal functor instance is not too lazy, and not too strict, and as such satisfies the functor laws.