"This part of the conditional can be written more succinctly as:

all (== test_lcv) [init_lcv, update_lcv, update_lcv']"

Wouldn't this be be better as tuple avoiding list overhead or does ghc optimize it out?

If it could be done as a tuple.

all (== test_lcv) (init_lcv, update_lcv, update_lcv')