ハスケルでは、モナドは関数returnとbindの形で定義されています。戻り値の型はa -> m a
、バインドの型はm a -> (a -> m b) -> m b
です。その前に指摘されているのはmonads can also be defined in terms of return and joinです。ここで、joinはタイプm (m a) -> m a
の関数です。バインドは結合の観点から定義できますが、その逆が可能ですか?結合は結合の観点から定義できますか?モナドでは、バインドの観点から結合できますか?
参加しないと、何とか二重ラップされたモナド値m (m a)
を取得した場合、私は何をしたらいいのか分かりません - ファンクタまたはモナド操作のどれも "これが不可能な場合、なぜHaskellと他の多くのモナド実装がバインドの観点からそれらを定義していますか?これは、結合ベースの定義よりも厳密にはあまり役に立ちません。
注意「も」:参加はバインドの用語で定義することができなかった場合、それは 'Monad'のメンバーであることを_have_う(またはすべてのモナドに対して定義されることはありません)、そうではありません。 –