为什么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。
上一篇: Why Haskell ghc does not work, but runghc works well?
下一篇: Why does GHC think that this type variable is not injective?