Haskell:SortBy有多个参数(出生日期)

Dys*_*str 4 sorting haskell

我正在尝试使用sortBy根据Y> M> D优先级对出生日期列表进行排序.

由于无法设置嵌套防护装置,我想出了这种丑陋的解决方案:

sortBD (day1, month1, year1) (day2, month2, year2)
  | year1 < year2 = GT
  | year1 < year2 = LT   -- Typo: < should be >
  | year1 == year2 = if compare month1 month2 == EQ then compare day1 day2 else compare month1 month2
Run Code Online (Sandbox Code Playgroud)

然而,由于非穷举模式,这会返回异常.

[编辑]:为了避免其他人遇到同样问题的混乱:上面代码中的问题是一个拼写错误,正如答案所指出的那样,而不是方法本身.

Dan*_*ner 12

你没有涉及这个year1 > year2案子,因为你在这一行上有一个拼写错误:

  | year1 < year2 = GT
Run Code Online (Sandbox Code Playgroud)

您可以使用实例来组合结果,而不是尝试小心地处理EQs和非EQs.MonoidOrdering

sortBD (d1, m1, y1) (d2, m2, y2)
    = compare y1 y2
   <> compare m1 m2
   <> compare d1 d2
Run Code Online (Sandbox Code Playgroud)

更好的是,元组实例已经这样做了,所以你可以重用它:

sortBD (d1, m1, y1) (d2, m2, y2) = compare (y1, m1, d1) (y2, m2, d2)
Run Code Online (Sandbox Code Playgroud)