2012-01-10 17 views
2

1つのコードはrunghcから機能しますが、ghcコマンドで同じコードをコンパイルできません。どうして?なぜHaskell ghcは動作しませんが、runghcはうまく動作しますか?

以下

は私の最小限のコードと環境です。うまく https://gist.github.com/1588756

作品:

$ runghc cat.hs 

はコンパイルできません:

$ ghc cat.hs -o cat 

のMacBookの空気、最大OS Xユキヒョウ

+2

'cat.hs'または' cat.cs'ですか?それを 'cat.hs'と命名し、' ghc cat.hs -o cat'を使って(Linux上で)私のために働きます。 – kennytm

+0

cat.csは私の間違った名前です。 cat.hsの名前を変更してください。ありがとう。脚注のために+1 – sanemat

答えて

7

.cs eペーストに表示されるxtensionが間違っています。 ファイル名をcat.hsに変更しても問題ありません。

このエラーメッセージ:あなたはGHCが処理方法を知らないファイルを渡すとき

ld: warning: ignoring file cat.cs, file was built for unsupported file format 
which is not the architecture being linked (i386) 

が発生しました。リンカーに直接渡してから、とそれを無視します。それはでも分かりません。 :) GHCがどのように認識していないので、Linux上でのファイル名cat.cs、と

GHCは、C#のサポートを取得し、少なくともまで...

+1

+1。 –

4

は、私は、だから、実際に

$ ghc cat.cs 
/usr/lib64/gcc/x86_64-suse-linux/4.5/../../../../x86_64-suse-linux/bin/ld:cat.cs: file format not recognized; treating as linker script 
/usr/lib64/gcc/x86_64-suse-linux/4.5/../../../../x86_64-suse-linux/bin/ld:cat.cs:1: syntax error 

を取得.csファイルを処理すると、リンクするためにgccにそのまま渡されます.gccはどちらも知らないので、リンカスクリプトとして扱うことになりますが、もちろんうまくいきません。

しかし、あなたはそれはあなたが.hsファイルを、としてそれを与えると言うものは何でもファイル扱うべきであることをGHCに伝えることができ、ファイルの名前は何気にしない一方、

$ ghc -x hs cat.cs 
[1 of 1] Compiling Main    (cat.cs, cat.o) 
Linking cat ... 

runghc、それはしようとしますファイルが通常のHaskellソースとして解釈されます。ただし、拡張子が.lhsである場合を除き、それを識字Haskellとして解釈しようとします。

関連する問題