Temporarily get back to cpp. Turned out write something require
non-mutable DS was an advanced topic in Haskell.