2012-08-22 5 views
30

HList package은 현재까지의 내용을 기반으로합니다. 고대 하스켈 기술. 간단한 질문은 Haskell/GHC 개발의 지난 8 년 동안의 놀라운 새로운 기능을 감안할 때 "현대적인"HList는 매우 다르게 구축 될 것인가? 여기에 대한 대답은 아니요 일 수 있다는 것을 알고 있습니다. HList의 특별한 경우에 사용 된 기술은 여전히 ​​가장 우아한 해결책을 제시합니다."현대"HList?

extensible records 페이지에 문서화 된 항목이 많습니다. 실제 경쟁 업체 (즉, hackage에서 사용할 수있는 라이브러리로 구현 된 것)가 records package입니다. 또는 extensible records 링크가 누락 되었습니까?

답변

11

이러한 패키지에 대한 질문은 그 목표의 범위입니다. HList는 실제로 레이블의 5 가지 구현, 유형 평등 중 두 가지, 형 변환 중 두 가지, Record/RecordP 중 두 가지 및 Variant 대 TIC 선택 중 하나입니다. 모두 유사하지만 사용 편의성, 이식성 및 확장 성의 다른 절충점입니다.

최신 GHC 기능 (GADT, 관련 유형, 제한 유형, 다형성 유형, 단독 유형)은 약간 다른 트레이드 오프를 허용 할 수 있습니다. 특히 싱글 톤 유형은 더 나은 레이블을 허용 할 수 있으며 다형성 유형은보다 우아한 유형/데이터/제네릭을 허용 할 수 있습니다.

당신이 링크를 "기록"패키지가 주장하는 "종류"패키지에 따라

:.

"하스켈은 subkinds 및 subkind 다형성에 대한 지원이 없습니다 그러나,이 패키지는 subkinds를 에뮬레이트 할 수 있습니다 종류 * 및 하위 변수. "

그러나 새로운 GHC 버전에서 데이터 형식을 종류로 승격하면 더 이상 사실이 아닙니다. 따라서 2012 년 1 월 패키지는 현재는 쓸모가 없을 수도 있습니다.

레코드의 경우 최신 시스템 인 lens 및/또는 lens-family의 새로운 다형성 렌즈를 사용하는 것이 좋습니다.

+2

저는 오늘 아침 Russell (O'Connor)과 렌즈와 확장 가능 레코드 사이의 관계에 대해 논의하고 있었으며 명확하지 않습니다. 렌즈는 집계에서 단일 필드의 가져 오기/설정을 추상화하는 데 적합하지만 집계 자체를 표현하는 데는 적합하지 않습니다. 어쨌든 나는 HList (지금은)를 고수해야하고, 변종 중 zillions 중 어느 것이 손에있는 문제를 처리해야 하는지를 찾으려고 노력한다. (이것은 다형성을 사용하는 O'Caml 코드를 번역하는 것이다. Haskell에 대한 변형 및 행 유형 및 Functor). –

+2

최근에 HList에서 영감을 얻은 것입니다 : TIP (type-indexed-coproduct) 일과 {하나의 사례에 대한 핸들러}가 {핸들러의 결과} 또는 {더 작은 유형의 팁} . > =>와 함께 핸들러를 연결하면 TIP가 대소 문자가 줄었습니다. 당시에는 패턴이 일치하는 시뮬레이션 된 패턴을 다형성 변형으로 생각했습니다. –