Ich habe eine benutzerdefinierte Typklasse für mathematische Vektoren
%Vor% und ich möchte Zahlen a
und Funktionen a -> vector
zu einer Instanz der Klasse machen. Zahlen sind einfach:
und ich dachte, Funktionen wären auch einfach (naja, außer dot
, aber damit kann ich leben)
Allerdings erhalte ich den folgenden Fehler:
%Vor% Wie kann ich GHC mitteilen, dass die Instanz für alle Typen gültig ist a
? Wo soll ich die Typensignatur hinzufügen?
Typ Familien sind definitiv die schönste Art, dieses Problem zu lösen
%Vor%Um einen Vektorraum aus Funktionen zu machen, müssen Sie das gleiche Feld mathematisch verwenden:
%Vor%... und das Schöne an Schriftfamilien ist, dass sie sehr gut funktionieren, wie Sie es erklären würden. Lassen Sie uns das direkte Produkt von zwei Vektorräumen machen:
%Vor% Sie könnten den Num
-Kontext durch eine benutzerdefinierte algebraische Klasse ersetzen, aber Num
erfasst das Konzept
von einem Feld mäßig gut.
Ich konnte das folgende kleine Beispiel (nach Conal Elliotts Vektorraum Paket) kompilieren:
%Vor%Es kann möglich sein, dies mit funktionalen Abhängigkeiten anstelle von Typfamilien arbeiten zu lassen.