Exemplos com o pacote Haskell-src-exts

Oct 24 2020

Estou trabalhando com Haskell e quero construir um verificador de tipos para essa linguagem. Para fazer isso, preciso analisá-lo e sei que Haskell-src-exts se adapta bem ao trabalho. No entanto, não tenho a menor ideia de como esse pacote funciona; Já tentei encontrar alguns exemplos / tutoriais na internet sem nenhum resultado. Alguém pode me ajudar? Alguém conhece algum tutorial, ou talvez possa me consultar um livro que contenha exemplos sobre este pacote? Também estou aberto para experimentar outro pacote, se estiver bem descrito e vier com uma carga de exemplos.

Respostas

2 K.A.Buhr Oct 23 2020 at 23:16

Um ponto de entrada conveniente é parseFile. Se o seguinte programa for usado para analisar a si mesmo:

module HelloParser where

import Language.Haskell.Exts

main = print =<< parseFile "HelloParser.hs"

em seguida, ele produz a saída analisada (sem SrcSpanInfovalores e reformatada):

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 legível.

Para completar a tarefa de verificação de tipo Haskell, não acho que haja nenhuma maneira de evitar a consideração individual das centenas de tipos de dados de árvore de análise e construtores em Language.Haskell.Exts.Syntaxe os outros módulos de pacote, então não tenho certeza de quanto mais em -profundado tutorial pode te ajudar.