Das erste Argument, dass fmap
erwartet wird, ist eine Funktion mit einem Argument.Zu viele Argumente für fmap
fmap :: Functor f => (a -> b) -> f a -> f b
Dann habe ich versucht, wie in Vorspiel folgen:
Prelude> x = fmap (\x y -> x * y)
Wie Sie das erste Argument fmap
eine Funktion sehen können, ist, die zwei Argumente hat. Warum lässt der Compiler es passieren?
Die Funktion, die ich an fmap
oben übergeben habe, hat zwei Argumente nicht eins!
Denn in Haskell gelten alle Funktionen als curried – Khundragpan
Dies ist Abstraktion über Arity, die mit Sprachen, die su sind, möglich ist pport erstklassige Funktionen. Anstatt auf die Funktion einer Multi-Argument-Funktion achten zu müssen, müssen Sie den Funktionsablauf im Auge behalten. – ftor
Dies ist eigentlich eine sehr häufige Sache in Haskell mit Applikaten zu tun. 'f <$> x <*> y 'bedeutet' fmap f x <*> y'. Zum Beispiel bedeutet '(*) <$> [2, 3] <*> [5, 7]' '[(2 *), (3 *)] <*> [5, 7]', was zu '[2 * 5, 2 * 7, 3 * 5, 3 * 7] 'oder' [10, 14, 15, 21] '. –