https://soooprmx.com/how-lazy-evaluation-works-in-haskell/
how lazy evaluation works in haskell