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)
在仿函数列表上抽象映射函数的方法是什么?
我了解基本应用
λ: [(+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)