2

虽然此时我对 function1 Monad 及其转换器版本(即 Kleisli 组合)非常满意,但回到我最初开始阅读的一本书,我仍然无法真正理解所使用的行话,有点强调典型之间的区别一元行为和 kleisli 组合。我发现这种区别不直观且具有误导性。

我怀疑作者想强调 Function1 Monad 与其他 monad 相比的延迟评估的概念,但这只是使用函数的效果。

无论如何,我想知道是否有人可以澄清一些作者声明:

函数应用对我们称为效果的附加结构的力量——你已经看到了普通函数是如何组成的,以及它们是如何应用于一个参数的。但这对于领域模型可能还不够,您需要在应用点应用具有自定义行为的函数。看一下 flatMap 提供的函数应用:def flatMap[A, B](ma: F[A])(f: A => F[B]): F[B]。它将 A => F[B] 应用于 F[A],然后将 F[F[B]] 展平为 F[B]。在这里,您在应用点进行展平,以便您恢复提供给 flatMap 的结构。这使您能够在 F[_] 的有效结构上对函数应用程序进行排序。

…………

函数组合对我们称为效果的附加结构的能力——如果你有一个函数 f: A => F[B] 和另一个函数 g: B => F[C],其中 F 是一个单子,那么你可以组合他们得到A => F [C]。这不是普通的函数组合;它是一元函数的组成。它也被称为 Kleisli 组合;

…………

我不明白的行话是“功能应用的力量”“功能组合的力量”, 尤其是当作者试图用以下内容表达观点时:

它将 A => F[B] 应用于 F[A],然后将 F[F[B]] 展平为 F[B]。在这里,您在应用点进行展平,以便您恢复提供给 flatMap 的结构。

无论您是从一元函数开始还是仅从效果开始,都会发生同样的事情。对我来说,效果甚至可以看作函数Unit => F[A]。

因此,如果我不理解作者试图强调的内容,或者是作者没有正确地表达观点并且我已经明白了所有要点,我就不清楚了。

无论如何,应用的意义何在?怎么不在function1中?

4

0 回答 0