2012-10-15 5 views
6

지도를 Formattable가 할 OCaml의지도를 확장 지도. POrderedType는 키 괜찮지 만, 나는 값에 대한 간단한 형식이 필요합니다 : , 나는 형식-수 세트 펑터을 한

module type Printable = 
    sig 
    type t 
    val format : Format.formatter -> t -> unit 
    end 

그럼 내가 세트에 대해 수행 한 것과 유사한 무언가를하고 싶었지만, 나는 다음과 같은 문제로 실행합니다. Map.S 값은 +'a t입니다. 'aPrintable.t으로 제한하는 동안 Map.S 정의를 포함하는 방법을 알아낼 수 없습니다.

module MakeMap (Pkey : POrderedType) (Pval : Printable) : 
    MAP with type key = Pkey.t and type 'a t = 'a t constraint 'a = Pval.t 

손으로지도의 전체 서명을 복사하지 않고 내가 원하는 것을 할 수있는 방법이 있나요 : 다음 (불법임을 무시하고 사실)와 같은 일이 내가 원하는 무엇입니까?

답변

3

다형성 맵의 인쇄 기능을 제안하는 가장 깨끗한 방법은 맵 인쇄 기능을 값 인쇄 기능보다 매개 변수화하는 것입니다. 그래서 그들을 위해 최선의 (기존 또는 풍부) 새로운 펑 매개 변수를 추가하여 수행 기능

  • 을 제공

    • 펑 정의 유형이 펑 수준에서 정의됩니다 : 당신은 그것을 이런 식으로 생각할 수 파라 메트릭 유형이 때문에 최고의 가치를 OCaml에서

    에 새 매개 변수를 추가하여 수행됩니다들을위한 기능을 제공, 가치 수준 (일반화) 결합되어, 편리 사람들이 possi 때 functorization을 통해 파라 메트릭 다형성을 선호하는 경향이 블레어. Functorization은 어떤 타입의 안전성을 강화하기 위해 때로는 필요합니다. (다른 비교 함수를 가진 맵은 호환되지 않는 타입을가집니다.) 그렇지 않으면 사람들은 다형성을 가지고 있습니다. 실제로 운이 좋은 상황에 처해 있습니다.

    monomorphic 맵을 생성하는 functor를 갖고 싶다면 전체지도 인터페이스를 복사하여 momonorphic 케이스에 적용해야합니다. 많은 작업이 아닙니다.