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宣言とかやれそう。 もうちょっとで実用できそうな感じになってきた。