diff options
| author | letouzey | 2010-07-02 13:36:06 +0000 |
|---|---|---|
| committer | letouzey | 2010-07-02 13:36:06 +0000 |
| commit | 4e90d6d144df100d98bff366c2c2c188b375ff12 (patch) | |
| tree | 0c7c804969d9acba0a46b19f840202960ef2c253 /plugins/extraction/scheme.ml | |
| parent | 68a133db448e5663da6daf677d4d882bf1bad05c (diff) | |
Extraction: better support of modules
- For Haskell, modules abbreviations and applied functors are expanded.
The only remaining sitation that isn't supported is extracting functors
and applying them after extraction.
- Add a module extraction for Scheme with the same capabilities as for
Haskell (with no Extraction Library, though).
- Nicer extracted module types (use of the mb.mod_type_alg if present)
git-svn-id: svn+ssh://scm.gforge.inria.fr/svn/coq/trunk@13236 85f007b7-540e-0410-9357-904b9bb8a0f7
Diffstat (limited to 'plugins/extraction/scheme.ml')
| -rw-r--r-- | plugins/extraction/scheme.ml | 16 |
1 files changed, 11 insertions, 5 deletions
diff --git a/plugins/extraction/scheme.ml b/plugins/extraction/scheme.ml index 097df6a61c..9c600760fe 100644 --- a/plugins/extraction/scheme.ml +++ b/plugins/extraction/scheme.ml @@ -180,12 +180,18 @@ let pp_decl = function hov 2 (paren (str "define " ++ pp_global Term r ++ spc () ++ pp_expr (empty_env ()) [] a)) ++ fnl () ++ fnl () -let pp_structure_elem = function +let rec pp_structure_elem = function | (l,SEdecl d) -> pp_decl d - | (l,SEmodule m) -> - failwith "TODO: Scheme extraction of modules not implemented yet" - | (l,SEmodtype m) -> - failwith "TODO: Scheme extraction of modules not implemented yet" + | (l,SEmodule m) -> pp_module_expr m.ml_mod_expr + | (l,SEmodtype m) -> mt () + (* for the moment we simply discard module type *) + +and pp_module_expr = function + | MEstruct (mp,sel) -> prlist_strict pp_structure_elem sel + | MEfunctor _ -> mt () + (* for the moment we simply discard unapplied functors *) + | MEident _ | MEapply _ -> assert false + (* should be expansed in extract_env *) let pp_struct = let pp_sel (mp,sel) = |
