2013-06-02 6 views
11

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?

+2

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

+3

"[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 '. –

risposta

14

Functor era nella versione 1.3 del report Haskell che è ciò che standardizzava sia le classi di tipo IO monadico che quelle di tipo superiore. Quindi, la classe di caratteri Functor è vecchia quanto la classe di caratteri monad. E, per di più, Functor è il primo esempio motivante nel documento di Jones che introduce "classi di costruttori!" Si potrebbe dire che la carta di Jones abbia reso popolare l'idea, ma, come si fa notare, le persone hanno desiderato mappe generalizzate per molto tempo.

+5

Infatti. Jones ha implementato le classi di costruttori in Gofer qualche tempo prima che venissero adottate in Haskell. Hugs è l'abbreviazione di Gofler System di Haskell Users, introdotto per consentire a Haskell folk l'accesso ad alcuni tipi di sistemi di tipo più avanzati, nei giorni precedenti a ghc. – AndrewC

+0

Eccellente! Sembra un documento fantastico, e la prima sezione è esattamente ciò che volevo. –

+6

Il documento è disponibile all'indirizzo http://www.cs.tufts.edu/comp/150GIT/archive/mark-jones/fpca93.pdf – AndrewC