jub*_*0bs 4 haskell applicative
我来了解仿函数,applicative仿函数和monad如下:
但是,有一些关于Applicative的东西与我的理解相冲突......这是一个Haskell示例,它是在使用应用程序样式的更基本的解析器的基础上定义的解析器:
(,) <$> parseName <*> parseEmail
Run Code Online (Sandbox Code Playgroud)
的影响的两个分析器的,parseName并且parseEmail,不是独立的,因为它们都消耗从相同的输入流,例如令牌
Jubobs jubobs@jubobs.io
Run Code Online (Sandbox Code Playgroud)
parseEmail只能消耗尚未消耗的东西parseName.那么,如何说这两个计算是独立的呢?
ama*_*loy 16
这里的独立性并不是说一个计算无法检测到其他计算已经运行 - 也就是说,不应该是parseName对parseEmail没有影响的情况.相反,你不能使用应用值(由parseName解析的名称)来选择下一个运行的应用计算:你只能解析一般的电子邮件,而不是解析一个电子邮件地址,同时检查它不是包含已解析的名称.
另一种方法是,如果你只使用应用函数,你的计算的整体"形状"是提前预先确定的:你将始终解析一个名字,然后是一个电子邮件地址.如果您使用了monadic函数,则可以根据先前解析的结果决定接下来要解析的内容,以便在运行时更改计算的形状.