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
ただし、これは非網羅的なパターンのために例外を返します。
[編集]:同じ問題で問題が発生している他の人を救うために混乱:上記のコードの問題は、回答で指摘されているように、アプローチ自体ではなくタイプミスです。
year1 > year2
この行にタイプミスがあるため、このケースについては説明していません。
| year1 < year2 = GT
EQ
sとnon-を注意深く調整しようとする代わりに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)
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加