最惯用的方式是什么;“举起来”;通过某种转换,Haskell中二元函数的两个参数?

最惯用的方式是什么;“举起来”;通过某种转换,Haskell中二元函数的两个参数?,haskell,functional-programming,monads,applicative,arrows,Haskell,Functional Programming,Monads,Applicative,Arrows,在Haskell中,哪一种最惯用的方法可以通过转换“提升”二元函数的两个参数?让这个操作符命名为“lift”,所以我希望它的类型是 lift :: (a -> b) -> (b -> b -> c) -> (a -> a -> c) 一个幼稚的定义将是 lift t f = \x y -> f (t x) (t y) 它被调用(从Data.Function),尽管使用翻转参数: on :: (b -> b -> c) -> (

在Haskell中,哪一种最惯用的方法可以通过转换“提升”二元函数的两个参数?让这个操作符命名为“lift”,所以我希望它的类型是

lift :: (a -> b) -> (b -> b -> c) -> (a -> a -> c)
一个幼稚的定义将是

lift t f = \x y -> f (t x) (t y)
它被调用(从
Data.Function
),尽管使用翻转参数:

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

请注意,您可以通过查询轻松找到该函数。还要注意的是,已经有一个功能
lift
,它被用于另一个完全不同的设置,即monad transformers。

哇,非常感谢您的快速回答,特别是hoogle的链接@ramntry:你可能想看看,它包含了一些很好的资源。