Wenn
%Vor%und
%Vor%Wie funktioniert das?
%Vor%gegeben:
%Vor%?
Ich meine, mein Verständnis der Funktionszusammensetzung ist, dass replicate
das zurückgeben sollte, was concatMap
als Argumente erwartet, damit (.)
funktioniert. Aber es sieht nicht so aus. Also, was ist der Haken?
Es könnte Ihnen helfen zu sehen, was passiert, wenn Sie Klammern zu den Signaturen hinzufügen und sie dann ausrichten:
%Vor% Jetzt sollte es ziemlich offensichtlich sein, dass die Ausgabe von replicate
der Eingabe von concatMap
entspricht, wenn wir b
und a
vereinheitlichen. In diesem Fall ist der Ausgabetyp der Komposition [b] -> [b]
.
Die Schwierigkeit liegt wahrscheinlich in verwirrenden Variablen und wie Sie begründen die Typisierung. Der Trick ist zu prüfen, wie andere haben gesagt, dass (- & gt;) richtig assoziativ ist, was bedeutet, dass du es kannst Richten Sie die Dinge so aus (indem Sie jeweils neue Typvariablen erstellen) Unterschrift, um Verwirrung zu vermeiden):
%Vor%Dies gibt uns im Wesentlichen einige Einschränkungen, die wir lösen müssen. Nehmen wir an, dass "a ~ b" bedeutet "a ist der gleiche Typ wie b" oder äquivalent "a kann durch b ersetzt werden."
Aus dem Vorstehenden können wir folgende Fakten ableiten:
%Vor%Aber die zwei Äquivalenzen für b sagen uns das
%Vor%was dazu führt
%Vor%Also schreiben wir c wie folgt um:
%Vor%Die Substitutionen für a und c werden wieder in das Original eingefügt Typ von (.) mit den beiden Funktionen angewendet ergibt
%Vor% was natürlich in der Form ist, die ghci meldet: Int -> [b] -> [b]
.
Tags und Links haskell