sev*_*evo 6 haskell applicative
有效的应用程序设计中效果概念的含义是什么?
例如,下面表达式的哪些部分是效果?
[(+1)] <*> [2,3]
Just (+1) <*> Nothing
Run Code Online (Sandbox Code Playgroud)
在FP的世界里,一个效果是任何类型的构造,例如Maybe,[],IO等效应不被有副作用的混淆.直觉上,效果是您正在计算的值的附加属性.Maybe Int表示您的程序计算Int具有失败效果[Int]的程序,或意味着您的程序计算Int但具有非确定性效果(非确定性结果在此建模为可能结果列表).
从这里走出去,我们有术语可适用的效果和一元的影响,这意味着上述效果都Applicative和Monad实例.
我找不到任何这方面的权威信息,这正是我根据自己的经验收集到的信息.
很多混乱是由于不幸的名字选择引起的,这在Haskell中很常见(想想" return更好地命名" emit").
pure x不是纯粹的,它是x纯粹的,pure只是注入.它被设想用于pure f <*> a <*> b <*> ...模式,让我们有效地应用纯粹的功能f.
[]应用性让我们"不确定性"应用(<*>不是$)一个非确定性值(不是两个值,在你的例子),以非确定性的功能; 所述非确定性是效果.
在list applicative中,[(+1), (+2)]是一个非确定性函数,可能会将值递增1,也可能会将其递增2. [3,4,5]是一个非确定性值,其中列出了可能的值.正如我们运用正常的实体(+1)和3正常,因为(+1) $ 3,所以我们可以运用非确定性值不确定性,如[(+1)] <*> [3]或[(+1),(+2)] <*> [3,4,5].
并且失败Maybe的可能性就是影响.
我们可以说类型的效果f a是任何不能写成的pure x地方x :: a.
在[]应用中pure x = [x],所以[(+1)] = pure (+1)可能不应该被视为效果.同样在Maybe应用中pure = Just,所以Just (+1)不是效果.
这使得[2,3]与Nothing作为您的各例的影响.从[]表示不确定性计算的角度来看,这是直观的意义:[2,3]非确定性地选择2到3之间; 以及Maybe表示计算Nothing失败的视角:计算失败.
我使用的定义是一种效果(也许是"副作用"将是一个更好的词)是一种无法写成的东西,因为pure x它只是使你的问题变得精确,并不代表任何形式的共识或标准定义. Ness的答案会给出一个不同的视角,它会pure从纯值生成一个有效的计算,它有一个很好的数学环 - 即这个定义可能更容易在精确设置中使用.
| 归档时间: |
|
| 查看次数: |
482 次 |
| 最近记录: |