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