Przykłady z pakietem Haskell-src-exts
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
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ść.