Próbuję zdefiniować parę instancji klasy indukcyjnie. To znaczy:Ograniczenie typu "nie" Haskella
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 = ...
Pierwsze instancje określają akcję podstawową, a sekundy rekurencyjnie wywołują foo. Czy jest jakiś sposób to zrobić? Dobrym przykładem może być spłaszczenie listy, gdzie w pierwszym przypadku jest to funkcja tożsamości, a w drugim rekursywna aplikacja konkat.
Zauważ, że w Haskell nie można mieć pewności, że dany typ jest * nie * instancją klasy danego typu, ponieważ ktoś inny mógłby skompilować twój kod z własnym kodem dostarczającym instancję. –