Mam następujący typeclass które modele SQL-like optymalizacji zapytań:Haskell nakładających instancje i funkcje typu
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
problemem jest to, że pojawia się błąd „Sprzeczne deklaracje instancji rodzina” na Zoptymalizowana funkcja typu. Dlaczego tak jest i jak mogę to rozwiązać? Byłoby naprawdę miło mieć "awaryjną instancję", zamiast wyczerpywać wszystkie przypadki (może to być całkiem sporo) ...
Jak to obejść? –
Nie mogę myśleć o żadnych obejściach oprócz wyczerpania wszystkich przypadków. Przepraszam! –