2016-05-17 3 views

答えて

8

上記のすべては同じですしています。

明白な変種は

maybeAlt :: Alternative f => Maybe a -> f a 
maybeAlt = maybe empty pure 

だろうそして、これはasumに似た以下の特殊なケースです。

import Data.Monoid 
import Control.Applicative 

foldAlt :: (Foldable f, Alternative m) => f a -> m a 
foldAlt = getAlt . foldMap (Alt . pure) 

どこにも見つからない理由は、pure a <|> x === pure aです。だからそれは良いことだし、他にはあまりありません。それは

foldAltMap f = getAlt . foldMap (Alt . f) 

または

foldrAltMap f = foldr (\x r -> f x <|> r) empty 

に改善することができたが、それはちょうどそれを書くために、おそらく明確です。

+2

私は、コミュニティが何を呼び出すべきかについて合意に達しているのだろうかと思いました。どこかに 'base 'に含める候補者のようだ。 – ErikR

+0

@ErikR、私はそれについて知らない。ごめんなさい。 – dfeuer

+0

@dfeuerおそらく 'foldAlt = asum。 fmap pure'は 'asum'に似ています。 –

関連する問題