Haskell的仿函數

仿函數的數學定義以下函數

設 C 和 D 爲集合,從 C 至 D 有一映射F
將每一個對象 X ∈ C 映射至一對象 F(X) ∈ D 上,
將每一個態射 f:X ⟶ Y ∈ C 映射至一態射 F(f):F(X) ⟶ F(Y) ∈ D 上,

Haskell的仿函數是一個class,其中主要的抽象函數是fmapspa

fmap        :: (a -> b) -> f a -> f b

Haskell在Functor的註釋中提到了Haskell仿函數的兩條規則。code

第一條是,若是咱們使用函數id做爲映射,那麼咱們的返回結果應當是做爲參數仿函數orm

Haskell的表達方式以下
fmap id a = a

數學表達方式以下
對任何對象 X ∈ C,恆有 F(id(x)) = id(F(x))

第二條是,使用組合函數做爲映射,獲得的結果,應當保證同組合函數中的函數按照順序做爲映射函數的結果相同。對象

Haskell的表達式以下
fmap (f . g) = fmap f . fmap g
或者
fmap (f . g) F = fmap f (fmap g F)

數學表達方式以下
F(f.g) = F(g).F(f)
相關文章
相關標籤/搜索