1 차 근사치로, 대부분의 다른 (약한 및 / 또는 단일 유형) 언어는 언어 수준 사이의 엄격한 언어 수준 묘사를 지원하지 않습니다.
- 제안 (예 : 유형)
- 증거 (즉, 우리가 원시 및 / 또는 기타의 세트에서 제안을 만들 수있는 방법을 프로그램 시연 고차 구조)
그리고 둘 사이의 엄격한 관계. 다른 언어가 제공하는 가장 좋은 보장은
- 입력 환경에 제한적인 제약이 주어 졌을 때, 당시 환경에 발생하는 모든 것들과 함께, 제한된 제약 조건으로 가치를 창출 할 수 있습니다. (전통적인 정적 유형, cf C / Java)
- 모든 구문은 동일한 유형입니다 (동적 유형, cf ruby / python)
참고하여 해당 유형 , 우리는 참조 제안 따라서 다음 단지 훨씬 더 많은 정보를 기술하는 일, 그리고 int 형 또는 부울을 . Haskell 에는 함수 의 침투 문화가 인수의 영향을 받음 - 예외는 없음 *.
좀 더 엄밀하게 말하면, 일반적인 아이디어는 모든 프로그램 구조에 대해 (직접적으로) 강건한 직관적 접근 방식을 시행함으로써 (즉, 우리가 구성 할 수있는 것만 증명할 수 있음) 그러한 기본 구조 세트를 제한한다는 것입니다. 우리가 가진 방식
- 모든 언어 기본 요소에 대한 엄격한 명제
- 프리미티브를 결합 할 수있는 제한된 메커니즘
하스켈 건축은 그들의 행동에 대한 추론에 매우 적합합니다. 을 A
암시 하는 증명 (읽기 : 함수)을 구성 할 수 있다면 다음 B
과 같은 매우 유용한 속성이 있습니다.
- 그것은 항상 (긴 우리가이만큼 보유
A
, 우리가를 구성 할 수 있습니다 B
)
- 이 의미는 의지 만 에
A
, 그리고 아무것도 다른.
따라서 지역 / 글로벌 불변량에 대해 효과적으로 추론 할 수 있습니다. 원래 질문으로 돌아가려면; 이 사고 방식을 가장 잘 활용하는 Haskell의 언어 기능은 다음과 같습니다.
- 명시 적 구성으로 효과의 순도 / 분할 (효과는 모두 설명되고 입력됩니다!)
- Haskell 컴파일러의 타입 추론 / 확인
- 프로그램이 입증하기 위해 제안 / 유형에 제어 및 / 또는 데이터 흐름 불변을 포함시키는 기능 : (다형성, 유형 가족, GADT 등)
- 참조 무결성
하스켈 만의 독특한 것은 없습니다 (이러한 아이디어 중 상당수는 엄청나게 오래되었습니다). 그러나 표준 라이브러리 (일반적으로 유형 클래스에서 발견됨)의 다양한 추상화 세트, 다양한 구문 레벨 당화 및 프로그램 설계의 순도 에 대한 엄격한 헌신 과 결합되면 결국 우리는 둘 다가 될 수있는 언어로 끝납니다 실제 응용 프로그램 에는 충분히 실용적 이지만 동시에 대부분의 전통적인 언어에 대해 추론하기가 더 쉽습니다.
이 질문은 충분히 깊은 답을 얻을 수 있으며,이 맥락에서 정의를 할 수 없었습니다. 위키 백과 / 문헌에 대한 자세한 내용을 읽어 보길 권한다.
* NB : 나는 논쟁을 복잡하게 만드는 Haskell의 불순물 (예외, 비 종료 등)의 까다로운 측면을 무시하고 무시하고 있습니다.