Ejemplos con el paquete Haskell-src-exts
Estoy trabajando con Haskell y quiero crear un comprobador de tipos para este idioma. Para hacer esto, necesito una forma de analizarlo y sé que Haskell-src-exts se adapta bien al trabajo. Sin embargo, no tengo la menor idea de cómo funciona este paquete; Intenté encontrar algunos ejemplos / tutoriales en Internet sin ningún resultado. ¿Alguien puede ayudarme? ¿Alguien sabe algún tutorial, o tal vez pueda hacerme referencia a un libro que contiene ejemplos sobre este paquete? También estoy dispuesto a probar otro paquete, si está bien descrito y viene con un montón de ejemplos.
Respuestas
Un punto de entrada conveniente es parseFile. Si se usa el siguiente programa para analizarse a sí mismo:
module HelloParser where
import Language.Haskell.Exts
main = print =<< parseFile "HelloParser.hs"
luego produce la salida analizada (despojada de SrcSpanInfovalores y formateada):
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 ])
que parece relativamente legible.
Para completar la tarea de verificación de tipos de Haskell, no creo que haya ninguna forma de evitar la consideración individual de los cientos de tipos de datos y constructores del árbol de análisis Language.Haskell.Exts.Syntaxy los otros módulos del paquete, por lo que no estoy seguro de cuánto más en -El tutorial de profundidad puede ayudarte.