問題タブ [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コアへのコンパイル
GHCコアを生成する単純な言語のフロントエンドを作成したいと思います。次に、この出力を取得して、通常のGHCパイプラインで実行します。このページによると、ghcコマンドから直接行うことはできません。それをする方法があるかどうか疑問に思います。
理想的には、ghc-apiへのいくつかの関数呼び出しを期待していますが、GHCのソースでの(それほど広範囲ではない)ハッキングを含む提案も受け入れています。どんなポインタも役に立ちます!
haskell - GHC API-GHC 7.2を使用してコンパイルされたモジュールからHaskellコードを動的にロードする方法は?
モジュールからコンパイルされたコードを動的にロードするためにGHCAPIを使用する既存のHaskell関数があります。これは、ブログ投稿「 Haskellでのモジュールの動的コンパイルとロード」のコードに基づいています。
コードはGHC7.0で正常に機能しますが、GHC APIが変更されたため、GHC7.2でコンパイルするには少し変更する必要がありました。
このコードは、GHC7.2でランタイムエラーをスローするようになりました。
コードは
参考までに、完全なコードはFFI.hs(github.com)でオンラインで入手できます。
誰かがこの問題を修正または回避する方法を知っていますか?
また、これはGHC7.2での新しいSafeHaskellの変更が原因である可能性がありますか、それともGHC APIの変更が原因である可能性がありますか?
haskell - 「パニック:不可能が起こった」を処理し、Haskellで続行する方法
GHC APIを使用してモジュールをロードし、式のタイプを取得する次のコードがあります。
式がタイプチェックしない場合、プログラム全体が次のようにクラッシュします。
プログラムがクラッシュしないようにするにはどうすればよいですか?どの式のタイプが正常にチェックされ、どの式がチェックされなかったかを知りたいだけです。
haskell - GHC APIの動的ロードは、インストールされたパッケージのモジュールでのみ機能しますか?
この質問への回答で説明されている方法に従うようにしています。
作業ディレクトリにファイルがあり、関数をロードしようとしていExampleModule.o
ます。しかし、エラーメッセージが表示されます (詳細レベルが 3 に設定されています):ExampleModule.hi
ExampleModule.f
packageIdString (thisPackage dynflags)
です"main"
。_
インストール済みのパッケージからしかモジュールをロードできないためだと思います。私は正しいですか?load
関数のようにスタンドアロンのオブジェクトファイルから動的に関数をロードする方法はありますplugins
が、GHC APIを使用していますか?
haskell - GHC-api と型検査クラスの制約
ghc-api を使用して、単純な ghci のようなコンソールを構築しようとしています。Type
を使用して の式を抽出exprType
し、それらを評価できるようになりました。式の型が特定のクラスのインスタンスを持っているかどうかを確認する簡単な方法はありますか?
編集:私が探している関数には が必要なようですがInstEnv
、それを見つける場所がわかりません。
haskell - モジュールをレコードに具体化する
任意のモジュールがあるとします
、foo
、bar
およびbaz
が正しく実装されている場合など。
このモジュールを、自動生成されたデータ型と対応するオブジェクトに具体化したいと思います。
名前は元のモジュールと正確に同じでなければなりません。
これを手動で行うこともできますが、それは非常に面倒なので、このタスクを実行するためのコードを書きたいと思います。
そのようなタスクにアプローチする方法がよくわかりません。Template Haskell はモジュールを検査する方法を提供しますか? GHC api にフックする必要がありますか? それとも、ハドック ページをスクレイピングするなど、よりアドホックなアプローチでうまくいくでしょうか?
haskell - 読み込まれたターゲットの ModuleName を決定する
ModuleName
APIを使用してghcにロードしたばかりのファイルをどのように判断するのだろうかと思っていました。
API のドキュメントを見ると、ファイルをロードする前にモジュール名を知っていると常に想定されています。
依存関係グラフを上位で並べ替えて最後のモジュールを選択しようとしましたが、ロードされたファイルが常に返されるとは限りません。
私が以前に実行できた方法は、GHC ソース コードを変更して、この情報をHscEnv
.
への呼び出しがload
それを返すならいいのですが、GHCi がファイルをロードするときにこれを知っているので、すでにそれを行う方法があるに違いありません。
haskell - GHCAPIを使用する場合のカバールパッケージの検索
GHCAPIを使用してhaskellファイルをタイプチェックするプログラムを作成しようとしています。ローカルファイルで機能するタイプチェックを取得しましたが、特定のcabalパッケージも利用可能にする必要があります(この実行可能ファイルが含まれるのと同じパッケージ)。このインポート依存関係を追加するにはどうすればよいですか?
また、ghcコマンドラインを使用してコンパイルしてこれを理解しようとしましghc -package PKG-VER --make Test.hs -v
たが、ローカルディレクトリでインポートを検索するだけのようです。
私の現在のコードは次のようになります。
haskell - Haskell GHC 動的コンパイルは最初のコンパイルでのみ機能します
ここに投稿されたGHCチュートリアルと、私が尋ねた以前のスタックオーバーフローの質問のアドバイスに従ってこのコードを変更した後、文字列を出力する関数printを使用してTest.hsでモジュールをコンパイルおよび実行できるプログラムを作成しましたスクリーン:
コメントに記載されているように、このコードの問題は、最初に実行したとき (Test.hs がまだコンパイルされていないとき) にしか機能しないように見えることです。コードをもう一度実行しようとすると、次のエラーが表示されます。
これは、コードが既にコンパイルされているという事実と関係があると思います。.hi ファイルと .o ファイルを削除してプログラムを再度実行すると、プログラムは正しく実行され、正しい出力が表示されます。私は何が欠けていますか?現在ghcバージョン7.4.1を使用しています
(注: GHC API を調べてみましたが、mkTopLevEnv への参照が見つかりませんでした)
haskell - 文字列をHaskellプログラムとして扱う
大規模な大学プロジェクトのごく一部として、本質的に非常に粗雑なIDEを作成する必要があります。アイデアは、gtkテキストボックスから入力を受け取り、その文字列を.hsファイルにあるかのように扱い、その中の関数を評価することです。
私の主なアプローチは、GHCAPIを使用してテスト関数をコンパイルおよび評価することでした。私はすでに.hsファイルからコンパイルするためにおもちゃの例を動作させることができました。GHCのTargetデータ型には、StringBufferからターゲットを取得するためのオプションのコンストラクターがあったため、コードを変更して、StringBufferからターゲットを機能させることにしました。
次のコードは、その時点でテキストボックスにあります。
ただし、これは機能していないようです。エラーが発生します:
私は何が間違っているのですか?私はこのコードがどのように機能するかについて何かを決定的に誤解していると感じています。
私に提案されたこの方法の代わりに、ヒントやミューバルなどを使用してテキストボックス内のテキストを評価することもできます。これは、単一の関数を個別に評価したい場合は正常に機能するように見えますが、同じソースファイル内で定義された他の4つの関数を実行するコンテキストに依存する関数を評価したい場合は、このスケールでしょうか?