Tid*_*ddo 11 haskell typeclass ghc
我认为标题已经自我解释了,但是这里有一个例子来说明我的观点:
class Foo a where
someFunction :: a -> a -> Bool
instance Foo Bool
Run Code Online (Sandbox Code Playgroud)
当我编译它时,编译器会发出警告:
Warning:
No explicit method or default declaration for `someFunction'
in the instance declaration for `Foo Bool'
Run Code Online (Sandbox Code Playgroud)
调用该函数现在将导致运行时错误.为什么这是一个警告,而不是编译时错误?有没有办法使这成为编译时错误?
所述GHC文档提供了一个例子,其中一个警告是足够:
-fwarn-missing-methods:默认情况下,此选项处于启用状态,并在实例声明缺少一个或多个方法时发出警告,并且相应的类声明没有默认声明.
如果方法名称以下划线开头,则会禁止警告.这是一个有用的例子:
Run Code Online (Sandbox Code Playgroud)class C a where _simpleFn :: a -> String complexFn :: a -> a -> String complexFn x y = ... _simpleFn ...这个想法是:(a)班级用户只会打电话
complexFn; 从未_simpleFn; (b)实例声明可以定义complexFn或_simpleFn.该
MINIMAL编译指示可用于更改特定类的实例所需的方法组合.请参见第7.20.5节"MINIMAL pragma".
这就是缺少方法不会导致错误的原因,而是一个警告.如果你想使警告致命,请使用-Werror.由于没有-ferr-missing-methods,-Werror是制作-fwarn-missing-methods编译器错误的唯一方法.