Сортировка списка записей по заданному типу c - PullRequest
0 голосов
/ 22 марта 2020

У меня есть список игр:

data Game = Game {
                    round ::Int
                  , time :: Maybe ZonedTime
                  , location :: String 
                  , hometeam :: String 
                  , awayteam :: String 
                  , result :: Maybe (Int, Int) 
                  } deriving (Show)

type Games = [Game]

Как отсортировать список игр на основе свойства времени?

Спасибо!

1 Ответ

5 голосов
/ 22 марта 2020

Вы можете использовать sortOn из Data.List:

sortOn :: Ord b => (a -> b) -> [a] -> [a]

Достаточно удобно, Maybe a является экземпляром Ord, когда a сам является экземпляром Ord, так что вы можете отсортировать значения ZonedTime "через" maybes:

sortOn time games -- produces the list you're looking for

Экземпляр Ord Maybe также заботится о значениях Nothing, присваивая им более низкий порядок:

$> sort [Just 5, Nothing, Just 1, Nothing]
$> [Nothing,Nothing,Just 1,Just 5]

Предполагается, что ZonedTime является экземпляром Ord. Если это не так, и это находится под вашим контролем, тогда вы можете сделать это одним, но я думаю, что это должно быть рассмотрено в других вопросах и ответах, если это будет необходимо.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...