Haskell: obteniendo el tipo estático de una expresión

Estoy buscando una función que haga lo que hace el comando GHCi: type.

Idealmente, tendría una firma algo así 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: esto no tiene nada que ver con Data.Dynamic. Solo quiero que se infiera el tipo estático del compilador. De hecho, la función no necesitaría una implementación en tiempo de ejecución, ya que todas las llamadas podrían incluirse como constantes en la compilación Supongo que existe en algún lugar, ya que GHCi puede hacerlo)

Respuestas a la pregunta(2)

Su respuesta a la pregunta