読者です 読者をやめる 読者になる 読者になる

TypedCoffeeScript進捗どうですか(5)

mizchi/TypedCoffeeScript https://github.com/mizchi/TypedCoffeeScript

仕事でロンドンで忙しかったんだけど飛行機の中でがりがり書いてた。

総称型

総称型って言葉が概念的にどこまで包括してるかちょっと自分あやふやなんだけど、とりあえずこれできるようになった。

# generics
struct Hash<K, V> {
  get :: K -> V
  set :: K * V -> ()
}

hash :: Hash<String, Number> = {
  get: (key) -> @[key]
  set: (key, val) -> @[key] = val
}

hash.set "a", 1
num :: Number = hash.get "a"

switch, if

    test 'Switch', ->
      x :: String =
        switch true
          when 0
            'foo'
          when 1
            'bar'
          else
            'fuga'

細かい推論追加

[1..10]とかnewとか型指定関数が代入できるようになったとか。classがこっそり構造体を自動で生成するようになったとかはあるけど詳しくはテストコードに。

TypedCoffeeScript/test/type_checker.coffee at master · mizchi/TypedCoffeeScript https://github.com/mizchi/TypedCoffeeScript/blob/master/test/type_checker.coffee

  • Arrayを総称型のエイリアスにしてpushとかunshift引数チェック、返り値を推論できるようにする
  • 総称型で組み込みNulalbleつくる
  • エラーぶつかったら止まるんじゃなくて、エラーをリストアップできるようにする
  • 推論部分とユーザー指定型部分を厳密に区別できるようにする
  • ゆるい型チェックモードを追加してコンパイル失敗じゃなくて警告だけ出せるようにする
  • リファクタ

今死ぬほど汚い。