Viele Gesichtspunkte, hier sind mein:
Wir denken alle map
Funktionen/Methoden als spezifische Fälle von Haskell fmap
von Functors. Aus dieser Definition können wir annehmen, dass die Struktur erhalten bleibt (plus einige andere interessante Eigenschaften).
Aber in .NET gibt es keine Typeclasses so können wir map
über ‚eingeschränkt Funktoren‘ definieren, ist die Folge einige Functor Eigenschaften nicht beibehalten werden, aber da generische Code gibt es keine, die die Auswirkungen betroffen sein werden, ist begrenzt.
So nichts hindert uns map
über zu definieren:
- Sets (Einschränkung: Die Funktion muss 'a ->' b, wenn 'ein und' b: Vergleich und sollte injective sein)
- Strings (Einschränkung: sollte die Funktion sein Char-> char)
- nullables (Einschränkung: die Funktion sollte 'a ->' b, wobei ‚b ist kein Referenztyp)
Beachten Sie, dass in s In einigen Fällen gibt es Einschränkungen sowohl auf Typ- als auch auf Wertebene, zum Beispiel gilt für die Einschränkung auf Typ-Ebene, dass beide Typen "a" und "b" einen Vergleich haben sollten, während die Funktion über den Funktionswert injective lauten sollte.
Wenn die Sprache in der Lage ist, die Beschränkungen auf Typenebene auszudrücken, gibt der Compiler einen Fehler aus, wenn diese Anforderungen nicht erfüllt werden.
Für Funktionswerte gibt es keine Einschränkungen bei der Kompilierung, obwohl wir Komponententests erstellen können, wenn wir sicherstellen wollen, dass sie korrekt sind. Aber was würde passieren, wenn wir diese Funktionen nicht einschränken wollen?
Nun, solange wir, dass einige Functor Eigenschaften verstehen nicht, dass es eingehalten werden ist nichts falsch in eine Karte über einen eingeschränkten Functor verwenden.
So können wir eine map
über Strukturen wie sortierte Listen definieren, natürlich können wir nicht davon ausgehen, dass map a >> map b
in diesen Fällen immer gleich map (a >> b)
sein wird. Die Einschränkung hier ist, dass die Funktion monotonically increasing sein sollte.
HINWEIS: Haskell ein package mit einer eingeschränkten Funktors ist und eine Instanz für Sets
Alle Antworten haben mir sehr geholfen, aber ich denke, das ist am deutlichsten. Ich wurde definitiv verwirrt, indem ich die F # -Kartenfunktionen mit der Haskell-Funktorkarte gleichsetzte. – Akash