私はocaml_pluginを使用して、実行時にOCaml式を評価できる電卓を作成しています。OCamlプラグインの任意の型のインターフェイス
これは私のプラグインインターフェイスです。
open Ocaml_plugin.Std
module type S = sig
val f : unit -> float
end
let univ_constr : (module S) Ocaml_dynloader.Univ_constr.t =
Ocaml_dynloader.Univ_constr.create()
Iは、関数本体における発現を評価するためのメインプログラムで)、例えば、署名unit -> float
と
let f() = 3.14159
let f() = 1.5 *. 1.5 *. 3.
の機能を読み込むと、(fを呼び出すことができています。ただし、フロートタイプのみサポートしています。
intをサポートしたい場合はどうすればよいですか? Time.t? Pervasiveの任意のOCaml型ですか?
let f() = List.length [1;2;3] (* int *)
let f() = Time.now() (* Time.t *)
let f() = "hello world!!!" (* string *)
実行時に評価するために、ocaml_pluginが唯一の方法です。しかし、ローダ/コンパイラに動的にロードされるものを知らせるためには、インタフェースを記述する必要があります。他のタイプをサポートするようにインタフェースファイルをどのように変更する必要がありますか?
なぜ任意のタイプですか?確かにあなたのメインプログラムの 'f'は期待される結果の型を持っていますか? – Bergi
計算結果が表示されます。パーベイシブのすべてのタイプを文字列として出力できます。 –
GADTは、いくつかのタイプのサポートを追加する方法です。 –