I'd like to mention an important distinction:
cyclic' = [0,1] ++ cyclic'
cyclic'' = [0,1] ++ x
where x = cyclic''These two functions are recursive. But
cyclic = let x = 0 : y
y = 1 : x
in xis not! It uses x internally, which is recursive, but the whole cyclic isn't. This is also why they're different when compiled into the core language.
This has some important practical implications, namely that recursive functions can't be inlined, but non-recursive can.