v1.0 中的 ValidatedNel arrow-kt 是否仍然是 Applicative(Functor)?

is ValidatedNel arrow-kt in v1.0 still an Applicative (Functor)?

我知道在以前版本的 Arrow-Kt 中是 Applicative 类型类的一个实例。在当前版本 1.0.x 中,大多数类型类不再是 present/visible(我想是为了使库更易于访问?)。

有一些很好的解释为什么累积验证数据类型的错误不能是 Monad,例如 and Haskell 2 and also or arrow-kt. Hoogle 还指出

Furthermore, the Monad and Applicative operations should relate as follows:
pure = return
m1 <*> m2 = m1 >>= (x1 -> m2 >>= (x2 -> return (x1 x2)))

我的问题是,在 arrow-kt 中验证的当前实现中,我看不到 Applicative Functor 实例的实例。更准确地说,我在任何地方都看不到 ap 函数:

(<*>) :: Applicative f => f (a -> b) -> f a -> f b

我的直觉告诉我 zip 函数的行为有点类似于 map/ap 组合

Haskell/Purescript:

Person <$> validateName first <*> validateName last <*> validateAge age

带有箭头 kt 的 Kotlin:

validateName(first).zip(validateName(last), validateAge(age), ::Person)

zip变相的ap吗?我的推理中还有什么遗漏的吗?

就像@LordRaydenMK 已经在评论中提到的那样 zipap 伪装成更符合 Kotlin 标准库。

Kotlin 中没有 ap 的另一个重要原因是柯里化不是 Kotlin 支持的第一个 class,因为它在 Haskell 中,我们不能定义多个参数列表,例如在斯卡拉。到目前为止,ap 的原因实际上使用起来非常麻烦,而不是 user-friendly。

因此,为了 user-friendliness,在 Kotlin 中更加地道并降低学习曲线,Arrow 决定删除 ap 并提供 zip