Esempi con il pacchetto Haskell-src-exts

Oct 24 2020

Sto lavorando con Haskell e desidero creare un controllo tipografico per questa lingua. Per fare questo ho bisogno di un modo per analizzarlo e so che Haskell-src-exts si adatta bene al lavoro. Tuttavia non ho la minima idea di come funzioni questo pacchetto; Ho provato a trovare alcuni esempi / tutorial su Internet senza alcun risultato. Qualcuno può aiutarmi? Qualcuno conosce qualche tutorial o forse può farmi riferimento a un libro che contiene esempi su questo pacchetto? Sono anche aperto a provare un altro pacchetto, se è ben descritto e viene fornito con un carico di esempi.

Risposte

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

Un comodo punto di ingresso è parseFile. Se il seguente programma viene utilizzato per analizzare se stesso:

module HelloParser where

import Language.Haskell.Exts

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

quindi produce l'output analizzato (privato dei SrcSpanInfovalori e riformattato):

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 ])

che sembra relativamente leggibile.

Per completare l'attività di controllo del tipo Haskell, non credo che ci sia alcun modo per evitare la considerazione individuale delle centinaia di tipi di dati e costruttori di alberi di analisi Language.Haskell.Exts.Syntaxe degli altri moduli del pacchetto, quindi non sono sicuro di quanto altro ancora in -Il tutorial approfondito può farti.