Functor 遵循 2 個 Functor Laws,專門描述 map
的 2 個特性。
Version
Haskell for Mac 1.8.2
Identity Law
f = map id
g = id
f [1, 2, 3]
g [1, 2, 3]
- 使用
map
將 Functor 與id
綁定 - 使用
id
將 Functor 綁定
兩者結果相同。
也就是 map
傳入 id
相當於 id
,都不會改變 Functor 內部 value。
Identity Law
fmap id = id
fmap id
:將id
傳入fmap
id
:只有id
=
:兩個 function 等價
Composition Law
f = map (*2) . map (+1)
g = map ((*2) . (+1))
f [1, 2, 3]
g [1, 2, 3]
多次使用
map
將 Functor 與 function 綁定使用
compose
將所有 function 先組合再一次與map
綁定兩者結果相同。
也就是可將多次 map
的所有 function 先組合成單一 function 後,再一次傳進 map
。
Composition Law
fmap f . fmap g = fmap (f . g)
fmap f . fmap g
:多次使用fmap
傳入 functionfmap (f . g)
:將 function 先組合再傳入fmap
=
:兩個 function 等價
Conclusion
- Haskell 稱為
id
,在 Ramda 稱為identity
,在 Sanctuary 稱為I
- Haskell 稱為
fmap
,在 Fantasy Land 稱為map
,為 Functor 必備 function