struggled to write product as a foldRight, stopping at the first zero, but can't appear to get lazy evaluation working in the context of the higher order function