为什么GHC仅对部分实现的类发出警告,而不对错误发出警告?

提多

我认为标题已经很容易说明了,但是无论如何这是一个例子来说明我的观点:

class Foo a where
    someFunction :: a -> a -> Bool

instance Foo Bool

当我对此进行编译时,编译器会发出警告:

Warning:
    No explicit method or default declaration for `someFunction'
    in the instance declaration for `Foo Bool'

现在,调用该函数将导致运行时错误。为什么这是警告,而不是编译时错误?有什么办法可以使它成为编译时错误吗?

泽塔

所述GHC文档提供了一个例子,其中一个警告是足够:

-fwarn-missing-methods

该选项默认情况下处于启用状态,并在实例声明缺少一个或多个方法时发出警告,并且相应的类声明没有针对它们的默认声明。

如果方法名称以下划线开头,则禁止显示该警告。这是一个有用的示例:

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节“最小语法”。

这就是缺少方法不会导致错误而是警告的原因。如果要使警告致命,请使用-Werror由于没有-ferr-missing-methods,因此-Werror是导致-fwarn-missing-methods编译器错误的唯一方法

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

为什么rbind会发出警告

来自分类Dev

发出警告消息

来自分类Dev

为什么gcc会长期发出警告?

来自分类Dev

为什么此代码会发出警告?

来自分类Dev

为什么未捕获的变量会发出警告?

来自分类Dev

为什么/何时erl发出警告:过时消息?

来自分类Dev

为什么 ESLint 对使用的未使用变量发出警告?

来自分类Dev

发出警告时退出

来自分类Dev

发出警告时退出

来自分类Dev

注销前发出警告

来自分类Dev

收到内存警告后发出警告

来自分类Dev

为什么jshint警报仅对lastSelectedRow发出警报

来自分类Dev

从父类定义相同的属性名称时发出警告

来自分类Dev

如何从Remove-Item捕获错误并发出警告?

来自分类Dev

为什么在使用三字组合时,GCC会发出警告,而在使用二字组合时却不会发出警告?

来自分类Dev

强制转换通用类在Eclipse中发出警告,但在Javac中出现错误

来自分类Dev

强制转换通用类在Eclipse中发出警告,但在Javac中出现错误

来自分类Dev

为什么gcc会发出警告:函数qsort_r的隐式声明?

来自分类Dev

为什么数字和字符变量之间的比较不发出警告?

来自分类Dev

BL0005-外部参数用法-为什么对此发出警告?

来自分类Dev

为什么外部循环使用应该不使用且不发出警告的媒介?

来自分类Dev

为什么检查对象是否为null会在编译时发出警告?

来自分类Dev

Dojo构建最终会发出警告,但是为什么呢?

来自分类Dev

为什么rm在删除写保护文件时发出警告?

来自分类Dev

为什么 Elixir 编译器不会对某些“不可匹配”的函数发出警告?

来自分类Dev

为什么 Android Studio Lint 在使用 TypedArray 时会发出警告?

来自分类Dev

出现UIActivityViewController时发出警告

来自分类Dev

禁止从空异步方法发出警告

来自分类Dev

MinGW不会发出警告

Related 相关文章

  1. 1

    为什么rbind会发出警告

  2. 2

    发出警告消息

  3. 3

    为什么gcc会长期发出警告?

  4. 4

    为什么此代码会发出警告?

  5. 5

    为什么未捕获的变量会发出警告?

  6. 6

    为什么/何时erl发出警告:过时消息?

  7. 7

    为什么 ESLint 对使用的未使用变量发出警告?

  8. 8

    发出警告时退出

  9. 9

    发出警告时退出

  10. 10

    注销前发出警告

  11. 11

    收到内存警告后发出警告

  12. 12

    为什么jshint警报仅对lastSelectedRow发出警报

  13. 13

    从父类定义相同的属性名称时发出警告

  14. 14

    如何从Remove-Item捕获错误并发出警告?

  15. 15

    为什么在使用三字组合时,GCC会发出警告,而在使用二字组合时却不会发出警告?

  16. 16

    强制转换通用类在Eclipse中发出警告,但在Javac中出现错误

  17. 17

    强制转换通用类在Eclipse中发出警告,但在Javac中出现错误

  18. 18

    为什么gcc会发出警告:函数qsort_r的隐式声明?

  19. 19

    为什么数字和字符变量之间的比较不发出警告?

  20. 20

    BL0005-外部参数用法-为什么对此发出警告?

  21. 21

    为什么外部循环使用应该不使用且不发出警告的媒介?

  22. 22

    为什么检查对象是否为null会在编译时发出警告?

  23. 23

    Dojo构建最终会发出警告,但是为什么呢?

  24. 24

    为什么rm在删除写保护文件时发出警告?

  25. 25

    为什么 Elixir 编译器不会对某些“不可匹配”的函数发出警告?

  26. 26

    为什么 Android Studio Lint 在使用 TypedArray 时会发出警告?

  27. 27

    出现UIActivityViewController时发出警告

  28. 28

    禁止从空异步方法发出警告

  29. 29

    MinGW不会发出警告

热门标签

归档