Chapter 0 [입문] 함수형 프로그래밍 - “함수”의 세계 _ 2
0.1 함수형 프로그래밍, 그 전에 ― 실용 프로그램에서 활용하는 강점 알기 4
0.2 함수란 무엇인가? ― 명령형 언어의 함수와 무엇이 다른가? 5
0.3 함수형 프로그래밍이란 무엇인가? ― “프로그램이란 함수다”라는 관점 9
0.4 함수형 언어란? ― 함수가 1급(first class) 대상이다? 대입이 없다? 12
0.5 함수형 언어의 특징적인 기능 ― 타입의 유무, 정적/동적, 강약 20
0.6 왜 지금 함수형 언어인가? ― 추상화, 최적화, 병행/병렬화 28
0.7 함수형 언어와 함수형 프로그래밍의 관계 ― 강력한 성과를 끌어내기 위해서는 어떻게 하면 좋은가? 41
0.8 함수형 언어의 역사 ― 과거를 알고 미래 탐구하기 43
0.9 함수형 언어를 채용하는 장점 ― 선언적일 것, 제약의 충족 체크, 타입과 타입 검사, 타입 추론 49
0.10 이 책에서 다루는 함수형 언어 ― Haskell의 특징, 구현, 환경 구축 54
0.11 정리 60
Chapter 1 [비교를 통해 발견하기] 함수형 프로그래밍 ― C/C++, JavaScript, Ruby 그리고 Haskell _ 64
1.1 좌표 변환 ― 부품 조합하기 66
1.2 NULL considered harmful ― 10억 달러 단위의 실수 79
1.3 소수를 세기 ― 올바른 병렬화와 그 사양 변경 대응 90
1.4 구조화 데이터의 취급 ― Visitor 패턴 100
1.5 문자열의 이스케이프 ― 타입에 성질 갖게 하기 108
1.6 정리 118
Chapter 2 타입과 값 - “타입”은 기본 중의 기본 _ 120
2.1 Prelude ― 기본 모듈 122
2.2 값 ― 조작의 대상 123
2.3 변수 ― 값의 추상화 129
2.4 타입 ― 값의 성질 132
2.5 타입 정의하기 ― 취급하는 성질의 결정 151
2.6 타입 클래스 ― 타입에 공통된 성질 165
2.7 정리 178
Chapter 3 함수 - 함수 적용, 함수 합성, 함수 정의, 재귀 함수, 고차 함수 _ 180
3.1 함수 만들기 ― 기존의 함수로부터 만들기, 직접 새로운 함수 정의하기 182
3.2 함수 적용 ― 기존 함수의 인수에 값 부여하기 182
3.3 함수 합성 ― 기존의 함수 연결하기 188
3.4 Haskell의 소스 파일 ― 소스 파일에 함수를 정의하여 GHCi에서 읽어 보기 191
3.5 함수 정의 ― 패턴 매치와 가드 194
3.6 재귀 함수 ― 반복적인 행동을 정의하는 함수 213
3.7 고차 함수 ― 결과가 함수가 되는 함수, 인수로서 함수를 요구하는 함수 222
3.8 정리 234
Chapter 4 평가 전략 - 지연 평가와 적극 평가 _ 236
4.1 지연 평가를 살펴보자 ― 유효하게 이용할 수 있는 예로부터 확실히 배우기 238
4.2 평가 전략 ― 지연 평가와 적극 평가의 구조, 장점 및 단점 256
4.3 평가 제어하기 ― 성능 튜닝을 위해서 269
4.4 정리 275
Chapter 5 모나드 - 문맥을 지닌 계산을 다루기 위한 장치 _ 278
5.1 타입 클래스를 다시 한 번 살펴보기 ― 직접 만든다는 관점으로 280
5.2 모나드의 사용법 ― 문맥을 잘 취급하기 위한 타입 클래스 인터페이스 288
5.3 여러 가지 모나드 ― Identity, Maybe, 리스트, Reader, Writer, State, IO … 304
5.4 다른 언어에 있어서의 모나드 ― 모나드나 이와 유사한 기능의 서포트 상황 332
5.5 Haskell 프로그램의 컴파일 ― 컴파일해서 Hello, World! 337
5.6 정리 338
Chapter 6 추천하는 개발/설계 테크닉 ― “함수형/Haskell식”의 프로그램 설계/구현, 사고 _ 342
6.1 동작 결정하기 ― 테스트를 작성하자 344
6.2 하향식으로 생각하기 ― 문제를 큰 틀에서 파악하고 작은 문제로 분할해 나가기 349
6.3 제약 설계하기 ― 타입에 제약 갖게 하기 384
6.4 적절한 처리를 선택하게 하기 ― 타입과 타입 클래스를 적절하게 이용하여 타입에 제약 기억시키기 394
6.5 보다 복잡한 제어 부여하기 ― 매우 강력한 로직 퍼즐의 예 404
6.6 정리 415
Chapter 7 Haskell에 의한 제품 개발의 길 - 패키지와의 교제 _ 418
7.1 패키지의 이용 ― 패키지 시스템 Cabal 420
7.2 패키지의 작성 ― 우선은 패키징해 두자 425
7.3 조직 내 개발 패키지의 취급 ― 이런저런 궁리 436
7.4 이용할 패키지의 선정 ― 의존 관계 지옥, 선정의 지침 440
7.5 의존 패키지의 버전 컨트롤 ― 패키지별로 어떤 버전을 선택할 것인가? 448
7.6 버전 간의 차이 흡수 ― 버전 간 변경점을 검출하는 것부터 453
7.7 정리 459
APPENDIX 부록 _ 461
A.1 함수형 언어를 사용하는 프로그래밍 콘테스트 사이트 ― 게임 감각으로 도전 462
A.2 읽어 둘 만한 참고문헌 ― 더 깊은 세계로… 469
찾아보기 .... 474