[mercury-users] Extending a structure data type in Mercury

Gregory D. Weber gdweber at indiana.edu
Sun Jun 5 05:52:30 AEST 2005

I want to "extend" a structure type by adding fields, like this:

:- type prule ---> prule(key, class, ftable, conds).
:- type cn2rule == prule.
:- type icnrule ---> icnrule(key, class, ftable, conds, info).

But want icnrule to be considered a subtype of prule,
also as a subtype of cn2rule, so that procedures developed for prules 
and cn2rules will also work for icnrules.

I've found a solution, but I'm wondering if there's a better way.
I add an extra field of variable type to the prule type,
and then instantiate it in different ways to make different kinds of rules:

:- type prule(I) ---> prule(key, class, ftable, conds, I).

:- type cn2rule_info == {}. % empty tuple
:- type cn2rule == prule(cn2rule_info).

:- type icnrule_info == {ftable}.
:- type icnrule == prule(icnrule_info).

One complication of this approach is that, to use a cn2rule as an
icnrule, I have to replace an {} with an {ftable}, and vice-versa.

Gregory D. Weber             http://mypage.iu.edu/~gdweber/
                             Telephone (765) 973-8420
Associate Professor of Computer Science; Chair, Informatics Committee
Indiana University East
2325 Chester Boulevard, Richmond, Indiana 47374-1289, U.S.A.
Plain text is the document format that maximizes readability and
minimizes hassle and hazard.  It is the format of the official documents
defining Internet protocols (http://www.rfc-editor.org/).
mercury-users mailing list
post:  mercury-users at cs.mu.oz.au
administrative address: owner-mercury-users at cs.mu.oz.au
unsubscribe: Address: mercury-users-request at cs.mu.oz.au Message: unsubscribe
subscribe:   Address: mercury-users-request at cs.mu.oz.au Message: subscribe

More information about the users mailing list