Che*_*vas 5 monads f# applicative
该语言的建议指出,其优点是在链接的文件中详述。我快速浏览了一下,但看不到它的明确说明。
优点是每个语句都并行执行,所以我可能会得到速度提升?或者它是否满足某种逻辑,使用通常的 monadic 不方便let!
?
我明白,这是适用的,这意味着它带有我不能使用以前的表达式来确定后续表达式的逻辑的限制。那么这是否意味着权衡是效率的灵活性?
我理解Don Syme 的描述的方式,当我前段时间读到它时,let! ... and! ...
链中的每一步都将被执行,不像你使用let! ... let! ...
. 例如,假设您使用option
CE。那么如果你写
option {
let! a = parseInt("a")
let! b = parseInt("b")
return a + b
}
Run Code Online (Sandbox Code Playgroud)
只有第一个let!
会被执行,因为 CE 一旦遇到 None 就会短路。改写let! a ... and! b = ...
将尝试解析两个字符串;虽然不一定是并行的,正如我所理解的。
在解析来自外部来源的数据时,我看到了这方面的巨大好处。考虑例如运行
parse {
let! name = tryParse<Name>("John Doe")
and! email = tryParse<EMail>("johndoe@")
and! age = tryParse<uint>("abc")
return (name, email, age)
}
Run Code Online (Sandbox Code Playgroud)
并获得Error(["'johndoe@' isn't a valid e-mail"; "'abc' isn't a valid uint"])
回报,而不仅仅是第一个错误。这对我来说很整洁。
归档时间: |
|
查看次数: |
126 次 |
最近记录: |