我試圖理解函數是什麼,但到目前爲止我不能。什麼是這兩個之間的區別:Fmap和地圖,我看不出有什麼區別
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]
我試圖理解函數是什麼,但到目前爲止我不能。什麼是這兩個之間的區別:Fmap和地圖,我看不出有什麼區別
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]
對於名單,沒有什麼區別,map
只是fmap
專門用於名單。
fmap
具有更爲一般的類型:
fmap :: Functor f => (a -> b) -> f a -> f b
這意味着它可以與任何函子例如可以使用
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
而地圖的類型是
map :: (a -> b) -> [a] -> [b]
如果你看一下source,對列表中的仿函數實例定義fmap
爲map
:
instance Functor [] where
fmap = map
通過給出一個特定的例子來說明你可以駕駛這個家,除了列表之外,你可以像'Maybe'或'IO'那樣使用'fmap'。 –
@GabrielGonzalez - 感謝您的建議,我添加了一些例子。 – Lee
試着用'(只有42)'代替'[1..9]',你會開悟的。 – Ingo