class Steep::Subtyping::Check

def check_block_given(name, sub_block, super_block, trace:, constraints:)

def check_block_given(name, sub_block, super_block, trace:, constraints:)
  case
  when !super_block && !sub_block
    success(constraints: constraints)
  when super_block && sub_block && super_block.optional? == sub_block.optional?
    success(constraints: constraints)
  when sub_block&.optional?
    success(constraints: constraints)
  else
    failure(
      error: Result::Failure::BlockMismatchError.new(name: name),
      trace: trace
    )
  end
end