問題タブ [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.

0 投票する
4 に答える
1803 参照

haskell - GHC を使用して Haskell を解析および型チェックするためのチュートリアルが必要です

Haskell コードを分析するプロジェクトに取り組んでいます。ソースを解析して型を推測するために、独自のコードを書くのではなく、GHC を使用することにしました。現在、私は Haddock のドキュメントをめくっていますが、なかなか進んでいません。誰か良いチュートリアルを知っていますか?

編集:明確にするために、私は hlint のようなものを探していません。Haskell コードのランタイム特性を分析する独自のツールを作成しているので、別の hlint を作成しているようなものです。私が探しているのは、基本的に wiki ページGHC As a libraryの拡張です。

0 投票する
3 に答える
2741 参照

haskell - GHC API を使用した Haskell ステートメント/式の評価

私が書いているツール ( http://hackage.haskell.org/package/explore ) の場合、実行時に haskell 関数定義を読み取り、それらをツールの値に適用し、アプリケーションの結果を取得する方法が必要です.

GHC (6.10.4 または 6.12.1) API を使用した非常に基本的な例を誰か教えてもらえますか?

実行時にファイルから読み込まれる関数定義の例:

期待されるプログラム出力

!!アップデート!!
簡単な回答を投稿しましたが、実行ディレクトリにオブジェクト ファイルが作成されます。これを回避し、すべてのファイル IO を回避するためのヒントは大歓迎です。また、メモリ内ですべてを実行するバージョンも見たいです。たとえば、ユーザーが GUI で関数定義を提供し、コンパイル/評価によってオブジェクト ファイルが作成されません。

0 投票する
2 に答える
377 参照

haskell - GHC API を使用して、コンパイル中にプログラムを変更することは可能ですか?

GHC コンパイル プロセスに便乗し、そのコア表現を変更することにより、コンパイラの最適化の実装をテストしたいと考えています。アイデアは次のようなものを持つことです:

ここでmodifyコア表現を取り、変更されたバージョンを返します。ただし、このコードは (modify がまったく何もしない場合でも) 失敗し、あまり役に立たないメッセージが表示されます。

これを機能させる方法、またはこの方法でコード変換を実装することさえ可能かどうかについてのアイデアはありますか?

0 投票する
1 に答える
422 参照

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ファイルに含めて機能させる簡単な方法はありますか?

0 投票する
2 に答える
1023 参照

haskell - GHCのAPIまたはヒントを使用して、コンパイル済みのバイナリから既知の関数をインポートする

モジュールがあり、その中にTarget関数Target.accessMeがあります。このモジュールをなんらかの方法でコンパイルしてから、ソースコードを削除します。

さて、別のプログラムを動的にインポートするには、どのような一連の難解な呪文を実行する必要がありTarget.accessMeますか?accessMeこのプログラムは、のタイプを事前に知っています。また、のソースコードがTarget利用できないことも考慮してください。

pluginsパッケージはこれを達成することができますが、Windowsでの作業に深刻な問題があるようです。のソースを確認しましたpluginsが、理解できません。

を使用してみましHintたが、ソースがあるコードを評価する方法しかわかりません。

助けてくれてありがとう!

0 投票する
1 に答える
187 参照

haskell - ソースからコンパイルされたGHCのGHCAPIを使用する

クライアントプログラム内で、GHCの修正バージョンのGHCAPIを使用したいと思います。GHCソースを取得し、変更されたGHCをビルドしてインストールするのは簡単ですが、変更されたGHCをインストールすると、すべての古い(Cabal)依存関係が壊れます。

したがって、ghc -vが言うように、GHCAPIを使用することはできません。

パッケージghc-7.0.3-...依存関係が欠落しているか、再帰的であるため、使用できません:..。

続行する方法についての手がかりはありますか?

ありがとう!、

ランジット。

0 投票する
2 に答える
1274 参照

haskell - Haskell の unsafePerformIO によるグローバル変数

GHC API では、呼び出しの前に何らかの初期化が行われる必要があります。具体的には、parseStaticFlags一度だけ呼び出すことができます。

runGhc :: MaybeFilePath :: Ghc a -> IO aいくつかの GHC API メソッドを実行するために複数回呼び出すことができる関数があります。ただし、その初期化の一部は、その関数が最初に呼び出されたときにのみ発生する必要があります。

Yi次のようなグローバル変数を作成できることをソースから覚えているようです

そのため、呼び出すモナド アクションでrunGhc使用できます。

しかし、それがどのように行われたかを正確に思い出すことはできません。このコードは、runMonada をラップするモナドの関数にありGhcMonadます。using が純粋でも機能的でもないことは十分承知していunsafePerformIOますが、(当時は) これが実用的な結果を達成するための最良の方法でした。

[編集: 実用的なソリューション:

そのため、呼び出すモナド アクションでrunGhc使用できます。

0 投票する
2 に答える
349 参照

haskell - ヒントで最上位モジュールをメインに設定できないのはなぜですか

Hint(Language.Haskell.Interpreter)で最上位モジュールを「メイン」に設定できないのはなぜですか?

デモをさせてください:

結果は次のとおりです。

0 投票する
1 に答える
477 参照

haskell - ヒントで解釈を強制するにはどうすればよいですか

Hint (Language.Haskell.Interpreter) で解釈モードを強制するにはどうすればよいですか?

私はこのコードを持っています:

結果は(ここからの回答に基づいて):

GHC が test.o! を見つけた場合のみ

私はもう試した

0 投票する
1 に答える
202 参照

haskell - Haskell抽象構文式の動的ローディング

GHC APIなどを使用して、テキストソースモジュールではなく、haskell-src-extsExpタイプと同様のAST式をロードできますか?このようにして、コードの生成と解析にかかる時間を節約できます。