Mixin
とりあえず,mapとかを定義したSetが欲しいという話は,
module HyperSet(S:Set.S) = struct include S let from_list = List.fold_left (fun s e -> S.add e s) S.empty let map f s = StringSet.fold (fun e s -> S.add (f e) s) s S.empty end module StringSet = HyperSet(Set.Make(String)) (StringSet.map (fun x -> x^x) (StringSet.from_list ["hoge"; "huga"])) ==>> {"hogehoge" "hugahuga"}
とすればいいことがわかった.
まあ,いま一つかっこよくない気はするが,とりあえず目的は果たせたので,今日のところはこの辺にしといてやろう(偉そう).
っていうか,まだ全然OCamlわかってないなあ・・・orz