6. runghc を使う

runghc を使えばHaskellのプログラムをコンパイルせずに実行できます.

6.1. 使い方

runghc のコマンドラインは以下のようになります.

runghc [runghc flags] [GHC flags] module [program args]

runghcが認識しないフラグはすべて自動的にGHCへ渡します. runghcもGHCも両方ともに認識するフラグでGHCに渡したいフラグであるなら -- という区切り子の後に置きます. この区切り子の後に置いたフラグはGHCのフラグとしてのみ扱われます. 他にもrunghcのオプション --ghc-arg=<arg> を使えばフラグや引数を直接GHCに渡せます.

module はHaskellのソースファイル名で,拡張子を指定してもしなくてもかまいません. もし何らかの理由でファイル名が - で始まっている場合は2つめの -- を使ってフラグ列の終端を示せばよいでしょう. 2つめの -- より後にある部分はファイルあるいはモジュール名とそれに続く引数と見なします. たとえば,以下のようにできます.

  • runghc -- -- -hello.hs

6.2. runghc フラグ

runghc は以下のフラグを受け付けます.

  • -f /path/to/ghc: runghcにプログラムを実行するGHC実行ファイルを教えます.デフォルトでは,runghc はシステムの検索パスを探します.
  • --ghc-arg=<arg>: GHCへオプションまたは引数を渡します.
  • --help: 使い方情報を表示します.
  • --version: バージョン情報を表示します.

6.3. GHCフラグ

前述のように ----ghc-arg=<arg> を使えば GHC フラグが必要なときに曖昧にならないようにできます. たとえば -f は runghc も認識するフラグですから -fliberate-case を GHC に渡すには以下のどちらかを使います.

  • runghc -- -fliberate-case
  • runghc --ghc-arg=-fliberate-case

フラグではない引数がGHCに渡ることはないということに注意してください. 使われないフラグではない引数は,実行すべきプログラムの名前として扱います. GHCフラグが引数を取る場合 --ghc-arg=<arg> を使ってGHCにその引数を渡します. たとえば -package foo を GHC に渡したいときには,以下のどちらかを使います.

  • runghc -package --ghc-arg=foo Main.hs
  • runghc --ghc-arg=-package --ghc-arg=foo Main.hs