Contoh dengan paket Haskell-src-exts

Oct 24 2020

Saya bekerja dengan Haskell dan saya ingin membuat pemeriksa ketik untuk bahasa ini. Untuk melakukan ini, saya memerlukan cara untuk menguraikannya dan saya tahu bahwa Haskell-src-exts cocok untuk pekerjaan itu. Namun saya sama sekali tidak tahu bagaimana paket ini bekerja; Saya sudah mencoba mencari beberapa contoh / tutorial di internet tanpa hasil apapun. Ada yang bisa bantu saya? Adakah yang tahu beberapa tutorial, atau mungkin bisa mereferensikan saya buku yang berisi contoh tentang paket ini? Saya juga terbuka untuk mencoba paket lain, jika dijelaskan dengan baik dan dilengkapi dengan banyak contoh.

Jawaban

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

Titik masuk yang nyaman adalah parseFile. Jika program berikut digunakan untuk mengurai sendiri:

module HelloParser where

import Language.Haskell.Exts

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

kemudian itu menghasilkan keluaran yang diurai (dilucuti dari SrcSpanInfonilai dan diformat ulang):

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

yang tampaknya relatif mudah dibaca.

Untuk menyelesaikan tugas pemeriksaan tipe Haskell, saya rasa tidak ada cara untuk menghindari pertimbangan individu dari ratusan tipe data parse tree dan konstruktor Language.Haskell.Exts.Syntaxdan modul paket lainnya, jadi saya tidak yakin seberapa jauh lebih dalam tutorial -dalam bisa membuat Anda.