跳转至

函数复合

英文: Function composition.

由于在 Haskell 中, 函数应用是左结合, 因此嵌套调用函数时就需要不断添加括号, 导致代码可读性降低:

f (g (h x))

组合运算符

Haskell 提供了复合运算符:

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

使用复合运算符可以对上面的代码进行简化:

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

除了提高可读性, 复合运算符还可以用于构建复合函数:

desort = (reverse . sort)

Haskell 中的升序排序函数 sort 结合反转函数 reverse, 即可实现降序排序函数.

应用运算符

($) :: (a -> b) -> a -> b
f $ x = f x

应用运算符的特殊之处在于其优先级最低, 因此任何 a $ b 都可以被视作 (a) $ (b) 从而省略括号, 提高代码的可读性.

f $ g $ h x
=> (f) (g $ h x)
=> f (g (h x))

参见

评论