Haskell:嵌套仿函数的fmap

时间:2016-05-22 12:49:34

标签: haskell functor applicative

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

我理解基本的应用

λ: [(+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]

2 个答案:

答案 0 :(得分:4)

您可以使用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]

但在这种情况下,(ComposegetCompose)newtype噪音可能不值得。

答案 1 :(得分:2)

对我而言,快速do块更具可读性:

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