こうしれっとis_empty_が書けなくて晩ご飯に行けないですよ... http://d.hatena.ne.jp/ranha/20101107/1289129831
2010-11-07 20:37:30多相的な is_empty は無理でしょう。Functor だけだとできそうな気がするけれど、結局 Map.S.t の詳細はもずーるさんしか知らないわけで、Map.Make(String) と Map.Make(Int32) さんの二人だけの世界に OreoreMap がきて破局
2010-11-08 01:47:15あるファンクタから作られたモジュールであることを表すシグネチャが存在すれば二人だけの世界を実現することはできるけれどそれはなんかできそうにないなあ・・・
2010-11-08 01:52:40@lyrical_logical caml-3.12-refman.pdfのp146 Advanced examplesを見る限りだと出来ても良い気がするんだけどなー
2010-11-08 02:02:27結局 Map.Make(M).t は Ord とかどうでもいいの心があるので、functor_impl_t を作って、ファンクタが作るモジュールを表すシグネチャを Make.S を with t := functor_impl_type とかやって・・・
2010-11-08 02:05:42"Explicit naming of type variables"でcaptureした型をMap.S.'a tにぶち込んで、そのcaptureした型を使えばローカルモジュールの逃亡はしてないように騙せるんじゃないかと思ったけどどうやってMap.S.tをすり替えれば良いんだ
2010-11-08 02:08:30@ranha そういわれて考え直した結果、つまり Modl.t を関数さんに教えてやればいいだけじゃんってなって scoped type variables と with つかったら different arities っていわれてそして arity = 1 な
2010-11-08 02:14:36@ranha Signature with [type|module] = name でいいはずなんだけれど、途切れてる発言のとおり型変数持った型にたいする適用の書き方がわからない。
2010-11-08 02:16:47package-type-constraint ::= type typeconstr-name = typexpr で typeconstr-nameがlowercase-identみたいな感じだからどうかんがえても type ('a t) = nanka とかはDEATH
2010-11-08 02:18:04要約すると、引数にモジュールを含む関数で、モジュールに含まれる型変数を持つ型に関する制約を書くことはできないってことか。これは技術的にできないのか、なんなのか・・・
2010-11-08 02:30:38@lyrical_logical やはりというか、Obj.magic使ってまぁ実装出来たわけですが(http://d.hatena.ne.jp/ranha/20101107/1289129831) mapの型が単に'aになっててクソ過ぎて使えないですよねぇ…
2010-11-08 03:27:10@ranha おもしろそうなことやってますね。 http://ideone.com/kTgED としてみたんだけど type t が型コンストラクタなのでこのままでは駄目ですね…
2010-11-08 08:19:59@keigoi Explicit naming of type variablesを使うと、そこで詰まってしまうんですよね。package-type-constraintを型コンストラクタに対して付けてはいけない場合があるから入ってないのかなーと考えてみてるんですが
2010-11-08 08:23:34色々迂回させてみようとしてみてますけど、どれも上手く書けてません!! type ('a , 'b) aux = Aux of ((module Map.S with type key = 'a) * 'b (同じの).t)とかもダメですし
2010-11-08 08:26:14@ranha 型コンストラクタにについてもpackage type constraintは付けられるはずなんだけど、なぜか first class module ではうまくいかない…
2010-11-08 08:27:25この辺か http://caml.inria.fr/mantis/view.php?id=5078 http://caml.inria.fr/mantis/view.php?id=5140
2010-11-08 08:38:42@ranha あっごめんなさい、 frisch : These extensions might not play so well with with-constraints extended on parametrized types. …とあるので駄目っぽいですね
2010-11-08 08:45:19取りあえずfrischさんブランチでfstclassmod_parametrizedというのがあるので、そっちをmakeしてみます。一発で通れば良いですけど.
2010-11-08 08:50:22しかしimplicit-unpack超便利! let module無くてスッキリ module type S = sig type t val v : t end let ext = fun (type s) (module M : S with type t=s) -> M.v
2010-11-08 09:01:00