List of Haskell Data Types
I have a custom datatype named Student that has labels for 2 items. I have created a function called average that calculates the average of the two. Everyone works great.
My question is, how can I sort the student list by 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]
PS I'm new to Haskell and don't know if the built-in middle function worked out, but I prefer if I can sort my list into similar ones without using the built-in middle function (if any), since this is a small test solution to use with another type of function instead it is average.
source to share
import Data.Function (on)
import Data.List (sortBy)
studentsSortedByAverage = sortBy (compare `on` average) students
Note that these are backticks around on
, not single quotes.
Here are links to docs for sortBy
and on
.
If you are using an old compiler that does not come with Data.Function
, here is the definition on
:
on :: (b -> b -> c) -> (a -> b) -> a -> a -> c
(.*.) `on` f = \x y -> f x .*. f y
source to share