Haskell: obtendo o tipo estático de uma expressão

Eu estou procurando uma função que faz o que o comando GHCi: type faz.

Idealmente, teria uma assinatura como

<code>getStaticType :: a -> String

a = getStaticType (1+2)
-- a = "(Num t) => t"

b = getStaticType zipWith
-- b = "(a -> b -> c) -> [a] -> [b] -> [c]"
</code>

(Nota: isso não tem nada a ver com Data.Dynamic. Eu só quero o tipo estático inferido do compilador. Na verdade, a função não precisaria de uma implementação de tempo de execução, pois todas as chamadas para ele poderiam ser embutidas como constantes na compilação. Estou assumindo que existe em algum lugar, já que o GHCi pode fazer isso)

questionAnswers(2)

yourAnswerToTheQuestion