Haskell: uzyskanie statycznego typu wyrażenia

Szukam funkcji, która robi to, co robi polecenie GHCi: type.

Idealnie byłoby mieć podpis podobny do tego

<code>getStaticType :: a -> String

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

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

(Uwaga: nie ma to nic wspólnego z Data.Dynamic. Po prostu chcę, aby typ statyczny wywnioskowano z kompilatora. W rzeczywistości funkcja nie będzie w ogóle potrzebować implementacji środowiska wykonawczego, ponieważ wszystkie wywołania mogą być kompilowane jako stałe. Zakładam, że gdzieś istnieje, ponieważ GHCi może to zrobić)

questionAnswers(2)

yourAnswerToTheQuestion