Haskell의 Data.Typeable은 무엇입니까?
Haskell에 대한 참조를 Data.Typeable
보았지만 내 코드에서 왜 그것을 사용하고 싶은지 명확하지 않습니다.
어떤 문제를 어떻게 해결합니까?
Data.Typeable
범용 유형을 사용하여 정적으로 유형이 지정된 언어로 지연된 (동적) 유형 검사를 구현하는 잘 알려진 접근 방식 (예 : Harper 참조)의 인코딩입니다 .
이러한 유형은 이후 단계까지 유형 검사가 성공하지 못하는 코드를 래핑합니다. 잘못된 형식으로 프로그램을 거부하는 대신 컴파일러는 런타임 검사를 위해 프로그램을 전달합니다.
이 스타일은 Abadi et al.에서 시작되었으며 모든 동적 유형을 나타내는 래퍼로 Cheney와 Hinze가 Haskell을 위해 개발했으며, Typeable
클래스는 SPJ와 Lammel의 SYB 작업의 일부로 나타납니다.
참고
- Martín Abadi, Luca Cardelli, Benjamin Pierce 및 Gordon Plotkin, " 정적으로 형식화 된 언어의 동적 타이핑 ", 프로그래밍 언어 및 시스템에 대한 ACM 트랜잭션 (TOPLAS), 1991.
- James Cheney 및 Ralf Hinze, " 제네릭 및 역학의 경량 구현 ", Haskell '02 : 2002 년 Haskell의 2002 ACM SIGPLAN 워크숍 절차.
- Lammel, Ralf and Jones, Simon Peyton, " 상용구 스크랩 : 일반 프로그래밍을 위한 실용적인 디자인 패턴 , TLDI '03 : 2003 ACM SIGPLAN International Workshop on Types in Languages Design and Implementation, 2003
- Harper, 2011, 프로그래밍 언어를위한 실용적인 기초.
교과서에서도 : 동적 유형 (입력 가능한 표현 포함)은 Harper ch 20이라는 한 유형 만있는 정적으로 유형이 지정된 언어입니다.
20.4 Untyped는 Uni-Typed를 의미합니다.
유형이 지정되지 않은 λ- 미적분은 재귀 유형이있는 유형이 지정된 언어에 충실하게 삽입 될 수 있습니다. 즉, 모든 유형이 지정되지 않은 λ-term은 λ-term의 표현 실행이 용어 자체의 실행에 해당하는 방식으로 유형이 지정된 표현으로 표현됩니다. 이 삽입은 하지 ℒ {+ × ⇀μ} (우리가 확실히 할 수있는)에서 λ 미적분에 대한 통역을 쓰기의 문제가 아니라 재귀 종류의 언어로 입력 한 표현으로 지정되지 않은 λ-용어의 직접적인 표현 .
핵심 관찰은 유형 이 지정되지 않은 λ- 미적분은 실제로 단일 유형의 λ- 미적분이라는 것입니다! 힘을주는 것은 유형 의 부재 가 아니라 재귀 유형이라는 하나의 유형 만 가지고 있다는 것입니다.
D = µt.t → t.
무엇보다도 이름 지정 유형을 허용하는 라이브러리입니다. 유형 a
이 선언 Typeable
되면 show $ typeOf x
where x
is any value of type을 사용하여 이름을 가져올 수 있습니다 a
. 또한 제한된 유형 캐스팅을 제공 합니다.
(이것은 C ++의 RTTI 또는 동적 언어의 반영과 다소 유사합니다.)
Data.Typeable
Haskell과 유사한 라이브러리에 대한 가장 빠른 설명 중 하나는 1992 년 John Peterson의 것입니다. http://www.cs.yale.edu/publications/techreports/tr1022.pdf
실제 Data.Typeable
라이브러리 를 소개 한 것으로 알고있는 가장 초기의 "공식" 문서는 2003 년의 첫 번째 Scrap Your Boilerplate 문서입니다. http://research.microsoft.com/en-us/um/people/simonpj/Papers/hmap/index.htm
여기 누군가가 함께 할 수있는 개입 된 역사가 많이 있다고 확신합니다!
Data.Typeable 클래스는에 제네릭 프로그래밍에 주로 사용되는 스크랩 귀하의 상용구 (SYB) 스타일. Data.Data 도 참조하십시오.
아이디어는 SYB가 다양한 사용자 생성 유형에 대해 균일 한 방식으로 인쇄, 계산, 검색, 대체 등과 같은 작업을 수행하기위한 컬렉션 결합자를 정의한다는 것입니다. Typeable
typeclass 필요한 배관을 제공합니다.
최신 GHC에서는 deriving Data.Typeable
필요한 인스턴스를 제공하기 위해 자신의 유형을 정의 할 때 말할 수 있습니다 .
참고 URL : https://stackoverflow.com/questions/6600380/what-is-haskells-data-typeable
'Program Tip' 카테고리의 다른 글
MongoKit vs MongoEngine vs Flask-MongoAlchemy for Flask (0) | 2020.10.27 |
---|---|
새 창이 아닌 새 탭에서 링크를 열려면 어떻게해야합니까? (0) | 2020.10.27 |
Jenkins 편안한 API 참조는 어디에서 찾을 수 있습니까? (0) | 2020.10.27 |
+ = new EventHandler (Method) vs + = Method (0) | 2020.10.27 |
대용량 Java 힙 덤프 분석 도구 (0) | 2020.10.27 |