我试图了解这些算子是什么,但到目前为止我不能.这两者之间有什么区别:
Prelude> fmap (+1) [1..9]
[2,3,4,5,6,7,8,9,10]
Prelude> map (+1) [1..9]
[2,3,4,5,6,7,8,9,10]
Run Code Online (Sandbox Code Playgroud)
Lee*_*Lee 24
对于列表,没有区别,map只是fmap专门用于列表.
fmap 有一个更通用的类型:
fmap :: Functor f => (a -> b) -> f a -> f b
Run Code Online (Sandbox Code Playgroud)
这意味着它可以与任何仿函数一起使用,例如
fmap (+ 3) (Just 4) -- Just 7
fmap (+ 4) (+ 3) 1 -- 8. Functions are functors where fmap = (.)
fmap read getLine :: IO Int -- IO is a functor
Run Code Online (Sandbox Code Playgroud)
而地图有类型
map :: (a -> b) -> [a] -> [b]
Run Code Online (Sandbox Code Playgroud)
如果查看源代码,列表的仿函数实例定义fmap为map:
instance Functor [] where
fmap = map
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1129 次 |
| 最近记录: |