Java 6で表現可能なモナドの一般的なケースですか? 「一般的なケース」という語に注意してください。—モナドの一般的なケースは表現可能ではない可能性がありますが、モナドの多くの特定のケース(すなわち多くの特定のモナド)が表現可能です。Java 6で表現可能なモナドの一般的なケースですか?
ここでの問題は(欠けている)Higher-kinded generics in Javaです。しかし、サンプルのHaskellコードが実際にhttps://stackoverflow.com/a/877036/1123502(つまり、public class Fix<F extends Fix<F>>
)のようなアプローチを使用してJavaに移植されていることがわかりました。
もちろん、型のない実装(Objectやダウンキャストなど)は興味深いものではありません。
更新: 2つの共通のモナド定義があります:join-fmapとbind-returnです。それらは(数学的に)同等ですが、ある定義がJavaで表現可能であるという意味では同等ではないかもしれませんが、他の定義は表現できません(ただし、非等価性はありそうもないようです)。だから私の質問は両方の定義に関係している。
結論:誰もがすべての障害を克服し、Java 6で "一般的なケース"のモナドを書きましたか?あるいは、論文や徹底的なブログ記事を指摘したり、それがなぜ不可能であるかを完全に説明したりしてください。
[* Monads in Java *](http://logicaltypes.blogspot.com/2011/09/monads-in-java.html)も参照してください。 – trashgod
@trashgodその実装では、 'bind'の戻り値の型は' M 'ではなく 'Monad 'です。これはJavaでは不可能です。その結果、Monadから継承するListクラスがある場合、そのリストで 'bind'を呼び出すと別のリストが生成されるという保証はないので、' MonadicList strings = myMonadicList.bind( ...) 'キャストなし。 ... –
sepp2k
...その記事で与えられている抽象クラスは、モナドコンセプトの完全な正しい実装ではありません(ただし、Javaで手に入れることができるように近いかもしれません)。 – sepp2k