Ich lese in cats documentation über Typklassen Apply
und Applicative
. Ich frage mich, warum die Bibliothek zwei separate Typklassen statt nur einer Typklasse Applicative
bietet, die Functor
erweitern und ap
hinzufügen würde? Nutzt jemand Apply
das ist nicht Applicative
?Warum müssen wir die Klassen Apply und Applicative type unterscheiden?
8
A
Antwort
12
Applicative
bietet die pure
Methode, die eine Möglichkeit ist, "hineinzukommen". Ansonsten, auch wenn Sie F[A]
zu F[B]
, entweder mit A => B
(via map
) oder F[A => B]
(via ap
) umwandeln könnte, Sie haben nicht die Fähigkeit, alles innerhalb eines F
zu setzen. Sie dürfen also nur zulassen, dass andere es für Sie tun.
Der Unterschied Applicative
ist, dass Sie Dinge in setzen, aus dem Nichts.
Da entweder kann nützlich sein („Sie sind befugt, Dinge in eine F
zu setzen“ und „nein, halten Sie Ihre Hände weg, und arbeiten auf, was Sie gegeben“), Applicative
und Apply
sind separate typeclasses.
Verwandte Themen
- 1. Warum müssen wir die init-Methode angeben?
- 2. Warum müssen wir vor() warten()?
- 3. Warum verwenden wir innere Klassen?
- 4. Beacon: Warum müssen wir Tx power
- 5. Warum müssen wir eval JSON Klammern hinzufügen?
- 6. Parsec und Applicative Stil
- 7. Warum müssen wir Platz vor% c setzen?
- 8. Warum müssen wir Lua's collectgarbage() zweimal anrufen?
- 9. Warum müssen wir UpdateWindow nach ShowWindow aufrufen?
- 10. Warum müssen wir die Variable __block auf Null setzen?
- 11. Warum müssen wir die Cache-Größe klein halten?
- 12. Warum müssen wir verwenden, außer und "?" zusammen statt, wenn allein
- 13. Warum müssen wir std :: cin und std :: cout binden?
- 14. Warum müssen wir die wahre Position in Kalman-Filtern schätzen?
- 15. Warum müssen wir ./ für die Ausführung Shell-Skript verwenden
- 16. Warum müssen wir die run() -Methode überschreiben Thread-Klasse
- 17. Was ist genau ein "thread-safe type"? Wann müssen wir die "lock" -Anweisung verwenden?
- 18. Müssen wir eine Struktur malloc?
- 19. Wann müssen wir float.PositiveInfinity und float.NegativeInfinity verwenden?
- 20. Müssen wir * .xcuserstate einchecken?
- 21. Wann müssen wir einen Proxy-Service erstellen und wann müssen wir Rest Api erstellen?
- 22. Warum müssen wir "babel-polyfill" importieren? in reagierenden Komponenten?
- 23. Statische Variableninitialisierung für Klassen in C++, warum include data type?
- 24. Warum müssen wir den übergeordneten Konstruktor explizit in MSIL aufrufen?
- 25. Warum müssen wir virtuelle Methoden als solche deklarieren?
- 26. Warum müssen wir WSGI_APPLICATION Variable in Django Einstellungen
- 27. Warum müssen wir poll_wait in der Umfrage aufrufen?
- 28. Warum müssen wir in Objective-C [MyClass-Klasse] machen?
- 29. Warum müssen wir LayoutInflater in Android nicht instanziieren?
- 30. Angular 2 - warum müssen wir ngForm verwenden, wenn wir benutzerdefinierte Validierung verwenden?
Vielen Dank. Ich denke ich habe es. Könnten Sie ein Beispiel für die Verwendung von "Apply" geben, das nicht "Applicative" ist (wie in "Halten Sie Ihre Hände weg und operieren Sie mit dem, was Ihnen gegeben wurde")? – Michael
Sie können sich alle möglichen Fälle vorstellen. Wenn Sie beispielsweise einen Fehlertyp hatten, den Sie verarbeiten wollten, aber nicht möchten, dass neue Fehler generiert werden oder Informationen verwendet werden können, die nicht aus einem Fehlerkontext stammen, könnte der Fehlertyp gewünscht sein eine 'Apply'-Klasse, aber keine' Applicative'. –