True multi stage Haskell