Hatena::Groupocaml-nagoya

yoshihiro503の関数的日記

2008-11-30 (Sun)

haXeで便利モジュールを作ってみた。

| 20:10 | haXeで便利モジュールを作ってみた。 - yoshihiro503の関数的日記 を含むブックマーク はてなブックマーク - haXeで便利モジュールを作ってみた。 - yoshihiro503の関数的日記

enum Pair<L, R> {
    pair (l:L, r:R);
}
enum Either<A, B> {
    left (a:A);
    right (b:B);
}
enum Option<X> {
    none;
    some(x: X);
}

class Util {
    public static function fix<A, B> (f : (A->B) -> A -> B) {
	return function (x) return f (fix (f), x);
    }

    public static function fst<A,B> (p: Pair<A,B>) : A
        return switch p { case pair (l, _): l; }

    public static function snd<A,B> (p: Pair<A,B>) : B
        return switch p { case pair (_, r): r; }
    
    public static function apply<A,B> (f : A -> B, x : A) : B return f (x)

    public static function apply2<A1,A2,B> (f : A1 -> A2 -> B, x : A1, y : A2) : B
        return f (x, y)

    public static function comp<A, B, C> (g : B -> C, f : A -> B)
	return function (x : A) return g (f (x))

}