3

我将我的数据类型声明为类的实例Num并仅实现方法 sum (+)。其他方法,如(*), negate, abs,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用作占位符值;它的类型是asimple ,所以它总是进行类型检查。不过要小心,评估它会在运行时抛出异常。

data Foo = Bar | Baz

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