Вы можете использовать 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
. Если это не так, и это находится под вашим контролем, тогда вы можете сделать это одним, но я думаю, что это должно быть рассмотрено в других вопросах и ответах, если это будет необходимо.