3

データ型をクラスのインスタンスとして宣言し、Numメソッド sum のみを実装します(+)(*)negateabs、などの他のメソッドfromIntegerは実装しません。その理由は、私のデータ型にはこれらのメソッドが必要ないからです。

プログラムをコンパイルしましたが、次のような不快な警告を除いて問題ありません。

Warning: No explicit method nor default method for `*'
...

これらの警告を回避するにはどうすればよいですか、または上記の方法を実装する必要がありますか? 実際、私はそれらを実装したくありません。

4

2 に答える 2

9

これらの警告は、コマンド ライン フラグ (GHC で) を使用して黙らせることができます。

ghc -fno-warn-missing-methods YourFile.hs

しかし、足し算だけを実装したい場合は、型を のインスタンスにするのはおそらく適切ではありませんNum。型の操作に便利な演算子が必要な場合は、独自の演算子を定義できます。再利用することもでき(+)ます

import Prelude hiding ((+))
import qualified Prelude  -- so that (+) can be still used in qualified form
于 2012-11-27T03:16:49.383 に答える
3

いつでもundefinedプレースホルダー値として使用できます。その型は単にaであるため、常に型チェックを行います。ただし、これを評価すると実行時に例外がスローされることに注意してください。

data Foo = Bar | Baz

instance Eq Foo where
      Bar == Bar = True
      Baz == Baz = True
      (/=)       = undefined
于 2012-11-27T21:40:37.580 に答える