在函子列表上抽象映射函数的方法是什么?
我理解基本的应用
λ: [(+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]
答案 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]
但在这种情况下,(Compose
,getCompose
)newtype噪音可能不值得。
答案 1 :(得分:2)
对我而言,快速do
块更具可读性:
t2 = do f <- fs
m <- ms
pure (f <$> m)