Perl6とHaskellとScalaのメタオペレータ

Perl6の構文を見ていたのですが、面白い感じですね。メタオペレータという関数型言語由来の演算子があります。

というわけで、Perl6, Haskell, Scala の比較

2つのリストの和リスト:

Perl 6

my @a = (1, 2, 3, 4, 5);
my @b = (6, 7, 8, 9, 10);
my @c = @a >>+<< @b; 

Haskell

zipWith (+) a b 

Scala

List.map2(a, b)(_+_)

負値リスト:

Perl6

-<<@a

Haskell

map (0-) a

Scala

a.map(-_)

リストの総乗:

Perl6

[*]@a

Haskell

foldl1 (*) a

Scala

(1 /: a)(_*_)