2013年4月13日土曜日

ScalaでChurch encoding

data Maybe a = Nothing | Just a
という型をekmettさんのコードを参考にChurch encodingしてみると、

newtype Maybe { runMaybe :: forall r. a -> r -> r -> r }

となります。(多分)

これをScalaで表現してみました。

とても面倒なことになってますが、ちゃんとMaybeモナドとして動作します。
Haskellだと結構綺麗に書けたりします。

Church encodingすると大抵の場合に高速化されます。
このMaybeモナドの例では、emptyをbindで合成した時に、Justの場合の処理を破棄しています。

ラムダ計算で代数的データ型を表現する方法

この記事も面白いのでぜひ読んでみて下さい。

0 件のコメント:

コメントを投稿