JavaScriptには代数的データ型はありませんが、case値を関数で定義することによって代数的データ型を表すことが出来ます。
match関数の作成
currency.js
var match = (data, pattern) => {
return data(pattern);
};
代数的データ型のパターンマッチを行うための関数です。
ex: 通貨を代数的データとして表す
Haskellの場合
data currency = yen | dollar
currency.js
// case yen
var yen = () => {
return (pattern) => {
return pattern.yen;
};
};
// case dollar
var dollar = () => {
return (pattern) => {
return pattern.dollar;
};
};
- case値を関数で定義しているところがポイントです。
ex: 通貨に対応する単位を取り出すパターンマッチ例
currency.js
// 単位を取り出す
var unit = (currency) => {
return match(currency, {
yen: "¥",
dollar: "$"
});
};
// 使用例
console.log(unit(yen())) // ¥
console.log(unit(dollar())) // $
まとめ
「関数型プログラミングの基礎 JavaScriptを使って学ぶ」では、リストを上記の代数的データ構造を用いて表し、関数型プログラミングの手法が解説されています。
参考書
-
関数型プログラミングの基礎 JavaScriptを使って学ぶ (amazon)
関数型プログラミングとはなんぞやというところから、
Haskelなどの関数型プログラミング言語で用意されている関数(reduce, map, foldrなど)をJavaScriptで順序立てて説明してくれているので、直接関数型プログラミング言語による解説では得られない知見が学べます。
また何気なく使っているプログラミングの専門用語も丁寧に解説されており、プログラミングをあらためて勉強し直すにも最適の参考書だと思います。