2016-05-17 6 views

Antwort

8

Alle oben genannten sind die gleichen.

würde Eine offensichtliche Variante

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

Und das ist zu asum sein ein Sonderfall der folgenden ähnlich.

import Data.Monoid 
import Control.Applicative 

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

Der Grund, warum Sie das nirgendwo finden, ist das pure a <|> x === pure a. Es ist also gut für das und nicht viel anderes. Es könnte

foldAltMap f = getAlt . foldMap (Alt . f) 

oder

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

aber es ist wahrscheinlich klarer nur

verbessert werden, es zu schreiben.

+2

Ich habe mich gefragt, ob die Gemeinde zu einem Konsens darüber gekommen ist, wie es heißen soll. Scheint wie ein Kandidat für die Aufnahme in "Base" irgendwo. – ErikR

+0

@ErikR, ich weiß nicht darüber. Es tut uns leid. – dfeuer

+0

@dfeuer Vielleicht 'foldAlt = asum. fmap pure' macht es deutlicher, wie ähnlich es mit 'asum' ist. –

Verwandte Themen