"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?
Haskell tuples don't work that way, and if they did they would be no better than lists. You may be thinking of Python tuples, which are more like Haskell's lists (whereas Python's lists are somewhat more like Haskell's arrays).
--