Table of Contents

제1부 함수형 프로그래밍 입문 1장 함수형 프로그래밍이란 무엇인가? 3 1.1 FP의 이점: 간단한 예제 하나 4 1.1.1 부수 효과가 있는 프로그램 4 1.1.2 함수적 해법: 부수 효과의 제거 7 1.2 (순수)함수란 구체적으로 무엇인가? 11 1.3 참조 투명성, 순수성, 그리고 치환 모형 12 1.4 요약 16 2장 스칼라로 함수형 프로그래밍 시작하기 17 2.1 스칼라 언어의 소개: 예제 하나 18 2.2 프로그램의 실행 21 2.3 모듈, 객체, 이름공간 23 2.4 고차 함수: 함수를 함수에 전달 25 2.4.1 잠깐 곁가지: 함수적으로 루프 작성하기 25 2.4.2 첫 번째 고차 함수 작성 27 2.5 다형적 함수: 형식에 대한 추상 29 2.5.1 다형적 함수의 예 29 2.5.2 익명 함수로 고차 함수 호출 31 2.6 형식에서 도출된 구현 32 2.7 요약 36 3장 함수적 자료구조 37 3.1 함수적 자료구조의 정의 37 3.2 패턴 부합 41 3.3 함수적 자료구조의 자료 공유 44 3.3.1 자료 공유의 효율성 46 3.3.2 고차 함수를 위한 형식 추론 개선 47 3.4 목록에 대한 재귀와 고차 함수로의 일반화 49 3.4.1 그 외의 목록 조작 함수들 52 3.4.2 단순 구성요소들로 목록 함수를 조립할 때의 효율성 손실 55 3.5 트리 56 3.6 요약 58 4장 예외를 이용하지 않은 오류 처리 59 4.1 예외의 장단점 60 4.2 예외의 가능한 대안들 62 4.3 Option 자료 형식 64 4.3.1 Option의 사용 패턴 65 4.3.2 예외 지향적 API의 Option 합성과 승급, 감싸기 70 4.4 Either 자료 형식 75 4.5 요약 78 5장 엄격성과 나태성 81 5.1 엄격한 함수와 엄격하지 않은 함수 83 5.2 확장 예제: 게으른 목록 86 5.2.1 스트림의 메모화를 통한 재계산 피하기 87 5.2.2 스트림의 조사를 위한 보조 함수들 88 5.3 프로그램 서술과 평가의 분리 89 5.4 무한 스트림과 공재귀 93 5.5 요약 98 6장 순수 함수적 상태 99 6.1 부수 효과를 이용한 난수 발생 99 6.2 순수 함수적 난수 발생 101 6.3 상태 있는 API를 순수하게 만들기 103 6.4 상태 동작을 위한 더 나은 API 106 6.4.1 상태 동작들의 조합 108 6.4.2 내포된 상태 동작 109 6.5 일반적 상태 동작 자료 형식 111 6.6 순수 함수적 명령식 프로그래밍 112 6.7 요약 115 제2부 함수적 설계와 조합기 라이브러리 7장 순수 함수적 병렬성 119 7.1 자료 형식과 함수의 선택 120 7.1.1 병렬 계산을 위한 자료 형식 하나 122 7.1.2 병렬 계산의 조합 125 7.1.3 명시적 분기 127 7.2 표현의 선택 130 7.3 API의 정련 132 7.4 API의 대수 138 7.4.1 map에 관한 법칙 139 7.4.2 fork에 관한 법칙 141 7.4.3 법칙 깨기: 미묘한 버그 하나 142 7.4.4 행위자를 이용한 완전 비차단 Par 구현 144 7.5 조합기들을 가장 일반적인 형태로 정련 151 7.6 요약 156 8장 속성 기반 검사 157 8.1 속성 기반 검사의 간략한 소개 157 8.2 자료 형식과 함수의 선택 161 8.2.1 API의 초기 버전 161 8.2.2 속성의 의미와 API 163 8.2.3 생성기의 의미와 API 165 8.2.4 생성된 값들에 의존하는 생성기 167 8.2.5 Prop 자료 형식의 정련 168 8.3 검례 최소화 171 8.4 라이브러리의 사용과 사용성 개선 173 8.4.1 간단한 예제 몇 가지 173 8.4.2 병렬 계산을 위한 검사 모음 작성 175 8.5 고차 함수의 검사와 향후 개선 방향 181 8.6 생성기의 법칙들 183 8.7 요약 184 9장 파서 조합기 라이브러리 187 9.1 대수의 설계: 첫 시도 188 9.2 가능한 대수 하나 195 9.2.1 슬라이싱과 비지 않은 되풀이 197 9.3 문맥 민감성의 처리 201 9.4 JSON 파서 작성 203 9.4.1 JSON 서식 204 9.4.2 JSON 파서 205 9.5 오류 보고 206 9.5.1 가능한 설계 하나 207 9.5.2 오류의 중첩 208 9.5.3 분기와 역추적의 제어 210 9.6 대수의 구현 212 9.6.1 가능한 구현 하나 214 9.6.2 파서들의 순차 실행 215 9.6.3 파서에 이름표 붙이기 216 9.6.4 실패의 극복과 역추적 217 9.6.5 문맥 민감 파싱 218 9.7 요약 221 제3부 함수적 설계의 공통 구조 10장 모노이드 225 10.1 모노이드란 무엇인가? 226 10.2 모노이드를 이용한 목록 접기 229 10.3 결합법칙과 병렬성 230 10.4 예제: 병렬 파싱 233 10.5 접을 수 있는 자료구조 235 10.6 모노이드 합성 237 10.6.1 좀 더 복잡한 모노이드 합성 237 10.6.2 모노이드 합성을 이용한 순회 융합 239 10.7 요약 240 11장 모나드 241 11.1 함수자: map 함수의 일반화 241 11.1.1 함수자의 법칙들 244 11.2 모나드: flatMap 함수와 unit 함수의 일반화 245 11.