Extended Truth Machine
Haskell, 57 54 bytes

f 0=cycle
f n|n&lt;0=f(-n).reverse|n&gt;0=concat.replicate n


Explanation:

f 0           -- If n=0 ..
 =cycle       -- infinitely repeat the input
f n|n&lt;0       -- Otherwise, if n&lt;0 ..
 =f(-n)       -- call f with the negative of n ..
 .reverse     -- and the reverse of the input
 |n&gt;0         -- Finally, if n&gt;0 ..
 concat       -- concatenate the result of ..
 .replicate n -- repeating the input n times


-3 bytes thanks to @nimi