함수형 맛보기를 위해서 잠시 지나쳐 가는 게 아닌, 하스켈 자체를 익히기 위해 공부하면서 알게된 내용들을 정리해서 깃허브에서 블로그를 운영 중입니다. 공부 단계 단계마다 제대로 걸림돌 역할을 하는 주제들을 조금이나마 이해한 게 생기면 로그를 남겼습니다.

펑터(펑크터)
어플리커티브 펑터
모노이드
모나드
모나드 트랜스포머
mtl
CPS
Free 모나드
Tagless Finall
Parsec
Lens
Arrow

위 주제들로, 다른 많은 자료들이 있음에도 볼 이유가 있도록 하기 위해 노력했습니다. 단순 번역 자료는 되도록 피하고, 조금이라도 이해한 부분이 생기면 정리해서 올렸습니다.

https://lionhairdino.github.io

함수를 컴포지션 하는 스타일이 함수형이야라고 말하기보다, 왜 그런 스타일이 필요하게 됐는지를 궁금해 합니다.

모나드의 정교한 정의보다, 카테고리 이론에 있는 모나드의 어떤 아이디어가 하스켈 모나드로 스며들었는지를 궁금해 합니다.

하스켈에서 함수형 아이디어만 얻으려는게 아닌, 하스켈로 쓸모있는 걸 만들기 위해 노력 중입니다.

저와 비슷한 스탠스를 취하는 분들은 읽어 보시고 같이 의견을 주고 받았으면 좋겠습니다.

2023.12 현재 글 목록입니다.

Adjunction에서 η와 ϵ의 화살표 방향이 반대인 이유 - December 5, 2023
Adjunction을 만드는 두 Adjoint 펑터로 모나드 표현하기 (작성 중) - November 16, 2023
얌파 Yampa (작성 예정) - October 29, 2023
Reflex (작성 예정) - October 29, 2023
Monadic Stream Function (작성 중) - October 17, 2023
FRP의 Event와 Behavior (작성 중) - October 11, 2023
reactive-banana 예시로 FRP 동작 방식 이해해 보기 (작성 중) - October 7, 2023
선언형 프로그래밍 - October 7, 2023
Arrow 예시 - Circuit - September 29, 2023
Arrow 쓰는 방법 (스케치 중) - September 22, 2023
쿼리를 작성 할 때도 타입 체커를 써먹자 - Opaleye (작성 중) - September 16, 2023
Arrow는 모나드의 일반화 (작성 중) - September 14, 2023
Cabal 빌드 플래그 - July 12, 2023
마크다운에서 백틱backtick 입력에 시달릴 때 - March 22, 2023
터미널 Neovim에서 Ctrl + Enter 바인딩 잡기 - Kmonad - March 14, 2023
Delimited Continuation (작성 중) - March 14, 2023
비수학인이 해석한 모노이달 카테고리 - March 10, 2023
한 번쯤 나올 법 했는데, 아직 없었던 펑터 이야기 - March 9, 2023
비수학인이 해석한 모노이드 - 모노이드가 왜 중요할까? - February 16, 2023
Template Haskell(작성 중) - January 13, 2023
MonadFix (작성 예정) - January 12, 2023
Eff 모나드(작성 예정) - January 12, 2023
Representation 다형성 - January 5, 2023
Generics 프로그래밍 (작성 예정) - January 5, 2023
Unboxed, Boxed, Unlifted, Lifted - December 20, 2022
vim 설정 글을 쓸 때, 꼭 있었으면 하는 내용 - December 14, 2022
ST 모나드 - forall의 강력함 - December 12, 2022
Reverse State 모나드 - 교차 재귀 끝판왕 (작성 중) - December 12, 2022
리니어 타입 (작성 중) - December 12, 2022
타입 레벨로 가는 문턱 - 타입에 정보 담아 두기 (작성 중) - December 12, 2022
결합 법칙, 교환 법칙, 항등원, 합성 - December 12, 2022
Effect의 결합 법칙 - December 7, 2022
함수형 프로그래밍에서 함수 - November 23, 2022
Monad없이 Maybe, State의 Effect 해결하기 - November 18, 2022
UnliftIO - November 13, 2022
Free 변수 - November 11, 2022
Covariant, Contravariant, Positive, Negative - November 10, 2022
동적 문법 강조 Dynamic Syntax Highlighting - October 28, 2022
Evaluation의 번역어 평가 - October 21, 2022
Applicative Functor와 Monad의 차이 - September 6, 2022
Effect - September 3, 2022
재귀 생각법 - July 27, 2022
모나드가 함수형 프로그래밍에 찰떡인 이유 - July 24, 2022
Vim + Haskell Language Server - July 2, 2022
단순한 모나드 코드 - May 22, 2022
모나드, 같음 - m (m a)와 m a는 얼마나 다를까? - March 25, 2022
Lazy ByteString 과 Strict ByteString - October 21, 2021
여기 있는 다른 글을 읽기 전에 준비 운동 - 품고 품기 - August 30, 2021
모나드 스택에서 안 쪽에 있는 모나드에 제약 사항이 또 필요한 이유 - August 21, 2021
여러 타입들이 공통된 속성이 있다면, 클래스로 타입을 열어 두자 - August 14, 2021
함수 글자 뜻 - August 9, 2021
Attoparsec 사용법 - July 7, 2021
Strict와 Lazy - June 20, 2021
지연Lazy 평가를 이해하기 위해 필요한 용어 - June 19, 2021
bottom, Void, undefined, unit - June 17, 2021
Void - June 15, 2021
Weak Head Normal Form에서 head의 뜻 - June 3, 2021
Parsec - 파서를 위해 태어난 모나드 - May 21, 2021
모나드 액션들간의 소통 - 상태 "개념"은 함수형에도 있다. - May 18, 2021
Lens - 펑크터의 독특한 활용 - May 13, 2021
함수형 시작과 아마도 끝 - May 7, 2021
함수가 들어 있는 데이터 타입의 펑크터 만들기 - May 7, 2021
코모나드 comonad - May 6, 2021
forall - 아무거나 (하나)와 모든 것의 차이 - May 4, 2021
타입 추론할 때, 살짝 숨어 있는 제약constraint사항들 주의하기 - April 23, 2021
타입 추론 과정 따라가기 - April 22, 2021
타입 추론 - 함수 서명과 몸체의 타입 매칭 - April 15, 2021
클래스 제약 Class Constraint - April 13, 2021
대수 타입 Algebraic data type - April 11, 2021
하스켈로 가기 전 필수 코스 - 람다 대수 기본 용어 - April 8, 2021
Async 시작 - March 25, 2021
Deduction vs Induction - March 19, 2021
코드 조립 - January 29, 2021
Typed Holes - September 8, 2020
newtype은 왜 필드 하나만 갖는 생성자 하나만 있는 타입일까? - August 19, 2020
모나드 체인이 목표하는 코드 모양과 실행 순서 - August 6, 2020
프로그래밍에서 가끔 만나는 언어학 용어들 - August 5, 2020
String, Text, ByteString - August 4, 2020
CPS - Continuation Passing Style - July 28, 2020
Has type class 패턴, mtl 스타일 - July 21, 2020
인스턴스instance의 의미 - July 21, 2020
모나드 트랜스포머 - Monad Transformer 그리고 mtl - July 16, 2020
Type equality constraint "~" - July 14, 2020
하스켈 소스 들여 쓰기 - July 12, 2020
생소한 용어들을 만나면 어원etymology부터 - July 12, 2020
폴리모픽 타입 변수 a는 정말 어떤 타입이든 상관 없는걸까? - July 11, 2020
Lazy Pattern Match - July 11, 2020
Tagless Final style - July 7, 2020
Fix 함수 - July 7, 2020
Free 모나드 패턴 - July 3, 2020
컨텍스트, Applicative Functor, Traversable - July 2, 2020
Int 와 Maybe Int의 차이. (값을 감싸는wrapping 이유) - June 24, 2020
모나드 문턱에서 - June 24, 2020
Servant - June 19, 2020
이 바닥 셀럽분들 - June 18, 2020
하스켈에 대한 오해 - June 17, 2020
하스켈(함수형)의 가장 근본이 되는 두 가지 특징 - June 17, 2020
Hakyll 과 Github Action - June 17, 2020
타입 클래스, 타입 추론, Dependent Haskell - June 17, 2020

언어 확장

확장 RecursiveDo (작성 중) - October 7, 2023
확장 GeneralisedNewtypeDeriving (GeneralizedNewtypeDeriving) (작성 중) - September 21, 2023
확장 Arrows (작성 중) - September 14, 2023
확장 DerivingVia - January 21, 2023
확장 TypeSynonym(작성 예정) - January 10, 2023
확장 InstanceSigs (작성 중) - January 10, 2023
확장 UnicodeSyntax (작성예정) - January 6, 2023
확장 PackageImports (작성예정) - January 6, 2023
확장 LinearTypes (작성예정) - January 6, 2023
확장 DuplicateRecordFields (작성예정) - January 6, 2023
확장 TypeInType (deprecated) (작성예정) - January 5, 2023
확장 PolyKinds (작성 중) - January 5, 2023
확장 KindSignatures (작성 중) - January 5, 2023
확장 DataKinds (작성 중) - January 5, 2023
확장 DefaultSignatures - July 5, 2022
확장 MultiWayIf - January 13, 2022
확장 LambdaCase - August 10, 2021
확장 RecordWildCards - April 17, 2021
확장 GADTs - August 24, 2020
확장 TypeFamilies - 타입 함수 - August 19, 2020
확장 OverloadedStrings - July 29, 2020
확장 MultiParamTypeClasses, FunctionalDependencies - July 29, 2020
확장 FlexibleInstances, FlexibleContexts - July 13, 2020
확장 ScopedTypeVariables - July 11, 2020
확장 NullaryTypeClasses (지금은 MultiParamTypeClasses에 합쳐졌습니다.) - July 11, 2020
확장 MonomorphismRestriction - July 10, 2020
확장 ExistentialQuantification - June 12, 2020
확장 TypeApplications - June 10, 2020

컴파일 에러 메시지

컴파일 에러 읽기 - no smaller than the instance head - April 26, 2021
컴파일 에러 읽기 - rigid type variable - July 15, 2020
컴파일 에러 읽기 - Non type-variable argument in the constraint - June 20, 2020
컴파일 에러 읽기 - Couldn't match type, Could not deduce, No instance - June 12, 2020
profile
하스켈 프로그래머

0개의 댓글