是由应用样式组成的应用函数真正独立的



我已经了解了函数函数,应用函数和单子,如下所示:

  • 函子:可以映射的计算。
  • 应用函数:独立计算,其结果可以组合在一起。
  • monad :(可能但不一定)可以链接的依赖计算。

但是,有关应用程序的某些东西与我的理解发生了冲突...这是使用应用程序样式根据更基本的解析器定义的解析器的haskell示例:

(,) <$> parseName <*> parseEmail

parseNameparseEmail的两个解析器的效果并非独立,因为它们都从相同的输入流中消耗令牌,例如。

Jubobs jubobs@jubobs.io

parseEmail只能消耗parseName尚未消耗的内容。那么,如何说两个计算是独立的?

这里的独立性并不是说一个计算无法检测到其他计算已运行 - 也就是说,不应该是parsename对parseemail没有影响的情况。相反,您不能使用应用程序 value (parsename分析的名称)来选择下一步运行的应用程序 Computation 除了检查它不包含解析名称时,要解析电子邮件地址。

另一种方法是,如果您仅使用应用功能,则预定了计算的总体"形状":您将始终解析名称,然后是电子邮件地址。如果您使用了Monadic功能,则可以根据以前的解析的结果做出关于下一步解析的决定,让您在运行时更改计算的形状。

最新更新