功能構成

函式組合運算子 (.) 定義為

(.) :: (b -> c) -> (a -> b) ->  (a -> c)
(.)       f           g          x =  f (g x)     -- or, equivalently,  

(.)       f           g     =   \x -> f (g x)     
(.)       f     =    \g     ->  \x -> f (g x)      
(.) =    \f     ->   \g     ->  \x -> f (g x)      
(.) =    \f     ->  (\g     -> (\x -> f (g x) ) ) 

型別 (b -> c) -> (a -> b) -> (a -> c) 可以寫成 (b -> c) -> (a -> b) -> a -> c,因為型別簽名中的 ->關聯到右邊,對應於與左邊相關聯的函式應用程式,

 f g x y z ...    ==    (((f g) x) y) z ...

所以資料流是從右到左:x進入g,其結果進入 f,產生最終結果:

(.)       f           g          x =  r
                                      where r = f (g x)  
-- g::a -> b
-- f ::      b -> c
-- x::a      
-- r ::           c   

(.)       f           g     =    q
                                 where q = \x -> f (g x) 
-- g::a -> b
-- f ::      b -> c
-- q::a      -> c

....

從語法上講,以下都是相同的:

(.) f g x  =  (f . g) x  =  (f .) g x  =  (. g) f x 

這很容易被理解為“ 運算子部分的三個規則 ”,其中缺失的引數只是進入運算子附近的空槽:

(.) f g    =  (f . g)    =  (f .) g    =  (. g) f   
--         1             2             3  

可以省略存在於等式兩側的 x。這被稱為 eta 收縮。因此,寫下函式組合定義的簡單方法就是

(f . g) x   =   f (g x)

這當然是指論證x; 每當我們在沒有 x 的情況下編寫 (f . g) 時,它就被稱為無點樣式。