Skip to content

Commit a564ac5

Browse files
committed
Utils: upd iterateN
1 parent 6e34687 commit a564ac5

File tree

1 file changed

+2
-4
lines changed

1 file changed

+2
-4
lines changed

src/Nix/Utils.hs

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -326,10 +326,8 @@ traverseM
326326
traverseM f x = sequenceA <$> traverse f x
327327

328328
-- | Apply a function @n@ times to a given value.
329-
iterateN :: Int -> (a -> a) -> (a -> a)
330-
iterateN 0 _ = id
331-
iterateN 1 f = f
332-
iterateN n f = f . iterateN (pred n) f
329+
iterateN :: Int -> (a -> a) -> a -> a
330+
iterateN n f x = fix ((<*> (0 /=)) . ((bool x . f) .) . (. pred)) $ n -- It is hard to read - yes. It is a single action without recursion - yes.
333331

334332
-- | Apply Kleisli arrow N times, join 'm's.
335333
nestM :: Monad m => Int -> (a -> m a) -> a -> m a

0 commit comments

Comments
 (0)