use the new-haskell approach