anchor.diff:      );
   
       /// A step which has side effects.
  -    final Step<void> printStep = Step.define(
  +    final printStep = Step.define(
         'print',
       ) // Dependencies:
           .dep(messageStep)
           .dep(dateTimeStep)
  -        .build((
  +        .build<void>((
         msg, // result from evaluation of messageStep
         time, // result from evaluation of dateTimeStep
       ) async {
  
positive.code:   });
  
    test('Runner using wrapRunStep', () async {
      final Step<String> stepA = Step.define('step-a').build(() async {
        await Future.delayed(Duration(milliseconds: 200));
        return 'some-text';
      });
      final Step<int> stepB = Step.define('step-b').dep(stepA).build((a) async {
        await Future.delayed(Duration(milliseconds: 200));
        return 41;
      });
      final Step<String> stepC =
          Step.define('step-c').dep(stepA).dep(stepB).build((a, b) async {
        b++;
        return '$a, value: $b';
      });
  
      int runStepCount = 0;
      Future<T> wrapRunStep<T>(Step<T> step, Future<T> Function() runStep) async {
        runStepCount++;
        return runStep();
  
negative.code:   });
  
    test('Cannot override step twice', () async {
      final stepA = Step.define('step-a').build(() async {
        return 'some-text';
      });
      final stepB = Step.define('step-b').dep(stepA).build((a) async {
        await Future.delayed(Duration(milliseconds: 200));
        return 41;
      });
  
      var runStepCount = 0;
      Future<T> wrapRunStep<T>(Step<T> step, Future<T> Function() runStep) async {
        runStepCount++;
        return runStep();
  