zer*_*one 4 monads haskell applicative
AFAIK GHC8的新增功能之一是ApplicativeDo语言扩展,如果可能的话,它会将相应的Applicative方法(<$>,<*>)取消.我有以下问题.
它是如何决定是否可以使用desugaring Applicative方法?据我所知,它进行依赖性检查(如果后者取决于前者的结果)来确定资格.还有其他标准吗?
虽然这个添加使得应用程序代码更容易阅读没有任何Monad实例的类(可能?).但对于具有Monad和Applicative实例的结构:这是一种推荐的做法(从可读性的角度来看)?还有其他好处吗?
Ale*_*lec 10
它是如何决定是否可以使用desugaring
Applicative方法?据我所知,它进行依赖性检查(如果后者取决于前者的结果)来确定资格.还有其他标准吗?
ApplicativeDo尽可能使用应用程序 - 包括>>=在某些情况下混合它们,其中只有部分do块是适用的虽然这个添加使得应用程序代码更容易阅读没有任何
Monad实例的类(可能?).但是对于既有aMonad又有Applicative实例的结构:这是推荐的做法(从可读性的角度来看)?还有其他好处吗?
这里是一个答案约之间的区别Applicative和Monad.直接引用:
要进行部署
<*>,您可以选择两个计算,一个是函数,另一个是参数,然后它们的值由应用程序组合.要进行部署>>=,您可以选择一个计算,并解释如何使用其结果值来选择下一个计算.它是"批处理模式"和"交互式"操作之间的区别.
这种事情的一个主要例子是Haxlmonad(由Facebook设计),它都是从一些外部源获取数据.使用时Applicative,这些请求可以并行发生,同时Monad强制请求是顺序的.事实上,这个例子是促使Facebook的Simon Marlow首先进行ApplicativeDo扩展并撰写引用文章的原因.
通常,大多数Monad情况不一定受益Applicative.从我上面引用的相同答案:
我很欣赏这
ApplicativeDo是一个很好的方法,可以使用更多的应用程序(在某些情况下,这意味着更快)以monadic风格编写的程序,你没有时间重构.但除此之外,我认为应用 - 当你可以 - 但是 - monadic-当你必须也是更好的方式来看看发生了什么.
所以:使用Applicative过Monad可能的情况下,并利用ApplicativeDo当它真正是更好的写(喜欢它一定是在某些情况下,Facebook的)比相应的应用性表达.
|   归档时间:  |  
           
  |  
        
|   查看次数:  |  
           797 次  |  
        
|   最近记录:  |