Haskell提供了一个标准的类型类“Alternative”,它为任何也是一个Applicative类型的类型提供了有效的<|>
运算符。
据我所知,“Alternative”在Applicative上被认为是一个Monoid,然而在很多不是Applicative Functor的类型中,“<|>”操作符似乎也完全合理,并且它不需要任何特定于Applicative类型类的依赖才能正常工作。
“Alternative”是否需要成为Applicative的子类有原因吗?如果是这样,是否有标准的类型类来定义非Applicative类型的类似功能?
Monoid
是一类类型,而Alternative
是一类类型构造器。希望我们可以在类型构造器上进行局部量化约束,例如(forall a. Monoid f a)
,但这是不允许的。 - pigworker<|>
运算符的预期用法是“选择或另一个”,这与mconcat
有些不同。 - James Davies