Working through Okasaki's "Purely Functional Data Structures" in Haskell