I can't imagine a case where I would want to use the `|` variant with this semantics. It smells like I would want to use two matchers, since the args are different.

For this case, I would go with this:

```ruby
match message,
      Work::Step.(step: ~any) >-> step do
        step.execute
      end,
      Work::Event.(step: ~any, event: Event.(event: ~any)) >-> step, event do
        step.execute(event)
      end,
      Work::Finalize.(~any, any) >-> sequential_manager do
        sequential_manager.finalize
      end
```

It's a bit longer but it improves the readability a lot (at least for me and perhaps others that don't know algebrick so well)

And yes, Event.(event: ~any) looks better to me. I also like that more than the (any, any, ~any) variant, as it's
not dependent on the ordering. I would probably prefer that in general, when the type has named fields.