Sum和Product的Applicative/Monad实例有什么用?

use*_*134 10 haskell typeclass

我的理解SumProductnewtypes是它们用于数值类型为monoidial包装.我想了解Functor他们的实例,但为什么还有Applicative,Monad任何其他许多看似无用的情况下?我知道它们在数学上是可以的(与Identitymodad 同构,对吧?)但是用例是什么?Applicative Sum例如,如果存在实例,我希望在Sum (a -> b)某处遇到类型的值.我无法想象这可能有用的地方.

Dan*_*ner 11

这样的实例便于提升任意函数来处理当前生活在一个Sum或多个内部的事物Product.例如,人们可能会想象想要对某些东西进行一些按位操作,这些操作在Sum裸露方面比较方便; 然后liftA2 (.&.) :: Sum Int -> Sum Int -> Sum Int(例如).

人们也可以通过给出一个Bits实例来提供这个操作Sum,但是推广该技术需要实现者Sum预测一个人可能想要做的每个操作,这看起来很高.提供ApplicativeMonad实例为用户提供一劳永逸的翻译,以提升他们喜欢的任何功能 - 包括实现者Sum预测无用的功能.