Für die Geier, die sagen könnten "Schaut es in eurem Lehrbuch nach" oder "Hoogle es", tat ich es.
Ich stieß auf die Aussage
recipe = (== "000001")
Es sieht für mich wie eine Art Boolean aus, aber ich bin mir nicht sicher. Ich habe versucht, es auf verschiedene Arten in GHCi zu testen, aber ich konnte nichts herausfinden, was funktioniert. Kann jemand erklären, was es bedeutet, und diese Frage wird das nächste Mal sein, wenn jemand Googles Haskell (== "")
Sie können GHCI
verwenden, um dies herauszufinden.
Geben Sie in GHCI
in let recipe = (== "000001")
ein. Jetzt können wir sehen, wie es funktioniert. Probieren Sie :t recipe
aus, um zu sehen, was der Typ ist. Das gibt recipe :: [Char] -> Bool
zurück, also sieht es so aus, als wäre dies eine Funktion, die eine Liste von Char
s (a String
) nimmt und eine Bool
zurückgibt.
Wenn Sie es testen, werden Sie False
für jede Eingabe außer "000001"
zurückgeben.
Da ==
ein Operator ist, können Sie ihn teilweise auf ein Argument anwenden, und es wird eine Funktion zurückgegeben, die das andere Argument übernimmt und das Ergebnis zurückgibt. Also gibt == "000001"
eine Funktion zurück, die ein Argument benötigt, um die andere Seite von ==
zu füllen und das Ergebnis zurückgibt.
Bearbeiten: Wenn die Definition recipe = ((==) "000001")
wäre, wäre diese Erklärung richtig.
Um das zu verstehen, sollten Sie eine Teilanwendung nachschlagen. Der Typ der Funktion ==
ist a -> a -> Bool
, eine Funktion, die zwei Argumente des gleichen Typs akzeptiert und eine Bool
zurückgibt.
Aber es ist auch eine Funktion vom Typ a -> (a -> Bool)
, die ein Argument vom Typ a
akzeptiert und eine neue Funktion mit der Signatur a -> Bool
zurückgibt. Das passiert hier. Wir haben ein Argument für ==
angegeben, sodass es in diesem speziellen Fall eine neue Funktion vom Typ a -> Bool
oder [Char] -> Bool
zurückgegeben hat.
Es ist ein Abschnitt . Dies entspricht recipe = \x -> x == "000001"
(was wiederum mit recipe x = x == "000001"
identisch ist).