Haskell a->;是否有一个简短的Lambda表达式;a->;点菜?

Haskell a->;是否有一个简短的Lambda表达式;a->;点菜?,haskell,lambda,anonymous-function,Haskell,Lambda,Anonymous Function,Lambda表达式可以让生活变得更轻松,我喜欢这种方式,你可以将(\x->x+1)等表达式缩短为(+1) 这就是为什么我想知道,对于接受两个参数并返回排序的匿名函数,是否存在类似的情况 例如:能否缩短此代码: sortByFirst :: Ord a => [(a, b)] -> [(a, b)] sortByFirst = sortBy (\x y -> fst x `compare` fst y) 您可以使用Data.function模块中的on功能 import Dat

Lambda表达式可以让生活变得更轻松,我喜欢这种方式,你可以将
(\x->x+1)
等表达式缩短为
(+1)

这就是为什么我想知道,对于接受两个参数并返回
排序的匿名函数,是否存在类似的情况

例如:能否缩短此代码:

sortByFirst :: Ord a => [(a, b)] -> [(a, b)]
sortByFirst = sortBy (\x y -> fst x `compare` fst y)

您可以使用
Data.function
模块中的
on
功能

import Data.List

sortByFirst = sortBy (compare `on` fst)
关于
的定义大致如下

on f g = \x y -> f (g x) (g y)

您可以使用
Data.function
模块中的
on
功能

import Data.List

sortByFirst = sortBy (compare `on` fst)
关于的定义大致如下

on f g = \x y -> f (g x) (g y)

通过从
Data.Ord
比较
,它可以拼写为

sortByFirst = sortBy (comparing fst)
。。。这相当于中的
compare`on`fst


Data.List
还提供了一个
sortOn::Ord b=>(a->b)->[a]->[a]
,但这是一个特殊用途的函数,只有当涉及的
a->b
函数有些昂贵,而
fst
不是的时候才值得使用。)

比较
数据中的
,它可以拼写为

sortByFirst = sortBy (comparing fst)
。。。这相当于中的
compare`on`fst


Data.List
还提供了一个
sortOn::Ord b=>(a->b)->[a]->[a]
,但这是一个特殊用途的函数,只有当涉及的
a->b
函数有点昂贵时才值得使用,而
fst
则不是。)

甚至更甜蜜:与
比较
数据中的
sortByFirst=sortBy(比较fst)
Oops,忘记了那个特定的函数。谢谢,这正是我想要的@Jere,
sortOn
的效率低于这个答案中定义的
sortByFirst
。更甜蜜的是:通过
比较
数据。Ord
sortByFirst=sortBy(比较fst)
哦,忘记了那个特定的函数。谢谢,这正是我想要的@Jere,
sortOn
的效率低于此答案中定义的
sortByFirst
sortByFirst=sortOn fst
sortByFirst=sortOn fst