Можно выводить на стандартный вывод Haskell с одним слоем, например
main = print "Hello World"
непосредственно из Bash? Что-то ala php -r 'echo "Hello World\n";'
Я ткнул в опции ghc
, но я не видел ничего, что могло бы помочь мне.
Можно выводить на стандартный вывод Haskell с одним слоем, например
main = print "Hello World"
непосредственно из Bash? Что-то ala php -r 'echo "Hello World\n";'
Я ткнул в опции ghc
, но я не видел ничего, что могло бы помочь мне.
Я думаю, что я понял это здесь
$ ghc -e "interact (unlines.map reverse.lines)"
hello
olleh
UPDATE:
сделал еще несколько тестов, это тоже работает:
echo "hi" | ghc -e "interact (unlines.map reverse.lines)"
// prints "ih"
Рассмотрим команду runhaskell
, которая может принимать piped stdin, например, так:
echo 'main = print "Hello World"' | runhaskell
Обновление
В общем случае вы можете script источник Haskell следующим образом:
#!/usr/bin/env runhaskell
main = putStrLn "Hello World"
Это фактически компилирует и выполняет программу, тогда как ghc -e
будет оценивать выражение.
Вы нашли ghc -e
самостоятельно. Вот несколько полезных алиасов, которые хорошо сочетаются с этим:
function hmap { ghc -e "interact ($*)"; }
function hmapl { hmap "unlines.($*).lines" ; }
function hmapw { hmapl "map (unwords.($*).words)" ; }
(Обсуждается в этом старом блоге.)
Я написал eddie (https://eddie.googlecode.com/), чтобы предоставить больше возможностей, чем "-e". На связанной странице:
Эдди добавляет функции, позволяющие упростить его использование для сценариев оболочки:
Когда заданы аргументы файла, eddie передает их в вашу функцию. Эдди может легко добавлять модули в пространство имен, которое вы используете. У Eddie есть опции для обработки строк или файлов одновременно. Eddie будет использовать методы ввода-вывода двоичного файла при запросе.
Будьте предупреждены, что eddie был моим первым "настоящим" приложением haskell и серьезно нуждается в переписывании.