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、他のパッケージモジュール内の数百の解析ツリーデータ型とコンストラクターを個別に検討することを回避する方法はないと思います。-詳細なチュートリアルで理解できます。