hello, using polymorphic variants maybe ? # module Cfg = struct type statement = [ `Assign | `Guard ] end;; module Cfg : sig type statement = [ `Assign | `Guard ] end
# module Ast = struct type statement = [ Cfg.statement | `Goto | `Label ] end;; module Ast : sig type statement = [ `Assign | `Goto | `Guard | `Label ] end p On Fri, Nov 04, 2011 at 02:06:23PM +0100, Markus Weißmann wrote: > Hello everyone, > > I'm writing on a compiler and want to subtype the "statements" that can > occur in my code: > At first I have an abstract syntax tree that can hold any statement of the > language. From that I create a control flow graph that will only have > non-control-flow statements (a true subset of the Ast-statements). > Whats the best way to realize that? > > Basically I have: > > module Ast: type statement = Assign | Guard | Goto | Label > module Cfg: type statement = Assign | Guard > > > I see three -- not so elegant -- solutions to this: > > 1.) type-safe but imho quite ugly code: > module Cfg: type statement = Assign | Guard > module Ast: type statement = Base of Cfg.statement | Goto | Label > > 2.) use the same type for both and give up the safety that wrong types > cannot show up in the Cfg > > 3.) use objects > > Did I miss the type-safe, elegant, module-based solution somehow? Or is > 1.) as good as it gets? > > > Best regards > > -Markus > > -- > Markus Weißmann, M.Sc. > Institut für Informatik > Technische Universität München > Raum 03.07.054, Boltzmannstr. 3, 85748 Garching > > Tel. +49 (89) 2 89-1 81 05 > Fax +49 (89) 2 89-1 81 07 > > mailto:[email protected] > > > -- > Caml-list mailing list. Subscription management and archives: > https://sympa-roc.inria.fr/wws/info/caml-list > Beginner's list: http://groups.yahoo.com/group/ocaml_beginners > Bug reports: http://caml.inria.fr/bin/caml-bugs -- ---- http://en.wikipedia.org/wiki/Posting_style -- Caml-list mailing list. Subscription management and archives: https://sympa-roc.inria.fr/wws/info/caml-list Beginner's list: http://groups.yahoo.com/group/ocaml_beginners Bug reports: http://caml.inria.fr/bin/caml-bugs
