Haskell 시작하기


755

며칠 동안 나는 Haskell의 함수형 프로그래밍 패러다임을 둘러보기 위해 노력했습니다. 튜토리얼을 읽고 스크린 캐스트를 보면서이 작업을 수행했지만 실제로는 아무것도 보이지 않습니다. 이제, C, Java, PHP와 같은 다양한 명령형 / OO 언어를 배우면서 연습이 좋은 방법이었습니다. 그러나 나는 Haskell이 무엇을 할 수 있는지 알지 못하고 활용할 새로운 개념이 많기 때문에 어디서부터 시작해야할지 몰랐습니다.

그래서 Haskell을 어떻게 배웠습니까? 당신이 정말로 "얼음 깨는"이유는 무엇입니까? 또한 운동을 시작하기위한 좋은 아이디어가 있습니까?


답변:


2476

나는 초보자부터 전문가까지, Haskell의 기술 수준에 따라이 가이드를 주문할 것입니다. 이 과정은 몇 개월 (수년?)이 걸리므로 시간이 오래 걸립니다.

완전 초보

첫째, Haskell은 충분한 기술을 가지고 무엇이든 할 수 있습니다. 그것은 매우 빠르며 (내 경험상 C 및 C ++에서만) 시뮬레이션에서 서버, GUI 및 웹 응용 프로그램에 이르기까지 모든 용도로 사용할 수 있습니다.

그러나 Haskell의 초보자에게는 다른 사람보다 쓰기가 더 쉬운 몇 가지 문제가 있습니다. 수학 문제와리스트 프로세스 프로그램은 가장 기본적인 Haskell 지식 만 있으면되기 때문에 이에 대한 좋은 후보입니다.

첫째, Haskell의 기본 사항을 배우는 데 도움이되는 유용한 안내서행복한 학습 haskell 튜토리얼 이며 첫 6 장 에서는 haskell배우십시오 . 이것들을 읽는 동안 아는 것과 관련된 간단한 문제를 해결하는 것이 좋습니다.

또 다른 두 개의 좋은 자원이된다 하스켈 먼저 원칙에서 프로그래밍하스켈에서 프로그래밍 . 둘 다 각 장에 대한 연습이 제공되므로 지난 몇 페이지에서 배운 것과 일치하는 작은 간단한 문제가 있습니다.

시도 할 문제의 좋은 목록은 haskell 99 문제 페이지 입니다. 이것들은 매우 기본적으로 시작되며, 진행하면서 더 어려워집니다. 재귀 및 고차 함수 기술을 연습 할 수 있으므로 많은 것을 수행하는 것이 좋습니다. Haskell에서는 좀 더 어려우므로 임의성이 필요한 문제는 건너 뛰는 것이 좋습니다. QuickCheck를 사용하여 솔루션을 테스트하려는 경우이 SO 질문 을 확인하십시오 (아래 중급 참조).

그 중 몇 가지를 수행하면 Project Euler 문제 몇 가지로 넘어갈 수 있습니다. 이들은 얼마나 많은 사람들이 그들을 완료했는지에 따라 정렬되며, 이는 어려움을 상당히 잘 나타냅니다. 이것들은 당신의 논리와 Haskell을 이전의 문제보다 더 많이 테스트하지만, 여전히 처음 몇 가지를 할 수 있어야합니다. Haskell이 이러한 문제로 갖는 큰 장점은 정수의 크기가 제한되지 않는다는 것입니다. 이러한 문제 중 일부를 완료하려면 Haskell을 배우는 7 장과 8 장을 읽는 것이 좋습니다.

초보자

그런 다음 재귀 및 고차 함수를 상당히 잘 처리해야하므로 실제 문제를 좀 더 시작하는 것이 좋습니다. 시작하기에 좋은 곳은 Real World Haskell입니다 (온라인 서적, 하드 카피도 구입할 수 있습니다). 처음 몇 장에서 함수 프로그래밍 / 재귀 재귀를 한 적이없는 사람에게는 너무 빨리 소개되었습니다. 그러나 이전 문제를 수행했을 때의 연습으로 완벽하게 이해할 수 있습니다.

이 책의 문제를 해결하는 것은 Haskell에서 추상화를 관리하고 재사용 가능한 컴포넌트를 빌드하는 방법을 배우는 좋은 방법입니다. 일반적인 oo 추상화 방법 (oo 클래스)이 Haskell에 나타나지 않기 때문에 객체 지향 (oo) 프로그래밍에 익숙한 사람들에게 중요합니다 (Haskell에는 유형 클래스가 있지만 oo 인터페이스와 같이 oo 클래스와는 매우 다릅니다) ). 각 장은 이후 장에서 사용되는 많은 새로운 아이디어를 소개하므로 장을 건너 뛰는 것이 좋지 않다고 생각합니다.

잠시 후, 14 장으로 갈수록 두려운 모나드 장 (dum dum dummmm)이 나옵니다. Haskell을 배우는 거의 모든 사람들은 개념이 추상적이기 때문에 모나드를 이해하는 데 어려움을 겪고 있습니다. 모나드가 함수형 프로그래밍에있는 것처럼 추상적 인 다른 언어의 개념은 생각할 수 없습니다. Monads는 많은 아이디어 (IO 작업, 실패 할 수있는 계산, 파싱 등)를 하나의 아이디어로 통합 할 수 있도록합니다. 따라서 모나드 장을 읽은 후에 실제로 이해하지 못한다고 낙심하지 마십시오. 모나드에 대한 많은 다른 설명을 읽는 것이 유용하다는 것을 알았습니다. 각각은 문제에 대한 새로운 관점을 제시합니다. 다음은 모나드 튜토리얼 목록입니다 . 나는 Monads에 관한 모든 것을 강력히 추천 하지만, 다른 것도 좋습니다.

또한 개념이 진정으로 흡수되는 데 시간이 걸립니다. 이는 사용뿐만 아니라 시간이 지남에 따라 이루어집니다. 때때로 문제로 잠을 자면 다른 무엇보다 도움이된다는 것을 알게되었습니다! 결국, 아이디어가 클릭 될 것이고, 실제로 현실이 매우 단순하다는 개념을 이해하려고 애쓰는 이유를 궁금해 할 것입니다. 이런 일이 발생하면 대단하고, 그렇게 할 때 Haskell이 가장 좋아하는 명령형 프로그래밍 언어가 될 수 있습니다. :)

Haskell 타입 시스템을 완벽하게 이해하려면 20 개의 중간 haskell 연습 문제를 해결해야합니다 . 이러한 기능은 "furry"및 "banana"와 같은 재미있는 기능 이름을 사용하며 일부 기본 기능 프로그래밍 개념이없는 경우이를 잘 이해하는 데 도움이됩니다. 화살, 유니콘, 소시지 및 모피 바나나로 덮인 종이로 저녁을 보내는 좋은 방법.

중급

Monads를 이해하면 초보자 Haskell 프로그래머에서 중간 Haskeller로 전환했다고 생각합니다. 여기서 어디로 가야합니까? 내가 추천 할 첫 번째 것은 (모나드 학습에서 아직 배우지 않았다면) Reader, Writer 및 State와 같은 다양한 유형의 모나드입니다. 다시 한 번, 실제 세계 Haskell과 모나드에 관한 모든 것이 이것에 대해 잘 설명되어 있습니다. 모나드 변압기에 대한 모나드 교육을 완료하려면 필수입니다. 이를 통해 다양한 유형의 Monad (예 : Reader 및 State 모나드)를 하나로 결합 할 수 있습니다. 이것은 처음에는 쓸모없는 것처럼 보일지 모르지만, 잠시 동안 사용한 후에는 그들없이 어떻게 살았는지 궁금 할 것입니다.

원하는 경우 이제 실제 하스켈 책을 마칠 수 있습니다. 모나드를 두드리는 한 챕터를 건너 뛰는 것은 실제로 중요하지 않습니다. 관심있는 것을 선택하십시오.

당신이 지금 알고있는 지식으로, 당신은 하스켈과 함께 제공되는 대부분의 라이브러리뿐만 아니라 cabal (최소한 문서화 된 것들은 잘 ...)에서 대부분의 패키지를 사용할 수 있어야합니다. 시도해 볼만한 흥미로운 라이브러리 목록은 다음과 같습니다.

  • Parsec : 프로그램과 텍스트를 파싱합니다. 정규 표현식을 사용하는 것보다 훨씬 낫습니다. 훌륭한 문서, 실제 Haskell 장도 있습니다.

  • QuickCheck : 매우 멋진 테스트 프로그램입니다. 당신이하는 일은 항상 참이어야하는 술어를 작성하는 것입니다 (예 :) length (reverse lst) == length lst. 그런 다음 술어에 QuickCheck를 전달하면 많은 무작위 값 (이 경우 목록)이 생성되고 모든 결과에 대해 술어가 참인지 테스트합니다. 온라인 설명서를 참조하십시오 .

  • HUnit : Haskell에서의 단위 테스트.

  • gtk2hs : Haskell의 가장 인기있는 GUI 프레임 워크로 Haskell에서 gtk 어플리케이션을 작성할 수 있습니다.

  • happstack : Haskell을위한 웹 개발 프레임 워크. 데이터베이스를 사용하지 않고 데이터 유형 저장소를 사용합니다. 꽤 좋은 문서 (다른 인기있는 프레임 워크는 snap and yesod 일 것입니다 ).

또한, 모나드 개념과 같은 많은 개념이 결국에는 배워야합니다. 뇌가 관련된 추상화 수준을 다루는 데 익숙해지기 때문에 이것은 Monas를 처음 배우는 것보다 쉽습니다. 이러한 높은 수준의 개념과 그 개념이 어떻게 조화를 이루는가에 대한 아주 좋은 개요는 Typeclassopedia 입니다.

  • 적용 분야 : Monads와 같은 인터페이스이지만 성능이 떨어집니다. 모든 Monad는 적용 적이지만 그 반대는 아닙니다. 이것은 적용 적이지만 Monads가 아닌 유형이 있기 때문에 유용합니다. 또한, Applicative 함수를 사용하여 작성된 코드는 Monad 함수를 사용하여 동등한 코드를 작성하는 것보다 종종 작성 가능합니다. 하스켈 가이드 배우기에서 펑터, 응용 펑터 및 모노 이드 를 참조하십시오 .

  • Foldable , Traversable : 목록의 많은 작업을 추상화하여 다른 컨테이너 유형에 동일한 기능을 적용 할 수있는 유형 클래스입니다. 하스켈 위키 설명 도 참조하십시오 .

  • Monoid : Monoid는 0 (또는 비어있는) 값을 갖는 유형이며 <>두 개의 Monoid를 함께 결합 하는 연산 ( 예 : x <> mempty = mempty <> x = x및) x <> (y <> z) = (x <> y) <> z입니다. 이를 정체성 및 연관성 법칙이라고합니다. 많은 종류의 등 번호와 같은 Monoids있다 mempty = 0<> = +. 이것은 많은 상황에서 유용합니다.

  • 화살표 : 화살표는 입력을 받고 출력을 반환하는 계산을 나타내는 방법입니다. 함수는 가장 기본적인 화살표 유형이지만 다른 유형도 많이 있습니다. 라이브러리에는 화살표 조작을위한 매우 유용한 기능이 많이 있습니다. 일반 하스켈 함수와 함께 사용하더라도 매우 유용합니다.

  • 배열 : Haskell의 다양한 가변 / 불변 배열.

  • ST Monad : 모나드 외부에 순수한 상태를 유지하면서 매우 빠르게 실행되는 가변 상태로 코드를 작성할 수 있습니다. 자세한 내용은 링크를 참조하십시오.

  • FRP : 기능적 반응 형 프로그래밍, 이벤트, 트리거, 입력 및 출력 (예 : GUI)을 처리하는 새로운 실험적 코드 작성 방법입니다. 나는 이것에 대해 많이 모른다. 얌파대한 Paul Hudak의 이야기 는 좋은 출발입니다.

살펴 봐야 할 새로운 언어 기능이 많이 있습니다. 나는 그것들을 나열 할 것이다 .Google , haskell wikibook , haskellwiki.org 사이트 및 ghc documentation 에서 그들에 대한 많은 정보를 찾을 수있다 .

  • 다중 매개 변수 유형 클래스 / 기능 종속성
  • 타입 패밀리
  • 기존 정량화 된 유형
  • 팬텀 타입
  • 가드
  • 다른 사람 ...

많은 Haskell은 범주 이론을 기반으로 하므로 자세히 살펴볼 수 있습니다. 좋은 출발점은 컴퓨터 과학자를위한 범주 이론입니다 . 책을 사고 싶지 않다면 저자의 관련 기사 도 훌륭합니다.

마지막으로 다양한 Haskell 도구에 대해 더 배우고 싶을 것입니다. 여기에는 다음이 포함됩니다.

  • ghc (및 모든 기능)
  • cabal : Haskell 패키지 시스템
  • darcs : Haskell로 작성된 분산 버전 제어 시스템으로 Haskell 프로그램에 매우 인기가 있습니다.
  • haddock : Haskell 자동 문서 생성기

이러한 모든 새로운 라이브러리와 개념을 배우면서 Haskell에서 적당한 규모의 프로젝트를 작성하는 것이 매우 유용합니다. 작은 게임, 데이터 분석가, 웹 사이트, 컴파일러 등 무엇이든 가능합니다 . 이것으로 작업하면 현재 배우고있는 많은 것들을 적용 할 수 있습니다. 당신은 연령대에이 레벨을 유지합니다 (여기서는 내가있는 곳입니다).

전문가

이 단계에 도달하는 데 몇 년이 걸릴 것입니다 (2009 년부터 시작되었습니다!). 그러나 여기에서 박사 논문, 새로운 ghc 확장을 작성하고 새로운 추상화를 시작하는 것으로 추측합니다.

도움을 받다

마지막으로, 학습의 모든 단계에서 정보를 얻을 수있는 여러 곳이 있습니다. 이것들은:

  • #haskell irc 채널
  • 메일 링리스트 . 이들은 토론을 읽기 위해 가입 할 가치가 있습니다. 일부는 매우 흥미 롭습니다.
  • haskell.org 홈페이지에 기재된 다른 장소

결론

글쎄, 이것은 내가 예상했던 것보다 길었다. 어쨌든, 나는 Haskell에 능숙 해지는 것이 매우 좋은 생각이라고 생각한다. 시간이 오래 걸리지 만 이는 주로 새로운 사고 방식을 배우고 있기 때문입니다. Java를 배우고 나서 Ruby를 배우는 것과 같지 않고 C를 배우고 나서 Java를 배우는 것과는 다릅니다. 또한 저는 아이디어를 추상화하는 많은 새로운 방법을 보면서 하스켈 학습의 결과로 객체 지향 프로그래밍 기술이 향상되었음을 알게되었습니다.


35
예이 화살! 먼저 모나드가 뇌를 형성하게하고 머리에 서서 코 모나드에 대해 생각한 다음 동시에 화살표를 얻기 위해 두 가지를 모두 수행합니다. 하스켈에는 유형 수준으로 열 수있는 표현력이 많이 있습니다 프로그래밍도.
ephemient

13
@nanothief Monad는 더 강력하지만 구성이 적습니다. 많은 사람들이 더 깨끗한 Applicative코드로 얻을 수있는 모나드를 사용 합니다. 대부분의 물건 Functor들 또한 Monad이야,하지만 당신은 사용 주위에 가지 마세요 >>=returnfmap충분합니다, 훨씬 더 간단 코드 후자의 리드가 당신이 그것을 사용할 수 있는지 때문이다.
톰 크로켓

8
@pelotom, typeclassopedia 링크를 추가하고 해당 섹션에 Applicative를 사용하는 더 좋은 이유를 추가하고 Functor 섹션을 제거했습니다. 대부분의 교육 자료 (RWH 포함)에서 Monad에 중점을 두어 Monad 및 Applicative 개념을 올바른 순서로 얻는 것은 어렵습니다. 반면에, 처음에 답을 썼을 때 (2 년 정도 : O)부터 하스켈 튜토리얼을 가르치는 것이 먼 길을 갔고, 모나드 이전에 Applicative를 가르치는 것은 아마도 하스켈 학습의 권장 방법 일 것입니다.
David Miani

2
훌륭한 조언. 나는 1 년 전에 이것을 시작했고, 중간 단계를 거치는 대부분의 길입니다. 피드백 : RWH의 모나드 장 (14 장)에 대한 설명이 잘못되었습니다. RWH의 온라인 버전을 읽으면이 장에 도움이되는 크라우드 소싱 주석이 포함되어 있기 때문에 유익합니다. FWIW, 당신Monads를 발명 했을 수 있습니다, 나에게 가장 적합한 모나드 튜토리얼이었습니다.
Tom

6
@tomf : 감사합니다! 나는이 답변이 얼마나 잘 이루어 졌는지 항상 놀랐습니다. 글을 쓴지 거의 5 년이 지났지 만 여전히 강해지고 있습니다. 조금 오래된 버전이므로 곧 업데이트해야합니다. 렌즈, 파이프, 구속 조건 종류, 하스켈 플랫폼, 유형 레벨 번호는 언급되지 않았으며, 이것이 작성된 이후로 매우 중요한 새로운 주제입니다. RWH가 더 이상 좋지 않다는 것이 옳습니다. 오랫동안 업데이트되지 않았으며 많은 예제가 컴파일되지 않았습니다. 어쨌든 여전히 도움이 되서 다행입니다.
David Miani

179

내 동료 중 일부는 Learn Your a Haskell for Great Good! .

튜토리얼은 명령형 프로그래밍 언어에 경험이 있지만 기능적 언어로 프로그래밍 한 적이없는 사람들을 대상으로합니다.

그리고 여기 에서도 답변을 확인 하십시오


27
나는 이것을 두 번째로한다. 또한 명확하지 않기 때문에 다운로드 가능한 pdf 버전의 튜토리얼 링크는 다음과 같습니다. learnyouahaskell.com/learnyouahaskell.pdf 웹 디자인 은 훌륭하지만 지하철 사본도 갖고 싶습니다.
Telemachus

8
나는 이것을 시작했지만 내 의견은 당신이 Real World Haskell로 직접 가야한다는 것입니다. 차이점은 K & R에서 C를 배우는 것과 비슷하지만 "C for dummies"는 단순하지만 시도하는 방식으로 중요한 것을 놓치는 것입니다. 하스켈을 "필수적인 방법"으로 배우려고하는 대신 사실을 바로 잡는 것이 낫다고 생각합니다.
John Smith

7
나는 이것을 절대적으로 좋아하고 이것과 Real World Haskell에 많은 시간을 투자했습니다. IMO "하스켈 배우기"는 실제 자원 하스켈보다 더 깊은 통찰력을 제공하지만 둘 다 훌륭한 리소스입니다.
Charlie Flowers

7
@ abababa22 LYAH를 먼저 읽고 RWH에가는 것이 가장 좋은 생각이라고 생각합니다. LYAH는 단지 Haskell을 가르치지 않습니다. 함수형 프로그래밍을 가르칩니다. 문제를 해결할 때 기능적으로 생각하기 시작합니다. 분명히 LYAH만으로는 큰 응용 프로그램을 작성하기에 충분하지 않지만 올바른 방식으로 마음을 구부립니다. 당신이 필수적 배경에서 인 경우에,이 IMO, 가장 좋은 방법입니다
Abdulsattar 모하메드

4
@Telemachus 참고 사항 : PDF는 최종 버전이 아니며 적어도 마지막 장이 누락되었습니다.
sdcvvc

103

온라인에서 읽을 수있는 좋은 책이 있습니다 : Real World Haskell

필자가 수행 한 대부분의 Haskell 프로그램은 Project Euler 문제 를 해결하는 것이 었습니다 .

오래 전에 읽지 않은 조언은 (이론적으로) 해결하는 방법을 알고있는 간단한 문제의 표준 세트가 있어야한다는 것입니다. 그런 다음 새 언어를 배우려고 할 때마다 해당 언어로 해당 문제를 구현합니다.


2
5 장에 도달 할 때까지 내 경험에있어서의 실제 세계 Haskell은 훌륭합니다. 그때부터 나는 그것을 추천하지 않을 것입니다.
MasterMastic

왜 @MasterMastic? 5 장 이후의 문제점은 무엇입니까? 돈을 보내기 전에 알고 싶습니다.
Jay Blanchard

@JayBlanchard 5 장에서는 라이브러리의 구체적인 예를 얻기 시작합니다.하지만 좋은 일을하게됩니다. 그러나 그들이해야 할 일을 말하지만, 그 이유를 완전히 설명하지 않고 전혀 설명하지는 않습니다. 꽤 많은 마법의 16 진 리터럴입니다. 당신은 단지 움직임을 겪고 있습니다. 그것은 저에게 가장 큰 문제는 아니 었습니다. 가장 큰 문제는 책이 그러한 장단점과 긴 예 (전체 장 이상을 가져갈만큼 충분히 긴)에 크게 의존한다는 것입니다. 원하는 부분 만 읽을 수는 없습니다. 나는 훌륭한 작가, 놀라운 지식이지만 매우 열악한 실행 이라고 생각 합니다.
MasterMastic


69

다른 사람의 답변을 추가하려면 코딩 할 때 도움이되는 유용한 방법이 있습니다 (예 : 프로젝트 오일러 문제를 해결할 때) : Hoogle . 명령 행 인터페이스 나 웹 인터페이스를 사용할 수 있습니다 .

커맨드 라인

Haskell 플랫폼을 설치 한 후 cabal install hoogle

Hoogle 사용 예 :

함수가 f x = 3 * x + 1있고에 적용한 (5 :: Int)다음 결과 및 결과에 적용하고 그 값의 무한 목록을 가져옵니다. 당신을 돕기위한 기능이 이미 있다고 생각합니다 (특히 당신을위한 것은 f아닙니다).

이 함수는 형식이 될 것 (a -> a) -> a -> [a]걸리는 경우 f 5또는 a -> (a -> a) -> [a]이 걸리는 경우 5 f(우리가 함수가 일반적인 유형입니다 가정하고 그냥 IntS)

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

그래, 필요한 기능이 이미 존재하며이라고 iterate합니다. 당신은 그것을 사용합니다 iterate func 5!

웹 인터페이스

동일한 예제의 결과는 여기 에서 찾을 수 있습니다 .


Hoogle에 필요한 것을 요청하는 방법을 이해하면 필요한 것에 대한 표준 라이브러리 함수를 찾는 것이 훨씬 쉬워집니다.
ankh-morpork

57

Haskell에서 의 Graham Hutton의 프로그래밍 은 간결하고 합리적이고 철저하며 그의 Haskell 교육 과정은 실제로 보여줍니다. 어디를 가든지 사람들이 항상 시작하는 것이 좋습니다.

특히, 8 장 ( "기능 파서")은 모나드를 다루기 시작하는 데 필요한 실질적인 토대를 제공하며, 모나드에 관한 모든 것부터 시작하기에 가장 좋은 곳이라고 생각 합니다. (그러나이 장과 관련하여 웹 사이트의 정오표에 유의하십시오 do. 특별한 도움 없이는 양식을 사용할 수 없습니다 . 먼저 유형 클래스에 대해 배우고 직접 그 문제를 해결할 수 있습니다.)

이것은 Haskell 초보자에게 거의 강조되지 않지만 모나드 사용뿐만 아니라 자신만의 구성에 대해서도 상당히 일찍 배울 가치가 있습니다. 어렵지 않고 사용자 정의 된 작업으로 여러 작업을보다 간단하게 수행 할 수 있습니다.


5
이 책은 완전히 저평가 된 책입니다. 기능적 파서에 관한 장과 IO에 관한 장이 뒤 따르지 않았으며, 모나드에 대해서는 언급하지 않았지만, 실제로는 교육적인 접근 방식으로 빛을 발합니다.
michiakig

52

재미있는 은유로 모든 모나드 자습서를 읽으려고하지 마십시오. 그들은 당신을 훨씬 더 혼란스럽게 만들 것입니다.


5
동의했다! '추상, 직관 및“ 모 노드
ShreevatsaR

31

#haskell irc 채널에 참여하여 궁금한 점 을 묻는 것이 좋습니다 . 그렇게 하스켈을 배웠습니다. 위에서 제안한 바와 같이 Real World Haskell을 거치면 질문에 대한 실시간 답변이 크게 도움이됩니다. #haskell의 많은 똑똑한 사람들이 Haskell을 재미와 이익을 위해 작성하므로 많은 의견을 얻을 수 있습니다. 시도 해봐!


5
+1 - 명확하게하려면 : 음주 하지 그것을 배울 단지 IRC를 채널로. 에서와 같이 들어가서 "하스켈 프로그램을 작성하는 방법은 무엇입니까? 숫자를 어떻게 추가합니까?"라고 묻지 마십시오.
대안

irc freenode 외에도 최근 Discord 채팅에서 haskell에 대한 활발한 토론이 진행되고 있습니다.
typelogic


19

또한 Yet Another Haskell Tutorial 을 소개로 추천 할 수 있습니다 .

나에게 많은 도움이되었고 내가 알 수있는 한 다른 답변에서 언급되지 않은 또 다른 좋은 학습 자료 (아마도 중간 수준에 있음) 는 The Monad Reader (Issue) 에서 찾을 수있는 Brent Yorgey의 Typeclassopedia 입니다 . 13)

매우 접근하기 쉬운 스타일로 작성되었으며 다음과 같은 입문 조언을 포함합니다.

전문가 Haskell 해커의 지혜에는 두 가지 열쇠가 있습니다.

  1. 유형을 이해하십시오.

  2. 각 유형 클래스와 다른 유형 클래스와의 관계에 대한 깊은 직관을 얻으십시오. 많은 예제에 익숙해 져 있습니다.

Monad Reader 자체는 기능 프로그래머 (Hastell 프로그래머뿐만 아니라)에게 절대적인 보물입니다.


14

쉬운 프로그램을 작성해보십시오.

다양한 교과서에서 샘플 작업을 찾을 수 있습니다.

Haskell / FP 교과서를 고수하지 말고 계산, 문자열 조작, 파일 액세스와 같은 간단한 작업을 시도하십시오.

12 개를 풀고 나면 얼음이 깨졌습니다. :)

그 후, haskell은 무한하고 많은 개념이 있기 때문에 고급 개념 (Monads, Arrows, IO, 재귀 데이터 구조)에 대해 많이 읽으십시오.


14

예를 들어 Haskell의 기능을 실현하는 것이 무엇보다도 시작하는 가장 좋은 방법이라고 생각합니다.

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

여기 모나드와 화살표를 포함한 까다로운 타입 클래스가 있습니다.

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

실제 문제와 더 큰 프로젝트의 경우 GHC (가장 많이 사용되는 컴파일러), Hackage (libraryDB), Cabal (빌딩 시스템), darcs (다른 빌딩 시스템) 태그를 기억하십시오.

통합 시스템으로 시간을 절약 할 수 있습니다 : http://hackage.haskell.org/platform/

이 시스템의 패키지 데이터베이스 : http://hackage.haskell.org/

GHC 컴파일러 위키 : http://www.haskell.org/haskellwiki/GHC

Haskell_98_features 및 Typeclassopedia 후에는 이미 자신에 대한 문서를 찾아 읽을 수 있다고 생각합니다.

그건 그렇고, 장래에 하스켈 표준의 일부일 수있는 GHC의 언어 확장을 테스트하고 싶을 수도 있습니다.

이것이 하스켈을 배우는 가장 좋은 방법입니다. 나는 그것이 당신을 도울 수 있기를 바랍니다.


13

먼저 BONUS의 튜토리얼 을 읽고 Real World Haskell (무료) 을 읽는 것이 좋습니다 . irc.freenode.com#Haskell IRC 채널에 가입하여 질문하십시오. 이 사람들은 완전히 초보자 친화적이며 시간이 지남에 따라 많은 도움을 받았습니다. 또한 바로 여기 SO는 당신이 파악할 수없는 것들에 대한 도움을 얻을 수있는 좋은 장소입니다! 클릭하면 낙심하지 마십시오. 마음이 날 것입니다.

BONUS의 튜토리얼이 여러분을 준비시키고 Real World Haskell이 제공하는 스릴 넘치는 라이딩을 준비합니다. 행운을 빌어 요!


12

명령형 / OO 언어 만 사용해 본 경험이 있다면보다 일반적인 기능 언어를 디딤돌로 사용하는 것이 좋습니다. Haskell은 정말 다르므로 어디든 갈 수 있도록 다양한 개념을 이해해야합니다. ML 스타일 언어 (예 : F #)를 먼저 다루는 것이 좋습니다.


Elm은 이러한 대안 중에서 가장 근접하고 유용하며 초보자에게 친숙 할 수 있습니다.
Pedro Rolo

1
F #과 같은 임시 경로를 통과하는 것에 동의하지 않습니다. 나에게는 보드카를 마시는 것 같아서 빨리 마셔야합니다. 그렇게하면 더 고통 스럽지만 기쁨도 있습니다. 임시 경로는 더 혼란스러워집니다.
typelogic

10

첫 번째 답변은 매우 좋습니다. 전문가 수준에 도달하려면 일부 전문가와 함께 박사 학위를 받아야합니다.

Haskell 페이지 ( http://haskell.org) 를 방문 하십시오 . 거기에는 Haskell 커뮤니티가 승인 한 Haskell의 최신 자료에 대한 자료와 자료가 많이 있습니다.


2
죄송하지만 여기서 PhD 인수를 사용하는 것은 훌륭한 요리사가 되려면 300 $ 부엌 칼을 가지고 있어야한다는 것과 같습니다. Haskell의 아버지 인 Simon Peyton Jones조차도 박사 학위가 없습니다. 실용성과 지속성은 이곳과 다른 분야의 전문 지식으로 이어집니다.
Petras Purlys
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.