그냥 뻘글임. 하스켈을 빤다고 표현한 건 어느정도 호감이 있다는 거로 해석하면 됨.


프로그래밍 언어 추세가 정적 타입 체크를 강화하는 방향으로 가고 있음. 컴파일 전에 버그의 싹을 제거하자는, 빠른 반복 주기를 위한 선택이지.

타입 체크를 강화하는 것 자체는 어렵지 않음. 문제는 안정성을 유지하면서 스크립트 언어만큼 자유도를 늘리는 게 어렵다는 점임. 이 문제가 해결되면 어떤 게 가능할지 알아보자.


C의 배열은 임의 원소 접근은 범위 검사가 아예 없고 그래서 위험하지. C++ array는 어느 정도 정적 검사가 되지만 길이 변경은 여전히 불가능하고 런타임에 완벽하게 안전하다곤 할 수 없음. 이걸 컴파일 타임에, 문제가 없다는 사실을 증명하는 게 하스켈 커뮤니티가 추구하는 방향임. 가까운 기술로는 LiquidHaskell이 있음. 근데 이건 언어 확장일 뿐이고 실제 언어에 통합하려면 타입이 값을 가져야하기에 그걸 가능하게 하는 Dependent type이 이슈가 되는 거임.


다른 예로 모나드는 일종의 DSL로 볼 수 있음. 일반적인 C패밀리는 함수 본체에서 어떤 함수든지 실행할 수 있지만, 하스켈은 (IO 모나드가 아닌 한) 모나드 레이어에서 제공하는 기능밖에 쓸 수 없음. 즉 함수 호출 금지가 가능하고, 일종의 XML처럼 되는 거임. 이걸로 뭐가 가능하냐면……

UI 디자이너를 생각해보자. 클래스 생성자에 메시지박스 코드를 넣으면 WPF XAML 에디터에서 편집할 때 메시지 박스가 뜨는 걸 본 적이 있음. 잠재적으로 위험한 동작이지. 문제는 이걸 문법적으로 막을 수단이 없음. 하스켈이었다면, UI 컴포넌트 조작만 하는 순수한 연산만 받는 게 가능하지.

아니면 안드로이드 앱을 짤 때, 어떤 권한은 요청하지 않았으므로 컴파일 타임에서 문제가 있다고 오류를 뿜뿜할 수도 있겠지. 자바나 코틀린은 어노테이션이랑 컴파일러 플러그인 떡칠을 해서 해결하지만, 이걸 순수 타입시스템으로 해결하고 싶다는 생각이랄까.


요컨대, 하스켈 자체보다 가능성을 보고있다고 생각할 수 있을 듯. 그래서 연구용 언어라고 부르고.


하스켈은 내가 보기엔 이상주의자들의 언어임. 각각의 문법을 보면 흠잡을 게 그닥 없음. 근데 합쳐놓고 보니까 별로 쓸만한 게 못 될 뿐. 하스켈을 실제로 쓰는 사람들은 심각한 빠요엔이니 따라하면 안 됨. 하스켈의 장점보다 단점을 열거하는 게 더 쉬움.