Haskell 我需要做什么才能将'sort'应用于此类型?

Haskell 我需要做什么才能将'sort'应用于此类型?,haskell,Haskell,我有这种复杂的类型 它是由 及 时间表是这样的 我将有一个[日历日],我想按埋在所有其他类型中的日期进行排序。我要怎么做才能做到这一点 定义一个函数day::CalendarDay->day,从您的类型中提取日期。您可以对当前类型执行此操作,但正如我在评论中提到的,我建议首先重构这些类型。然后,只需进行一些模式匹配即可从您的类型中提取Day字段 拥有此函数后,使用sortBy from Data.List使用自定义比较函数进行排序。您可以通过比较Data.Ord构建一个,如下所示: sortBy

我有这种复杂的类型

它是由

时间表是这样的

我将有一个[日历日],我想按埋在所有其他类型中的日期进行排序。我要怎么做才能做到这一点

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

拥有此函数后,使用sortBy from Data.List使用自定义比较函数进行排序。您可以通过比较Data.Ord构建一个,如下所示:

sortBy (comparing day) foo
其中foo::[CalendarDay]是日历日的列表。

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

拥有此函数后,使用sortBy from Data.List使用自定义比较函数进行排序。您可以通过比较Data.Ord构建一个,如下所示:

sortBy (comparing day) foo

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

这些类型看起来可能需要一些重构。您可能应该将Day字段移到CalendarDay类型,并单独处理可用性。像这样?newtype CalendarDay=MkCal Day,可用性?我将使用普通数据类型而不是元组上的newtype,即data CalendarDay=MkCal Day可用性。类似地,除非您有充分的理由这样做,否则我还将使用具有多个构造函数的数据类型来替换,例如,data Availability=Available Text | Unavailable…这些类型看起来可以使用一些重构。您可能应该将Day字段移到CalendarDay类型,并单独处理可用性。像这样?newtype CalendarDay=MkCal Day,可用性?我将使用普通数据类型而不是元组上的newtype,即data CalendarDay=MkCal Day可用性。类似地,除非您有充分的理由这样做,否则我还将使用具有多个构造函数的数据类型来替换,例如,data Availability=Available Text | Unavailable….谢谢hammar。我想暂时保持现状,但你是对的。我需要先进行重构。自从重新分解后,我的代码变得更加清晰,以前困难的任务现在很容易解决。谢谢hammar。我想暂时保持现状,但你是对的。我需要先进行重构。自从重新分解后,我的代码变得更加清晰,以前困难的任务现在很容易解决了。
newtype UnAvailableDay = MkUAD (Either ScheduledDay (C.Day, Out_Of_Office))
                          deriving (Show,Ord,Eq)
data ScheduledDay = MkSDay C.Day Product ScheduledState
                   deriving (Show,Ord,Eq)
sortBy (comparing day) foo