In der Functor Klassendefinition wir die <$
Funktion definiert haben:
class Functor f where
fmap :: (a -> b) -> f a -> f b
(<$) :: a -> f b -> f a
(<$) = fmap . const
Die const
Funktion hat die Definition:
const :: a -> b -> a
const x _ = x
Ich weiß, dass die <$
Funktion entspricht:
\x -> fmap (const x)
Wie entspricht fmap . const
dem obigen Lambda-Ausdruck? ? Mein Verständnis von Funktionszusammensetzung ist, dass der Ausgabetyp const
mit dem Eingabetyp fmap
übereinstimmen sollte, aber der Eingabetyp fmap
ist die Funktion (a -> b)
nicht a
was ist die const
Funktion gibt aus.
Ihre Frage inspirierte mich, die Definition von '<$' für 'Data.Map' zu überprüfen. In der nächsten Version wird es deutlich schneller. Vielen Dank! – dfeuer