問題タブ [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.
haskell - GHC を使用して Haskell を解析および型チェックするためのチュートリアルが必要です
Haskell コードを分析するプロジェクトに取り組んでいます。ソースを解析して型を推測するために、独自のコードを書くのではなく、GHC を使用することにしました。現在、私は Haddock のドキュメントをめくっていますが、なかなか進んでいません。誰か良いチュートリアルを知っていますか?
編集:明確にするために、私は hlint のようなものを探していません。Haskell コードのランタイム特性を分析する独自のツールを作成しているので、別の hlint を作成しているようなものです。私が探しているのは、基本的に wiki ページGHC As a libraryの拡張です。
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 ではありません。
haskell - GHC API を使用した Haskell ステートメント/式の評価
私が書いているツール ( http://hackage.haskell.org/package/explore ) の場合、実行時に haskell 関数定義を読み取り、それらをツールの値に適用し、アプリケーションの結果を取得する方法が必要です.
GHC (6.10.4 または 6.12.1) API を使用した非常に基本的な例を誰か教えてもらえますか?
実行時にファイルから読み込まれる関数定義の例:
期待されるプログラム出力
!!アップデート!!
簡単な回答を投稿しましたが、実行ディレクトリにオブジェクト ファイルが作成されます。これを回避し、すべてのファイル IO を回避するためのヒントは大歓迎です。また、メモリ内ですべてを実行するバージョンも見たいです。たとえば、ユーザーが GUI で関数定義を提供し、コンパイル/評価によってオブジェクト ファイルが作成されません。
haskell - putStr と getLine を使用した間違った IO アクションの順序
次のコードがあります。
それを ( で) 実行するrunhaskell
か、(ghc 6.10.4 で) コンパイルすると、結果は次のようになります。
Test input : asd
の後に印刷されるのはなぜasd
ですか?
を使用するhttp://learnyouahaskell.com/のコード サンプルではputStr
、getLine
表示される出力が私のものとは異なります。プログラムを使用するとputStrLn
、期待どおりに動作します(印刷、プロンプト、印刷)。
のバグghc
ですか、それとも動作するはずの方法ですか?
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 を回避することも発見しました。
haskell - GHC を使用して、ユーザー空間に GMP をインストールした cabal
cabal-install
GNU Multi-Precision パッケージ (GMP) がインストールされていないシステムのユーザー空間で、Haskell Platform を Linux にインストールしようとしました。
GHC-6.12.1 をインストールし、LB_LIBRARY_PATH
GMP をインストールした lib ディレクトリをポイントするように設定して GHCi を動作させることができましたが、次のステップで問題が発生し、cabal-install
作業を開始しました。(静的に) GMP へのリンクを試行し続けました。
ld
GMP がシステムにインストールされておらず、ライブラリの場所がわからず、ユーザーがインストールした GMP の場所を ld に指示できる環境変数 (私が認識している) がないため、これは失敗します。 (明らかに) 関連する-L
フラグを提供するように Cabal を構成するように指示する方法はありません。
無駄な検索とハッキングの試みの後、適切なフラグld
でシステムを起動する独自のシェル スクリプトをインストールするという、ばかげて単純なアイデアにたどり着きました。ld
-L
もちろん、これはシェルスクリプト 101 です。
このスクリプトをディレクトリにインストールすると、PATH
すべて/usr/bin
の問題が解消されたように見えます。
haskell - Haskell:この関数のタイプは何ですか?
ghciに教えてもらう方法はありますか?
haskell - リストは Haskell (GHC) でどのように実装されていますか?
Haskell のリストの正確な実装の詳細に興味がありました (GHC 固有の回答は問題ありません)。それらは単純なリンク リストですか、それとも特別な最適化がありますか? すなわち:
- (たとえば) リストを反復処理する必要があります
length
か?(!!)
- その場合、それらの値は何らかの方法でキャッシュされますか (つまり、
length
2 回呼び出した場合、両方を繰り返す必要がありますか)? - リストの最後にアクセスするには、リスト全体を反復処理する必要がありますか?
- 無限リストとリスト内包表記はメモ化されていますか? (つまり、 for の
fib = 1:1:zipWith (+) fib (tail fib)
場合、各値は再帰的に計算されますか、それとも以前に計算された値に依存しますか?)
その他の興味深い実装の詳細は大歓迎です。前もって感謝します!
haskell - ghc-pkgとcabalの関係は何ですか?
Haskellでパッケージがどのように作成され、インストールされ、使用されるかに関して、 ghc-pkgとcabalの関係は何ですか?
それらの役割は何ですか?どちらを使用するのか、もう一方を使用するのか、または両方を使用するのですか?
それらは補完的なツールですか、競争力のあるツールですか、それとも単に異なる仕事をするツールですか?
macos - GHC6.12およびMacPorts
最近、(バイナリインストーラーから) GHC6.12とHaskellPlatform2010.1.0.1をOSX10.5.8を実行しているIntelMacBookにインストールしましたが、最初はすべて正常に機能していました。 編集:、、、cabal
およびalex
ソースhappy
からインストールする必要がありましたが、その後、すべてが正常に機能しているように見えました。しかし、cabal install
MacPortsライブラリに依存するパッケージ(たとえば、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_PATH
しDYLD_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にリンクさせる方法を知っている人はいますか? または、それが失敗した場合、リンクが他の巧妙な方法で壊れないようにする方法はありますか?