【一人 bugs.ruby Advent Calendar 2020】[Feature #17043] Invokable module for custom Proc-like objects【2日目】

一人 bugs.ruby Advent Calendar 2020 2日目の記事になります。
今回は Proc オブジェクトの共通のモジュールを定義しよう、という提案のチケットです。

[Feature #17043] Invokable module for custom Proc-like objects

このチケットは『Proc なオブジェクト』を明示化できる Invokable というモジュールを追加する提案になります。
このモジュールを include することで暗黙的に #to_proc #curry #<< #>> などが定義される、という挙動になります。

class String
  # 暗黙的に to_proc や curry などが定義される
  include Invokable

  # Invokable を include したクラスで #call を定義しておきこれが呼び出される
  def call(...)
    to_sym.to_proc.call(...)
  end
end

pp "size".call [1, 2, 3]
# => 3

pp ["a", "bb", "ccc"].map(&"size")
# => [1, 2, 3]

pp [1, 12, 123].map(&"to_s" >> "length")
# => [1, 2, 3]

これはいま同様のことを行う gem が存在しているのでそれを利用すると上記と同じようなコードを記述する事ができます。

これ自体は便利そうではあるんですが、実際に『Proc オブジェクトっぽいもの』を定義することってそんなにないのでそこまで(標準ライブラリにいれてまで)実用的ではない気がしますねえ。
ただ、例えば case とかで『任意のオブジェクトが Proc っぽいオブジェクトかどうか』を判定する手段として Invokable があると実用的かなー、という感じはしますねー。
現時点だとチケットの議論は止まっているので欲しい方がいればコメントしてみるといいと思います。