私は、誘導的にクラスインスタンスのペアを定義しようとしています。つまり、Haskell "not"型制約
class Foo a b | a -> b where
foo :: a -> b
instance (not?)Foo a => Bar a b
foo x = ...
instance Foo a => Bar a b
foo x = ...
最初のインスタンスは基本アクションを決定し、秒は再帰的にfooを呼び出します。これを行う方法はありますか?良い例は、リストを平坦化することです。最初のケースではそれがアイデンティティ関数であり、2番目のケースではコンカットの再帰的アプリケーションです。
ハスケルでは、与えられた型が与えられた型クラスのインスタンスではないことを確かめることは不可能です。他の人がインスタンスを提供する独自のコードでコードをコンパイルできるからです。 –