TypedCoffeeScriptに構造体宣言と関数型を追加した

[注意] まだまだ全然使いものにならないよ!

プロジェクト名をリネームした mizchi/TypedCoffeeScript https://github.com/mizchi/TypedCoffeeScript

構造体と関数リテラルを追加した。今は次のコードが通る。

struct Point {
  x :: Number
  y :: Number
}

p :: Point = {x: 3, y: 3}

f :: Number -> Number = (n :: Number) :: Number ->  n * n
console.log f 4

f の関数型のところはわざと冗長に書いている。正直、型アノテーションを通すパーサが書けただけで推論は全然完璧ではない。 宣言済みのプロパティに代入しようとした瞬間だけバリデーションしている。関数型も返り値が一致しないと代入できないようにはなってる。引数チェックはまだ。

何が動いてて何が動いてないかは TypedCoffeeScript/test/type.coffee at type · mizchi/TypedCoffeeScript https://github.com/mizchi/TypedCoffeeScript/blob/type/test/type.coffee を見てください。

coffee-scriptのサブセットスーパーセットという哲学は守っていて、上のコードはもちろん、普通のcoffee-scriptは全てコンパイルがとって実行できるのは維持している。じゃないと作る意味が無いので。

その他もろもろ