2

クラスでボードゲームを書いています。Control.Monad.Loops には、私が望むものに非常に近い iterateUntil 関数があります。ただし、アクションにパラメーター (このターンのボードの状態) を使用させたいと考えています。明示的な再帰を削除するためにできることはありますか?

iterateUntilIO :: (a -> IO a) -> a -> (a -> Bool) -> IO a
iterateUntilIO action state predicate = if predicate state
                                            then return state
                                            else do
                                                nextState <- action state
                                                iterateUntilIO action nextState predicate
4

1 に答える 1

5

これは のようiterateUntilMです。関数は次のように記述できます。

iterateUntilIO :: (a -> IO a) -> a -> (a -> Bool) -> IO a
iterateUntilIO action state predicate = iterateUntilM predicate action state

これは、コード内で単純に置き換えることができることも意味iterateUntilIOiterateUntilMます。

于 2013-10-02T03:54:23.477 に答える