【发布时间】:2014-10-17 02:51:15
【问题描述】:
可以将简单的 Haskell 单线输出到标准输出,例如
main = print "Hello World"
直接来自 Bash?好东西php -r 'echo "Hello World\n";'
我在ghc 选项中四处寻找,但没有看到任何对我有帮助的东西。
【问题讨论】:
标签: bash haskell command-line
可以将简单的 Haskell 单线输出到标准输出,例如
main = print "Hello World"
直接来自 Bash?好东西php -r 'echo "Hello World\n";'
我在ghc 选项中四处寻找,但没有看到任何对我有帮助的东西。
【问题讨论】:
标签: bash haskell command-line
您自己找到了ghc -e。以下是一些与之相匹配的有用别名:
function hmap { ghc -e "interact ($*)"; }
function hmapl { hmap "unlines.($*).lines" ; }
function hmapw { hmapl "map (unwords.($*).words)" ; }
(在我的old blog post 中讨论过。)
【讨论】:
我想我明白了from here
$ ghc -e "interact (unlines.map reverse.lines)"
hello
olleh
更新:
刚刚做了一些测试,这也有效:
echo "hi" | ghc -e "interact (unlines.map reverse.lines)"
// prints "ih"
【讨论】:
考虑runhaskell 命令,它可以采用管道标准输入,例如这样,
echo 'main = print "Hello World"' | runhaskell
更新
一般而言,您可以按如下方式编写 Haskell 源代码,
#!/usr/bin/env runhaskell
main = putStrLn "Hello World"
这实际上编译并执行程序,而ghc -e 将评估一个表达式。
【讨论】:
ghc -e相比,它的运行速度似乎超级慢,我想知道这是为什么?当我用time 对它进行基准测试时,main = print "Hello" | runhaskell 使用了1.371s,而ghc -e '"Hello"' 使用了.207s
ghc -e,但很高兴知道如果我需要runhaskell(例如@987654333)我可以做多行@)
我写了 eddie (https://eddie.googlecode.com/) 来提供比“-e”更多的功能。从链接页面:
Eddie 添加了一些功能,使其更容易用于 shell 脚本:
当给定文件参数时,eddie 将它们提供给您的函数。 Eddie 可以轻松地将模块添加到您使用的命名空间中。 Eddie 可以选择一次处理一行或一个文件。 Eddie 将在被要求时使用二进制文件 IO 方法。
请注意,eddie 是我的第一个“真正的”haskell 应用程序,非常需要重写。
【讨论】: