4 | import Control.MonadRec
5 | import Control.Monad.Identity
8 | replicateM : MonadRec m => Nat -> m a -> m (List a)
9 | replicateM n ma = iterM (\_,as => (:: as) <$> ma) id Nil n
12 | replicateTR : Nat -> a -> List a
13 | replicateTR n va = run Nil n
16 | run : List a -> Nat -> List a
18 | run xs (S k) = run (va :: xs) k
21 | iterateTR : Nat -> (a -> a) -> a -> List a
22 | iterateTR n f = run Nil n
25 | run : List a -> Nat -> a -> List a
26 | run xs 0 _ = reverse xs
27 | run xs (S k) va = run (va :: xs) k (f va)