[mercury-users] Thanks, and a concrete question

Keith Braithwaite keith at keithbraithwaite.demon.co.uk
Tue Jun 3 05:51:16 AEST 2003

Many thanks for the earlier comments on my code. I've a definite 
question new about instantiatedness.

I'd like to use ++ to roll test suites together. So I've introduced 
this to my testing module
:- func named_suite ++ named_suite = named_suite.  %interface
S1 ++ S2 = suite_append(S1, S2).   %implementation

:- func suite_append( named_suite, named_suite) = named_suite.
:- mode suite_append(in,in) = out is det.

:- import_module string.

	named_suite(Name2,Tests2)) =
	named_suite(Name3,Tests3) :-
	Name3 = Name1 ++ " then " ++ Name2,

This seems to be working, since this test passes.
:- pred test_suite_concatenation is semidet.
test_suite_concatenation :-
	Example_suite1 = named_suite("suite1", []),
	Example_suite2 = named_suite("suite2", []),
	Suite = Example_suite1 ++ Example_suite2,
	Suite ^ name = "suite1 then suite2",
	Suite ^ tests = (Example_suite1 ^ tests) ++ (Example_suite2 ^ tests).

that's when running my two test suites like this:
main(!IO) :-

However, when I change to this
main(!IO) :-
	run_tests(mtest_tests__suite ++ gotests__suite,!IO).

The compiler complains that
test.m:016: In clause for `main(di, uo)':
test.m:016:   in argument 1 of call to predicate `mtest:run_tests/3':
test.m:016:   mode error: variable `V_7' has instantiatedness `ground',
test.m:016:   expected instantiatedness was 
`bound(mtest:named_suite(ground, bound([] ; '[|]'((mtest:case), 

Which I don't understand. How does an out argument from a function that 
doesn't fail (it's det, right?) be "ground"? What am I missing?

Advice please,

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