You can offer a match block API from your own methods using Dry::Matcher.for:
# First, build a matcher or use an existing one (like dry-matcher's ResultMatcher)
= Dry::Matcher.new(...)
# Offer it from your class with `Dry::Matcher.for`
include Dry::Matcher.for(:call, with: MyMatcher)
# return a value here
end
end
# And now `MyOperation#call` offers the matcher block API
operation = MyOperation.new
operation.() do
# Use the matcher's API here
end