为了能够将`sort`应用于这种类型,我需要做些什么?

时间:2011-12-29 01:12:38

标签: haskell

我有这种复杂的类型

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],我希望按照所有其他类型的日期排序。为实现这一目标,我需要做些什么?

1 个答案:

答案 0 :(得分:4)

定义一个函数day :: CalendarDay -> Day,从您的类型中提取日期。您可以使用当前类型执行此操作,但正如我在评论中提到的,我建议先重构这些。然后,应该进行一些模式匹配以从类型中提取Day字段。

完成此功能后,使用sortBy中的Data.List进行排序,使用自定义比较功能。您可以使用comparing Data.Ord构建一个,如下所示:

sortBy (comparing day) foo

其中foo :: [CalendarDay]是您的日历日列表。