Почему Haskell GHC не работает, но Runghc работает хорошо? - PullRequest
2 голосов
/ 10 января 2012

Один код работает из runghc, но я не могу скомпилировать тот же код с помощью команды ghc. Почему?

Ниже приведен мой минимальный код и окружение: https://gist.github.com/1588756

Хорошо работает:

$ runghc cat.hs

Невозможно скомпилировать:

$ ghc cat.hs -o cat

Macbook air, max os x снежный барс

Ответы [ 2 ]

7 голосов
/ 10 января 2012

Расширение .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 # ...

4 голосов
/ 10 января 2012

С именем файла 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. .

...