是否可以直接从Bash调用Haskell代码并输出到stdout?

时间:2014-10-17 02:51:15

标签: bash haskell command-line

可以输出到stdout一个简单的Haskell单线程,如

main = print "Hello World"

直接来自Bash? ala php -r 'echo "Hello World\n";'

我在ghc选项中徘徊,但我没有看到任何可以帮助我的事情。

4 个答案:

答案 0 :(得分:24)

我想我想出了from here

$ ghc -e "interact (unlines.map reverse.lines)"
hello
olleh

更新:

刚做了一些测试,这也有效:

echo "hi" | ghc -e "interact (unlines.map reverse.lines)"
// prints "ih"

答案 1 :(得分:11)

考虑可以采用管道stdin的runhaskell命令,例如像

echo 'main = print "Hello World"' | runhaskell

<强>更新

通常,您可以按如下方式编写Haskell源代码,

#!/usr/bin/env runhaskell

main = putStrLn "Hello World"

这实际上编译并执行程序,而ghc -e将评估表达式。

答案 2 :(得分:9)

您自己找到了ghc -e。以下是一些与之相配的有用别名:

function hmap { ghc -e "interact ($*)";  }
function hmapl { hmap  "unlines.($*).lines" ; }
function hmapw { hmapl "map (unwords.($*).words)" ; }

(在我old blog post的讨论中讨论过。)

答案 3 :(得分:2)

我写了eddie(https://eddie.googlecode.com/)以提供比“-e”更多的设施。从链接页面:

Eddie添加了一些功能,可以更轻松地使用它来编写shell脚本:

当给定文件参数时,eddie会将它们提供给您的函数。 Eddie可以轻松地将模块添加到您使用的命名空间中。 Eddie可以选择一次处理一行或一行文件。 当被要求时,Eddie将使用二进制文件IO方法。

请注意,eddie是我的第一个“真正的”haskell应用程序,并且非常需要重写。