Beispiele mit dem Paket Haskell-src-exts

Oct 24 2020

Ich arbeite mit Haskell und möchte einen Typechecker für diese Sprache erstellen. Dazu brauche ich eine Möglichkeit, es zu analysieren, und ich weiß, dass Haskell-src-exts gut zum Job passt. Ich habe jedoch nicht die geringste Ahnung, wie dieses Paket funktioniert. Ich habe versucht, einige Beispiele / Tutorials im Internet zu finden, ohne ein Ergebnis zu erzielen. Kann mir jemand helfen? Kennt jemand ein Tutorial oder kann er mir vielleicht ein Buch empfehlen, das Beispiele zu diesem Paket enthält? Ich bin auch offen, ein anderes Paket auszuprobieren, wenn es gut beschrieben ist und eine Menge Beispiele enthält.

Antworten

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

Ein bequemer Einstiegspunkt ist parseFile. Wenn das folgende Programm verwendet wird, um sich selbst zu analysieren:

module HelloParser where

import Language.Haskell.Exts

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

dann wird die analysierte Ausgabe erzeugt (ohne SrcSpanInfoWerte und ohne Neuformatierung):

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

das scheint relativ lesbar.

Um die Aufgabe der Typprüfung von Haskell abzuschließen, gibt es meines Erachtens keine Möglichkeit, die individuelle Berücksichtigung der Hunderte von Analysebaum-Datentypen und -Konstruktoren in Language.Haskell.Exts.Syntaxund der anderen Paketmodule zu vermeiden. Daher bin ich mir nicht sicher, wie weit ein weiteres in -tief Tutorial kann Sie bekommen.