F = -> x { "str" } def foo(&blk) blk.call(:sym, &F) end foo do |dummy, &blk| blk.call(42) end # truly expected: # Object#foo :: (&Proc[(Symbol, &Proc[(Integer) -> String]) -> String]) -> String __END__ # Classes class Object F: ^(Integer) -> String private def foo: { (:sym) -> String } -> String end