Pierwsze kroki z Haskell

Od kilku dni staram się zawinąć głowę wokół paradygmatu programowania funkcyjnego w Haskell. Zrobiłem to, czytając samouczki i oglądając screencasty, ale nic tak naprawdę nie wydaje się trzymać. Teraz, w nauce różnych języków imperatywnych/OO (takich jak C, Java, PHP), ćwiczenia były dla mnie dobrym sposobem. Ale ponieważ tak naprawdę Nie wiem, Do czego jest zdolny Haskell i ponieważ istnieje wiele nowych koncepcji do wykorzystania, Nie wiem, od czego zacząć.

Więc, jak się nauczyłeś Haskell? Co sprawiło, że naprawdę "przełamałeś lody"? Również, jakieś dobre pomysły na rozpoczęcie ćwiczeń?

Author: anderstornvig, 2009-06-18

15 answers

Zamierzam zamówić ten przewodnik według poziomu umiejętności, które masz w haskell, przechodząc od początkującego aż do eksperta. Zauważ, że proces ten zajmie wiele miesięcy (lat?), jest więc dość długi.

Absolutny Początkujący

Po pierwsze, haskell jest zdolny do wszystkiego, z wystarczającymi umiejętnościami. Jest bardzo szybki (Za tylko c i c++ w moim doświadczeniu) i może być używany do wszystkiego, od symulacji do serwerów, GUI i aplikacji internetowych.

Jednakże istnieją niektóre problemy, które są łatwiejsze do napisania dla początkujących w haskell niż inne. Problemy matematyczne i programy procesu lista są dobrymi kandydatami do tego, jak tylko wymagają najbardziej podstawowej wiedzy haskell umieć pisać.

Po pierwsze, niektóre dobre przewodniki do nauki samych podstaw haskell są happy learn Haskell tutorial i pierwsze 6 rozdziałów learn you a haskell {18]}. Czytając je, bardzo dobrym pomysłem jest również rozwiązywanie prostych problemy z tym, co wiesz.

Kolejne dwa dobre zasoby toProgramowanie Haskella z pierwszych zasad iProgramowanie w Haskell . Oba zawierają ćwiczenia dla każdego rozdziału, więc masz małe proste problemy pasujące do tego, czego nauczyłeś się na ostatnich kilku stronach.

Dobrą listą problemów do wypróbowania jest strona Haskell 99 problemy . Te zaczynają się bardzo podstawowe i stają się trudniejsze, gdy idziesz dalej. Jest to bardzo dobra praktyka robienia wielu z nich, jak pozwalają ćwiczyć umiejętności rekurencji i funkcji wyższego rzędu. Polecam pomijanie wszelkich problemów, które wymagają losowości, ponieważ jest to nieco trudniejsze w haskell. Sprawdź to pytanie w przypadku, gdy chcesz przetestować swoje rozwiązania za pomocą QuickCheck (patrz Intermediate poniżej).

Gdy już wykonasz kilka z nich, możesz przejść do kilku problemów projektu Euler. Są one posortowane według liczby osób, które je ukończyły, co jest dość dobrym wskaźnikiem trudności. Te przetestować swoją logikę i haskell więcej niż poprzednie problemy, ale nadal powinny być w stanie zrobić kilka pierwszych. Dużą zaletą haskell ma z tymi problemami jest to, że liczby całkowite nie są ograniczone w rozmiarze. Aby zakończyć niektóre z tych problemów, to będzie przydatne, aby przeczytać rozdziały 7 i 8 nauczyć się haskell, jak również.

Początkujący

Po tym powinieneś mieć dość dobrą obsługę rekurencji i funkcji wyższego rzędu, więc to dobry moment, by zacząć robić więcej prawdziwych problemów. Bardzo dobrym miejscem na początek jest Real World Haskell (książka online, można również kupić Wydruk). Znalazłem kilka pierwszych rozdziałów wprowadzanych zbyt szybko dla kogoś, kto nigdy wcześniej nie robił programowania funkcyjnego / używał rekurencji. Jednak z praktyką, którą miałbyś od robienia poprzednich problemów, powinieneś znaleźć to całkowicie zrozumiałe.

Praca nad problemami w książce jest świetny sposób na naukę zarządzania abstrakcjami i budowania komponentów wielokrotnego użytku w haskell. Jest to istotne dla ludzi, którzy używają programowania zorientowanego obiektowo (oo), ponieważ zwykłe metody abstrakcji oo (klasy OO) nie pojawiają się w haskell (haskell ma klasy typu, ale bardzo różnią się od klas oo, bardziej jak interfejsy oo). Nie sądzę, że jest to dobry pomysł, aby pomijać rozdziały, ponieważ każdy wprowadza wiele nowych pomysłów, które są używane w późniejszych rozdziałach.

Po chwili dostaniesz się do Rozdział 14, przerażające monady rozdział (dum Dum dummmm). Prawie każdy, kto uczy się Haskella, ma problemy ze zrozumieniem monad, ze względu na to, jak abstrakcyjne jest to pojęcie. Nie mogę wymyślić żadnego pojęcia w innym języku, które jest tak abstrakcyjne, jak monady są w programowaniu funkcyjnym. Monady pozwalają na wiele pomysłów (takich jak operacje IO, obliczenia, które mogą się nie udać, parsowanie,...) do zjednoczenia w ramach jednej idei. Więc nie zniechęcaj się, jeśli po przeczytaniu rozdziału monady naprawdę ich nie rozumiesz. Znalazłem warto przeczytać wiele różnych wyjaśnień monad; każdy z nich daje nowe spojrzenie na problem. Oto bardzo dobra lista monad tutorials . Gorąco polecam Wszystko o Monadach , ale inne też są dobre.

Potrzeba też trochę czasu, aby koncepcje naprawdę się wtopiły. To przychodzi przez użycie, ale także przez czas. Uważam, że czasami spanie z problemem pomaga bardziej niż cokolwiek innego! W końcu pomysł kliknie, a Ty będziesz się zastanawiać, dlaczego trudno było zrozumieć pojęcie, które w rzeczywistości jest niezwykle proste. To jest niesamowite, kiedy to się dzieje, a kiedy to się dzieje, możesz znaleźć haskell być twoim ulubionym imperatywnym językiem programowania:)

Aby upewnić się, że doskonale rozumiesz System typu Haskell, powinieneś spróbować rozwiązać 20 intermediate Haskell exercises . Te ćwiczenia z wykorzystaniem zabawnych nazw funkcji, takich jak "furry" i "banan" i pomaga dobrze zrozumieć niektóre podstawowe funkcje koncepcje programowania, jeśli jeszcze ich nie masz. Miły sposób na spędzenie wieczoru z listą papieru pokrytą strzałkami, jednorożcami, kiełbasami i futrzanymi bananami.

Intermediate

Kiedy już zrozumiesz monady, myślę, że dokonałeś przejścia od początkującego programisty Haskella do średnio zaawansowanego haskellera. Więc co dalej? Pierwszą rzeczą, którą polecam (jeśli jeszcze nie nauczyłeś się ich z nauki monad) są różne rodzaje monad, takie jak Czytelnik, pisarz i krajoznawca. Ponownie, prawdziwy świat haskell i All about monads daje wielki zasięg tego. Aby ukończyć szkolenie monad nauka o monad transformers jest koniecznością. Pozwalają one łączyć różne typy Monad (np. czytnik i Monada stanowa) w jedną. Może to wydawać się bezużyteczne, ale po użyciu ich przez chwilę będziesz się zastanawiać, jak żyłeś bez nich.

Teraz możesz skończyć prawdziwą książkę Haskella, jeśli chcesz. Pomijanie rozdziałów teraz jednak nie naprawdę ważne, o ile masz monady w dół pat. Po prostu wybierz to, co Cię interesuje.

Z tą wiedzą, którą teraz posiadasz, powinieneś być w stanie używać większości pakietów na cabal (przynajmniej tych udokumentowanych...), a także większość bibliotek, które pochodzą z haskell. Lista interesujących bibliotek do wypróbowania to:

  • Parsec: do parsowania programów i tekstu. Znacznie lepsze niż używanie wyrażeń regularnych. Doskonała dokumentacja, posiada również realny świat haskell chapter.

  • Quickcheck : Bardzo fajny program do testowania. Co robisz, to piszesz orzeczenie, które zawsze powinno być prawdziwe (np length (reverse lst) == length lst). Następnie przekazać predykat quickCheck, i będzie generować wiele losowych wartości (w tym przypadku listy) i sprawdzić, czy predykat jest prawdziwy dla wszystkich wyników. Zobacz również online manual .

  • HUnit : testy jednostkowe w haskell.

  • Gtk2hs : najpopularniejszy gui framework dla haskell, pozwala pisać aplikacje gtk w haskell.

  • Happstack : framework do tworzenia stron internetowych dla haskell. Nie używa baz danych, zamiast tego przechowuje typy danych. Całkiem niezłe dokumenty (inne popularne frameworki to snap i yesod).

Istnieje również wiele pojęć (jak koncepcja monady), których powinieneś się w końcu nauczyć. Będzie to łatwiejsze niż nauka Monad za pierwszym razem, ponieważ twój mózg będzie używany do radzenie sobie z poziomem abstrakcji. Bardzo dobrym przeglądem do nauki o tych pojęciach wysokiego poziomu i tym, jak pasują do siebie, jest Typeclassopedia {18]}.

  • Zastosowanie: interfejs podobny do Monad, ale mniej wydajny. Każda Monada jest Aplikowalna, ale nie odwrotnie. Jest to przydatne, ponieważ istnieją pewne typy, które są aplikacyjne, ale nie są monadami. Ponadto, kod napisany przy użyciu funkcji aplikacyjnych jest często bardziej złożony niż pisanie kodu równoważnego korzystanie z funkcji Monad. Zobacz funktory, funktory aplikacyjne i Monoidy z learn you a haskell guide.

  • Składany,Traversable: Typeklasy, które abstrakują wiele operacji list, dzięki czemu te same funkcje mogą być stosowane do innych typów kontenerów. Zobacz także Haskell wiki explaination .

  • Monoid : Monoid to typ, który ma wartość zero (lub mempty) i operację, notowaną <> który łączy ze sobą dwa Monoidy, takie że x <> mempty = mempty <> x = x i x <> (y <> z) = (x <> y) <> z. Są to tzw. prawa tożsamości i asocjacji. Wiele typów to Monoidy, takie jak liczby, z mempty = 0 i <> = +. Jest to przydatne w wielu sytuacjach.

  • Strzałki : strzałki są sposobem przedstawiania obliczeń, które pobierają dane wejściowe i zwracają dane wyjściowe. Funkcja jest najbardziej podstawowym typem strzałki, ale istnieje wiele innych typów. Biblioteka posiada również wiele bardzo przydatnych funkcji do manipulowania strzałkami - są są bardzo przydatne, nawet jeśli są używane tylko ze zwykłymi, starymi funkcjami haskell.

  • Tablice : różne zmienne / niezmienne tablice w haskell.

  • ST Monad: pozwala na pisanie kodu o zmiennym stanie, który działa bardzo szybko, pozostając czystym poza monad. Zobacz link, aby uzyskać więcej szczegółów.

  • FRP: Functional Reactive Programming, nowy, eksperymentalny sposób pisania kodu, który obsługuje zdarzenia, wyzwalacze, wejścia i wyjścia (np. gui). Niewiele o tym wiem. Rozmowa Paula Hudaka o yampie to dobry początek.

Jest wiele nowych funkcji językowych, które powinieneś zobaczyć. Po prostu je wymienię, można znaleźć wiele informacji o nich z google, Haskell wikibook, the haskellwiki.org strona i dokumentacja ghc .

  • klasy typów wieloparametrowych / zależności funkcyjne
  • Rodzina typów
  • egzystencjalnie typy ilościowe
  • typy Phantom
  • GADTS
  • inni...

Wiele haskell opiera się na teorii kategorii , więc możesz chcieć się temu przyjrzeć. Dobrym punktem wyjścia jest teoria kategorii Dla Informatyka. Jeśli nie chcesz kupić książki, powiązany z autorem artykuł jest również doskonały.

Wreszcie będziesz chciał dowiedzieć się więcej o różnych narzędziach haskell. Te include:

  • ghc (i wszystkie jego cechy)
  • cabal : system pakietów haskell
  • darcs : rozproszony system kontroli wersji napisany w haskell, bardzo popularny w programach haskell.
  • haddock : automatyczny generator dokumentacji haskell

Podczas nauki tych wszystkich nowych bibliotek i pojęć, bardzo przydatne jest pisanie projektu średniej wielkości w haskell. Może to być wszystko (np. mała gra, analizator danych, Strona internetowa, kompilator ). Praca nad tym pozwoli Ci zastosować wiele rzeczy, których się teraz uczysz. Zostajesz na tym poziomie przez wieki(tu jestem).

Ekspert

Dotarcie do tego etapu zajmie Wam lata (hello from 2009!), ale zgaduję, że od tego momentu zaczniesz pisać prace doktorskie, nowe rozszerzenia ghc i wymyślać nowe abstrakcje.

Pomoc

Wreszcie, podczas gdy na każdym etapie nauka, istnieje wiele miejsc do uzyskania informacji. Są to:

  • kanał IRC #haskell
  • listy dyskusyjne . Warto się na nie zapisać tylko po to, by przeczytać toczące się dyskusje-niektóre są bardzo ciekawe.
  • inne miejsca wymienione na haskell.org Strona główna

Wniosek

Okazało się to dłuższe niż się spodziewałem... W każdym razie, myślę, że to bardzo dobry pomysł, aby stać się biegłym w haskell. Zajmuje to dużo czasu, ale dzieje się tak głównie dlatego, że uczysz się zupełnie nowego sposobu myślenia. Nie jest to tak, jak uczenie się Rubiego po nauce Javy, ale tak, jak uczenie się Javy po nauce c. również, odkrywam, że moje umiejętności programowania zorientowanego obiektowo poprawiły się w wyniku nauki Haskella, ponieważ widzę wiele nowych sposobów abstrakcji pomysłów.
 2346
Author: David Miani,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-02-11 16:14:09

Mój kolega miał dobre doświadczenia z nauczyć się Haskell dla wielkiego dobra!.

Tutorial skierowany do osób, które mają doświadczenie w programowaniu imperatywnym języków, ale nie zostały zaprogramowane w język funkcjonalny przed.

I sprawdź odpowiedzi tutaj też

 172
Author: jitter,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 12:18:22

Oto dobra książka, którą można przeczytać w Internecie: Real World Haskell

Większość programów Haskella, które wykonałem, było rozwiązywaniem problemów projektu Euler .

Kiedyś przeczytałem, że powinieneś mieć standardowy zestaw prostych problemów, które wiesz, jak rozwiązać (w teorii), a potem za każdym razem, gdy próbujesz nauczyć się nowego języka, wdrażasz te problemy w tym języku.

 99
Author: David Johnstone,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-06-18 13:19:38

Podobało mi się oglądanie tej serii 13 epizodów na programowanie funkcjonalne za pomocą Haskell.

C9 Wykłady: Dr Erik Meijer-Podstawy Programowania Funkcyjnego: http://channel9.msdn.com/shows/Going+Deep/Lecture-Series-Erik-Meijer-Functional-Programming-Fundamentals-Chapter-1/

 70
Author: eevar,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-06-05 11:37:28

Aby dodać odpowiedzi innych - jest jedna przydatna, która pomoże ci przy kodowaniu (na przykład przy rozwiązywaniu problemów z projektem Euler): Hoogle. Możesz użyć interfejsu wiersza poleceń lub interfejsu WWW .

Wiersz Poleceń

Po zainstalowaniu Platformy Haskell upewnij się, że cabal install hoogle

Przykład użycia Hoogle:

Masz funkcję f x = 3 * x + 1 i chcesz ją zastosować na (5 :: Int), następnie zastosuj ją na wyniku i na tym wyniku i tak na i uzyskać nieskończoną listę tych wartości. Podejrzewasz, że może już istnieć funkcja, która Ci pomoże (NIE specjalnie dla twojego f).

Ta funkcja będzie typu (a -> a) -> a -> [a] jeśli przyjmie f 5 lub a -> (a -> a) -> [a] jeśli przyjmie 5 f (Zakładamy, że funkcja jest dla typów ogólnych, a nie tylko Int s)

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

Tak, Funkcja, której potrzebujesz już istnieje i nazywa się iterate. używasz go przez iterate func 5!

Interfejs WWW

Wynik dla tego samego przykładu może być znaleziono tutaj .

 66
Author: yairchu,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-08-12 07:11:56

Programowanie Grahama Huttona w Haskell jest zwięzłe, dość dokładne, a lata jego nauczania Haskell naprawdę pokazują. To prawie zawsze to, co polecam ludziom zacząć, niezależnie od tego, gdzie idziesz stamtąd.

W szczególności, rozdział 8 ("parsery funkcjonalne") dostarcza prawdziwych podstaw, których potrzebujesz, aby zacząć radzić sobie z monadami, i myślę, że jest to zdecydowanie najlepsze miejsce, aby zacząć, a następnie All About Monads. (W odniesieniu do tego rozdziału należy jednak zwrócić uwagę na errata ze strony www: nie możesz użyć formularza do bez specjalnej pomocy. Możesz najpierw dowiedzieć się o typeklasach i rozwiązać ten problem samodzielnie.)

Jest to rzadko podkreślane dla początkujących Haskell, ale warto nauczyć się dość wcześnie nie tylko o używaniu monad, ale o konstruowaniu własnych. Nie jest to trudne, a niestandardowe mogą sprawić, że wiele zadań będzie prostszych.

 53
Author: Curt Sampson,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-10-21 10:44:27

Nie próbuj czytać wszystkich monad tutoriali z zabawnymi metaforami. Jeszcze gorzej Cię pomieszają.

 50
Author: John Smith,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-06-18 13:23:09

Sugerowałbym dołączenie do # haskell kanał irc i zadawanie tam pytań. Tak nauczyłem się Haskella. Jeśli przejdziesz przez prawdziwy świat Haskell, jak sugerowano powyżej, odpowiedzi w czasie rzeczywistym na twoje pytania znacznie pomogą. Wielu mądrych ludzi na # haskell pisze Haskell dla zabawy i dla zysku, więc dostaniesz dużo dobrego wkładu. Spróbuj!

 30
Author: shapr,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-06-18 14:28:52

To moje ulubione

Haskell: Programowanie funkcyjne z typami

Joeri van Eekelen, et al. | Wikibooks
       Published in 2012, 597 pages

Real World Haskell

   B. O'Sullivan, J. Goerzen, D. Stewart | OReilly Media, Inc.
   Published in 2008, 710 pages
 22
Author: Soner Gönül,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-06-20 13:10:32

Mogę dodatkowo polecić Yet Another Haskell Tutorial jako wstęp.

Kolejnym dobrym źródłem wiedzy (prawdopodobnie na poziomie średnio zaawansowanym), który bardzo mi pomógł i nie został wymieniony w innych odpowiedziach, o ile widzę, jest Brent yorgey ' S Typeclassopedia , który można znaleźć w Czytnik Monad (Wydanie 13)

Jest napisany w bardzo przystępnym stylu i zawiera (między innymi), po poradzie wprowadzającej:

Istnieją dwa klucze do mądrości hakera Haskella:

  1. Zrozum typy.

  2. Zyskać głęboką intuicję dla każdej klasy typu i jej relacji z innymi klasy typu, poparte znajomością wielu przykładów.

Czytnik Monad sama w sobie jest absolutną skarbnicą dla programistów funkcjonalnych (nie tylko programistów Haskella).

 18
Author: Greg S,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-09-06 16:54:48

Spróbuj napisać w nim proste programy.

Przykładowe zadania Można znaleźć prawdopodobnie w różnych podręcznikach.

Nie polecam trzymać się podręczników Haskell/FP, po prostu spróbuj zrobić z nim proste rzeczy: obliczenia, manipulacje łańcuchami, dostęp do plików.

Po rozwiązaniu kilkunastu, przełamałem lody:)

Po tym, czytać dużo na zaawansowanych pojęć (monady, Strzałki, IO, rekurencyjne struktury danych), ponieważ haskell jest nieskończony i jest ich wiele.

 13
Author: alamar,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-06-18 13:19:04

Myślę, że realizacja funkcji Haskella na przykładach jest najlepszym sposobem na rozpoczęcie przede wszystkim.

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

Tutaj są trudne typy, w tym monady i strzałki

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

W przypadku rzeczywistych problemów i większych projektów, pamiętaj o tagach: GHC( most used compiler), Hackage(libraryDB), Cabal(building system), darcs(another building system).

A zintegrowany system może zaoszczędzić Twój czas: http://hackage.haskell.org/platform/

Baza danych pakietów dla tego systemu: http://hackage.haskell.org/

Wiki kompilatora GHC: http://www.haskell.org/haskellwiki/GHC

Po Haskell_98_features i Typeclassopedia, myślę, że już można znaleźć i przeczytać dokument o nich samemu

Przy okazji, możesz przetestować niektóre rozszerzenia języków GHC, które mogą być częścią haskell standard w przyszłości.

To mój najlepszy sposób na naukę Haskella. mam nadzieję, że ci pomoże.

 13
Author: snowcake and icejelly,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-01-02 14:08:44

Sugeruję, abyś najpierw przeczytał BONUS' tutorial , a następnie przeczytał Real World Haskell (online za darmo). Dołącz do # Haskell kanał IRC, na irc.freenode.com , i zadawać pytania. Ci ludzie są całkowicie nowicjusze przyjaźni i bardzo mi pomogli w czasie. Ponadto, tutaj na SO jest doskonałym miejscem, aby uzyskać pomoc z rzeczy, których nie możesz pojąć! Staraj się nie zniechęcać, gdy tylko kliknie, twój umysł zostanie wysadzony.

BONUS ' tutorial będzie prime you up, i przygotuj się na ekscytującą przejażdżkę, którą przynosi prawdziwy świat Haskell. Życzę powodzenia!

 12
Author: Rayne,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-06-18 23:19:49

Jeśli masz tylko doświadczenie z językami imperatywnymi/OO, sugeruję użycie bardziej konwencjonalnego języka funkcyjnego jako kamienia węgielnego. Haskell jest Naprawdę inny i musisz zrozumieć wiele różnych pojęć, aby dotrzeć gdziekolwiek. Proponuję najpierw zająć się językiem w stylu ML (jak np. F#).

 11
Author: JacquesB,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-06-21 21:01:56

Pierwsza odpowiedź jest bardzo dobra. Aby dostać się do poziomu eksperta, należy zrobić doktorat z niektórymi z ekspertów.

Proponuję odwiedzić stronę Haskell: http://haskell.org . tam masz wiele materiałów i wiele odniesień do najbardziej aktualnych rzeczy w Haskell, zatwierdzonych przez społeczność Haskell.

 9
Author: Fidel,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-12-21 07:59:04