gpt4 book ai didi

haskell - 如果类实例是循环,GHC 可以警告吗?

转载 作者:行者123 更新时间:2023-12-03 15:24:59 27 4
gpt4 key购买 nike

真实世界的 Haskell 有这个例子:

class BasicEq3 a where
isEqual3 :: a -> a -> Bool
isEqual3 x y = not (isNotEqual3 x y)

isNotEqual3 :: a -> a -> Bool
isNotEqual3 x y = not (isEqual3 x y)

instance BasicEq3 Bool

当我在 GHCI 中运行它时:
#> isEqual3 False False
out of memory

因此,您必须至少实现这两种方法中的一种,否则它将循环。而且您可以灵活地选择哪一个,哪个整洁。

我的问题是,如果没有覆盖足够的默认值并且默认值形成循环,是否有办法获得警告或其他东西?对我来说很奇怪,如此疯狂聪明的编译器在这个例子中很好。

最佳答案

我认为 GHC 在“不间断”循环依赖的情况下发出警告是完全可以的。甚至还有一张票:http://hackage.haskell.org/trac/ghc/ticket/6028

仅仅因为某事“无法确定”并不意味着问题的任何实例都无法有效解决。 GHC(或任何其他 Haskell 编译器)已经拥有相当多的所需信息,如果用户在不“破坏”循环依赖的情况下实例化一个类,它完全有可能发出警告。如果编译器在之前帖子中举例说明的极少数情况下出错,那么用户可以获得 -nowarnundefinedcyclicmethods或类似的机制来告诉 GHC 保持安静。在几乎所有其他情况下,警告都会受到欢迎,并且会提高程序员的工作效率。避免几乎总是一个愚蠢的错误。

关于haskell - 如果类实例是循环,GHC 可以警告吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12270239/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com