Skip to content

Instantly share code, notes, and snippets.

@nattybear
Created July 15, 2021 22:14
Show Gist options
  • Save nattybear/1994b73721d9e55ae3d4a79457f8d031 to your computer and use it in GitHub Desktop.
Save nattybear/1994b73721d9e55ae3d4a79457f8d031 to your computer and use it in GitHub Desktop.
레고와 하스켈

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

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

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

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

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

그런데 하스켈에서는 Boolean 타입을 사용자가 만들 수 있다. 하스켈에는 다른 언어에는 없는 Sum 타입이라는 작은 레고 조각이 있어서 여러 자료형을 더 쉽게 만들 수 있다.

data Bool = False | True

프로그래밍 언어에서 Boolean 만큼 흔한 것 중 하나는 함수이다. 요즘은 그래도 람다 함수도 되고 HOF까지 지원해주면 감사한 언어인데 그래도 사용자는 언어가 제공하는 함수 기능만 쓸 수 있다는 것에 차이는 없다.

그런데 하스켈에서는 함수도 그냥 자료형이다.

data (->) a b

그래서 사용자가 함수처럼 동작하는 자료형을 따라 만들어보거나 다르게 동작하는 함수를 직접 만드는 게 가능하다.

하스켈은 이렇게 빌트인 기능이 거의 없고 많은 것들이 그냥 라이브러리로 구현되어 있다.

이제 프라모델 그만하고 레고 해보자 ㅎ

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment