MTASC作者による新たな言語 - haXe

MTASC作者が作った言語。ライセンスはGPLECMAScriptを発展させたActionScript2から発達させたような言語。文法はActionScriptっぽくても、中身は静的型チェックする関数型言語のようになっている。大きな特徴は、

    • パラメータ型クラス
    • if式、switch式。ifもswitchも右辺で使える。
    • パターン化できるenum型(ocamlhaskellのデータ型のように使える)
    • パラメータ型を利用状況から推論する関数型(関数を、最初に使った引数の型と違う型の引数で呼ぶと型エラー)。明示的な指定も可能
      • 関数型は「引数1型->引数2型->...->戻り値型」で型
    • パッケージ
    • Dynamic型(任意型interface、パラメータ化可能(メンバーがパラメータ型になる))

現時点ではベータ版があり、Flash環境(flash...パッケージが利用可能)とWebサーバ環境(nekoパッケージが利用可能)が用意されている。JavaScript環境も用意するようだ。DOMは基本パッケージに含んでいる。

haXeサンプルコード

以下のような感じでパターンマッチングとしてenumとswitchが使えてしまうのです。

Text.hx

class Test {
    static function main() {
        var exp: Exp = mul(num(5), plus(num(3), num(4)));
        trace(evalExp(exp));
    }
    
    static function evalExp(e: Exp): Int {
        return switch (e) {
        case num(n): 
            n;
        case plus(e1, e2):
            evalExp(e1) + evalExp(e2);
        case mul(e1, e2):
            evalExp(e1) * evalExp(e2);
        };
     }
}

enum Exp {
    num(n: Int);
    plus(e1: Exp, e2: Exp);
    mul(e1: Exp, e2: Exp);
}

Enumの中にstatic関数かけるとよさそうだけど、それはできない。


swf変換はmtascと同じく:

haxe -swf Test.swf -main Test


GADTのようなこともできるのだろうか(できないようだ。enum中でのパラメータ型変数の導入ができなかった)。