GHC Haskell 확장 프로그램을 사용해야합니까?


78

Haskell을 배우면서 실제 코드에 사용되는 언어 확장 이 많이 있음을 알 수 있습니다 . 초보자로서 사용법을 배워야합니까, 아니면 피해야합니까? 나는 그것이 Haskell 98과의 호환성을 깨고 코드를 거의 GHC로 제한한다는 것을 알았습니다. 그러나 Hackage에서 패키지를 찾아 보면 어쨌든 대부분의 패키지가 GHC 전용임을 알 수 있습니다.

그렇다면 언어 확장 사용에 대한 커뮤니티의 태도는 어떻습니까?

그리고 확장의 사용이 괜찮다면, "안전하게"사용할 수있는 확장 (다음 하스켈 표준의 일부가 될 가능성이있는 확장)과 대부분 "실험적인"확장을 어떻게 구별 할 수 있습니까? 예를 들어 -XDisambiguateRecordFields 가 훌륭하고 유용하다고 생각 하지만 향후 지원 될 가능성이 있습니까?


개인적으로이 호환성에 대해 걱정하지 않습니다. GHC는 너무 좋기 때문에 주류 (Haskellers) 준수를 거부하는 사람들에게도 주류입니다.
MasterMastic

답변:


70

없이 살기에는 너무 좋은 GHC 확장이 있습니다. 내가 가장 좋아하는 것 중에는

  • 다중 매개 변수 유형 클래스
  • 범위 유형 변수
  • 상위 유형
  • 일반화 된 대수 데이터 유형 (GADT)

이 중에서 정말 필수적인 것은 다중 매개 변수 유형 클래스입니다.

일부 GHC 확장은 매우 추측적이고 실험적이므로주의해서 사용하는 것이 좋습니다. 안정적이고 신뢰할 수있는 확장 프로그램을 식별하는 좋은 방법 은 Haskell 98의 후속 제품이되기를 희망하는 Haskell Prime 에 포함될 예정인지 확인하는 것입니다 .

두 번째로 Don Stewart의 제안 LANGUAGE은 소스 파일 의 pragma를 사용하여 모든 확장자를 표시해야한다는 것 입니다. 명령 줄 옵션을 사용하여 확장을 활성화 하지 마십시오 .


2
감사합니다! 확장을 활성화하는 명령 줄 옵션은 피하겠습니다.
sastanin

51

예, 적절하게 확장을 사용하십시오.

그러나 의도적 으로 활성화 해야합니다. 필요할 때만 활성화하십시오 . {-# LANGUAGE Rank2Types #-}(예를 들어) 를 통해 모듈 단위로이 작업을 수행합니다 .


19

일반적으로 사람들은 매우 유용하고 Haskell 98은 꽤 오래 되었기 때문에 GHC 확장을 상당히 많이 사용합니다. 최신 표준이 있으면 사람들은 그것에 충실하기 위해 더 많은 노력을 기울일 수 있습니다.

다음 표준에 대한 제안 상태는 여기 에서 확인할 수 있습니다 .


답변과 링크에 감사드립니다. 거절 된 제안은 피해야한다고 생각합니다.
sastanin

거부 이유는 상당히 광범위 할 수 있으므로 실제로 무언가를 사용하고 싶다면 세부 사항을 좀 더 자세히 살펴보십시오. 그러나 그것은 좋은 경험 법칙입니다.
GS-Monica에게 사과합니다.

5

여기에 다른 답변은 좋은 것입니다. GHC가 가장 인기있는 Haskell 컴파일러 인 것처럼 보이며 곧 변경되지는 않기 때문에 GHC 확장이 미래에 취약하지 않다고 덧붙일 것입니다 (*).

(*) "미래 보장"의 반대

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.