我将我的数据类型声明为类Num
的实例,并仅实现方法sum (+)
。其他方法包括(*)
,negate
,abs
,fromInteger
等。我不会实施。原因是我的数据类型不需要这些方法。
我编译了程序,除了一些不舒服的警告之外它没问题,例如:
Warning: No explicit method nor default method for `*'
...
如何避免这些警告,或者我是否需要实施上述方法?实际上,我并不想实施它们。
答案 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