Как управлять GHCI из C ++? - PullRequest
0 голосов
/ 02 июля 2018

У меня есть файл .hs, в котором есть функция Haskell. Предполагается, что моя программа на C ++ запускает ghci, вызывает функцию, затем записывает вывод в текстовый файл и затем завершает работу ghci. Я думал, что это легко сделать с помощью system(), с помощью которого я смог бы управлять терминалом и делать все эти хорошие вещи. Но когда я выполняю system("ghci"), программа на C ++ делает паузу и ждет, когда я закончу с Haskelling.

Как мне запустить программу на Haskell из C ++?

Ответы [ 2 ]

0 голосов
/ 02 июля 2018

В зависимости от того, что вы пытаетесь сделать ...

  • Если у вас есть полная программа на Haskell , вы можете скомпилировать ее , используя GHC, а затем запустить полученную скомпилированную программу, как и любую другую программу.

  • В качестве альтернативы команда runhaskell берет имя файла с исходным кодом и запускает его для вас без предварительной компиляции. (Тем не менее, он должен содержать полную, работоспособную программу .)

  • Если у вас есть исходный файл, содержащий несколько функций, вы можете использовать ghc Module.hs -e expression для запуска произвольного выражения Haskell в указанном модуле.

  • Наконец, вы можете попробовать скомпилировать код на Haskell в динамическую библиотеку и связать его с вашим кодом C ++ ... но это действительно очень сложно.

  • Также возможно вызвать GHC как библиотеку ... но, опять же, это очень сложно сделать.

0 голосов
/ 02 июля 2018

ghci - интерактивный репл. Используйте ghc для компиляции вашего файла .hs в двоичный исполняемый файл. См. Документы GHC . Например, если у вас есть myfile.hs с основной функцией, то при запуске ghc myfile.hs будет создан исполняемый файл myfile. Тогда в вашем c ++ попробуйте system("./myfile").

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...