let repeat n f a =
  let rec inner made a =
    if made >= n
    then `Ok a
    else
      (match f a with
       | `Ok a -> inner (made + 1) a
       | `Error e -> `Error ((e, made)))
  in inner 0 a