Creating a circular data structure should be impossible with immutability, right? Amazingly, laziness enables this: https://wiki.haskell.org/Tying_the_Knot