我想使用以下签名使我的代码在字符串和数组(实际上是任何可索引类型)上通用:
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)
有没有办法解决这个问题?或者也许是一种不同的方法?我知道我可以在最坏的情况下使用字符数组,但我宁愿将我的代码从丑陋的演员中拯救出来,这是我之前想到的事情,所以我想得到一个明确的答案。