Haskell-src-extsパッケージの例
Oct 24 2020
私はHaskellを使用しており、この言語のタイプチェッカーを作成したいと考えています。これを行うには、それを解析する方法が必要であり、Haskell-src-extsがその仕事に適していることを知っています。ただし、このパッケージがどのように機能するかについては、少しもわかりません。私はインターネット上でいくつかの例/チュートリアルを見つけようとしましたが、結果はありませんでした。誰かが私を助けることができますか?誰かがチュートリアルを知っていますか、またはこのパッケージに関する例を含む本を私に参照できますか?十分に説明されていて、例がたくさんある場合は、別のパッケージを試すこともできます。
回答
2 K.A.Buhr Oct 23 2020 at 23:16
便利なエントリポイントはparseFileです。次のプログラムを使用してそれ自体を解析する場合:
module HelloParser where
import Language.Haskell.Exts
main = print =<< parseFile "HelloParser.hs"
次に、解析された出力を生成します(SrcSpanInfo値を取り除いて再フォーマットします)。
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 ])
これは比較的読みやすいようです。
Haskellの型チェックのタスクを完了するためにLanguage.Haskell.Exts.Syntax、他のパッケージモジュール内の数百の解析ツリーデータ型とコンストラクターを個別に検討することを回避する方法はないと思います。-詳細なチュートリアルで理解できます。