diff options
author | Enrico Tassi <Enrico.Tassi@inria.fr> | 2016-05-13 17:44:45 +0200 |
---|---|---|
committer | Enrico Tassi <Enrico.Tassi@inria.fr> | 2016-05-13 17:57:43 +0200 |
commit | bd0befffb80c3086e3b451456cec24f3a12ac1f0 (patch) | |
tree | 4cbf3f5189c2b74cab5841f2bc13b23801bbe8d8 /library | |
parent | b679eae9d3588f6cb91be174ab80a64fb5c434a4 (diff) |
Dyn: simplify API introducing an Easy submodule
Now the casual Dyn user does not need to be a GADT guru
Diffstat (limited to 'library')
-rw-r--r-- | library/libobject.ml | 13 | ||||
-rw-r--r-- | library/summary.ml | 13 |
2 files changed, 2 insertions, 24 deletions
diff --git a/library/libobject.ml b/library/libobject.ml index bbbb134df..c566840e4 100644 --- a/library/libobject.ml +++ b/library/libobject.ml @@ -78,20 +78,9 @@ let object_tag (Dyn.Dyn (t, _)) = Dyn.repr t let cache_tab = (Hashtbl.create 17 : (string,dynamic_object_declaration) Hashtbl.t) -let make_dyn (type a) (tag : a Dyn.tag) = - let infun x = Dyn.Dyn (tag, x) in - let outfun : (Dyn.t -> a) = fun dyn -> - let Dyn.Dyn (t, x) = dyn in - match Dyn.eq t tag with - | None -> assert false - | Some Refl -> x - in - (infun, outfun) - let declare_object_full odecl = let na = odecl.object_name in - let tag = Dyn.create na in - let (infun, outfun) = make_dyn tag in + let (infun, outfun) = Dyn.Easy.make_dyn na in let cacher (oname,lobj) = odecl.cache_function (oname,outfun lobj) and loader i (oname,lobj) = odecl.load_function i (oname,outfun lobj) and opener i (oname,lobj) = odecl.open_function i (oname,outfun lobj) diff --git a/library/summary.ml b/library/summary.ml index 19e7e5fd9..edea7dbe5 100644 --- a/library/summary.ml +++ b/library/summary.ml @@ -22,19 +22,8 @@ let summaries = ref Int.Map.empty let mangle id = id ^ "-SUMMARY" -let make_dyn (type a) (tag : a Dyn.tag) = - let infun x = Dyn.Dyn (tag, x) in - let outfun : (Dyn.t -> a) = fun dyn -> - let Dyn.Dyn (t, x) = dyn in - match Dyn.eq t tag with - | None -> assert false - | Some Refl -> x - in - (infun, outfun) - let internal_declare_summary hash sumname sdecl = - let tag = Dyn.create (mangle sumname) in - let (infun, outfun) = make_dyn tag in + let (infun, outfun) = Dyn.Easy.make_dyn (mangle sumname) in let dyn_freeze b = infun (sdecl.freeze_function b) and dyn_unfreeze sum = sdecl.unfreeze_function (outfun sum) and dyn_init = sdecl.init_function in |