Rui*_*res 6 haskell applicative
我知道以下将是:
[(+2),(+1)]<*>[1,2,3] == [3,4,5,2,3,4]
Run Code Online (Sandbox Code Playgroud)
我也明白这fmap
是实现的map
.但是我怎么能在脑海里精神上映射这个计算呢?我第一次看到这个,我假设如下:
[(*2),(+1)]<*>[1,2,3] == [4,5,6]
Run Code Online (Sandbox Code Playgroud)
我第二次谈到:[[3,4,5],[2,3,4]]
.但另一方面又<*>
回来了,f b
所以我知道这是不可能的.所以我的问题是,有什么理由可以解决这个问题?
Lou*_*man 15
fs <*> xs
或多或少[f x | f <- fs, x <- xs]
.Monads具有Applicative实例
fM <*> xM = do
f <- fM
x <- xM
return (f x)
Run Code Online (Sandbox Code Playgroud)
它直接对应于列表理解.
要记住这一点,您可能会发现更容易想象<*>
成为×
(笛卡尔积):
[a, b, c] × [x, y, z] == [a x, a y, a z, b x, b y, ...]
Run Code Online (Sandbox Code Playgroud)