Beachten Sie Folgendes:partiell aufgebracht Gleichheit Einschränkung
class (a ~ b) => Equal a b
instance (a ~ b) => Equal a b
sagen wir später habe ich einen Datentyp haben:
data D (c :: * -> Constraint) where
D :: Proxy c -> D c
Dann so etwas gilt:
D (Proxy :: (Proxy (Equal Int)))
Meine Frage ist, gibt es eine Möglichkeit, Equal
anders als die repetitive Klasse/Instanz-Notation zu schreiben, die ich verwendet habe?
Es scheint, dass, wenn ich Equal
als eine Familie definieren Equal Int
nicht funktioniert, weil es eine unvollständige Anwendung ist.
Der Klassen-/Instanz-Hack sieht schlecht aus, aber zumindest funktioniert es, aber gibt es einen anderen vielleicht saubereren Weg, dies zu erreichen?
Hinweis Ich verwende in meinem tatsächlichen Code komplexere Einschränkungen als die Gleichheit, ich dachte nur, dies wäre ein gutes Beispiel.
Ich denke, Proxy ((~) Int) 'funktioniert nicht, aber es wäre nett. – chi