Кажется, невозможно проанализировать ограничения класса типов на функции, типы данных и тому подобное. Однако похоже, что ghci это делает.
Prelude> :t show
show :: (Show a) => a -> String
Итак ... каким-то образом он знает ограничение класса типа, так как распечатывает его. Как это происходит?