我了解以下内容:
[(+2),(+1)]<*>[1,2,3] == [3,4,5,2,3,4]
我也知道
fmap
被实现为map
。但是我怎么能在脑海中映射这种计算呢?第一次看到此消息时,我假设以下内容:[(*2),(+1)]<*>[1,2,3] == [4,5,6]
我第二次是关于:
[[3,4,5],[2,3,4]]
。但是另一方面,<*>
返回f b
,所以我知道这是不可能的。所以我的问题是,从中得出什么明智的心智步骤? 最佳答案
fs <*> xs
或多或少是[f x | f <- fs, x <- xs]
。 Monad具有Applicative实例
fM <*> xM = do
f <- fM
x <- xM
return (f x)
这直接对应于列表理解。