C++-style type promotion for Haskell's numeric hierarchy