私はHaskellの比較的初心者ですが、数学、特に代数のバックグラウンドが豊富であるため、「モナドはエンドファンクターのカテゴリのモノイドです」などのステートメントは私にとって問題ではありません。
それでも、私は Haskell のモナドを理解する方法の一部にすぎません。学習の過程で、次の関数を書いていることに気付きました。
bindMap ::(Monad m) => [a -> m a] -> m a -> m a
bindMap (f:fs) s = bindMap fs (s >>= f)
bindMap _ s = s
これは私の目的を完全に果たしますが、非常に明白な関数のように思われるので、それを見つけるか、いくつかの単純なコンビネータで定義できるか、または (より可能性が高い) 別の方法で物事を考えるべきであると考えました。
私はもともと型シグネチャでそれを書きました
[a -> [a]] -> [a] -> [a]
これは、私が求めているものの詳細を示す可能性があります。アイデアは、関数のリストを結合することです
a -> [a]
1 つの大きな機能に。数独ソルバーで使用しています。より関連性の高いコンテキストがあると思われる場合は、お知らせください。