重複の可能性:
クラスインスタンスがループの場合、GHCは警告できますか?
相互に実装可能な2つのメソッドを持つ型クラスについて考えてみます。
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
あれbaz
ば、効率上の理由から両方の実装を提供したい場合もあります。
今、私はどこかに行き、このクラスのインスタンスを作成します
instance Foo Integer where
foo = 1
おっと、またはのいずれかを実装するのを忘れました!気にしないでください、型システムは私のためにそれを拾いますね?bar
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
ええとああ。面倒なデバッグのキュー時間。
各インスタンスがまたはの少なくとも1つを指定する必要があることをGHCに通知する方法はありますbar
かbaz
?