我有这种复杂的类型
newtype CalendarDay = MkCal (Either AvailableDay UnAvailableDay) deriving (Show,Ord,Eq)
由
组成newtype AvailableDay = MkAD (Text, C.Day) deriving (Show,Eq,Ord)
和
newtype UnAvailableDay = MkUAD (Either ScheduledDay (C.Day, Out_Of_Office)) deriving (Show,Ord,Eq)
ScheduledDay看起来像这样
data ScheduledDay = MkSDay C.Day Product ScheduledState deriving (Show,Ord,Eq)
我将有一个[CalendarDay],我希望按照所有其他类型的日期排序。为实现这一目标,我需要做些什么?
答案 0 :(得分:4)
定义一个函数day :: CalendarDay -> Day
,从您的类型中提取日期。您可以使用当前类型执行此操作,但正如我在评论中提到的,我建议先重构这些。然后,应该进行一些模式匹配以从类型中提取Day
字段。
完成此功能后,使用sortBy
中的Data.List
进行排序,使用自定义比较功能。您可以使用comparing
Data.Ord
构建一个,如下所示:
sortBy (comparing day) foo
其中foo :: [CalendarDay]
是您的日历日列表。