myCycle xs = foldr (step xs) [] [1..]

where step xs x acc = xs ++ acc

Is this cheating? We have to sneak infinity in there somehow :)

]]>`myCycle`

function. The infinity comes from the recursion, not `foldr`

.
]]>`foldr (:) [4,5,6] xs`

, this will append [4,5,6] to the end of xs. (Technically it creates a new list by replacing each cons with cons and the nil at the end with [4,5,6]). Since we can do append, all we need to do is append ourselves to the end of the list:
myCycle xs = foldr (:) (myCycle xs) xs

]]>