TypedCoffeeScript進捗どうですか(2)
右辺と左辺で明示的に宣言した型のミスマッチでエラーが出るようにした。
add1 :: (Number, Number) -> Number = (x :: Number, y :: Number) :: Number -> x + y add2 = (x :: Number, y :: Number) :: Number -> x + y add3 :: (Number, Number) -> Number = (x, y) -> x + y add4 = (x, y) -> x + y
実際のコードで使うのはadd3の形式になると思う。関数の中身がreturnの型とマッチするか確認する機能は、まだ入れる予定がない。
これで期待しない関数の変数が渡された時にちゃんとエラーが吐けるようになり、また、関数呼び出し時の型が推論できるようになる。
テストコードはこれ。
https://github.com/mizchi/TypedCoffeeScript/commit/34788e2f23e1dc75ad65ff12c51e277bf40ba408 より
+ test 'typed function', -> + f :: Number -> Number = (n :: Number) :: Number -> n * n + + test 'typed function type mismatch', -> + throws -> + CoffeeScript.compile """ + f :: Number -> Number = (n :: Number) :: String -> n * n + """ +
明日は関数呼び出し時のチェックをやる。
明日の目標はこれ。
f :: Number -> Number = (n) -> n * n obj :: {a: Number} = {a: (f 4)}
これが終わったらArray宣言とかやれそう。 もうちょっとで実用できそうな感じになってきた。