В Windows GHC распространяется с gcc и g++, например. под ghc-7.6.3\mingw\bin
. На странице загрузки также отмечается, что при бинарной загрузке Windows сборка для Windows также включает поддержку компиляции файлов на С++.
Я мог представить себе, что распространение этих компиляторов просто для удобства, поскольку Windows не приходит ни с чем. Я мог бы также предположить, что это необходимо для использования FFI, но я не уверен на 100%. Например, хотя GHC будет компилировать файлы .c и .cpp, используя его собственные компиляторы gcc/g++, GHC также предоставляет опции для выбора того, какой компилятор и компоновщик вы хотите. И действительно, вы можете указать свой собственный gcc/g++, и, похоже, он работает. Вы даже можете немного вырезать GHC из цикла, скомпилировав файлы .c/.cpp заранее и только вызывая GHC для компиляции кода Haskell и связывая все это с помощью -pgml
(хотя общий эффект такой же, как и используя -pgmc
и -pgml
).
Теперь, похоже, это работает, но полагается ли на то, что вы указали -pgml
и -pgmc
версию gcc, совместимую с тем, что GHC имеет в виду? Другими словами, когда я использую FFI, я действительно должен только компилировать и связывать все с вызовами GHC?