可能重复:
如果类实例是循环,GHC 可以警告吗?
考虑一个类型类,它有两个可以相互实现的方法:
class Num a => Foo a where
foo :: a
bar :: a -> a
bar x = baz x + 1
baz :: a -> a
baz x = bar x - 1
根据类型,实现bar
or可能更容易baz
,或者出于效率原因,您可能希望同时实现它们。
现在我去别的地方做这个类的一个实例
instance Foo Integer where
foo = 1
糟糕,我忘了实现bar
or baz
!没关系,类型系统会为我选择,不是吗?
C:\path\to\file> ghci Foo.hs
GHCi, version 7.4.1: http://www.haskell.org/ghc/ :? for help
Loading package ghc-prim ... linking ... done.
Loading package integer-gmp ... linking ... done.
Loading package base ... linking ... done.
[1 of 1] Compiling Main ( Foo.hs, interpreted )
Ok, modules loaded: Main.
嗯,显然不是。现在,如果我尝试使用我的课程
*Main> bar 1
<interactive>: out of memory
哦哦。提示数小时的痛苦调试。
有没有办法让 GHC 知道每个实例至少需要指定一个bar
or baz
?