Estoy tratando de definir un par de instancias de clase inductivamente. Esto es:Haskell "no" tipo restricción
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 = ...
Los primeros casos determina la acción base, y los segundos llama de forma recursiva foo. ¿Hay alguna manera de hacer esto? Un buen ejemplo sería aplanar una lista, donde en el primer caso es la función de identidad y en el segundo es una aplicación recursiva de concat.
Tenga en cuenta que en Haskell, es imposible estar seguro de que un tipo determinado sea * no * una instancia de una clase de tipo determinada, porque alguien más podría compilar su código con parte de su propio código que proporciona la instancia. –