Я пытаюсь понять лень. Поскольку 0, умноженное на любое число, равно 0, не следует product [0..] оценивать 0? Я также попробовал foldl (*) 1 [0..] и определить свой собственный продукт как
myProduct 0 _ = 0
myProduct _ 0 = 0
myProduct a b = a*b
Почему не прекращается сбрасывание, как только будет найдено 0?