8
我读了cats documentation关于typeclasses Apply
和Applicative
。我想知道为什么图书馆提供了两个单独的类型类,而不是仅仅一个类型类Applicative
,这将扩展Functor
并添加ap
?有没有人使用Apply
那不是Applicative
?为什么我们需要分开Apply和Applicative类型的类?
我读了cats documentation关于typeclasses Apply
和Applicative
。我想知道为什么图书馆提供了两个单独的类型类,而不是仅仅一个类型类Applicative
,这将扩展Functor
并添加ap
?有没有人使用Apply
那不是Applicative
?为什么我们需要分开Apply和Applicative类型的类?
Applicative
提供了pure
方法,这是一种“进入”的方法。否则,尽管你可以转换到F[A]
F[B]
,无论是与A => B
(通过map
)或F[A => B]
(通过ap
),你不必把任何一种F
内的能力。所以你只能让别人为你做。
与Applicative
的区别在于你的可以从中放入东西,从无到有。
由于这两个可能是有用的(“你有权把东西放进一个F
”和“不用了,继续你的手拿开,并在你给出什么操作”),Applicative
和Apply
是单独的类型类。
谢谢。我想我明白了。你可以举一个例子,使用不是'Applicative'的'Apply'(例如,“放开手脚,按照你给的东西操作”)? – Michael
你可以想像各种情况。例如,如果您有一个想要处理的错误类型,但您不希望它能够生成任何新错误或使用任何不是来自错误上下文的信息,则可能希望您的错误类型具有'应用'类型类,但不是'应用程序类'。 –