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

时间:2012-01-10 14:35:42

标签: haskell ghc

一个代码来自runghc,但我无法用ghc命令编译同一个代码。为什么呢?

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

效果很好:

$ runghc cat.hs

无法编译:

$ ghc cat.hs -o cat

Macbook air,max os x snow leopard

2 个答案:

答案 0 :(得分:7)

粘贴中显示的.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#支持之前......

答案 1 :(得分:4)

使用文件名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。