Point free 風格
Point free 是一種撰寫函式的風格,此風格忽略內部一個或多個函數引述。透過範例來稍作了解。
這裡有個程式,對某個數值額外加上 10:
add10 : Int -> Int
add10 x =
10 + x
可以使用 +
前墜標記法來改寫:
add10 : Int -> Int
add10 x =
(+) 10 x
此例的函式引數 x
並非完全必要,可以改寫成:
add10 : Int -> Int
add10 =
(+) 10
注意到函式引數的 x
以及 +
旁邊的 x
都消失了。add10
仍然是個函式,需要一個整數來計算結果。這樣的省略引數稱之為point free 風格。
更多範例
select : Int -> List Int -> List Int
select num list =
List.filter (\x -> x < num) list
select 4 [1, 2, 3, 4, 5] == [1, 2, 3]
相同於:
select : Int -> List Int -> List Int
select num =
List.filter (\x -> x < num)
select 4 [1, 2, 3, 4, 5] == [1, 2, 3]
process : List Int -> List Int
process list =
reverse list |> drop 3
相同於:
process : List Int -> List Int
process =
reverse >> drop 3