Sto cercando di ottenere una comprensione molto profonda della gerarchia di classi Monad
. Una parte di questo è, naturalmente, vedere molti esempi, ma sono particolarmente interessato alla storia di come sono state scoperte queste classi e alle loro motivazioni.Qual è la cronologia dietro la classe di tipo Functor?
Capisco che Monad
s sia nato inizialmente come soluzione al problema di I/O in Haskell, e conosco i documenti di Moggi e Wadler del 1989-92 che li hanno introdotti.
Ho anche visto dove Applicatives
sono stati introdotti in "Programmazione applicativa con effetti" di Conor McBride e Ross Paterson.
Con la mia domanda è quello che popolarizzato Functor
s, e quando sono arrivati? Presumo che deve essere dopo Monad
dal Functor
non è una superclasse, ma le persone non hanno mai usato le funzioni di mappe generalizzate sin dai primi giorni del LISP?
La classe Functor è stata la prima (prima dell'1.3 è stata rilasciata) una superclasse di Monad, ma questo è stato (purtroppo) ritirato perché la gente riteneva che fosse una superclasse superflua. – augustss
"[H] non c'erano persone che usavano funzioni di mappe generalizzate sin dai primi giorni del LISP?" Bene, c'è una differenza, nella maggior parte dei casi in cui queste "funzioni di mappa generalizzate" sono basate sulla raccolta o anche sulla sequenza. Ancora oggi lo vedi in, ad esempio, Clojure, in cui [la funzione 'map' prende le raccolte e restituisce sequenze pigre] (http://clojuredocs.org/clojure_core/1.2.0/clojure.core/map). Al contrario, la classe 'Functor' è basata su leggi equazionali e non si basa sull'implementazione, portando a implementazioni non di raccolta come' IO' e FRP 'Behaviour '. –