| Safe Haskell | Safe |
|---|---|
| Language | Haskell2010 |
ReWire.Fix
Synopsis
- fix :: (MonadError AstError m, Hashable a) => Text -> Natural -> (a -> m a) -> a -> m a
- fix' :: Hashable a => (a -> a) -> a -> a
- fixOn :: (MonadError AstError m, Eq b) => (a -> b) -> Text -> Natural -> (a -> m a) -> a -> m a
- boundedFixOn :: MonadError AstError m => (a -> a -> Bool) -> Text -> Natural -> (a -> m a) -> a -> m a
- fixOn' :: Eq b => (a -> b) -> (a -> a) -> a -> a
- fixUntil :: MonadError AstError m => (a -> Bool) -> Text -> Natural -> (a -> m a) -> a -> m a
- boundedFix :: Monad m => (a -> a -> Bool) -> Natural -> (a -> m a) -> a -> m a
- fixPure :: Eq a => Natural -> (a -> a) -> a -> a
Documentation
fixOn :: (MonadError AstError m, Eq b) => (a -> b) -> Text -> Natural -> (a -> m a) -> a -> m a Source #
boundedFixOn :: MonadError AstError m => (a -> a -> Bool) -> Text -> Natural -> (a -> m a) -> a -> m a Source #
Note: evaluates `(f a)` at least once if the bound is not reached.
fixOn' :: Eq b => (a -> b) -> (a -> a) -> a -> a Source #
Note: the recursive call must reuse the already-forced f a -- passing
the expression f a itself builds an unshared thunk chain that gets
re-evaluated from scratch at every level, making the fixpoint
exponential in the iteration count.