6

在 Haskell 中,通过某种转换来“提升”二进制函数的两个参数,哪种方式是最惯用的方式?让这个运算符命名为“lift”,所以我希望它的类型是

lift :: (a -> b) -> (b -> b -> c) -> (a -> a -> c)

一个天真的定义将是

lift t f = \x y -> f (t x) (t y)
4

1 回答 1

15

它被称为on(from Data.Function),尽管带有翻转的参数:

on :: (b -> b -> c) -> (a -> b) -> a -> a -> c
-- lift = flip on

请注意,您可以使用Hoogλe查询轻松找到该函数。另请注意,已经有一个 function lift,它用于完全其他的设置,即 monad 转换器。

于 2014-07-28T11:54:34.523 回答