Введите тип строки, содержащей выражение Haskell

Мне нужен (быстрый и грязный) способ получить некоторое представление типа выражения Haskell, которое указывается в виде строки.

В настоящее время я вижу 3 варианта:

  • Использовать API GHC - однако документация теряет меня довольно быстро.
  • Используйте какой-то другой инструмент вывода вывода - мне предложили попробовать haskell-type-exts, но он не может напечатать все, кроме самых тривиальных выражений. Я не знаю другого такого инструмента.
  • Сверните мой собственный HM-инферсер - я бы избегал этого, если не было абсолютно необходимо

Мне даже не нужно полное решение, в том смысле, что библиотека/инструмент, который может набрать разумный базовый поднабор Haskell, будет достаточно для меня.

Итак, какой самый простой способ достичь этого?

Ответ 1

Пакет hint предлагает несколько ограниченный, но, возможно, более понятный интерфейс для API GHC. Возможно, этого достаточно для ваших целей? Если нет, вы можете взглянуть на источники, чтобы лучше понять, как напрямую использовать API GHC.

Вот пример программы:

import Language.Haskell.Interpreter

main :: IO ()
main = do
  r <- runInterpreter $ do
    setImports ["Prelude"]
    typeOf "map (+1)"
  either print putStrLn r

Если вы запустите, это будет напечатано

Num b => [b] -> [b]