可以输出到stdout一个简单的Haskell单线程,如
main = print "Hello World"
直接来自Bash? ala php -r 'echo "Hello World\n";'
我在ghc
选项中徘徊,但我没有看到任何可以帮助我的事情。
答案 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应用程序,并且非常需要重写。