Haskell数据类型排序列表

Ran*_*ake 3 sorting haskell types list

我有一个名为Student的自定义数据类型,它有2个主题的标记.我创建了一个名为average的函数来计算两个函数的平均值.一切正常.

我的问题是如何按平均值对学生名单进行排序?

data Student = Student
    {studentName :: String,
     subject1 :: Double,
     subject2 :: Double} deriving (Show)

average :: Student -> Double
average (Student _ sub1 sub2) = (sub1 + sub2) / 2

students :: [Student]
students = [Student "Dave"  50.0  40.0,
            Student "Joe"   65.0  90.0,
            Student "Ann"   75.0  82.0]
Run Code Online (Sandbox Code Playgroud)

PS我是Haskell的初学者,不知道它是否具有内置的平均功能但是我更喜欢如果我能以类似的方式对我的列表进行排序而不使用内置的平均功能(如果它在那里)作为这个小的测试解决方案使用用不同类型的函数代替平均值.

dav*_*420 6

import Data.Function (on)
import Data.List (sortBy)

studentsSortedByAverage = sortBy (compare `on` average) students
Run Code Online (Sandbox Code Playgroud)

请注意,这些是反引号on,而不是单引号.

以下是指向sortBy和的文档的链接on.


如果您使用的是未附带的旧编译器,则以下Data.Function是以下定义on:

on :: (b -> b -> c) -> (a -> b) -> a -> a -> c
(.*.) `on` f = \x y -> f x .*. f y
Run Code Online (Sandbox Code Playgroud)