나는 (어떤 색인 유형 진짜로) 다음과 같은 서명을 사용하여 문자열과 배열을 통해 내 코드는 일반적인하고 싶다 :배열과 문자열에 펑터를 쓰는 방법은 무엇입니까?
module type Indexable = sig
type 'a t
val get : int -> 'a t -> 'a
end
module MyCode (I : Indexable) = struct ... end
그러나 나는 다음과 같이 문자열에 내 서명을 적용 할 수 없습니다 물론 :
module StrMyCode = MyCode(struct
type 'a t = string
let get i a = a.[i]
end)
이 문제를 해결할 방법이 있습니까? 아니면 다른 aprroach일까요? 나는 최악의 경우에 문자 배열을 사용할 수 있다는 것을 알고 있지만 추악한 캐스트에서 코드를 저장하고 싶습니다. 그리고 이것은 내 마음 속에 있었던 무언가이기 때문에 이에 대한 명확한 답을 얻고 싶습니다.
나중에이 영리한 솔루션입니다하지만 난 펑터 접근 방식을 취하고 : 당신이 다형성 유형을 강제하기 위해 GET에 대한 어떤 종류의 주석을 넣어 가지고, 그러나 주 (그렇지 않으면 추론 유형은
int -> char t -> char
입니다) 왜냐하면 사용자가 자신의 인덱스 테이블을 구현할 수 있기를 바랍니다. – rgrinberg