카테고리 없음

가장 쉬운 하스켈 책

throbbing 2024. 2. 3. 06:08


번역의 질이 매우 나쁘다. 역자가 책의 내용을 과연 알고 번역한 것인지. 역자의 국어 실력에 대해서도 의구심이 가는 문장이 많다. 훌륭한 예제가 많이 실려있음에도 한글 번역이 오히려 방해 요소다.
가장 쉬운 하스켈 책 은 복잡한 함수형 언어를 정말로 재미있고 잘 설명한 책이다. 저자의 경험에서 우러나오는 지식들과 최신 정보들, 그리고 가장 중요하고 유용한 부분이라고 할 수 있는 예제 코드들로 엮인 이 책은 여러분이 상상할 수 없는 방법으로 함수형 언어를 설명한다. 이 책은 기본 구문과 재귀, 타입, 타입 클래스와 같은 기초적인 사항부터 시작해서 기초를 다진 후 진정한 마스터 클래스를 다룬다. 이 과정을 통해 여러분은 실용적인 함수와 모나드, 지퍼 등, 하스켈의 다른 모든 구조들에 대하여 배우게 될 것이다.

1장. 시작하기
함수 호출하기
첫 번째 함수
리스트 소개
--연결
--리스트 항목에 접근하기
--리스트 안의 리스트
--리스트 비교하기
--더 많은 리스트 연산
범위
리스트 통합
튜플
--튜플 이용하기
--페어 이용하기
--직각 삼각형 찾기

2장. 타입
명시적 타입 선언
일반적인 하스켈 타입
타입 변수
타입 클래스 101
--Eq 타입 클래스
--Ord 타입 클래스
--Show 타입 클래스
--Read 타입 클래스
--Enum 타입 클래스
--Bounded 타입 클래스
--Num 타입 클래스
--Floating 타입 클래스
--Integral 타입 클래스
타입 클래스에 대한 마지막 정리

3장. 함수의 구문
패턴 매칭
--튜플의 패턴 매칭
--리스트와 리스트 통합의 패턴 매칭
--as-패턴
가드
where
--범위
--where와 함께하는 패턴 매칭
--where 블록 속의 함수
let
--리스트 통합에서의 let
--GHCi에서의 let
case 표현식

4장. 개념적인 개요
Maximum
몇 가지 재귀함수들
--replicate
--take
--reverse
--repeat
--zip
--elem
정렬
--알고리즘
--코드
재귀적으로 생각하기

5장. 고차원 함수
커리된 함수
--섹션
--함수 출력하기
잘 정리된 고차원주의
--zipWith 구현하기
--flip 구현하기
함수형 프로그래머의 도구상자
--map 함수
--filter 함수
--map과 filter에 대한 예제
--여러 매개변수와 함수 매핑하기
람다
폴드
--foldl로 레프트 폴드
--foldr로 라이트 폴드
--foldl1과 foldr1 함수
--몇 가지 폴드 예제
--폴드를 보는 또 다른 방법
--무한 리스트 폴드하기
--스캔
$를 가진 함수 애플리케이션
합성 함수
--여러 매개변수를 갖는 합성 함수
--포인트 프리 스타일

6장. 모듈
모듈 임포트하기
모듈 함수로 문제 해결하기
--단어 카운팅
--건초 더미에서 바늘 찾기
--시저 암호
--엄격한 레프트 폴드
--숫자 찾기
값에 키 매핑하기
--어소시에이션 리스트
--Data.Map 입력
모듈 만들기
--Geometry 모듈
--계층적인 모듈

7장. 타입과 타입 클래스 만들기
새로운 데이터 타입 정의하기
구체화하기
--Point 데이터 타입으로 Shape 개선하기
--모듈에 있는 Shape를 익스포트하기
레코드 구문
타입 매개변수
--Car를 매개변수화해야 하나?
--벡터
파생된 인스턴스
--사람 동일시하기
--읽는 방법
--순서
--한 주의 어떤 요일
--타입 동의어
--보기 좋은 전화번호부
--타입 동의어 매개변수화하기
--Left, 그리고 나서 Right
재귀적인 데이터 구조
--리스트 개선하기
--트리
타입 클래스 102
--Eq 타입 클래스의 내부
--신호등 데이터 타입
--하위 클래스
--타입 클래스의 인스턴스처럼 매개변수화된 타입
Yes-No 타입 클래스
Functor 타입 클래스
--펑터인 Maybe
--트리 역시 펑터다
--펑터인 Either a
종류와 몇몇 타입

8장. 입력과 출력
순수한 것과 순수하지 않은 것을 분리하기
Hello, World!
I/O 작업을 함께 붙이기
--I/O 작업 내에서 let 사용하기
--거꾸로 넣기
몇 가지 유용한 I/O 함수들
--putStr
--putChar
--print
--when
--sequence
--mapM
--forever
--forM
I/O 작업 리뷰

9장. More 입력과 출력
파일과 스트림
--입력 리다이렉션
--입력 스트림에서 문자열 얻기
--입력 변형하기
파일 읽기와 쓰기
--withFile 함수 이용하기
--Bracket 타임
--핸들을 잡아라!
To-do 리스트
--항목 삭제하기
--정리하기
커맨드 라인 인자
할 일 리스트 가지고 놀기
--멀티태스킹 할 일 리스트
--잘못된 입력 처리하기
랜덤
--동전 던지기
--더 많은 랜덤 함수들
--랜덤과 I/O
바이트스트링
--엄격한 바이트스트링과 느긋한 바이트스트링
--바이트스트링으로 파일 복사하기

10장. 함수적으로 문제 해결하기
역(逆) 폴란드 기법 계산기
--RPN 표현식 계산하기
--RPN 함수 만들기
--연산자 더 추가하기
히드로 공항에서 런던까지
--가장 빠른 경로 계산하기
--하스켈로 도로 시스템 표현하기
--최적 경로 함수 만들기
--입력으로 도로 시스템 얻기

11장. 어플리커티브 펑터
펑터의 귀환
--펑터인 I/O 작업
--펑터인 함수
펑터 규칙
--규칙 1
--규칙 2
--규칙 깨기
어플리커티브 펑터 사용하기
--Applicative
--Maybe Applicative 펑터
--어플리커티브 스타일
--List
--IO 역시 어플리커티브 펑터다
--어플리커티브인 함수
--리스트 합치기
--어플리커티브 규칙
어플리커티브를 위한 유용한 함수들

12장. 모노이드
기존 타입을 새 타입으로 래핑하기
--타입 클래스 인스턴스를 만들기 위해 newtype 사용하기
--newtype의 느긋함
--type, newtype, data
모노이드에 대하여
--모노이드 타입 클래스
--모노이드 규칙
모노이드 만나기
--리스트는 모노이드다
--곱셈과 덧셈
--Any와 All
--Ordering 모노이드
--Maybe 모노이드
모노이드로 폴드하기

13장. 수많은 모나드
강화된 어플리커티브 펑터
Maybe에 발 담그기
모나드 타입 클래스
줄 타기
--코드, 코드, 코드
--난 떨어질 거야
--줄 위의 바나나
do 표기법
--내가 했던 것처럼 해
--돌아온 피에르
--패턴 매칭과 실패
리스트 모나드
--do 표기법과 리스트 통합
--MonadPlus와 guard 함수
--기사의 임무
모나드 규칙
--좌항등원
--우항등원
--결합성

14장. More 모나드
Writer
--구조에 나선 모노이드
--Writer 타입
--Writer로 do 표기법 이용하기
--로그를 프로그램에 추가하기
--비효율적인 리스트 구조
--디퍼런스 리스트 사용하기
--성능 비교하기
Reader
--모나드인 함수
--리더 모나드
세련되게 상태를 유지하는 계산
--상태를 유지하는 계산
--스택
--State 모나드
--State 얻기와 설정하기
--난수와 State 모나드
에러
몇 가지 유용한 모나드 함수들
--liftM
--join 함수
--filterM
--foldM
안전한 RPN 계산기 만들기
모나드 함수 결합하기
모나드 만들기

15장. 지퍼
찾아가기
--빵가루 흔적
--돌아가기
--초점을 둔 트리 조작하기
--공기 좋고 깨끗한 정상으로 곧바로 가기
리스트에 초점 맞추기
매우 간단한 파일시스템
--파일시스템을 위한 지퍼 만들기
--파일시스템 조작하기
주의!
감사합니다!