Ho la seguente typeclass che modella un'ottimizzazione query SQL-like:Haskell sovrapposte istanze e funzioni di tipo
class OptimizableQuery q where
type Optimized q :: *
optimize :: q -> Optimized q
instance Query q => OptimizableQuery q where
type Optimized q = q
optimize q = q
instance (Query q, OptimizableQuery q) => OptimizableQuery (Select (Select q p) p) where
type Optimized (Select (Select q p) p) = Select (Optimized q) p
optimize (Select (Select q _) p) = Select (optimize q) p
il problema è che ottengo l'errore "dichiarazioni di istanza famiglia conflitto" sulla funzione di tipo ottimizzata. Perché è questo e come posso risolverlo? Sarebbe davvero bello avere una "istanza di fallback" invece di dover esaurire tutti i casi (che potrebbero essere molti) ...
Come posso aggirare questo? –
Non riesco a pensare a soluzioni alternative oltre a esaurire tutti i casi. Scusate! –