Skip to content

Instantly share code, notes, and snippets.

View nattybear's full-sized avatar

Joonkyu Park nattybear

View GitHub Profile
@nattybear
nattybear / lego.md
Created July 15, 2021 22:14
레고와 하스켈

레고나 마인크래프트 같은 블록 단위로는 뭔가를 구현하기가 쉽다. 전체를 구성하는 최소 단위가 적절히 작아서 어떤 형태로든 발전하기가 편리하다.

반면에 프라모델 같이 조립을 할 수 있기는 하지만 모양이 전혀 달라 재사용 할 수 없는 형태로는 다른 형태로 발전하기 어렵다.

프로그래밍 언어도 마찬가지인데 프라모델 같은 언어도 있고 레고 같은 언어도 있다.

프로그래밍 언어는 태어날 때 여러 기능과 자료형을 가지는데 이때 사용자가 다시 따라 만들 수 있는 게 있고 그렇지 않은 게 있다.

예를 들어 참 거짓을 표현하는 Boolean은 어느 언어에나 있는 자료형일텐데 대부분의 주류 언어에서는 사용자가 직접 구현할 수 없다. 언어에서 정해준대로만 써야 한다.

@nattybear
nattybear / lambda-calculus.md
Last active July 14, 2021 07:38
하스켈 람다 대수

이 글은 Yet Another Haskell Tutorial 내용 중 일부를 읽고 정리한 것이다.

람다 대수

람다 대수 Lambda Calculus는 함수를 표현하는 방식이다. 예를 들어 어떤 수 하나를 인자로 받아서 그 수를 제곱하는 함수를 람다 대수로 표현하면 다음과 같다.

λx.x*x
@nattybear
nattybear / alt-and-mplus.md
Last active July 8, 2021 21:58
하스켈 Alternative와 MonadPlus
@nattybear
nattybear / state.md
Last active June 30, 2021 13:34
하스켈 좌충우돌 State Monad 구현기

Functor

타입 클래스 Functor는 구조는 건드리지 않고 구조 안의 값을 바꾼다.

class Functor a where
  fmap :: (a -> b) -> f a -> f b

함수 fmap을 구현할 때는 그런 점을 염두에 두고 구조인 f는 건드리지 않고 구조 안의 값인 a만 바꾸는 방향으로 구현을 하면 된다. 예를 들어 타입 MaybeFunctor 인스턴스를 구현할 때는 구조인 Just는 그대로 두고 안에 값인 a만 바꾸면 된다.

@nattybear
nattybear / noPrelude.md
Last active June 22, 2021 22:30
하스켈 Prelude 안 쓰기

Prelude

하스켈 입문서를 읽다보면 모듈 Prelude에 선언되어 있는 기본 함수나 데이터 타입을 직접 구현해보는 연습 문제가 있다.

이때 원래 있던 것과 이름이 같을 경우 충돌이 생기는데 이를 방지하기 위한 몇 가지 방법이 있다.

이름에 ' 붙이기

가장 흔하고 쉬울 것 같은 방법인데 같은 이름을 안 쓰면 된다.

@nattybear
nattybear / typeclass.md
Last active June 22, 2021 22:59
하스켈 타입 클래스

타입 클래스

Eq는 타입 클래스이다.

class Eq a where
  (==) :: a -> a -> Bool

Eq 인스턴스가 구현되어 있는 데이터 타입이라면 함수 ==를 쓸 수 있다.

@nattybear
nattybear / instanceSigs.md
Last active June 22, 2021 08:29
하스켈 확장 InstanceSigs

이 글은 책 Haskell Programming from First Principles를 읽고 일부 내용을 정리한 것이다.

인스턴스에 타입 적기

인스턴스를 구현할 때 메소드의 타입은 보통 적지 않아도 된다. 정확히는 적고 싶어도 적을 수 없다. 적으면 에러가 난다.

예를 들어 인스턴스 구현에 타입을 적으려고 하면

instance Functor (Reader r) where
@nattybear
nattybear / functor-and-natural-transformation.md
Last active July 17, 2022 16:03
Functor, Natural Transformation

이 글은 책 Haskell Programming from First Principles 를 읽고 일부 내용을 정리한 것입니다.

Functor

fmap
  :: (Functor f)
  => (a -> b) -> f a -> f b
@nattybear
nattybear / function.md
Last active March 9, 2021 05:24
파이썬 함수

함수

함수는 어떤 값을 넣으면 어떤 값이 나오는 것입니다.

아래 코드에서 f는 어떤 숫자를 넣으면 그 수에 1을 더한 값이 나오는 함수입니다.

def f(x):
  return x + 1