Przykłady z pakietem Haskell-src-exts

Oct 24 2020

Pracuję z Haskellem i chcę zbudować narzędzie do sprawdzania typów dla tego języka. Aby to zrobić, potrzebuję sposobu, aby go przeanalizować i wiem, że Haskell-src-exts dobrze pasuje do tego zadania. Jednak nie mam najmniejszego pojęcia, jak działa ten pakiet; Próbowałem znaleźć kilka przykładów / samouczków w Internecie bez żadnego rezultatu. Czy ktoś może mi pomóc? Czy ktoś zna jakiś poradnik, a może może wskazać mi książkę, która zawiera przykłady dotyczące tego pakietu? Jestem również otwarty na wypróbowanie innego pakietu, jeśli jest dobrze opisany i zawiera mnóstwo przykładów.

Odpowiedzi

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

Wygodnym punktem wejścia jest parseFile. Jeśli następujący program jest używany do analizowania samego siebie:

module HelloParser where

import Language.Haskell.Exts

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

następnie generuje przeanalizowane dane wyjściowe (pozbawione SrcSpanInfowartości i ponownie sformatowane):

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

który wydaje się stosunkowo czytelny.

Aby ukończyć zadanie sprawdzania typu Haskell, nie sądzę, aby można było w jakikolwiek sposób uniknąć indywidualnego rozważania setek typów danych i konstruktorów drzewa parsowania w Language.Haskell.Exts.Syntaxi innych modułach pakietu, więc nie jestem pewien, o ile dalej -depth tutorial może cię dopaść.