2010-07-31 6 views
6

필자가 직면 한 함수 종속성의 예는 container -> elementarguments -> result (Mult Matrix Vector Vector에서와 같이) 매핑으로 요약됩니다. 그것들은 타입 함수로 더 잘 표현되는 것 같습니다. 데이터베이스 이론에서는 더 복잡한 관계가 고려됩니다 (예 : a -> b, b -> a).하스켈 : 모호하지 않은 함수 종속의 예

형식 기능을 사용하여 멋지게 작성할 수없는 FD가 하스켈에서 사용되는 예가 있습니까?

답변

3

Heinrich Apfelmus는 이미 MPTC + FunDeps라고 말했고 TF 만이 동등합니다. 차이점은 다른 확장과 특히 중첩되는 인스턴스를 결합 할 때 발생합니다. FunDeps가 중첩을 허용하는 동안 중첩이 허용되면 TF는 불량입니다. 예를 들어, FunDeps를 사용하여 구현 유형을 쉽게 구현할 수 있습니다.

data HTrue 
data HFalse 

class TypeEq a b eq | a b -> eq 
instance    TypeEq a a HTrue 
instance eq ~ HFalse => TypeEq a b eq 

여기에 요점이 겹쳐 있습니다. 원칙적으로 오버랩없이 타입 평등을 구현하는 것이 가능하지만 컴파일러 지원이 필요합니다. 그 접근법은 올렉 (Oleg)에 의해 다음과 같이 기술되어있다 : http://okmij.org/ftp/Haskell/typeEQ.html

P. 이 주제에 대해 haskell-prime 메일 링리스트에 lengthy discussion이 있습니다.

4

Manuel Chakravarty explains처럼 유형 함수와 함수 종속성은 대략 표현력이 같기 때문에 하나의 공식을 다른 공식으로 변환 할 수 있습니다. GADT 나 UndecidableInstances와 같은 다른 언어 확장 기능과 상호 작용할 때만 달라지기 시작합니다. GADT와 실존 유형과의 상호 작용이 실질적으로 더 간단하기 때문에 가족이 현재 GHC에서 구현하기 위해 선호되는 유형을 수집합니다.