如何消除未完全实现的类的警告

时间:2012-11-27 03:06:53

标签: haskell compiler-warnings

我将我的数据类型声明为类Num的实例,并仅实现方法sum (+)。其他方法包括(*)negateabsfromInteger等。我不会实施。原因是我的数据类型不需要这些方法。

我编译了程序,除了一些不舒服的警告之外它没问题,例如:

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

如何避免这些警告,或者我是否需要实施上述方法?实际上,我并不想实施它们。

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:2)

您始终可以使用undefined作为占位符值;它的类型只是a,所以它总是强大的。但要小心,评估它会在运行时抛出异常。

data Foo = Bar | Baz

instance Eq Foo where
      Bar == Bar = True
      Baz == Baz = True
      (/=)       = undefined