我正在尝试根据Y>对出生日期列表进行排序。 M> D使用sortBy优先级。
由于无法设置嵌套防护装置,我想出了这种丑陋的解决方案:
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
然而,由于非详尽的模式,这会返回异常。
[编辑]:为了避免遇到同样问题的其他问题混乱:上面代码中的问题是一个拼写错误,正如答案所指出的那样,而不是方法本身。
答案 0 :(得分:12)
你还没有涉及year1 > year2
案例,因为你在这一行上有一个拼写错误:
| year1 < year2 = GT
您可以只使用EQ
EQ
实例来合并结果,而不是试图仔细调整Monoid
和非Ordering
。
sortBD (d1, m1, y1) (d2, m2, y2)
= compare y1 y2
<> compare m1 m2
<> compare d1 d2
更好的是,元组实例已经这样做了,所以你可以重用它:
sortBD (d1, m1, y1) (d2, m2, y2) = compare (y1, m1, d1) (y2, m2, d2)