いくつかのタイプRecord
あり範囲は
getAssignment :: (Year, Month, Day) -> [Record] -> [Record]
getAssignment (year, month, day) = filter matchDate
where matchDate (BirthdayRecord _ (Birthday month day)) = True
matchDate (DatingRecord (DatingDate year month day) _) = True
matchDate _ = False
getAssignment
のこの定義は、エラーのため正しくありません。
warning: Defined but not used: `year'
実際に、それは、私のためにその01驚きの一種でありますパターン一致部分のgetAssignment
とyear
のパターン一致部分のは、matchDate
と一致しません。
したがって、year
のスコープ境界はどこで開始され、終了しましたか? where
セクションのために起こりますか?
Btwこのエラーは、(year, month, day)
個の変数を使用していくつか重複して使用すると回避できます。
getAssignment' :: (Year, Month, Day) -> [Record] -> [Record]
getAssignment' date = filter (matchDate date)
where matchDate (_, m, d) (BirthdayRecord _ (Birthday month day)) =
month == m && day == d
matchDate (y, m, d) (DatingRecord (DatingDate year month day) _) =
year == y && month == m && day == d
matchDate _ _ = False
どのように書き換えられますか?
'month'と' month''変数を抑制する方法はありますか? –
申し訳ありませんが、私はあなたのコメントを理解していません。あなたが求めていることの詳細を教えてください。 – dave4420
'f x = x == y'の定義を見たとき、' x'変数を冗長に使用しているため 'f y == True'のように書き直したいと思います。その場合、 'year''、' month''と 'day''変数を取り除くために同じトリックを使いたいと思います。 –