Haskell - 什么是Control.Applicative.Alternative有用吗?

Anu*_*ain 29 haskell applicative

我正在查看ApplicativeHaskell库中的类并偶然发现Alternative.

这门课有什么用?谷歌搜索没有透露任何特别有见地的信息.它似乎完全不合适,与Applicative包捆绑在一起.

有人可以发布你可以使用这个课程的可能场景吗?

ham*_*mar 22

它通常与解析器组合器一起使用.例如,如果space是与单个空白字符匹配的解析器组合子many space,则将匹配连续的空格.

不过,我同意它略显Control.Applicative不合适.

  • 只有*略微*不合适 - 它是`Applicative`s的幺半群,与'MonadPlus`和'ArrowPlus`的模式相同,两者都与他们所基于的类共享一个模块.为了保持一致性,它"应该"被称为"ApplicativePlus",但这是一个丑陋的名字. (19认同)

Lan*_*dei 16

有时候<|>操作员非常有用:

foldl1 (<|>) [Nothing, Just 5, Just 3]
-- Just 5
Run Code Online (Sandbox Code Playgroud)

  • 哦,不,`foldl1`用于某个合理的默认值(`foldl(<|>)Nothing`).当你的答案崩溃时你会怎么做?:d (5认同)
  • 您也可以使用``mconcat`和[First`monoid](http://haskell.org/ghc/docs/latest/html/libraries/base/Data-Monoid.html#t:First)来完成此操作.这很好地概括了[其他`Maybe` monoids](http://byorgey.wordpress.com/2011/04/18/monoids-for-maybe/). (3认同)
  • @Rotsor或`foldl(<|>)一般是空的,因为`empty`是`(<|>)的标识 (2认同)
  • 通常,```Data.Foldable.asum```也提供此功能 (2认同)