나무모에 미러 (일반/어두운 화면)
최근 수정 시각 : 2024-09-20 23:07:39

Haskell

하스켈에서 넘어옴

파일:하위 문서 아이콘.svg   하위 문서: Haskell/문법
, Haskell/하스켈로 만든 프로그램
, Haskell/특징
, Haskell/학습
, Haskell/하스켈을 쓰는 회사
, Haskell/개발 환경
#!wiki style="display: inline; display: none;"
, }}}
프로그래밍 사이트 선정 프로그래밍 언어 순위 목록
{{{#!wiki style="margin: 0 -10px -5px; word-break: keep-all"
{{{#!wiki style="display: inline-table; min-width: 25%; min-height: 2em;"
{{{#!folding [ IEEE Spectrum 2024 ]
{{{#!wiki style="margin: -5px 0"
<rowcolor=#fff> 스펙트럼 부문 상위 10개 프로그래밍 언어 직업 부문 상위 10개 프로그래밍 언어
1 Python 1 SQL
2 Java 2 Python
3 JavaScript 3 Java
4 C++ 4 TypeScript
5 TypeScript 5 SAS
6 SQL 6 JavaScript
7 C# 7 C#
8 Go 8 HTML
9 C 9 Shell
10 HTML 10 C++
}}}
}}}
}}}
[ Stack Overflow 2024 ]
||<tablewidth=100%><width=9999><-4><bgcolor=#FFA500><tablebgcolor=#fff,#222> 2024년 Stackoverflow 설문조사 기준 인기 상위 25개 프로그래밍 언어 ||
1 JavaScript 14 Rust
2 HTML, CSS 15 Kotlin
3 Python 16 Lua
4 SQL 17 Dart
5 TypeScript 18 어셈블리어
6 Bash 19 Ruby
7 Java 20 Swift
8 C# 21 R
9 C++ 22 Visual Basic
10 C 23 MATLAB
11 PHP 24 VBA
12 PowerShell 25 Groovy
13 Go
[ TIOBE 2024 ]
||<tablewidth=100%><width=9999><-4><bgcolor=deepskyblue><tablebgcolor=#fff,#222> 2024년 8월 기준 검색어 점유율 상위 20개 프로그래밍 언어 ||
1 Python 11 MATLAB
2 C++ 12 Delphi / Object Pascal
3 C 13 PHP
4 Java 14 Rust
5 C# 15 Ruby
6 JavaScript 16 Swift
7 SQL 17 Assembly language
8 Visual Basic 18 Kotlin
9 Go 19 R
10 Fortran 20 Scratch
{{{#!wiki style="margin: 0 -10px -5px; min-height: calc(1.5em + 5px);"
{{{#!folding [ 21위 ~ 50위 펼치기 · 접기 ]
{{{#!wiki style="margin: -5px -1px -11px"
21 COBOL 36 Scala
22 Classic Visual Basic 37 Transact-SQL
23 LISP 38 PL/SQL
24 Prolog 39 ABAP
25 Perl 40 Solidity
26 (Visual) FoxPro 41 GAMS
27 SAS 42 PowerShell
28 Haskell 43 TypeScript
29 Dart 44 Logo
30 Ada 45 Wolfram
31 D 46 Awk
32 Julia 47 RPG
33 Objective-C 48 ML
34 VBScript 49 Bash
35 Lua 50 Elixir
}}}}}}}}} ||
[ PYPL 2024 ]
||<tablewidth=100%><width=9999><-4><bgcolor=green><tablebgcolor=#fff,#222> 2024년 8월 기준 검색어 점유율 상위 20개 프로그래밍 언어 ||
1 Python 11 Objective-C
2 Java 12 Go
3 JavaScript 13 Kotlin
4 C# 14 MATLAB
5 C/C++ 15 PowerShell
6 R 16 VBA
7 PHP 17 Dart
8 TypeScript 18 Ruby
9 Swift 19 Ada
10 Rust 20 Lua

}}} ||
프로그래밍 언어 목록 · 분류 · 문법

main = putStrLn "Hello, world!"
하스켈
Haskell
파일:Haskell 로고.svg파일:Haskell 로고.svg
최초 공개 1990년 4월 1일 ([age(1991-02-20)]년 전)
최신 버전 GHC 9.10.1 (2024년 5월 10일 릴리즈)
파일:홈페이지 아이콘.svg
1. 개요2. 등장배경과 역사3. 특징4. 수학과의 관련성
4.1. 수학 알면 좋다.4.2. 관련은 있지만 몰라도 된다.4.3. 정리
5. 모토6. 어록7. 밈8. 안 써요
8.1. 어떤 언어로도 포트란을 쓸 수 있다.8.2. 언어 자체에 대한 비판8.3. 어려운 재귀8.4. 프로그래밍 입문으로 부적절8.5. 그래도 쓰는 곳8.6. 기타
9. 하스켈로 만든 프로그램10. 하스켈을 쓰는 회사11. 예제12. 문법13. 학습14. 주요 라이브러리 함수
14.1. head
15. 개발 환경16. 로고17. GHC 확장18. 영향 받은 언어 목록19. 여담20. 외부 링크

[clearfix]

1. 개요


하스켈은 순수 함수형 프로그래밍 언어이다.(정확히는 디버깅 용도를 위해 존재하는, 일반적으론 쓰면 안 되는 함수를 제외하면 순수하다.) I/O와 같이 필요한 경우가 아니면 부작용이 없는 순수 함수로만 만들어졌다.

가장 많이 쓰이는 하스켈 컴파일러로는 GHC(Glasgow Haskell Compiler)가 있으며, 여기에 패키지 매니저를 추가한 플랫폼이 Stack이다. Stack을 설치하면 GHC도 함께 설치되기 때문에, 특별한 이유가 없을 경우 Stack을 설치하면 된다.

최근에는 설치 프로그램으로 GHCup을 많이 사용한다.

하스켈 로고는 람다대수에서의 λ와 모나드에 사용하는 bind 연산자인 >>=를 겹쳐놓은 이미지다.

2. 등장배경과 역사

하스켈 보고서 버전 표
버전 출시일 쪽수
1.0 1990년 4월 125
1.1 1991년 8월 153
1.2 1992년 3월 164
1.3 1996년 5월 140[1]
1.4 1997년 4월 139 + 73
98 1999년 2월 150 + 89
98 개정판 2002년 12월 260
2010 2010년 4월 329
하스켈은 1985년 등장한 느긋한 계산으로 작동하는 함수형 언어 미란다[2]의 뒤를 이어, 상용 프로그래밍 언어 따위가 순수 함수형 언어를 대표하는 것이 마음에 안 드는 함수형 언어와 컴퓨터 아키텍처 연구 학술회에서 1987년부터 설계를 시작했다.(원래는 미란다를 직접 계승하려고 했는데 미란다 제작자인 데이비드 터너가 반대해서 바닥부터 만들었다.)[출처]

언어의 이름인 하스켈은 논리학자 하스켈 브룩스 커리(Haskell Brooks Curry)의 이름에서 가져왔다.[4]

목표는 순수 함수형 프로그래밍 언어의 원형을 정의하는 것으로 학술 조직이 주도한 언어답게 디자이너가 다 타려면 미니 버스가 필요할 정도로 많고, 개발 속도는 티스푼 공사만큼이나 느리다는 특징이 있었다(...).

하여간 최초 논의로부터 3년 뒤인 1990년 4월 1일[5], 1.0 버전[6]의 보고서가 발표되었고, 1.1 ~ 1.4 버전을 거쳐, 1999년에 가장 널리 알려진 버전인 하스켈 98 보고서가 나왔다.[7]

2003년, 하스켈 98 보고서의 개정판이 나왔지만 개념적으로 바뀐 사항은 없고, 일부 작은 오류에 대한 수정과 애매한 표현 등을 다듬은 정도였다. 즉 언어의 개정판이 아니라 어디까지나 보고서의 개정판.[8]

2021년 시점에서 최신 정의는 여전히 하스켈 2010이다.[9] 다만 하스켈 2010 역시 그리 바뀐 것은 없다.

2016년 4월 Haskell 2020 위원회가 출범[10]했지만 Haskell 2020은 결국 나오지 않았고 위원회도 좌초된 상황.

하스켈 2010 이후의 발전은 컴파일러인 GHC 차원의 기능 확장에 의존하고 있다. 일반적으로는 이와 반대로 언어가 먼저 만들어진 뒤 컴파일러가 언어를 구현한다.

GHC 9.10.1부터 GHC2024를 지원한다.[11]

2024년 9월 이탈리아 밀란에서 열린 국제 함수형 프로그래밍 컨퍼런스[12]에서 사이먼 P. 존스가 GHC 개발 현황에 대해 발표했다.[13]

3. 특징

파일:상세 내용 아이콘.svg   자세한 내용은 Haskell/특징 문서
번 문단을
부분을
참고하십시오.

4. 수학과의 관련성

위의 내용을 읽어 보았다면 알겠지만 각종 수학 이론을 이용해서 언어를 만들어 보자는 의도로 만들어진 언어이므로 수학과의 관련성은 어느 정도 있다. 그렇다고 해서 하스켈로 프로그래밍을 하기 위해 기저의 수학을 잘 알고 있어야 하는 것은 아니며, 실제로도 많은 하스켈 프로그래머들이 하스켈의 바탕이 되는 전공수학 및 논리를 따로 배우지 않고도 능히 현업에 종사하고 있다. 알면 도움되지만, 모른다고 해서 문제가 되는 것은 아니다. 쉽게 생각하면 한없이 쉽고 어렵게 생각하면 한없이 어려워진다고 보는 것이 맞다.

4.1. 수학 알면 좋다.

프로그래밍을 수학, 특히 수리논리에서 배운 사람은 보통 람다대수(λ-calculus) 혹은 class of recursive functions라는 함수체계를 통해 배운다. 당연히 이 시스템도 부작용은 전혀 없으며 (말 그대로 수학의 함수이다.) 심지어 built-in 조건문이나 루프문도 없다. 하지만 수학답게(?) 여러가지 트릭으로 존재하는 알고리듬은 모두 표현이 가능하다. 하스켈에도 람다대수가 어느 정도 반영되어 있으며, 아예 λ식이라는 개념도 있다.(사실 하스켈뿐 아니라, 모든 함수형 언어의 이론적 기반이 람다대수라고 봐도 과언은 아니다.) 함수형 언어 하면 재귀부터 떠올리게 마련이고, 재귀에만 어느정도 익숙해지면 문제가 없을 것 같은 상상을 하는 경우가 많은데, 재귀보다 마스터하기 어려운 것이 람다대수의 η-reduction과 partial application을 이용한 여러 가지 트릭들이다. 보통 함수를 정의할 때 x, y 등의 파라미터(parameter)를 명시하는데, η-reduction과 partial application을 사용하면 많은 경우 저런 파라미터를 명시적으로 작성하지 않고 함수 기호만 갖고 함수를 정의하는 게 가능해진다(point-free). 또한, (익숙한 사람들에 한해서) 상당히 직관적이며 코드 길이도 괴상할 정도로 축약되는 경우가 많아 유용성도 꽤 되는편이지만, 익숙하지 않은 프로그래머의 눈에는 거의 암호문이 되어버리므로, 함수형 언어를 사용하려면 제대로 알아두는 것이 좋다.

4.2. 관련은 있지만 몰라도 된다.

하스켈에서 사용하는 타입 시스템은 inductive structure[14]를 가지므로, 수학에서 사용되는 type theory와 보다 유사하다. 하스켈의 끝판왕이라 불리는 monad 역시 수학의 category theory에서 가져왔으며, Co- 로 시작되는 여러가지 개념들도 역시 수학에서 쓰이는 것들이다.[15] 그리고 가장 중요한 함수형 구조 자체가 위에 언급한 수학에서 알고리듬을 표현할 때 자주 쓰인다. 덕분에 수학(수리논리)과 친근하다면 함수형 언어가 결코 낯설지 않을 것이나, 모른다면 익숙해지기까지 진입 장벽도 은근히 높은 편이고 언어를 깊게 이해하기도 상당히 힘들어진다. 다만, 언어 자체에 대한 깊은 이해가 없더라도 프로그래밍을 하기에 큰 무리는 없으므로 부담을 갖지는 말자. 애초에 C++Java 같은 곳에 사용되는 컨셉들도 이론적으로 깊게 들어가면 수학 이상으로 충분히 복잡하다. 하지만 프로그램을 만들려는 목적으로 그런 이론들을 잘 알지 못하고 개발을 한다고 해도 결과물을 만들어 낼 수 없는 것은 아니다. 물론, 여기에는 각 언어 제작자들이 최대한 관련 지식 없이 직관적으로 프로그래밍이 가능하도록 디자인을 하는 것도 한몫한다. 하스켈 역시 저런 이론적인 내용이 아니라, 함수형 표현이나 재귀 등에 익숙해지는 것이 관건이다.

4.3. 정리

정리하자면, 컴퓨터의 탄생에는 20세기 초반의 수리논리학의 개념들이 영향을 주었는데, 하스켈은 더 나아가서 20세기 후반 이후[16]의 수학 및 수리논리학의 개념들까지 이용하고 있다고 보면 된다.(정적 타입 함수형 프로그래밍을 입문할 때 처음 배우는 기본 타입클래스 중 하나인 Applicative Functor가 2008년이 되어서야 수학적으로 발견되었을 정도이다.)

5. 모토

Avoid success at all costs.
Simon Peyton Jones
하스켈의 비공식적 모토로 널리 알려진 발언이다. 두 가지로 해석할 수 있다.

본래 의도한 의미는 Avoid (success at all costs)이고, 직역하면 '모든 비용 면에서 성공하는 것을 피해라.'이다. 좀 더 풀어서 말하면 '(언어의) 성공을 위해 모든 것을 타협하려고 하지 마라.'는 뜻이다. 인기와 범용성을 위해 안전함, 표현력, 효율성 등 하스켈이 가진 특징을 희생해서는 안 된다는 의미.

다르게는 '수단과 방법을 가리지 말고 성공을 피해라.'라는 의미도 된다.

6. 어록

하스켈 프로그램은 일단 컴파일 되기만 하면 잘 동작할 것이다.
If a Haskell program compiles, it probably works.
출처 미상
모나드는 부리토다.
Monads are Like Burritos.
Brent Yorgey[17]
"마스터 요다, 제 하스켈 프로그램이 너무 느립니다!"
"포스(force)를 써라, 루크!"
하스켈 위키
하스켈은 정말 많은 언어들의 발전을 이끌어 왔습니다. 그리고 앞으로도 계속 그럴 것이라고 확신합니다.
Haskell has pushed so many languages forward. And I'm sure it will continue do so.
마티아스 빌만[18]
하스켈은 쓸모없다.
Haskell is useless.
사이먼 P. 존스[19]
하스켈은 세계 최고의 명령형 프로그래밍 언어이자, 두 번째로 좋은 함수형 언어이다.
Haskell is, in my view, the world’s best imperative programming language, and second-best functional language.
로버트 하퍼[20]
사실, 하스켈은 자신의 이름을 별로 좋아하지 않았어요.
You know, Haskell actually never liked the name Haskell.
하스켈 커리의 부인 버지니아 커리[출처]

7.

파일:Haskell.jpg
Haskell 팬들에게 Java는 덩치만 크고 무너지기 쉽고, C는 포인터 잘못 다뤘다간 터지는 시한폭탄 같고, PHP는 사고가 터지면 대형참사급이고, Ruby는 동적 타입 언어이니 까 보기 전까지는 모른다고 인식된다는 것. 반면에 Haskell은 전체적으로 인식이 천재 아인슈타인. LISP는 뭐...

8. 안 써요

파일:haskellxkcd.png[22]

인기는 두말할 것도 없이 바닥이다. 표현력이 좋고, 코드가 간결하며, 알고리즘의 구현이 직관적이고, 부작용이 없고, 동시성이 보장되는 건 좋은데 애초에 함수형 언어라는 게 일반적인 프로그래밍 언어와 체계가 너무나 달라서 쉽게 익숙해지기도 어렵고 현실적으로 사용하기 어려운 점이 많다. 그 결과로 시도하는 사람 자체가 적어서 잘 아는 사람이 많지 않으니 사용 예가 적고, 사용 예가 적으니 배우려는 사람이 적다... 의 무한 반복.
[x^2 | x <- [1..]]
당장 개중에 쉬운 편에 속하는 위의 무한 제곱 리스트 코드도 LISPErlang을 공부한 사람이 아닌 이상 별다른 학습 없이 이해하기가 어렵다. 그나마 LISP가 함수형 언어 중에서 비중이 크다 보니 상당히 밀리고, 산업계에서는 Java와 호환되며 OOP도 지원하는 Scala가 함수형 언어로서 훨씬 인기를 끌고 있다.

8.1. 어떤 언어로도 포트란을 쓸 수 있다.

어떤 언어로도 포트란을 쓸 수 있다.
You can write Fortran in any language.
오래된(?) 프로그래밍 격언
포트란은 최초의 (명령형)하이레벨 언어로 여겨지는 프로그래밍 언어인데, 오늘날 세대에게는 보통 C 언어가 저 위치에 들어간다. 말하자면, 엄청나게 많은 기능을 탑재해서 거의 새로운 언어라고 봐도 될 정도인 C++에서도 그런거 깡무시하거나 아주 기본적인 구색만 맞춰놓고 실상은 C 식으로 코딩을 하는 사람이 많고, 역시 마찬가지로 큰 혁신을 가져왔던 Java에서도 그냥 C 식으로 코딩을 하는 프로그래머가 많다는 소리다.(이를 시쳇말로 '씨자바'라고 한다.) 바꿔말하면, 대부분의 프로그래머들은 하스켈이나 기타 다른 패러다임의, C 식으로 코딩이 불가능한 언어는 거들떠도 보지 않는다는 소리. 사실 여러 가지 다 고려하면서 '제대로' 프로그래밍하는 것과 대충 돌아가게만 하는 것과의 난이도 차이는 상상을 초월할 정도로 크지만, 대부분 오너의 눈에는 들어가는 비용만 크게 보이고 실제 프로그램은 그냥 돌아가기만 하면 별반 차이가 없어 보이니 당연한 결과라 하겠다.

8.2. 언어 자체에 대한 비판

역시 함수형 언어인 SML의 저자인 Robert Harper가 정면으로 나서 비판을 하였다.[23][24] Laziness와 Type class 시스템에 대한 비판인데, 흥미가 있는 사람은 직접 읽어보자. 다만, 이 사람은 CS 교수이면서 관심분야는 proof theory, category theory 등 수리논리 쪽으로 쏠려있어, 수리논리 전공으로 꽤 지식을 갖고 있어야 이해가 가능하다는게 함정. 물론 CS 자체를 응용수리논리학으로 보는 사람들도 있을 정도로 한 걸음만 넘어가면 부딪히는 가까운 분야이기는 하다.

8.3. 어려운 재귀

게다가 함수형 언어에서 자주 사용되는 재귀문은 루프문에 비해 코드를 짧고 간결하게 만들어 가독성을 높여주는 장점이 있지만, 그 재귀코드를 짜는 것은 상당한 두뇌노동을 필요로 하는 단점도 있다.(수학에서 아름답고 간단한 공식일수록 탄생하는 과정(증명)은 괴로운 경우가 많은 것과도 어느정도 상통한다.) 이도 물론, 재귀코드에 많이 익숙해지면 어느정도 해결될 문제기는 하지만 아무리 그래도 일반적인 Procedural language처럼 아무 생각 없이 일단 써내려가고 실행-디버깅으로 완성하는 방식은 불가능하다. 사실 서로 재귀(Mutual recursion)와 간접 재귀(Indirect recursion)를 자연스럽게 생각하며 쓸 수 있다면, 그냥 써내려가면서 그때그때 테스트 돌리며 프로그램을 짤 수 있다. 그게 가능하게 뇌개조를 시키는 것이 문제일 뿐. 혹자는 프로그램 구조를 완전히 머릿속에 디자인한 후에야 코딩이 가능한 재귀코드가 오히려 프로그래밍 습관에 도움이 된다고 하지만, 이미 C/C++/Java 등에 익숙한 사람들에게는 오히려 커다란 진입장벽이 될 뿐이다.

8.4. 프로그래밍 입문으로 부적절

가끔 대수기하학이나 호몰로지 대수, 또는 수리논리학 같은 대학원 테크트리를 밟는 수학과 대학원생들이 범주론을 공부하다가 이 물건을 건드리며 주화입마 입덕하는 경우도 있지만, 애초에 수학 전공자들도 소프트웨어 개발 직군으로의 취업을 염두에 두고 진득하게 프로그래밍을 공부한다면 수리논리학으로 접근하게 되는 Haskell을 건드리느니 차라리 머리를 비우고 Python, JavaScript 같은 일자리 구하기에 좋은 테크트리로 첫걸음을 떼는 것이 적절하기 때문에 Haskell을 통한 소프트웨어공학 입문은 딱히 권장되지는 않는 편이다.

8.5. 그래도 쓰는 곳

그나마 코드에 수학적인 요소가 많고, 코어는 넘쳐나는 High Frequency Trading Firm 같은 금융계에서 소규모적으로 쓰는 정도.

그 외에 프로페셔널한 목적보다는 프로그래밍 자체를 좋아하는 애호가 혹은 C/C++/Java 등을 메인 언어로 사용하는 프로그래머들이 함수형 언어 혹은 함수형 패러다임에 대한 컨셉을 이해하기 위해 자주 선택하는 언어이다.

수학과 관련성이 높기 때문에 논리학과 프로그래밍의 상관관계 및 타 언어에 비해 흥미로운 백그라운드 이론들이 많이 존재하며 재미있는 트릭도 많이 적용 가능하고, 수학적인 관점에서 보다 아름다운(?) 코드를 만드는 것이 가능하기 때문이다.

무엇보다 현재 등장한 메이저 함수형 언어 중에선 가장 엄격하게 함수형 패러다임을 따르는 언어이기 때문에 좀 색다른 것을 추구하는 프로그래머들도 많이 찾는다.(산업계 쪽을 중시하는 타 함수형 언어들은 Imperative/OOP 등도 첨가하여 묘하게 짬뽕된 경향이 강한데 반해, 하스켈은 보다 순수한 아카데믹 성향이 강하다.)

8.6. 기타

9. 하스켈로 만든 프로그램

파일:상세 내용 아이콘.svg   자세한 내용은 Haskell/하스켈로 만든 프로그램 문서
번 문단을
부분을
참고하십시오.

10. 하스켈을 쓰는 회사

파일:상세 내용 아이콘.svg   자세한 내용은 Haskell/하스켈을 쓰는 회사 문서
번 문단을
부분을
참고하십시오.

11. 예제

다음은 사용자 입력을 받아 인사말을 출력하는 하스켈 코드이다.
main = do
  name <- getLine
  putStrLn ("Hello " ++ name)

아래는 퀵 정렬 함수를 하스켈로 구현한 코드이다.[25]
qsort []	 = []
qsort (x:xs) = qsort small ++ mid ++ qsort large
  where
    small = [y | y<-xs, y<x]
    mid   = [y | y<-xs, y==x] ++ [x]
    large = [y | y<-xs, y>x]

12. 문법

파일:상세 내용 아이콘.svg   자세한 내용은 Haskell/문법 문서
번 문단을
부분을
참고하십시오.

13. 학습

파일:상세 내용 아이콘.svg   자세한 내용은 Haskell/학습 문서
번 문단을
부분을
참고하십시오.

14. 주요 라이브러리 함수

14.1. head

head :: [a] -> a
head []    = undefined
head (x:_) = x
head는 리스트를 넣으면 리스트의 첫 번째 요소가 나오는 함수이다. 인자로 빈 리스트를 넣으면 터진다.[26]

15. 개발 환경

파일:상세 내용 아이콘.svg   자세한 내용은 Haskell/개발 환경 문서
번 문단을
부분을
참고하십시오.

16. 로고

17. GHC 확장

GHC는 플래그가 너무 많아서 UN 깃발 수보다 많다.
GHC has more flags than the UN.
shapr[28]
GHC 확장(extension)은 하스켈 컴파일러 GHC에서 제공하는 추가 기능이다. 소스 코드 상단에 선언해서 확장을 사용할 수 있다. 예를 들어 FooBar라는 이름의 확장을 사용하려면 아래처럼 적는다.
{-# LANGUAGE FooBar #-}
GHCi 인터프리터에서 확장을 사용하려면 아래와 같이 입력한다.
:set -XFooBar
다음과 같은 목록 등이 있다. 확장의 종류가 너무 많아서 여기에 모두 적기는 곤란하다.
한편 언어 에디션(language edition)은 여러 GHC 확장의 묶음이다. 언어 에디션별로 지원하는 확장의 개수는 아래 표와 같다.[29]
에디션 확장 개수 GHC 버전
Haskell98 10
Haskell2010 7
GHC2021 47 9.2.1부터
GHC2024 54 9.10.1부터

18. 영향 받은 언어 목록

하스켈에게 영향을 받은 다른 프로그래밍 언어 목록은 다음과 같다.

19. 여담

20. 외부 링크


[1] https://wiki.haskell.org/Language_and_library_specification[2] 상업적으로 어느 정도 성공을 거두었다.[출처] https://www.microsoft.com/en-us/research/wp-content/uploads/2016/07/history.pdf[4] 참고로 이 아저씨의 퍼스트네임 뿐만 아니라 미들네임과 성을 가지고도 프로그래밍 언어가 나와있다.(...)[5] 일부러 만우절을 골라서 발표했다. 그 이후로도 하스켈 98 보고서나 관련된 책들을 만우절에 발표하곤 했다.[6] 당시에는 IO 처리에 악명 높은(?) 모나드 대신 Stream model이 사용되었다.[7] https://www.haskell.org/onlinereport/[8] https://www.microsoft.com/en-us/research/wp-content/uploads/2016/07/history.pdf 논문 5p[9] https://www.haskell.org/onlinereport/haskell2010/[10] https://mail.haskell.org/pipermail/haskell-prime/2016-April/004050.html[11] https://downloads.haskell.org/~ghc/9.10.1/docs/users_guide/9.10.1-notes.html[12] https://icfp24.sigplan.org/[13] https://www.youtube.com/live/1hrOpcQDG6c?t=13080s[14] 수학적 귀납법을 떠올리면 간단하다. 베이스가 되는 객체들이 있고, 그 객체들을 이용하여 A, B 가 타입이면 A→B 도 타입이다같은 정의를 주면, A 가 타입이면 A→A 가 타입이고, A→A 가 타입이면 (A→A)→A 혹은 (A→A)→(A→A) 가 타입이고...하는식으로 죽죽 나간다. 이런 정의를 inductive definition 이라 칭하며, 이런 시스템은 inductive structure 라고 한다. 가장 대표적인 예시는 당연히 자연수이다.[15] Co- 로 시작되는것들은 mathematical dual이라 하며, '대비되는 개념'정도로 이해할 수 있다. 예를 들어, data의 dual인 Codata, 재귀(recursion)의 dual인 Corecursion, 귀납의 dual인 Coinduction 등이 있다. dual을 구하는 방법은 그에 대한 정확한 수학적 정의를 논리식으로 풀어서 변환하는 방법이나 Category theory로 정의한 후, arrow의 방향을 바꿔서 얻어지는 경우가 많다.[16] 범주론이 대수학, 위상수학을 넘어 공리적 집합론에 버금가는 중요성을 갖는 수학기초론에 가까운 분야로 대두된 것은 아무리 빨리 잡아도 1960년대였다. 니콜라 부르바키가 현대수학을 집대성할 때에도 범주론을 적극적으로 써먹어야 하느냐 마느냐로 키배가 끊이지 않았던 시절이었으며, 현재도 범주론은 공업수학 같은 속성 코스가 아닌 수학과 학부 고학년생 내지는 대학원생들이 공부하는 고급과정에서나 처음 등판하는 내용이다.[17] https://byorgey.wordpress.com/2009/01/12/abstraction-intuition-and-the-monad-tutorial-fallacy/[18] https://www.wired.com/2015/09/facebooks-new-anti-spam-system-hints-future-coding/[19] https://youtu.be/iSmkqocn0oQ[20] https://existentialtype.wordpress.com/2011/04/09/persistence-of-memory/[출처] [22] https://xkcd.com/1312/[23] http://existentialtype.wordpress.com/2011/04/24/the-real-point-of-laziness[24] http://existentialtype.wordpress.com/2011/04/16/modules-matter-most[25] https://wiki.c2.com/?QuickSortInHaskell[26] https://x.com/ChShersh/status/1577966427843198976[27] https://wiki.haskell.org/Thompson-Wheeler_logo[28] https://wiki.haskell.org/QuotesPage[29] https://ghc.gitlab.haskell.org/ghc/doc/users_guide/exts/control.html[출처] https://www.microsoft.com/en-us/research/wp-content/uploads/2016/07/history.pdf[31] https://importantshock.wordpress.com/2007/08/21/haskell-curry-yes-i-dated-his-daughter/[32] https://chrisdone.com/posts/dijkstra-haskell-java/[출처]

분류