在 Haskell 中,通过某种转换来“提升”二进制函数的两个参数,哪种方式是最惯用的方式?让这个运算符命名为“lift”,所以我希望它的类型是
lift :: (a -> b) -> (b -> b -> c) -> (a -> a -> c)
一个天真的定义将是
lift t f = \x y -> f (t x) (t y)
在 Haskell 中,通过某种转换来“提升”二进制函数的两个参数,哪种方式是最惯用的方式?让这个运算符命名为“lift”,所以我希望它的类型是
lift :: (a -> b) -> (b -> b -> c) -> (a -> a -> c)
一个天真的定义将是
lift t f = \x y -> f (t x) (t y)
它被称为on
(from Data.Function
),尽管带有翻转的参数:
on :: (b -> b -> c) -> (a -> b) -> a -> a -> c
-- lift = flip on
请注意,您可以使用Hoogλe查询轻松找到该函数。另请注意,已经有一个 function lift
,它用于完全其他的设置,即 monad 转换器。