来自命令行的GHCi指令

时间:2012-08-24 14:32:56

标签: haskell command-line

在shell中,您可以将命令串在一起,用分号分隔:

cd ../haskell; rm ./foo; ghc foo.hs; cd ../original_directory

如果你能为ghci的命令行参数做类似的事情会很好,例如。

ghci Foo.hs; a <- getFoo; print a

这可能吗?

2 个答案:

答案 0 :(得分:7)

您可以使用ghc -e

sorghum:~/programming% cat test.hs
getFoo = getLine
sorghum:~/programming% ghc test.hs -e 'do { a <- getFoo; print a }'
oenuth
"oenuth"

答案 1 :(得分:3)

您可以在静默模式下运行ghci并通过其标准输入传递指令:

  

$ cat&gt; ghciPipeTest.hs
  getFoo = return 37 :: IO Int
  $ ghci -v0 ghciPipeTest.hs&lt;&lt;&lt; 'getFoo&gt;&gt; =打印'
  37个
  $

  

$ ghci -v0 ghciPipeTest.hs&lt;&lt;&lt; $'a&lt; - getFoo \ n打印'

(假设您使用类似bash的shell。它也适用于引号内的实际换行符)

当然,它也可以在非静音模式下工作,输出看起来有点奇怪:

  

$ ghci ghciPipeTest.hs&lt;&lt;&lt; $'a&lt; -getFoo \ n print a'
  GHCi,版本7.4.1:http://www.haskell.org/ghc/ :?寻求帮助
  加载包ghc-prim ...链接...完成。
  加载包integer-gmp ...链接...完成。
  加载包基...链接...完成。
  [1/1]编译Main(ghciPipeTest.hs,解释)
  好的,加载的模块:Main。
  *主&GT; *主&GT; 37个
  *主&GT;离开GHCi。