Haskell:嵌套仿函数上的 fmap

Haskell: fmap on nested functors

在仿函数列表上抽象映射函数的方法是什么?

我了解基本应用

λ: [(+2),(*2)] <*> [10,20]
[12,22,20,40]

但是我该如何处理 [(+2),(*2)] ???? [Just 10, Just 20]?

我能想到的所有方法看起来都很复杂。

例如:

λ: (<$>) <$> [(+2),(*2)]  <*> [Just 10, Just 20]
[Just 12,Just 22,Just 20,Just 40]

您可以使用 Data.Functor.Compose 将嵌套 Functors/Applicatives 视为单个 Functor/Applicative:

ghci> import Data.Functor.Compose
ghci> getCompose (Compose [pure (+2), pure (*2)] <*> Compose [Just 10, Just 20])
[Just 12,Just 22,Just 20,Just 40]

但也许 (Compose, getCompose) 新型噪声在这种情况下不值得。

对我来说,快速 do 块更具可读性:

t2 = do f <- fs
        m <- ms
        pure (f <$> m)