문제

Haskell에서 파생 인스턴스로 작업 할 때 임의의 유형에 대한 기능을 도출 할 수 있습니까? 아니면 특정 기능으로 제한됩니까?

도움이 되었습니까?

해결책

Haskell 98 : EQ, Ord, Enum, IX, Bounded, Read 및 Show에서 다음 클래스의 인스턴스를 도출 할 수 있습니다.

GHC 확장을 사용하면 유형성, 데이터, untctor, 접을 수 있고 가로 질 수있는 다음 클래스의 인스턴스를 도출 할 수도 있습니다. 또한 새로운 유형이 구현 유형에서 인스턴스를 도출 할 수있는 GHC 확장 기능도 있습니다.

Haskell이 해당 클래스에 대한 특별한 지식없이 필요한 기능을 생성하는 방법을 모르는 간단한 이유 때문에 임의의 클래스 사례를 도출 할 수 없습니다.

다른 팁

컴파일러가 자신을 위해 도출하는 방법을 알고있는 측면에서 특정 클래스로 제한됩니다. 사전 처리기 또는 템플릿 Haskell을 사용하면 특정 유형에 대한 기능 구현을 산출하는 일반적인 접근 방식을 알고 있다면 새로운 파생 메커니즘을 코딩 할 수 있습니다.

다른 두 대답은 정확합니다. 그러나 더 필요한 경우 해킹에 더 많은 것을 처리 할 수있는 몇 가지 패키지가 있습니다. 좋아요 Data.Derive 소스 코드를 직접 생성 할 수 있으므로 (호환성을 위해) 템플릿 haskell에 연결하여 컴파일 시간에 수행 할 수 있기 때문입니다. 광범위한 클래스가 이미 지원되었으며 자신의 지원을 추가하기가 매우 쉽습니다. 요약 : 망할 좋은 도서관을위한 광고 피치 :-)

Don의 답변에 추가하려면 : 데이터 유형에 대한 사용자 정의 기능을 도출하는 것은 일반 프로그래밍 그리고 A가 있습니다 많은 문학 이것에 관해서. 사전 처리기 및 템플릿 Haskell은 유일한 솔루션이 아닙니다. 다른 옵션에 대한 문헌 목록에 대한 개요 논문 중 하나를 참조하십시오.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top