Как написать что-то вроде следующего на Haskell:
showSquare :: (Show a, Num a) => a -> String
showSquare x = "The square of " ++ (show x) ++ " is " ++ (show (x * x))
showSquare :: (Show a, not Num a) => a -> String
showSquare x = "I don't know how to square " ++ (show x)
По сути, что-то вроде boost ::enable _if в C++.
Расширения GHC в порядке.