特定の効果がなくなるまでアクションを実行するという一般的なパターンに気付きましたが、これは固定点を意味する (つまり、将来の効果はあり得ない) ことがわかっている場合です。これには型クラスがありますか?
これはMonadFixでカバーされていますか? コードを見るとそのように見えますが、 wiki ページで「「再帰」を見て、アクションを再帰的にまたは繰り返し実行することを意味すると推測したくなります。いいえ。」に怖がっていました。
また、不動点は恒等の双対のようなものだと私には思えます。つまり、同一性は、非同一性 ((+) の場合は 0、(*) の場合は 1、追加の場合は [] など) と組み合わせると消えます。一方、固定点は、以下の「リラックス」操作で非固定点を非表示にします。この双対性を形式化する方法はありますか?そうすると便利ですか? つまり、MonadPlus および/または Monoid と MonadRelax の間に関係はありますか?
最後に、リラックスはほぼ展開/アナモフィズムであることに気付きました。と表現した方が良いでしょうか?
{-# LANGUAGE MultiParamTypeClasses, FunctionalDependencies #-}
import Control.Monad.Loops (iterateUntilM) -- cabal install monad-loops
-- states that relax to a fixed point under step
class Monad m => MonadRelax m s | s -> m where
isFixed :: s -> Bool
step :: s -> m s -- often (not always): step s = return s iff isFixed s
relax :: MonadRelax m s => s -> m s
relax = iterateUntilM isFixed step