通过某种转换来“提升”Haskell 中二元函数的两个参数,最惯用的方法是什么?让这个运算符被命名为“lift”,所以我预计它的类型将是
lift :: (a -> b) -> (b -> b -> c) -> (a -> a -> c)
一个幼稚的定义是
lift t f = \x y -> f (t x) (t y)
它被称为
on
Data.Function
on :: (b -> b -> c) -> (a -> b) -> a -> a -> c -- lift = flip on
请注意,您可以通过 Hoogλe 查询轻松找到该函数。另请注意,已经有一个函数
lift