2017-06-20 2 views
2

Ich versuche, Ramda Dokumente zu verstehen, also habe ich nachgeschlagen, was ein Funktor ist here, aber was ist die ~> in diesem Sinne?Was ist das ~> in einer funktor Erklärung?

map :: Functor f => f a ~> (a -> b) -> f b 
+0

Es gibt eine kurze Antwort auf https://StackOverflow.com/Questions/43435656 und viel, viel mehr Details unter https://StackOverflow.com/Questions/40361059. –

Antwort

2

Es ist schon dort geschrieben:

Typ Signatur Notation

~> (squiggly Pfeil) Methode Typkonstruktor. Wenn eine Funktion eine Eigenschaft eines Objekts ist, wird sie als Methode bezeichnet. Alle Methoden haben einen impliziten Parametertyp - den Typ, von dem sie eine Eigenschaft sind. a ~> a -> a ist ein Typ, der von Methoden für Objekte vom Typ a erfüllt wird, die einen Typ a als Argument annehmen und einen Wert vom Typ a zurückgeben.

+0

Wenn das erste 'f' ein Funktor ist, was ist das' f' vor 'a' und' b'? – stackjlei

+0

Das Anfangsbit ('Functor f =>') ist eine Einschränkung für den verbleibenden Teil der Definition. 'f' kann einen beliebigen Funktortyp repräsentieren, wie zum Beispiel Listen (wirklich Arrays):' map :: [a] ~> (a -> b) -> [b] ', (Beachten Sie, dass da Listen so gebräuchlich sind eine Abkürzung für 'Array x':' [x] '.) Oder vielleicht:' map: Vielleicht ein ~> (a -> b) -> Vielleicht b'. oder Zukunft: 'map :: Zukunft a ~> (a -> b) -> Zukunft b'. Ramdas Versionen befassen sich nicht mit * Methoden *, nur * Funktionen *, also ändern sich diese etwas, z. 'map :: (a -> b) -> [a] -> [b]'. Aber es ist das gleiche Prinzip. –

+1

Alle 'f's repräsentieren den gleichen Typkonstruktor (oder parametrisierten Typ). Die erste Erscheinung von "f" sagt nur, dass der Typkonstruktor "f" eine Funktoreinschränkung hat, d. H. Instanzen von "f" müssen eine geeignete "Map" -Operation definieren. Was Sie wahrscheinlich verwirren wird ist, dass die gegebene Typ-Signatur nur die generische Version dieser "map" -Operation annotiert. So benötigen Instanzen von 'f' eine' map' Operation und 'map' erwartet selbst eine Instanz von' f' als zweites Argument. – ftor