我在看Haskell庫中的Applicative
類,偶然發現了Alternative
。Haskell - 什麼是Control.Applicative.Alternative對嗎?
這個班有什麼好處?谷歌搜索沒有透露任何特別有見地的東西。它似乎完全不合適,與Applicative包捆綁在一起。
有人可以發佈一個可能的場景,你會使用這個類嗎?
我在看Haskell庫中的Applicative
類,偶然發現了Alternative
。Haskell - 什麼是Control.Applicative.Alternative對嗎?
這個班有什麼好處?谷歌搜索沒有透露任何特別有見地的東西。它似乎完全不合適,與Applicative包捆綁在一起。
有人可以發佈一個可能的場景,你會使用這個類嗎?
它通常與解析器組合器一起使用。例如,如果space
是與單個空白字符相匹配的解析器組合器,則many space
將是匹配連續空白字符的解析器組合器。
雖然我可以認爲它在Control.Applicative
中略有不合適。
有時<|>
運營商是非常有用的:
foldl1 (<|>) [Nothing, Just 5, Just 3]
-- Just 5
啊,這很有趣!在這種情況下,<|>就像短路||在許多命令式語言中運算符.. –
您也可以使用'mconcat'和['First' monoid](http://haskell.org/ghc/docs/latest/html/libraries/base/Data-Monoid。 HTML#T:第一個)。這很好地概括了[其他'也許'monoids](http://byorgey.wordpress.com/2011/04/18/monoids-for-maybe/)。 – hammar
哦,不,'foldl1'被用在某個有合理默認值的地方('foldl(<|>)Nothing')。當你的回答崩潰時你會做什麼? :D – Rotsor
只有* *略有出來的地方 - 這是一個獨異的'Applicative's,在相同的模式'MonadPlus'和'ArrowPlus',既其中也與他們基於的課程共享一個模塊。爲了一致性,「應該」被稱爲「ApplicativePlus」,但這是一個醜陋的名字。 –
好吧,這解釋了很多!雖然將'ApplicativePlus'命名爲'Alternative'並不是一件好事,因爲後者具有限制其範圍的內涵。 –
@C。 A. McCann,我希望你能將你的評論轉換成答案,以便我可以接受它:) –