TypedCoffeeScript v0.8.3 インターフェース継承、分割代入プロパティの追跡

これなきゃだめなやつだろと思ってインターフェース継承を実装してきた

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

インターフェース継承

class宣言時にインターフェース継承ができる

class Point
  x :: Int
  y :: Int

struct Size {
  width :: Int
  height :: Int
}

class Entity extends Object implements Point, Size
e :: {x :: Int, width :: Int} = new Entity

x と width のプロパティを継承できている。代入時に型違反するとthrow もちろん、このコードでは実体がないのでアクセスしてもundefinedだが…あとでnullableの仕組みはいれたい。

分割代入

a :: String
{a, b, c} = {a: "", b: 3, c: true}

左辺の分割代入をスコープに追加して追跡して型推論できるようにした

class X
  x :: Int
  f: ({@x, @y, @z})->

これもthisのスコープ内ではxはIntで、yとzは型不定ながら扱えるようになっている。

次やること

struct宣言周りを強化する

  • ブレースの省略を可能に
  • structもimplementsできるように
  • struct宣言対象を、ネストした名前空間以下でできるように
  • struct宣言すると元コードに無意味なIntを生成するバグを修正

つまりこれができる

struct A.X
  a :: Int

struct A.Y implements A.X
  b :: String