我在學習Haskell與Learn You a Haskell指南,我堅持在一個函數列表應用排序的例子。 Chapter 11: Functors, Applicative Functors and Monoids定義sequenceA是:函數列表上的應用排序如何工作?
sequenceA :: (Applicative f) => [f a] -> f [a]
sequenceA [] = pure []
sequenceA (x:xs) = (:) <$> x <*> sequenceA xs
我有點受sequenceA的這個例子中使用蒙羞
> sequenceA [(+3),(+2),(+1)] 3
[6,5,4]
我已經擴大了應用程序手動據我可以給我所相信的是正確:
(:) <$> (+3) <*> sequenceA [(+2), (+1)]
(:) <$> (+3) <*> (:) <$> (+2) <*> (:) <$> (+1) <*> sequenceA []
(:) <$> (+3) <*> (:) <$> (+2) <*> (:) <$> (+1) <*> pure []
(:) <$> (+3) <*> (:) <$> (+2) <*> (:) <$> (+1) <*> const []
我看不出什麼,雖然是多麼的第二個參數sequenceA的原始應用程序,3
被應用到每個部分applie d函數在列表中給出。我希望得到一些幫助,試圖圍繞評估這個聲明時所發生的事情。
提示,請參閱:應用型實例'( - >)了'。編制'fmap' /'<*>'應用程序! – Xeo