Нужен учебник по использованию GHC для синтаксического анализа и проверки типов Haskell

StackOverflow https://stackoverflow.com/questions/2242986

  •  19-09-2019
  •  | 
  •  

Вопрос

Я работаю над проектом по анализу кода на Haskell.Я решил использовать GHC для анализа исходного кода и вывода типов, а не писать для этого свой собственный код.Прямо сейчас я с трудом просматриваю документы по Хэддоку, но продвигаюсь медленно.Кто-нибудь знает хороший учебник?

Редактировать:Чтобы уточнить, я не ищу что-то вроде hlint.Я пишу свой собственный инструмент для анализа характеристик времени выполнения кода на Haskell, так что это похоже на то, что я пишу другой hlint.То, что я ищу, - это, по сути, расширение вики-страницы GHC Как библиотека.

Это было полезно?

Решение

Адам, это довольно тяжелое катание на санях.С момента своего запуска в 2006 году GHC API был недостаточно документирован.Я бы порекомендовал попытаться найти несколько небольших приложений, написанных с использованием GHC API.Вероятно, правильное место, чтобы спросить Список рассылки пользователей GHC.

Одной из таких программ является ghctags, который поставляется с исходным деревом GHC.Я написал исходную версию, но не могу ее рекомендовать — в коде так много следов, что я больше не могу за ней следить.Лучшее, что я могу сказать, это то, что, хотя этому и трудно следовать, по крайней мере, это маленький и за ним трудно следовать — он намного проще, чем все GHC.

Другие советы

Ах!нашел гораздо лучшую точку входа в документацию: http://www.haskell.org/ghc/docs/latest/html/libraries/ghc-6.12.1/GHC.html

Я обновил вики-страница с этим примером:

Здесь мы демонстрируем вызов parseModule, typecheckModule, desugarModule, getNamesInScope и getModuleGraph.Это работает для платформы Haskell, ghc-6.12.1.

ошибки:libdir жестко запрограммирован.См. пути ghc выше.

--A.hs
--invoke: ghci -package ghc A.hs
import GHC
import Outputable

--import GHC.Paths ( libdir )
import DynFlags ( defaultDynFlags )
libdir = "/usr/local/lib/ghc-6.12.1"
targetFile = "B.hs"

main = do
   res <- example
   print $ showSDoc ( ppr res )

example = 
    defaultErrorHandler defaultDynFlags $ do
      runGhc (Just libdir) $ do
        dflags <- getSessionDynFlags
        setSessionDynFlags dflags
        target <- guessTarget targetFile Nothing
        setTargets [target]
        load LoadAllTargets
        modSum <- getModSummary $ mkModuleName "B"
        p <- parseModule modSum
        t <- typecheckModule p
        d <- desugarModule t
        l <- loadModule d
        n <- getNamesInScope
        c <- return $ coreModule d

        g <- getModuleGraph
        mapM showModule g     
        return $ (parsedSource d,"/n-----/n",  typecheckedSource d)

--B.hs
module B where

main = print "Hello, World!"

Если синтаксический анализ — это самое важное, я рекомендую haskell-src-exts.Он анализирует весь Haskell98, целую кучу расширений и очень прост в использовании.

Тот самый Хаскелл - вики и Документация GHC вероятно, здесь есть то, что вы ищете, если вы ищете статьи.Также инструментом, который вас может заинтересовать, является хлинт, для проверки синтаксиса и других сведений о вашем исходном коде.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top