問題タブ [ghc]

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 に答える
2801 参照

haskell - GHC (Haskell) で Control-C 例外をキャッチする

Control-C (UserInterrupt) をキャッチする非常に単純な read-eval-print-loop を Haskell で作成しました。ただし、このプログラムをコンパイルして実行すると、常に最初の Control-C がキャッチされ、2 番目の Control-C で終了コード 130 で常に中止されます。 Control-Cs は、常にこのように行われます。私は単純なものが欠けているに違いないことを知っています...助けてください、ありがとう!

注: これはベース 4 の例外であるため、Control.Exception であり、Control.OldException ではありません。

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 投票する
1 に答える
3450 参照

haskell - putStr と getLine を使用した間違った IO アクションの順序

次のコードがあります。

それを ( で) 実行するrunhaskellか、(ghc 6.10.4 で) コンパイルすると、結果は次のようになります。

Test input : asdの後に印刷されるのはなぜasdですか?

を使用するhttp://learnyouahaskell.com/のコード サンプルではputStrgetLine​​表示される出力が私のものとは異なります。プログラムを使用するとputStrLn、期待どおりに動作します(印刷、プロンプト、印刷)。

のバグghcですか、それとも動作するはずの方法ですか?

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

haskell - Haskell の CPP 拡張と複数行リテラル

複数行の文字列リテラルを含むHaskellコードでCPP拡張を使用することは可能ですか? Haskell の他の条件付きコンパイル手法はありますか?

たとえば、次のコードを見てみましょう。

のコメントを外す{-# LANGUAGE CPP #-}と、GHC はこのコードを字句エラーで反駁します。

GHC 6.12.1 を使用すると、cpphs が利用可能になります。

cpphs.compatラッパーとオプションを使用すると-pgmP cpphs.compat役立つことは確認していますが、カスタム シェル スクリプトに依存しないソリューションが必要です。-pgmP cpphs動作しません。

PS GHC < 6.12 と GHC >= 6.12 では異なるコードを使用する必要があります。プリプロセッサなしで可能ですか?

UPD。Ganesh の受け入れられた回答に加えて、別の回避策として、すべての条件宣言を別{-# LANGUAGE CPP #-}のモジュールに配置し、複数行の文字列を含むモジュールで CPP を回避することも発見しました。

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

haskell - GHC を使用して、ユーザー空間に GMP をインストールした cabal

cabal-installGNU Multi-Precision パッケージ (GMP) がインストールされていないシステムのユーザー空間で、Haskell Platform を Linux にインストールしようとしました。

GHC-6.12.1 をインストールし、LB_LIBRARY_PATHGMP をインストールした lib ディレクトリをポイントするように設定して GHCi を動作させることができましたが、次のステップで問題が発生し、cabal-install作業を開始しました。(静的に) GMP へのリンクを試行し続けました。

ldGMP がシステムにインストールされておらず、ライブラリの場所がわからず、ユーザーがインストールした GMP の場所を ld に指示できる環境変数 (私が認識している) がないため、これは失敗します。 (明らかに) 関連する-Lフラグを提供するように Cabal を構成するように指示する方法はありません。

無駄な検索とハッキングの試みの後、適切なフラグldでシステムを起動する独自のシェル スクリプトをインストールするという、ばかげて単純なアイデアにたどり着きました。ld-L

もちろん、これはシェルスクリプト 101 です。

このスクリプトをディレクトリにインストールすると、PATHすべて/usr/binの問題が解消されたように見えます。

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

haskell - Haskell:この関数のタイプは何ですか?

ghciに教えてもらう方法はありますか?

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

haskell - リストは Haskell (GHC) でどのように実装されていますか?

Haskell のリストの正確な実装の詳細に興味がありました (GHC 固有の回答は問題ありません)。それらは単純なリンク リストですか、それとも特別な最適化がありますか? すなわち:

  1. (たとえば) リストを反復処理する必要がありますlengthか?(!!)
  2. その場合、それらの値は何らかの方法でキャッシュされますか (つまり、length2 回呼び出した場合、両方を繰り返す必要がありますか)?
  3. リストの最後にアクセスするには、リスト全体を反復処理する必要がありますか?
  4. 無限リストとリスト内包表記はメモ化されていますか? (つまり、 for のfib = 1:1:zipWith (+) fib (tail fib)場合、各値は再帰的に計算されますか、それとも以前に計算された値に依存しますか?)

その他の興味深い実装の詳細は大歓迎です。前もって感謝します!

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

haskell - ghc-pkgとcabalの関係は何ですか?

Haskellでパッケージがどのように作成され、インストールされ、使用されるかに関して、 ghc-pkgcabalの関係は何ですか?

それらの役割は何ですか?どちらを使用するのか、もう一方を使用するのか、または両方を使用するのですか?

それらは補完的なツールですか、競争力のあるツールですか、それとも単に異なる仕事をするツールですか?

0 投票する
6 に答える
1932 参照

macos - GHC6.12およびMacPorts

最近、(バイナリインストーラーから) GHC6.12とHaskellPlatform2010.1.0.1をOSX10.5.8を実行しているIntelMacBookにインストールしましたが、最初はすべて正常に機能していました。 編集:、、、cabalおよびalexソースhappyからインストールする必要がありましたが、その後、すべてが正常に機能しているように見えました。しかし、cabal installMacPortsライブラリに依存するパッケージ(たとえばcabal install --extra-lib-dirs=/opt/local/lib --extra-include-dirs=/opt/local/include gd)をインストールするために使用すると、GHCiで問題なく動作することを発見しましたが、コンパイルしようとするとエラーが発生します

グーグルをした後、私はこの問題について議論している長いHaskell-cafeスレッドを見つけました。結果として、MacPortsはlibiconvの更新バージョンをインストールし、バイナリインターフェイスはシステムに含まれているバージョンとは少し異なります。したがって、MacPortsライブラリとリンクしようとすると、MacPortslibiconvもリンクされます。また、ベースライブラリは異なるバージョンのlibiconvに対してリンクするように構築されているため、問題が発生します。フラグを設定LD_LIBRARY_PATHDYLD_LIBRARY_PATHて追加して、もう一度確認できるようにしました/usr/libが(たとえば cabal install --extra-lib-dirs=/opt/local/lib --extra-include-dirs=/opt/local/include --extra-lib-dirs=/usr/lib --extra-include-dirs=/usr/include gd)、どちらも機能しませんでした。MacPortsのアンインストールlibiconv私はそれに依存するたくさんのポートをインストールしているので、実際にはオプションではありません---Haskellにリンクさせたいいくつかのポートを含みますgd2

私がオンラインで見たものから、結果は本当に「骨が折れている」ようです。GHCでコンパイルしている間はMacPortsライブラリにリンクすることはできず、解決策はないようです。ただし、そのスレッドは2009年の終わりからのものだったので、誰かが解決策、回避策、ばかげたハックなどを持っている可能性があると思います。つまり、MacPortsからライブラリにリンクすると同時にGHC 6.12をシステムlibiconvにリンクさせる方法を知っている人はいますか? または、それが失敗した場合、リンクが他の巧妙な方法で壊れないようにする方法はありますか?