問題タブ [ghc-api]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
haskell - GHC を使用して Haskell を解析および型チェックするためのチュートリアルが必要です
Haskell コードを分析するプロジェクトに取り組んでいます。ソースを解析して型を推測するために、独自のコードを書くのではなく、GHC を使用することにしました。現在、私は Haddock のドキュメントをめくっていますが、なかなか進んでいません。誰か良いチュートリアルを知っていますか?
編集:明確にするために、私は hlint のようなものを探していません。Haskell コードのランタイム特性を分析する独自のツールを作成しているので、別の hlint を作成しているようなものです。私が探しているのは、基本的に wiki ページGHC As a libraryの拡張です。
haskell - GHC API を使用した Haskell ステートメント/式の評価
私が書いているツール ( http://hackage.haskell.org/package/explore ) の場合、実行時に haskell 関数定義を読み取り、それらをツールの値に適用し、アプリケーションの結果を取得する方法が必要です.
GHC (6.10.4 または 6.12.1) API を使用した非常に基本的な例を誰か教えてもらえますか?
実行時にファイルから読み込まれる関数定義の例:
期待されるプログラム出力
!!アップデート!!
簡単な回答を投稿しましたが、実行ディレクトリにオブジェクト ファイルが作成されます。これを回避し、すべてのファイル IO を回避するためのヒントは大歓迎です。また、メモリ内ですべてを実行するバージョンも見たいです。たとえば、ユーザーが GUI で関数定義を提供し、コンパイル/評価によってオブジェクト ファイルが作成されません。
haskell - GHC API を使用して、コンパイル中にプログラムを変更することは可能ですか?
GHC コンパイル プロセスに便乗し、そのコア表現を変更することにより、コンパイラの最適化の実装をテストしたいと考えています。アイデアは次のようなものを持つことです:
ここでmodify
コア表現を取り、変更されたバージョンを返します。ただし、このコードは (modify がまったく何もしない場合でも) 失敗し、あまり役に立たないメッセージが表示されます。
これを機能させる方法、またはこの方法でコード変換を実装することさえ可能かどうかについてのアイデアはありますか?
windows - アプリケーション用のGHCAPIをWindowsにデプロイする簡単な方法
GHCAPIにアクセスする必要があるアプリケーションをWindowsにデプロイしたいと思います。Wikiの最初の簡単な例を使用します。
http://www.haskell.org/haskellwiki/GHC/As_a_library
次のエラーが発生します(haskellプラットフォームを搭載した1台のマシンでコンパイルされ、別のクリーンなWindowsインストールで実行されます):test.exe:C:\ haskell \ lib\package.conf.dにパッケージデータベースが見つかりません
アプリケーションを単純なzipファイルとしてデプロイし、ユーザーが何もインストールする必要がないようにしたい。必要なGHCのものをそのzipファイルに含めて機能させる簡単な方法はありますか?
haskell - GHCのAPIまたはヒントを使用して、コンパイル済みのバイナリから既知の関数をインポートする
モジュールがあり、その中にTarget
関数Target.accessMe
があります。このモジュールをなんらかの方法でコンパイルしてから、ソースコードを削除します。
さて、別のプログラムを動的にインポートするには、どのような一連の難解な呪文を実行する必要がありTarget.accessMe
ますか?accessMe
このプログラムは、のタイプを事前に知っています。また、のソースコードがTarget
利用できないことも考慮してください。
plugins
パッケージはこれを達成することができますが、Windowsでの作業に深刻な問題があるようです。のソースを確認しましたplugins
が、理解できません。
を使用してみましHint
たが、ソースがあるコードを評価する方法しかわかりません。
助けてくれてありがとう!
haskell - ソースからコンパイルされたGHCのGHCAPIを使用する
クライアントプログラム内で、GHCの修正バージョンのGHCAPIを使用したいと思います。GHCソースを取得し、変更されたGHCをビルドしてインストールするのは簡単ですが、変更されたGHCをインストールすると、すべての古い(Cabal)依存関係が壊れます。
したがって、ghc -vが言うように、GHCAPIを使用することはできません。
パッケージghc-7.0.3-...依存関係が欠落しているか、再帰的であるため、使用できません:..。
続行する方法についての手がかりはありますか?
ありがとう!、
ランジット。
haskell - Haskell の unsafePerformIO によるグローバル変数
GHC API では、呼び出しの前に何らかの初期化が行われる必要があります。具体的には、parseStaticFlags
一度だけ呼び出すことができます。
runGhc :: MaybeFilePath :: Ghc a -> IO a
いくつかの GHC API メソッドを実行するために複数回呼び出すことができる関数があります。ただし、その初期化の一部は、その関数が最初に呼び出されたときにのみ発生する必要があります。
Yi
次のようなグローバル変数を作成できることをソースから覚えているようです
そのため、呼び出すモナド アクションでrunGhc
使用できます。
しかし、それがどのように行われたかを正確に思い出すことはできません。このコードは、runMonad
a をラップするモナドの関数にありGhcMonad
ます。using が純粋でも機能的でもないことは十分承知していunsafePerformIO
ますが、(当時は) これが実用的な結果を達成するための最良の方法でした。
[編集: 実用的なソリューション:
そのため、呼び出すモナド アクションでrunGhc
使用できます。
haskell - ヒントで最上位モジュールをメインに設定できないのはなぜですか
Hint(Language.Haskell.Interpreter)で最上位モジュールを「メイン」に設定できないのはなぜですか?
デモをさせてください:
結果は次のとおりです。
haskell - ヒントで解釈を強制するにはどうすればよいですか
Hint (Language.Haskell.Interpreter) で解釈モードを強制するにはどうすればよいですか?
私はこのコードを持っています:
結果は(ここからの回答に基づいて):
GHC が test.o! を見つけた場合のみ
私はもう試した
haskell - Haskell抽象構文式の動的ローディング
GHC APIなどを使用して、テキストソースモジュールではなく、haskell-src-extsExp
タイプと同様のAST式をロードできますか?このようにして、コードの生成と解析にかかる時間を節約できます。