Iniziare con Haskell


755

Per alcuni giorni ho cercato di avvolgere la mia testa attorno al paradigma di programmazione funzionale di Haskell. L'ho fatto leggendo tutorial e guardando screencast, ma nulla sembra davvero attenersi. Ora, nell'apprendimento di varie lingue imperative / OO (come C, Java, PHP), gli esercizi sono stati un buon modo per me di andare. Ma dal momento che non so davvero di cosa sia capace Haskell e perché ci sono molti nuovi concetti da utilizzare, non ho saputo da dove cominciare.

Quindi, come hai imparato l'Haskell? Cosa ti ha fatto davvero "rompere il ghiaccio"? Inoltre, qualche buona idea per iniziare gli esercizi?


Risposte:


2476

Ordinerò questa guida per il livello di abilità che hai in Haskell, passando da un principiante assoluto fino a un esperto. Nota che questo processo richiederà molti mesi (anni?), Quindi è piuttosto lungo.

Principiante assoluto

Innanzitutto, Haskell è capace di tutto, con sufficiente abilità. È molto veloce (dietro solo C e C ++ nella mia esperienza) e può essere utilizzato per qualsiasi cosa, dalle simulazioni ai server, alle guide e alle applicazioni web.

Tuttavia ci sono alcuni problemi che sono più facili da scrivere per un principiante in Haskell rispetto ad altri. I problemi matematici e i programmi di elaborazione delle liste sono buoni candidati per questo, poiché richiedono solo le conoscenze di base di Haskell per poter scrivere.

In primo luogo, alcune buone guide per apprendere le basi di Haskell sono il felice tutorial di haskell e i primi 6 capitoli di apprendimento di un haskell . Durante la lettura di questi, è una buona idea risolvere anche semplici problemi con ciò che sai.

Altre due buone risorse sono la programmazione Haskell dai primi principi e la programmazione in Haskell . Entrambi vengono forniti con esercizi per ogni capitolo, quindi hai piccoli e semplici problemi che corrispondono a quanto appreso nelle ultime pagine.

Un buon elenco di problemi da provare è la pagina dei problemi di haskell 99 . Questi iniziano molto di base e diventano più difficili man mano che procedi. È una buona pratica fare molte di queste, poiché ti consentono di esercitare le tue abilità nella ricorsione e nelle funzioni di ordine superiore. Consiglierei di saltare tutti i problemi che richiedono casualità in quanto è un po 'più difficile in Haskell. Controlla questa domanda SO nel caso in cui desideri testare le tue soluzioni con QuickCheck (vedi Intermedio di seguito).

Dopo aver fatto alcuni di questi, potresti passare a fare alcuni dei problemi di Project Euler . Questi sono ordinati per quante persone li hanno completati, il che è abbastanza una buona indicazione della difficoltà. Questi testano la tua logica e Haskell più dei problemi precedenti, ma dovresti comunque essere in grado di fare i primi. Un grande vantaggio che Haskell ha con questi problemi è che gli interi non hanno dimensioni limitate. Per completare alcuni di questi problemi, sarà utile leggere i capitoli 7 e 8 per imparare anche un Haskell.

Principiante

Dopodiché dovresti avere una buona padronanza della ricorsione e delle funzioni di ordine superiore, quindi sarebbe un buon momento per iniziare a fare alcuni problemi nel mondo reale. Un ottimo punto di partenza è Real World Haskell (libro online, è inoltre possibile acquistare una copia cartacea). Ho scoperto che i primi capitoli sono stati introdotti troppo rapidamente per qualcuno che non ha mai fatto programmazione funzionale / usato ricorsione in precedenza. Tuttavia, con la pratica che avresti avuto dal fare i problemi precedenti, dovresti trovarlo perfettamente comprensibile.

Risolvere i problemi del libro è un ottimo modo per imparare a gestire le astrazioni e costruire componenti riutilizzabili in Haskell. Questo è vitale per le persone abituate alla programmazione orientata agli oggetti (oo), poiché i normali metodi di astrazione oo (classi oo) non appaiono in Haskell (Haskell ha classi di tipi, ma sono molto diversi dalle classi oo, più come le interfacce oo ). Non credo sia una buona idea saltare i capitoli, poiché ognuno introduce molte nuove idee che verranno utilizzate nei capitoli successivi.

Dopo un po 'arriverai al capitolo 14, il temuto capitolo delle monadi (dum dum dummmm). Quasi tutti coloro che imparano Haskell hanno difficoltà a comprendere le monadi, a causa di quanto sia astratto il concetto. Non riesco a pensare a nessun concetto in un'altra lingua tanto astratto quanto le monadi nella programmazione funzionale. Monads consente di unire molte idee (come operazioni IO, calcoli che potrebbero fallire, analisi, ...) in un'unica idea. Quindi non scoraggiarti se dopo aver letto il capitolo sulle monadi non li capisci davvero. Ho trovato utile leggere molte diverse spiegazioni delle monadi; ognuno dà una nuova prospettiva sul problema. Ecco un ottimo elenco di tutorial sulla monade . Consiglio vivamente All About Monads , ma anche gli altri sono buoni.

Inoltre, ci vuole un po 'di tempo prima che i concetti affondino davvero. Questo avviene attraverso l'uso, ma anche attraverso il tempo. Trovo che a volte dormire su un problema aiuti più di ogni altra cosa! Alla fine, l'idea farà clic e ti chiederai perché hai faticato a capire un concetto che in realtà è incredibilmente semplice. È fantastico quando ciò accade e quando accade, potresti trovare Haskell come il tuo linguaggio di programmazione imperativo preferito :)

Per essere sicuro di comprendere perfettamente il sistema di tipi Haskell, dovresti provare a risolvere 20 esercizi intermedi di haskell . Questi esercizi usano nomi divertenti di funzioni come "peloso" e "banana" e ti aiutano ad avere una buona comprensione di alcuni concetti di programmazione funzionale di base se non li hai già. Bel modo di passare la serata con un mucchio di carte coperte di frecce, unicorni, salsicce e banane pelose.

Intermedio

Una volta che capisci Monads, penso che tu abbia fatto il passaggio da un programmatore Haskell principiante a un haskeller intermedio. Quindi dove andare da qui? La prima cosa che consiglierei (se non le hai già imparate imparando le monadi) sono i vari tipi di monadi, come Reader, Writer e State. Ancora una volta, il mondo reale Haskell e All about monads ne danno una grande spiegazione. Per completare l'addestramento sulla monade è necessario conoscere i trasformatori di monade. Questi ti consentono di combinare diversi tipi di Monadi (come un Reader e una monade di Stato) in uno. Questo può sembrare inutile per cominciare, ma dopo averli usati per un po 'ti chiederai come hai vissuto senza di loro.

Ora puoi finire il libro reale di Haskell se vuoi. Saltare i capitoli ora non ha molta importanza, a patto che tu abbia le monadi a terra. Scegli quello che ti interessa.

Con la conoscenza che avresti ora, dovresti essere in grado di usare la maggior parte dei pacchetti su cabala (almeno quelli documentati almeno ...), così come la maggior parte delle librerie fornite con Haskell. Un elenco di librerie interessanti da provare sarebbe:

  • Parsec : per l'analisi di programmi e testo. Molto meglio dell'uso di regexps. Ottima documentazione, ha anche un capitolo Haskell del mondo reale.

  • QuickCheck : un programma di test davvero interessante. Quello che fai è scrivere un predicato che dovrebbe essere sempre vero (ad es length (reverse lst) == length lst.). Quindi si passa il predicato al QuickCheck, che genererà molti valori casuali (in questo caso elenchi) e si verifica che il predicato sia vero per tutti i risultati. Vedi anche il manuale online .

  • HUnit : unit testing in Haskell.

  • gtk2hs : il framework gui più popolare per Haskell, consente di scrivere applicazioni gtk in Haskell.

  • happstack : un framework di sviluppo web per Haskell. Non utilizza database, ma un archivio di tipi di dati. Documenti abbastanza buoni (altri framework popolari sarebbero snap e yesod ).

Inoltre, ci sono molti concetti (come il concetto di Monade) che dovresti eventualmente imparare. Sarà più facile dell'apprendimento delle Monadi la prima volta, poiché il tuo cervello sarà abituato a gestire il livello di astrazione coinvolto. Un'ottima panoramica per conoscere questi concetti di alto livello e come si adattano insieme è la Typeclassopedia .

  • Applicativo: un'interfaccia come Monads, ma meno potente. Ogni Monade è Applicativa, ma non viceversa. Questo è utile in quanto vi sono alcuni tipi che sono Applicativi ma non sono Monadi. Inoltre, il codice scritto usando le funzioni Applicative è spesso più componibile che scrivere il codice equivalente usando le funzioni Monad. Vedi i Functor, i Functor applicabili e i Monoidi dall'apprendere una guida haskell.

  • Pieghevole , Traversable : Typeclasses che molte astratta delle operazioni di liste, in modo che le stesse funzioni possono essere applicati ad altri tipi di contenitori. Vedi anche la spiegazione della wiki di haskell .

  • Monoid : un monoid è un tipo che ha un valore zero (o mempty) e un'operazione, notata <>che unisce due monoidi insieme, tale che x <> mempty = mempty <> x = xe x <> (y <> z) = (x <> y) <> z. Queste sono chiamate leggi di identità e associatività. Molti tipi sono Monoidi, come i numeri, con mempty = 0e <> = +. Questo è utile in molte situazioni.

  • Frecce : le frecce sono un modo per rappresentare i calcoli che accettano un input e restituiscono un output. Una funzione è il tipo più semplice di freccia, ma ce ne sono molti altri. La libreria ha anche molte funzioni molto utili per manipolare le frecce: sono molto utili anche se usate solo con semplici funzioni di Haskell.

  • Array : i vari array mutabili / immutabili in Haskell.

  • Monade ST : consente di scrivere codice con uno stato mutabile che viene eseguito molto rapidamente, pur rimanendo puro al di fuori della monade. Vedi il link per maggiori dettagli.

  • FRP: Functional Reactive Programming, un nuovo modo sperimentale di scrivere codice che gestisce eventi, trigger, input e output (come una GUI). Non ne so molto però. Il discorso di Paul Hudak su Yampa è un buon inizio.

Ci sono molte nuove funzionalità linguistiche che dovresti dare un'occhiata. Li elencherò, puoi trovare molte informazioni su di loro da google, il haskell wikibook , il sito haskellwiki.org e la documentazione di ghc .

  • Classi di tipo multiparametro / dipendenze funzionali
  • Digitare le famiglie
  • Tipi quantificati esistenzialmente
  • Tipi fantasma
  • GADTS
  • altri...

Molta parte di Haskell si basa sulla teoria delle categorie , quindi potresti voler esaminare questo. Un buon punto di partenza è la teoria delle categorie per informatici . Se non si desidera acquistare il libro, anche l' articolo correlato dell'autore è eccellente.

Infine, vorrai saperne di più sui vari strumenti Haskell. Questi includono:

  • ghc (e tutte le sue caratteristiche)
  • cabala : il sistema di pacchetti Haskell
  • darcs : un sistema di controllo di versione distribuito scritto in Haskell, molto popolare per i programmi Haskell.
  • eglefino : un generatore di documentazione automatica Haskell

Mentre apprendi tutte queste nuove biblioteche e concetti, è molto utile scrivere un progetto di medie dimensioni in Haskell. Può essere qualsiasi cosa (ad esempio un piccolo gioco, un analizzatore di dati, un sito Web, un compilatore ). Lavorare su questo ti permetterà di applicare molte delle cose che stai imparando. Rimani a questo livello per anni (questo è dove sono io).

Esperto

Ci vorranno anni per arrivare a questo stadio (ciao dal 2009!), Ma da qui suppongo che inizi a scrivere documenti di dottorato, nuove estensioni di ghc e inventare nuove astrazioni.

Ricevere aiuto

Infine, mentre in qualsiasi fase dell'apprendimento, ci sono più posti per ottenere informazioni. Questi sono:

  • il canale #haskell irc
  • le mailing list . Vale la pena iscriversi solo per leggere le discussioni che si svolgono - alcune sono molto interessanti.
  • altri posti elencati nella home page di haskell.org

Conclusione

Bene, questo si è rivelato più lungo di quanto mi aspettassi ... Comunque, penso che sia un'ottima idea diventare abili in Haskell. Ci vuole molto tempo, ma ciò è dovuto principalmente al fatto che stai imparando un modo di pensare completamente nuovo. Non è come imparare Ruby dopo aver appreso Java, ma come imparare Java dopo aver appreso C. Inoltre, sto scoprendo che le mie capacità di programmazione orientata agli oggetti sono migliorate grazie all'apprendimento di Haskell, poiché sto vedendo molti nuovi modi di astrarre idee.


35
Yay frecce! Prima lascia che le monadi modellino il tuo cervello, poi ti alzi in testa e pensi alle comonadi, e poi fai entrambe le cose contemporaneamente per ottenere le frecce :) C'è un sacco di potere espressivo in Haskell che può essere aperto a livello di tipo anche la programmazione.
effimero

13
@nanothief Monadè più potente, ma anche meno compositivo ... molte persone usano monadi in cui avrebbero potuto cavarsela con un Applicativecodice più pulito . La maggior parte delle cose che sono Functorsono anche Monads, ma non si va in giro usando >>=e returnquando fmapsarà sufficiente, perché quest'ultimo porta a un codice molto più semplice se è possibile utilizzarlo.
Tom Crockett,

8
@pelotom, ho aggiunto il link typeclassopedia, nonché una migliore ragione per usare Applicative in quella sezione, e rimosso la sezione Functor. È difficile riportare i concetti Monade e Applicativi nell'ordine giusto a causa dell'enfasi sulle Monadi nella maggior parte del materiale didattico (incluso RWH). D'altra parte, insegnarti che un tutorial di haskell ha fatto molta strada da quando ho inizialmente scritto la risposta (quasi 2 anni: O), e insegna Applicativo prima di Monad, forse quello dovrebbe ora essere il modo raccomandato di imparare l'hakell.
David Miani,

2
Ottimo consiglio L'ho iniziato più di un anno fa e sono quasi arrivato alla fase intermedia. Feedback: il capitolo sulla monade di RWH (capitolo 14) è spiegato male. Leggere la versione online di RWH è utile, perché contiene commenti crowdsourcing che aiutano il capitolo. FWIW, Avresti potuto inventare le monadi , è stato il tutorial delle monadi che ha funzionato meglio per me.
Tom,

6
@tomf: grazie! Sono sempre stato sorpreso dal modo in cui questa risposta ha funzionato: sono passati quasi cinque anni da quando l'ho scritta, ma sta ancora andando forte. Dovrò fare presto un aggiornamento, tuttavia è un po 'obsoleto. Non menziona obiettivi, pipe, tipi di vincoli, piattaforma haskell, numeri a livello di tipo e sono argomenti piuttosto importanti da quando è stato scritto. Hai ragione sul fatto che RWH non è più buono, non è stato aggiornato da molto tempo e molti esempi non si stanno compilando. Sono contento che ti sia stato comunque utile.
David Miani,

180

Alcuni miei colleghi hanno avuto una buona esperienza con Learn You a Haskell for Great Good! .

Tutorial rivolto a persone che hanno esperienza in linguaggi di programmazione imperativi ma non hanno mai programmato in un linguaggio funzionale prima.

E controlla anche qui le risposte


27
Io secondo questo. Inoltre, poiché non è ovvio, ecco un link a una versione scaricabile del tutorial in pdf: learnyouahaskell.com/learnyouahaskell.pdf Il webdesign è fantastico, ma mi piace averne una copia anche per la metropolitana.
Telemaco,

8
Ho iniziato con questo, ma la mia opinione è che dovresti andare direttamente al Real World Haskell. La differenza è come imparare C da K&R o "C per i manichini" che cerca di essere semplice, ma manca di cose importanti con il suo approccio. Penso che sia meglio chiarire i fatti invece di cercare di imparare "il modo imperativo" di Haskell.
John Smith,

7
Lo adoro assolutamente e ho investito molto tempo in questo e nel Real World Haskell. L'IMO, "Learn You a Haskell", offre una visione più approfondita di Real World Haskell, sebbene siano entrambe ottime risorse.
Charlie Flowers,

7
@ abababa22 Penso che leggere prima LYAH e poi andare su RWH sia la migliore idea. LYAH non ti insegna solo Haskell; ti insegna la programmazione funzionale. Inizi a pensare in modo funzionale quando risolvi i problemi. Chiaramente, solo LYAH non sarebbe sufficiente per scrivere una grande applicazione, ma ti piega la mente nel modo giusto. Se sei di origini imperative, questo è il modo migliore, IMO
Abdulsattar Mohammed,

4
@Telemachus Solo per notare: il PDF non è la versione finale, almeno manca l'ultimo capitolo.
sdcvvc,

103

Ecco un buon libro che puoi leggere online: Real World Haskell

La maggior parte dei programmi di Haskell che ho fatto sono stati per risolvere i problemi di Project Euler .

Una volta che un consiglio che ho letto non molto tempo fa era che dovresti avere una serie standard di problemi semplici che sai come risolvere (in teoria) e ogni volta che provi ad imparare una nuova lingua, implementi quei problemi in quella lingua.


2
Real World Haskell nella mia esperienza è fantastico, fino a quando non raggiungerai il capitolo 5. Da allora in poi non lo consiglierei.
MasterMastic,

Perché @MasterMastic? Qual è il problema oltre il capitolo 5? Mi piacerebbe sapere prima di spendere i soldi.
Jay Blanchard,

@JayBlanchard Nel capitolo 5 inizi a ottenere un esempio concreto di una biblioteca, il che è carino, ma ti dicono cosa faranno, fallo, ma non spiegano perché, e per niente chiaro, e c'è parecchi letterali esadecimali magici. Stai solo attraversando i movimenti. Questo non è stato il problema più grande per me, il problema più grande è stato che il libro dipende fortemente da quel tipo di esempi duri e lunghi (abbastanza a lungo da richiedere più di un intero capitolo). Difficilmente puoi solo leggere le parti che vuoi. Penso che grandi autori, una conoscenza straordinaria ma un'esecuzione estremamente scarsa.
MasterMastic


69

Per aggiungere le risposte degli altri, ce n'è uno utile che ti aiuterà durante la codifica (ad esempio quando risolvi i problemi di Euler del progetto): Hoogle . È possibile utilizzare l'interfaccia della riga di comando o l' interfaccia Web .

Riga di comando

Dopo aver installato la piattaforma Haskell, assicurati di cabal install hoogle

Esempio di utilizzo di Hoogle:

Hai una funzione f x = 3 * x + 1e vuoi applicarla (5 :: Int), quindi applicala sul risultato e su quel risultato e così via e ottieni un elenco infinito di quei valori. Sospetti che potrebbe esistere già una funzione per assisterti (non specificamente per il tuo caso f).

Quella funzione sarebbe di tipo (a -> a) -> a -> [a]se prende f 5o a -> (a -> a) -> [a]se prende 5 f(supponiamo che la funzione sia per tipi generali e non solo per Ints)

$ hoogle "a -> (a -> a) -> [a]"
Prelude iterate :: (a -> a) -> a -> [a]

sì, la funzione di cui hai bisogno esiste già e si chiama iterate. lo usi da iterate func 5!

interfaccia web

Il risultato per lo stesso esempio può essere trovato qui .


Trovare le funzioni di libreria standard per ciò di cui hai bisogno diventa molto più semplice una volta capito come chiedere a Hoogle quello che ti serve.
Ankh-Morpork,

57

La programmazione di Graham Hutton in Haskell è concisa, ragionevolmente approfondita, e i suoi anni di insegnamento di Haskell mostrano davvero. È quasi sempre quello che consiglio alle persone di iniziare, indipendentemente da dove vieni da lì.

In particolare, il capitolo 8 ("Analizzatori funzionali") fornisce le vere basi necessarie per iniziare a trattare con le monadi, e penso che sia di gran lunga il posto migliore da cui iniziare, seguito da All About Monads . (Per quanto riguarda quel capitolo, tuttavia, prendi nota degli errata dal sito Web, tuttavia: non puoi utilizzare il domodulo senza un aiuto speciale. Potresti voler prima conoscere le macchine da scrivere e risolvere il problema da solo.)

Questo è raramente enfatizzato per i principianti di Haskell, ma vale la pena imparare abbastanza presto non solo sull'uso delle monadi, ma sulla costruzione della propria. Non è difficile e quelli personalizzati possono rendere una serie di attività piuttosto più semplici.


5
Questo è un libro totalmente sottovalutato (e risposta). Il capitolo sui parser funzionali, seguito da un capitolo sull'IO, nessuno dei quali menziona nemmeno monadi, brilla davvero come un elegante approccio pedagogico.
michiakig,


31

Suggerirei di entrare nel canale irhas #haskell e di porre domande lì. È così che ho imparato Haskell. Se attraversi Real World Haskell come suggerito sopra, le risposte in tempo reale alle tue domande ti aiuteranno molto. Molte persone intelligenti su #haskell scrivono Haskell per divertimento e per profitto, così avrai un sacco di buoni input. Provalo!


5
+1 - Per essere chiari: non impararlo solo con il canale IRC. Come in, non entrare e chiedere "Come faccio a scrivere un programma haskell? Come faccio ad aggiungere numeri?"
alternativa il

Oltre a irc freenode, recentemente c'è anche una discussione vivace e crescente sull'hashell nelle chat di Discord.
truthadjustr,


19

Posso anche raccomandare Yet Another Haskell Tutorial come introduzione.

Un'altra buona risorsa di apprendimento (probabilmente a livello intermedio), che mi ha aiutato molto e non è stata menzionata nelle altre risposte per quanto posso vedere, è Typeclassopedia di Brent Yorgey , che si trova in The Monad Reader (Issue 13)

È scritto in uno stile molto accessibile e contiene (tra le altre cose) i seguenti consigli introduttivi:

Ci sono due chiavi per la saggezza di un esperto hacker Haskell:

  1. Comprendi i tipi.

  2. Ottieni una profonda intuizione per ogni classe di tipo e la sua relazione con altre classi di tipo, supportata dalla familiarità con molti esempi.

Lo stesso Monad Reader è un vero e proprio scrigno di tesori per programmatori funzionali (non solo programmatori Haskell).


14

Prova a scrivere programmi facili in esso.

Probabilmente puoi trovare attività di esempio in vari libri di testo.

Non consiglierei di attenermi ai libri di testo di Haskell / FP, provate semplicemente a fare cose semplici con esso: calcoli, manipolazioni di stringhe, accesso ai file.

Dopo aver risolto una dozzina, ho rotto il ghiaccio :)

Dopodiché, leggi molto su concetti avanzati (Monadi, Frecce, IO, strutture di dati ricorsive), perché haskell è infinito e ce ne sono molti.


14

Penso che realizzare la caratteristica di Haskell con esempi sia il modo migliore per iniziare soprattutto.

http://en.wikipedia.org/wiki/Haskell_98_features

Ecco alcuni tipi di caratteri da scrivere tra cui monadi e frecce

http://www.haskell.org/haskellwiki/Typeclassopedia

per problemi del mondo reale e progetti più grandi, ricorda questi tag: GHC (compilatore più usato), Hackage (libraryDB), Cabal (sistema di costruzione), darc (un altro sistema di costruzione).

Un sistema integrato può farti risparmiare tempo: http://hackage.haskell.org/platform/

il database dei pacchetti per questo sistema: http://hackage.haskell.org/

Wiki del compilatore GHC: http://www.haskell.org/haskellwiki/GHC

Dopo Haskell_98_features e Typeclassopedia, penso che tu possa già trovare e leggere tu stesso la documentazione su di loro

A proposito, potresti voler testare alcune estensioni linguistiche di GHC che potrebbero far parte dello standard haskell in futuro.

questo è il mio modo migliore per imparare l'hashell. Spero possa aiutarti.


13

Ti suggerisco di iniziare leggendo il tutorial di BONUS , e poi leggendo Real World Haskell (online gratuitamente) . Unisciti al canale IRC #Haskell, su irc.freenode.com , e fai domande. Queste persone sono assolutamente amichevoli con i principianti e mi hanno aiutato molto nel tempo. Inoltre, proprio qui su SO è un ottimo posto per ottenere aiuto con cose che non puoi capire! Cerca di non scoraggiarti, una volta che fa clic, la tua mente sarà sconvolta.

Il tutorial di BONUS ti preparerà e ti preparerà per il brivido del Real World Haskell. Ti auguro buona fortuna!


12

Se hai solo esperienza con i linguaggi imperativi / OO, ti suggerisco di usare un linguaggio funzionale più convenzionale come trampolino di lancio. Haskell è davvero diverso e devi capire molti concetti diversi per arrivare ovunque. Suggerisco di affrontare prima un linguaggio in stile ML (come ad es. F #).


Elm potrebbe essere il più vicino, più utile e adatto ai principianti di queste alternative ...
Pedro Rolo

1
Non sono d'accordo sul passaggio attraverso un percorso temporaneo, come F #. Per me è come bere una vodka in cui devi sorseggiarla rapidamente. Più doloroso in quel modo, ma c'è anche piacere. Percorsi temporanei, porta solo più confusione per me.
truthadjustr,

10

La prima risposta è molto buona. Per raggiungere il livello Esperto, dovresti fare un dottorato di ricerca con alcuni degli esperti stessi.

Ti consiglio di visitare la pagina di Haskell: http://haskell.org . Lì hai un sacco di materiale e molti riferimenti alle cose più aggiornate di Haskell, approvate dalla comunità di Haskell.


2
Ci dispiace ma usare l'argomento dottorato qui è come dire che devi avere un coltello da cucina da 300 $ per essere un buon chef. Perfino Simon Peyton Jones - il padre di Haskell - non ha un dottorato. Pratica e perseveranza sono ciò che porta alla competenza sia qui che in qualsiasi altro campo.
Petras Purlys,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.