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

chi*_*k10 3 haskell compiler-warnings

我将我的数据类型声明为类的实例,Num并仅实现方法和(+).其他的方法,如(*),negate,abs,fromInteger等我不落实.原因是我的数据类型不需要这些方法.

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

Warning: No explicit method nor default method for `*'
...
Run Code Online (Sandbox Code Playgroud)

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

Dan*_*her 9

您可以使用命令行标志(在GHC中)使这些警告静音

ghc -fno-warn-missing-methods YourFile.hs
Run Code Online (Sandbox Code Playgroud)

但是如果你只想实现添加,那么将你的类型作为实例可能是不合适的Num.如果你只想不具有对类型的操作一个不错的操作,你可以定义你自己的,你甚至可以重复使用(+),如果你

import Prelude hiding ((+))
import qualified Prelude  -- so that (+) can be still used in qualified form
Run Code Online (Sandbox Code Playgroud)

  • 作为定义自己的类或使用`Num`的替代方法,您可以将`Monoid`与`<>`(aka mappend)用于`+',将`mempty`用于`0`. (9认同)
  • 我同意@JohnL - 如果你的`+`是关联的,你可能正在谈论一个Monoid(`import Data.Monoid`然后`实例Monoid ......`) (5认同)