[mercury-users] polymorphism
    Fergus Henderson 
    fjh at cs.mu.oz.au
       
    Fri Sep 26 14:08:57 AEST 1997
    
    
  
Tomas By, you wrote:
> In general, if I have a procedure with several modes, eg:
> 
>   :- pred stream_tree(stream(T),tree(T)).
>   :- mode stream_tree(in,out) is det.
>   :- mode stream_tree(out,in) is det.
> 
> but I can't use the same code for both modes, how do I write
> the "top-level"?
The way to do this is to pass a argument specifying the direction:
	:- type direction ---> forward ; backward.
	:- inst forward ---> forward.
	:- inst backward ---> backward.
	:- pred stream_tree(direction,stream(T),tree(T)).
	:- mode stream_tree(in(forward),in,out) is det.
	:- mode stream_tree(in(backward),out,in) is det.
	stream_tree(forward, Stream, Tree) :-
		... code for the (in, out) mode ...
	stream_tree(backward, Stream, Tree) :-
		... code for the (out, in) mode ...
-- 
Fergus Henderson <fjh at cs.mu.oz.au>   |  "I have always known that the pursuit
WWW: <http://www.cs.mu.oz.au/~fjh>   |  of excellence is a lethal habit"
PGP: finger fjh at 128.250.37.3         |     -- the last words of T. S. Garp.
    
    
More information about the users
mailing list