为什么Haskell ghc不起作用,但runghc运作良好?

一个代码从runghc工作,但我不能用ghc命令编译同一个代码。 为什么?

以下是我最小的代码和环境:https://gist.github.com/1588756

效果很好:

$ runghc cat.hs

无法编译:

$ ghc cat.hs -o cat

Macbook air,max os x雪豹


粘贴中显示的.cs扩展名是错误的; 1将该文件重命名为cat.hs ,它会正常工作。

此错误消息:

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

当你通过一个文件GHC不知道如何处理时发生; 它只是直接将它传递给链接器,然后忽略它,因为它也不知道。 :)

1至少在GHC获得C#支持之前...


使用文件名cat.cs ,在linux上,我得到了

$ 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

所以确实,由于GHC不知道如何处理.cs文件,因此它将它们按原样传递给gcc进行链接,gcc也不知道,因此退回到将其视为链接器脚本,这当然不会变得如此好。

但是你可以告诉GHC它应该对待你给它的任何文件,比如.hs文件,

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

另一方面, runghc并不在乎文件名是什么,它试图将文件解释为正常的Haskell源文件,除非它具有扩展名.lhs ,然后它试图将其解释为文字Haskell。

链接地址: http://www.djcxy.com/p/43171.html

上一篇: Why Haskell ghc does not work, but runghc works well?

下一篇: Why does GHC think that this type variable is not injective?