Ich sehe oft ähnliche Typ-Deklarationen, wenn ich Haskell betrachte:
%Vor%Ich verstehe, dass es eine Funktion beschreibt, die etwas vom Typ a aufnimmt und eine neue Funktion zurückgibt, die etwas vom Typ b aufnimmt und etwas vom Typ c zurückgibt. Ich verstehe auch, dass Typen assoziativ sind (edit: Ich habe mich geirrt - siehe die Kommentare unten), also könnte das obige wie folgt umgeschrieben werden, um das gleiche Ergebnis zu erhalten:
%Vor%Dies würde eine Funktion beschreiben, die etwas vom Typ a und etwas vom Typ b aufnimmt und etwas vom Typ c zurückgibt.
Ich habe auch gehört, dass du eine Ergänzung (edit: wirklich, das Wort, nach dem ich gesucht habe, ist dual - siehe die Kommentare unten) zu der Funktion machen kannst, indem du die Pfeile wechselst:
%Vor%was meiner Meinung nach äquivalent zu
ist %Vor%aber ich bin mir nicht sicher.
Meine Frage ist, wie heißt diese Art von Mathe? Ich würde gerne mehr darüber erfahren, damit ich damit bessere Programme schreiben kann. Ich bin daran interessiert, Dinge zu lernen, wie eine komplementäre Funktion ist und welche anderen Transformationen bei Typdeklarationen durchgeführt werden können.
Danke!
Im Großen und Ganzen fällt dies in den Bereich Lambda-Kalkül .
Da diese Notation mit Arten von Funktionen zu tun hat Typ-Inferenz könnte Sie auch interessieren.
(Die falschen Annahmen, die Sie bezüglich der Assoziativität getroffen haben, sollten bereits ausreichend durch die anderen Antworten geklärt sein, so dass ich das nicht wiederholen werde)
Typdeklarationen sind nicht assoziativ, a -> (b -> c)
entspricht nicht (a -> b) -> c
. Außerdem können Sie die Pfeile nicht "umschalten", a <- b <- c
ist keine gültige Syntax.
Der übliche Hinweis auf Assoziativität ist in diesem Fall ->
it rechts assoziativ , was bedeutet, dass a -> b -> c
als a -> (b -> c)
interpretiert wird.
und
%Vor%sind nicht in Haskell gleichwertig. Das ist eine Typtheorie, die in der Kategorientheorie begründet werden kann.
Ersteres ist eine Funktion, die ein Argument vom Typ a
verwendet und eine Funktion vom Typ b -> c
zurückgibt. Letzteres ist eine Funktion, die eine Funktion vom Typ a -> b
als Argument verwendet und einen Wert vom Typ c
zurückgibt.
Was meinst du mit der Ergänzung einer Funktion? Der Typ der Umkehrfunktion einer Funktion vom Typ a -> (b -> c)
hat den Typ (b -> c) -> a
.