Haskell 98 phantom types