
On 21 May 2011 15:20, Duncan Coutts
data Test = forall i r t. Testlike i r t => Test TestName t | TestGroup TestName [Test] | PlusTestOptions TestOptions Test
FYI, I recently added another alternative: | BuildTest (IO Test) The main purpose is to support a combinator mutuallyExclusive :: Test -> Test that only allows one of the child tests in a Test to run at once (see https://github.com/batterseapower/test-framework/blob/master/core/Test/Frame...). This is just a convenience that means that the user doesn't have to explicitly sequence in this IO action themselves.
The way it's done in test-framework is to have a pure i :~> r lazy list and a separate IO () action that does the real work. The IO action performs the test and pokes the results into a Concurrent.Chan. The i :~> r lazy list is extracted from the Chan using getChanContents.
Honestly, I don't know why Max did it this way
I would not copy this part of the design -- it is the component I am least happy with. As you say, it is a rather strange interface, and your proposal seems much clearer. Cheers, Max