Sto imparando Haskell con la guida Learn You a Haskell e sono bloccato su un esempio di sequenziamento applicativo su un elenco di funzioni. Chapter 11: Functors, Applicative Functors and Monoids definisce sequenceA essere:Come funziona il sequenziamento applicativo su un elenco di funzioni?
sequenceA :: (Applicative f) => [f a] -> f [a]
sequenceA [] = pure []
sequenceA (x:xs) = (:) <$> x <*> sequenceA xs
Sono un po 'confuso da questo esempio di utilizzo di sequenceA:
> sequenceA [(+3),(+2),(+1)] 3
[6,5,4]
ho ampliato l'applicazione manualmente, per quanto ho potuto per quella che credo sia corretto:
(:) <$> (+3) <*> sequenceA [(+2), (+1)]
(:) <$> (+3) <*> (:) <$> (+2) <*> (:) <$> (+1) <*> sequenceA []
(:) <$> (+3) <*> (:) <$> (+2) <*> (:) <$> (+1) <*> pure []
(:) <$> (+3) <*> (:) <$> (+2) <*> (:) <$> (+1) <*> const []
Quello che non vedo però, è come il secondo argomento della domanda originale di sequenceA, 3
viene applicato a ciascuno dei parzialmente applie d funzioni indicate nell'elenco. Gradirei un po 'di aiuto nel cercare di capire cosa succede nella valutazione di questa affermazione.
Suggerimento: L'istanza applicativo è '(->) a'. Elabora l'applicazione 'fmap' /' <*> '! – Xeo