{-# OPTIONS_HADDOCK hide #-}

-- | Miscellaneous helper functions.
module System.Random.Random123.Misc where


-- | Apply a function to its result sequentially,
--   additionally passing it the current iteration number.
apply :: (Int -> a -> a) -> Int -> a -> a
apply f n = applyLoop 0 where
    applyLoop i v
        | i == n = v
        | otherwise = applyLoop (i + 1) $! f i v

-- | Apply a function to its result sequentially.
apply_ :: (a -> a) -> Int -> a -> a
apply_ f = apply (\_ v -> f v)