레고나 마인크래프트 같은 블록 단위로는 뭔가를 구현하기가 쉽다. 전체를 구성하는 최소 단위가 적절히 작아서 어떤 형태로든 발전하기가 편리하다.
반면에 프라모델 같이 조립을 할 수 있기는 하지만 모양이 전혀 달라 재사용 할 수 없는 형태로는 다른 형태로 발전하기 어렵다.
프로그래밍 언어도 마찬가지인데 프라모델 같은 언어도 있고 레고 같은 언어도 있다.
프로그래밍 언어는 태어날 때 여러 기능과 자료형을 가지는데 이때 사용자가 다시 따라 만들 수 있는 게 있고 그렇지 않은 게 있다.
예를 들어 참 거짓을 표현하는 Boolean은 어느 언어에나 있는 자료형일텐데 대부분의 주류 언어에서는 사용자가 직접 구현할 수 없다. 언어에서 정해준대로만 써야 한다.
그런데 하스켈에서는 Boolean 타입을 사용자가 만들 수 있다. 하스켈에는 다른 언어에는 없는 Sum 타입이라는 작은 레고 조각이 있어서 여러 자료형을 더 쉽게 만들 수 있다.
data Bool = False | True
프로그래밍 언어에서 Boolean 만큼 흔한 것 중 하나는 함수이다. 요즘은 그래도 람다 함수도 되고 HOF까지 지원해주면 감사한 언어인데 그래도 사용자는 언어가 제공하는 함수 기능만 쓸 수 있다는 것에 차이는 없다.
그런데 하스켈에서는 함수도 그냥 자료형이다.
data (->) a b
그래서 사용자가 함수처럼 동작하는 자료형을 따라 만들어보거나 다르게 동작하는 함수를 직접 만드는 게 가능하다.
하스켈은 이렇게 빌트인 기능이 거의 없고 많은 것들이 그냥 라이브러리로 구현되어 있다.
이제 프라모델 그만하고 레고 해보자 ㅎ