問題タブ [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 投票する
2 に答える
586 参照

c - 実行時に TemplateHaskell で生成されたコードを生成して実行することは可能ですか?

実行時に TemplateHaskell で生成されたコードを生成して実行することは可能ですか?

C を使用すると、実行時に次のことができます。

  • 関数のソースコードを作成し、
  • gcc を呼び出して .so (Linux) にコンパイルします (または llvm などを使用します)。
  • .so をロードし、
  • 関数を呼び出します。

Template Haskell でも同様のことが可能ですか?

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

debugging - GHCに直接インポートされた関数が、GHCライブラリからコピーされたソースコードを使用して記述した関数と大きく異なるのはなぜですか

問題1:これfilterはのライブラリからコピーされますが、一定数のメモリを消費する直接インポートされたとは対照的にGHC、なぜそれがますます多くのメモリを消費するのですか。filter

問題2:これfilterはのライブラリからコピーされますが、直接使用されるようGHCメモリの消費量が増えるのはなぜですか。直接インポートされるのとは対照的に、メモリの消費量増えます。elemfilter

GHCバージョン:7.4.2OS:Ubuntu12.10最適化のために-O2とコンパイル

上記filterとのelem定義は両方を意味するp = filter (==1000000000000) [0..]ので、とは徐々にガベージコレクションする必要があります。しかし、両方とも、ますます多くのメモリを消費します。そして、直接インポートされたもので定義されるものは、一定数のメモリを消費します。s = 1000000000000 `elem` [0..][0..]psrfilter

私の質問は、GHCに直接インポートされた関数が、GHCライブラリからコピーされたソースコードを使用して記述した関数と大きく異なる理由です。GHCに何か問題があるのだろうか?

さらに質問があります。上記のコードは、私が作成したプロジェクトから抽象化されたものであり、プロジェクトは「理論的にはガベージコレクションされるはずのメモリの消費量が増える」という問題にも直面しています。したがって、GHCでどの変数が非常に多くのメモリを使用しているかを見つける方法があることを知りたいと思います。

読んでくれてありがとう。

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

haskell - Haskell 式を含む文字列の型を推測する

文字列として与えられた Haskell 式の型の表現を取得する (手早く汚い) 方法が必要です。

現在、3 つのオプションが表示されます。

  • GHC API を使用してください -- しかし、ドキュメンテーションはすぐに私を失います。
  • 他の型推論ツールを使用してください -- haskell-type-exts を試すように提案されましたが、最も単純な式以外は型付けできません。私は他にそのようなツールを知りません。
  • 独自の HM 推論を展開する -- 絶対に必要でない限り、これは避ける

Haskell の合理的な基本サブセットを入力できるライブラリ/ツールで十分であるという意味で、完全なソリューションは必要ありません。

では、これを達成するための最も簡単な方法は何ですか?

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

haskell - Language.Haskell.Interpreter - IOアクションを適切に呼び出す方法は?

サンプル ファイルに従って、IO アクションを動的に呼び出してみます。

残念ながら、文字列"some string"は印刷されません。私も呼び出してみましwriteFileたが、ファイルも作成されませんでした。

では、これらの副作用を有効にするには何が必要なのでしょうか? ありがとうございました!

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

haskell - 実行時に (プラグインを使用して) 文字列から haskell 関数をコンパイルできますか?

さまざまな理由で、任意のユーザー提供コードを実行する必要があるアプリケーションがあります。(SafeHaskell はこれを素晴らしく安全にします)。これは、ディスク上の .hi ファイルからロードするのに非常に便利です。

ただし、私のプログラム設計では、これらのユーザー プログラムをデータベースに保存し、プログラムで使用できる関数に直接コンパイルできれば理想的です。

したがって、コンパイルしている関数に次のタイプがあるとします。

文字列からその関数を生成する関数を書きたいと思っています:

ここで、string には「someFunction」の haskell コード code が含まれています。

できればプラグインパッケージを使用して、これを行う方法があるかどうか誰かが知っていますか? 私はGHC APIに少し出くわしましたが、それについて、そしてそれがこれにどのように関係するのかについてはあまり知りません。

ヒントを試してみましたが、スレッドセーフではないため、私のアプリケーションには適していません。

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

haskell - GHC API を使用してコード コンパイルの「予行演習」を行う

私は Haskell 用の非常に単純なテキスト エディターに取り組んでおり、ユーザーが「チェック」を押したときにコード内の静的エラーを強調表示できるようにしたいと考えています。

GHC-APIを使用して、実際にコンパイルせずにhaskellファイルをコンパイルする「ドライラン」を行う方法はありますか? 文字列を取り、通常のコンパイルのすべてのチェックを実行できるようにしたいのですが、出力は必要ありません。GHC-API は、エラーなどを強調するために GHC からのコマンドライン出力を解析する必要がないため、理想的です。

さらに、ファイルではなく文字列に対してこのチェックを行うことは可能ですか? (そうでない場合は、一時ファイルに書き込むことができますが、これは非常に効率的ではありませんが、機能します)。

これが可能である場合、これを行う方法の例を提供または指摘していただけますか?

この質問は同じことを尋ねますが、それは 3 年前のことで、そのときの答えは「GHC-API は新しく、適切なドキュメントはまだありません」でした。だから私の希望は、ステータスが変わったことです。

編集:「ドライラン」の制限は、コンパイルがサーバー側で行われる Web ベースの設定でこれを行っているためです。そのため、ユーザーが「チェック」を押すたびに不要なディスクの読み取り/書き込みを避けたいと考えています。実行可能ファイルは、バージョンを実行する準備が整うまで、とにかく捨てられます。

0 投票する
0 に答える
339 参照

haskell - Haskell のプログラム全体の静的解析の実装のヒント

プロパティベースのテストに関する研究プロジェクトの一環として、Haskell プログラムの静的プログラム全体の分析を行う必要があります。Haskell プログラムのプログラム全体の分析を実装する方法についての提案を探しています。うまくいけば、自分で多くのインフラストラクチャを構築する必要はありません。

私が必要とする多くの機能を備えた Template Haskell を見てみましたが、重要な機能がありません: GHC で実装されている Template Haskell では、名前で関数の定義を取得する方法がないようです。(関連する SO の質問: `reify` を使用して関数の宣言を取得する方法は? )

GHC API を使用して Haskell プログラムのプログラム全体の分析を行う何らかの方法があるのではないかと思いますが、GHC API のドキュメントからこれがどのように行われるかを簡単に判断することはできません。

特に、関数呼び出しサイトが与えられた場合、対応する関数定義を検索できる必要があります。Template Haskell または GHC API ベースのソリューションに特に興味があります。

すべてのインフラストラクチャを自分で構築せずに、Haskell プログラムのプログラム全体を分析する方法はありますか?

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

haskell - ghc-mtl が ghc-7.8 でビルドに失敗する

ghc-7.8.3 で ghc-mtl-1.2.1.0 をビルドしようとしていますが、次のエラー メッセージが表示されます。

ghc-7.8.2 と同じエラー。

Ghcand/or GHCand /or と呼ばれる 9000 を超えるタイプやモジュールのどれがMonadIO これに関与しているかを突き止めようとしましたが、今のところうまくいきません。

だから私の質問は:

  • この破損の原因となる変化は何ですか?
  • 7.8.3 からダウングレードせずに修正することはできますか?
0 投票する
0 に答える
80 参照

haskell - GhcMonad で Q Exp を実行する

私はこれに似たタイプのものを探しています:

ドキュメント: GhcMonadQ ExpDynamic

2 つのコード例を組み合わせる方法を探しています。1 つはhaskell コードを動的に評価するためのもので、もう 1 つはテンプレート haskell を使用して動的に haskell を作成するためのものです。つまり、GhcMonad で Q Exp:resions を実行します。

私はこの問題に取り組み、ここに文書化する必要があります。

いくつかのアイデア

私が現在実行可能なアプローチは、式をシリアル化し、動的評価にフィードすることです。シリアライゼーションは Q モナド内で何らかの方法で行う必要があります。Exp がPpr prettyprinterクラスを実装していることを利用できるかもしれません。ただし、この方法で型の安全性を失う可能性がありますか? よりクリーンな (より衛生的な"?) 方法があるかもしれません。動的な値がどのように機能するかを理解するには、 Data.Dynamicをもう少し詳しく調べる必要があります。

編集:動的は値のみを表すことに気付きましたが、Q Exp の「宣言」を実行したいのです。動的コンテキストにデータ型を追加したいと考えています。