組込みライブラリのシグネチャ

でも、組込みライブラリなんだし、trubyに組み込んでしまっても良いのかもと思ったり。ひとまず、型定義をOCamlのコードで書くのはだるいので、適当にパーザとか書いてみることにしようかな、と。

module Kernel : {
  puts: Object -> NilClass
  gets: () -> String
}

Object : {
  to_s : () -> String
  nil? : () -> Boolean
}

String : {
  + : String -> String
  to_i : () -> Integer
}

Integer : {
  + : Integer -> Integer
  - : Integer -> Integer
  * : Integer -> Integer
  / : Integer -> Integer
}

Boolean : {
  & : Boolean -> Boolean
  | : Boolean -> Boolean
}

NilClass : {
  & : Boolean -> Boolean
  | : Boolean -> Boolean
}

こんなんどうでしょう。core.rbiとかのファイルに保存する感じで。IntegerとかBooleanとかRubyのクラス構造と一致しないのが気持ち悪いけど、まああとで考えよう。

※あ、NilClassがねーや。と追記。