Примеры с пакетом Haskell-src-exts
Я работаю с Haskell и хочу создать средство проверки типов для этого языка. Для этого мне нужен способ его синтаксического анализа, и я знаю, что Haskell-src-exts хорошо подходит для этой работы. Однако я не имею ни малейшего представления о том, как работает этот пакет; Я пытался найти несколько примеров / руководств в Интернете, но безрезультатно. Может кто-нибудь мне помочь? Кто-нибудь знает какой-нибудь учебник или, может быть, может сослаться на книгу, содержащую примеры этого пакета? Я также готов попробовать другой пакет, если он хорошо описан и содержит множество примеров.
Ответы
Удобная точка входа есть parseFile. Если для парсинга используется следующая программа:
module HelloParser where
import Language.Haskell.Exts
main = print =<< parseFile "HelloParser.hs"
затем он производит проанализированный вывод (без SrcSpanInfoзначений и переформатированный):
ParseOk
(Module (Just (ModuleHead (ModuleName "HelloParser") Nothing Nothing)) []
[ ImportDecl { importModule = ModuleName "Language.Haskell.Exts"
, importQualified = False
, importSrc = False
, importSafe = False
, importPkg = Nothing
, importAs = Nothing
, importSpecs = Nothing} ]
[ PatBind
(PVar (Ident "main"))
(UnGuardedRhs (InfixApp
(Var (UnQual (Ident "print")))
(QVarOp (UnQual (Symbol "=<<")))
(App
(Var (UnQual (Ident "parseFile")))
(Lit (String "HelloParser.hs" "HelloParser.hs")))))
Nothing ])
что кажется относительно читаемым.
Чтобы выполнить задачу проверки типов в Haskell, я не думаю, что есть какой-либо способ избежать индивидуального рассмотрения сотен типов данных и конструкторов дерева синтаксического анализа Language.Haskell.Exts.Syntaxи других модулей пакета, поэтому я не уверен, насколько дальше будет -depth tutorial поможет вам.