我正在尝试重复运行状态转换,直到状态不变.我搜索Hoogle了
Eq s => State s () -> State s ()
Run Code Online (Sandbox Code Playgroud)
但没有发现看起来合适的东西.
如何反复运行状态转换,直到它没有改变?
你可以这样做State,但没有特别的好处.为什么不:
idempotently :: Eq a => (a -> a) -> a -> a
idempotently f a = if a' == a then a else idempotently f a' where a' = f a
idempotentlyM :: Eq s => (s -> s) -> State s ()
idempotentlyM f = modify (idempotently f)
Run Code Online (Sandbox Code Playgroud)
如果你从a开始State s (),你可以execState让它s -> s出来.
当然,不能保证f不会分歧,因此idempotently f可能永远不会终止.
| 归档时间: |
|
| 查看次数: |
204 次 |
| 最近记录: |