見出し画像

🦄ファンタジーランド代数 JavaScriptにおける一般的な代数構造の相互運用性に関する仕様書

Fantasy Landは、さまざまな代数構造に対して標準的なプロトコルを定義しており、異なるデータ型や構造が効果的に連携できるように支援します。この仕様は、ファンクター、アプリカティブ、モノイドなど、詳細なメソッド定義と振る舞いの記述を含む多様な代数構造をカバーしています。このフレームワークは、数学的法則により厳密に従うコードの構造化と組織化を助け、より堅牢で予測可能なコード動作につながる可能性があります​



代数は値の集合であり、その値で閉じている演算子の集合であり、従わなければならない法則の集合である。
ファンタジーランド代数はそれぞれ独立した仕様である。代数は実装されなければならない他の代数に依存するかもしれない。

ファンタジーランドでは、特定の代数をサポートするために型が実装しなければならないインターフェースを定義するためにメソッドを使用する。例えば、Monoid代数を実装した型の値には、fantasy-land/emptyメソッドとfantasy-land/concatメソッドが必要だ。
スタティック・ランドは異なるアプローチを取る。メソッドの代わりに静的関数を使用し、それらはモジュールにまとめられている

代数とは、あるシグネチャにマッチすること、ある法則に従うことなど、モジュールに対する要求の集合である。モジュールがある代数の全ての要件を満たす場合、その代数をサポートする。代数は他の代数をサポートすることを要求するかもしれない。
代数はまた、新しいメソッドから派生可能な他の代数メソッドを示すかもしれない。モジュールが導出可能なメソッドを提供する場合、その振る舞いは導出(または導出)と等価でなければなりません。

JavaScriptは和型に対する一流のサポートを持っていないが、いくつかの異なる方法で模倣することができる。とはいえ、この模倣は余分な定型文につながり、余分な作業やエラーの可能性につながる:

アプリカティブって一般的になんですか?

アプリカティブ(Applicative)は、関数型プログラミングの文脈で使用される代数的構造の一つで、ファンクターを拡張したものです。一般的には、ファンクターに対してもう少し柔軟な操作を可能にするために導入されます。アプリカティブは、値がラップされた状態で関数を適用する機能を提供し、それによって複数のアプリカティブ値から新たなアプリカティブ値を構築することが可能になります。

具体的には、アプリカティブは以下の二つの主要な操作を備えています:

  1. pure または of:任意の値を取り、それをアプリカティブの文脈に"ラップ"する関数です。

  2. <*>(適用演算子):ラップされた関数とラップされた値を受け取り、ラップされた関数をラップされた値に適用し、結果をラップして返します。

この構造は、単純な値の変換だけでなく、複数の依存関係を持つ計算をモデル化する際に特に有用です。アプリカティブの法則(恒等法則、結合法則、同型法則など)に従うことで、予測可能で組み合わせ可能な方法で関数と値を操作する強力なツールを提供します。

  1. Setoid - 等価関係(equality relation)を持つ集合のこと。

  2. Ord - 順序関係(order relation)を持つデータ型のためのインターフェース。

  3. Semigroupoid - 各オブジェクトが他のオブジェクトに「部分的に」合成可能な圏(category)の一種。

  4. Category - オブジェクトと、そのオブジェクト間を結ぶ射(morphism、例えば関数)で構成される数学的構造。

  5. Semigroup - 結合法則を満たす二項演算を持つ代数的構造。

  6. Monoid - 単位元を持つセミグループ。

  7. Group - 逆元を持つモノイド。

  8. Filterable - フィルタリング操作が可能なデータ構造に適用される型クラス。

  9. Functor - オブジェクト間の写像と、射間の写像を保持する圏論的構造。

  10. Contravariant - 反変(逆向きの写像)を行うファンクター。

  11. Apply - ファンクターに追加して、関数を適用する能力を持つ。

  12. Applicative - Apply を基にし、値を持つコンテキストに入れる操作(通常は pure または return と呼ばれる)を追加した構造。

  13. Alt - 選択(alternate)操作が可能なファンクター。

  14. Plus - Alt にゼロ元(空の状態)を持つ操作を追加した構造。

  15. Alternative - ApplicativePlus の両方の特性を持つ。

  16. Foldable - リストや木などのデータ構造において、要素を累積的に畳み込む操作をサポートする型クラス。

  17. Traversable - データ構造を走査しながら副作用を持つ処理を適用できるようにする型クラス。

  18. Chain - Apply の一種で、連鎖的な計算が可能。

  19. ChainRec - 再帰的な計算を効率的に扱うための Chain

  20. Monad - ApplicativeChain を統合した、効果的な計算をモデル化する強力な抽象概念。

  21. Extend - 値を拡張して新たなコンテキストを生成する能力を持つコモナド関連の操作。

  22. Comonad - コンテキスト内の値に対する計算を展開できるデータ構造。

  23. Bifunctor - 二つのパラメータを持ち、それぞれに対してファンクターの操作が可能。

  24. Profunctor - 対象を逆方向にも正方向にも写像することができる二項関係を一般化したファンクター。

お願い致します