4

私は単純なタイプを持っています

data Day =  Monday | Tuesday | Wednesday | Thursday | Friday

haskell初心者なので以下のように書き==ます。

(==) :: Day -> Day -> Bool
Monday == Monday = True
Tuesday == Tuesday = True
Wednesday == Wednesday = True
...
x == y = False

==実現を記述する短い方法はありますか?

4

2 に答える 2

12

deriving次のキーワードを使用して、コンパイラにこれらを自動生成させることができます。

data Day = Monday | Tuesday | Wednesday | Thursday | Friday
           deriving Eq

これにより、データ型の==との両方が定義されます。/=

「Eq は、構成要素が Eq のインスタンスでもある任意のデータ型に対して導出できます。」http://www.haskell.org/ghc/docs/7.4.2/html/libraries/base/Data-Eq.html

于 2012-09-19T14:20:06.140 に答える
6

あなたは書ける

data Day =  Monday | Tuesday | Wednesday | Thursday | Friday
  deriving Eq

これは、GHC が Day の Eq のインスタンスを自動的に生成することを意味します。(==) Monday == Monday、などを生成しますTuesday == TuesdayTrueMonday == FridayFalse

のようなものは書けませんのでご注意ください。

(==) :: Day -> Day -> Bool
x == x = True
x == y = False

それはおそらくあなたが考えていたことです。

試してみると、GHC は x の定義が矛盾していると文句を言うでしょう。

于 2012-09-19T14:20:38.420 に答える