gpt4 book ai didi

haskell - 避免类型类中相互递归默认方法的错误

转载 作者:行者123 更新时间:2023-12-02 22:24:37 25 4
gpt4 key购买 nike

<分区>

Possible Duplicate:
Can GHC warn if class instance is a loop?

考虑一个类型类,它有两个可以相互实现的方法:

class Num a => Foo a where

foo :: a

bar :: a -> a
bar x = baz x + 1

baz :: a -> a
baz x = bar x - 1

根据类型的不同,barbaz 的实现可能更容易,或者出于效率原因,您可能希望同时提供它们的实现。

现在我去别的地方创建这个类的实例

instance Foo Integer where
foo = 1

糟糕,我忘了实现 barbaz任一个!没关系,类型系统会为我选择它,不是吗?

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.

嗯,显然不是。现在,如果我尝试使用我的类(class)

*Main> bar 1
<interactive>: out of memory

呃哦。提示数小时的痛苦调试。

有没有办法让 GHC 知道每个实例需要指定 至少一个 barbaz

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