この質問に対する答えは、Scala の Option での fold メソッドがカタモフィズムであることを示唆しています。ウィキペディアによると、カタモフィズムは「初期代数から他の代数への固有の準同型写像です。この概念は、関数型プログラミングに折り畳みとして適用されています」。それは公平に思えますが、 F-algebrasのカテゴリの初期オブジェクトとしての初期代数に私を導きます。
したがって、Option の折り畳みが本当にカタモフィズムである場合、Option が最初のオブジェクトである F 代数の圏を作成するために、ファンクター F が必要です。このファンクターが何であるかわかりません。
タイプのリストの場合A
、ファンクタF
はF[X] = 1 + A * X
です。List は再帰的なデータ型であるため、これは理にかなっています。したがって、上記の if X
is List[A]
then は、型のリストがA
空のリスト ( 1
)、または ( ) anと a+
のペア ( ) のいずれかであると読み取ります。しかし Option は再帰的ではありません。(Nothing または an )になります。したがって、ファンクターがどこにあるのかわかりません。*
A
List[A]
Option[A]
1 + A
A
明確にするために、 Option は にかかるという点で既にファンクターであることを認識していますA
がOption[A]
、リストに対して行われることは異なり、A
は修正され、データ型を再帰的に構築する方法を記述するためにファンクターが使用されます。
関連する注意事項として、カタモルフィズムでない場合は、おそらく混乱を招くため、襞と呼ぶべきではありません。