Haskell-src-exts paketine örnekler

Oct 24 2020

Haskell ile çalışıyorum ve bu dil için bir typechecker oluşturmak istiyorum. Bunu yapmak için, onu ayrıştırmanın bir yolunu bulmalıyım ve Haskell-src-exts'in işe çok uygun olduğunu biliyorum. Ancak bu paketin nasıl çalıştığına dair en ufak bir fikrim yok; Herhangi bir sonuç olmadan internette bazı örnekler / öğreticiler bulmaya çalıştım. Biri bana yardım edebilir mi? Herhangi bir öğretici biliyor mu, ya da belki bana bu paket hakkında örnekler içeren bir kitaba başvurabilir mi? İyi tanımlanmışsa ve bir sürü örnekle geliyorsa, başka bir paketi denemeye de açığım.

Yanıtlar

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

Uygun bir giriş noktası parseFile. Aşağıdaki program kendini ayrıştırmak için kullanılıyorsa:

module HelloParser where

import Language.Haskell.Exts

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

daha sonra ayrıştırılmış çıktıyı üretir ( SrcSpanInfodeğerlerden arındırılmış ve yeniden biçimlendirilmiş):

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

bu nispeten okunabilir görünüyor.

Haskell tip kontrolü görevini tamamlamak için, yüzlerce ayrıştırma ağacı veri tipinin ve kurucunun Language.Haskell.Exts.Syntaxve diğer paket modüllerinin bireysel olarak değerlendirilmesinden kaçınmanın bir yolu olduğunu sanmıyorum , bu yüzden daha ne kadar ileride olduğundan emin değilim -depth öğretici sizi alabilir.