Product x <> Product y == Product (x * y)
>>> Product 3 <> Product 4 <> mempty Product {getProduct = 12}
>>> mconcat [ Product n | n <- [2 .. 10]] Product {getProduct = 3628800}
>>> product [1..10] 3628800 >>> product (Right 3) ... • Do not use 'Foldable' methods on Either Suggestions: Instead of for_ :: (Foldable t, Applicative f) => t a -> (a -> f b) -> f () use whenJust :: Applicative f => Maybe a -> (a -> f ()) -> f () whenRight :: Applicative f => Either l r -> (r -> f ()) -> f () ... Instead of fold :: (Foldable t, Monoid m) => t m -> m use maybeToMonoid :: Monoid m => Maybe m -> m ...