我的目标是通过管道ghci从 bash 脚本运行一些步骤,然后干净地退出。网上的评论说是用来runhaskell做这个的。
这是我试图运行的命令:
ghci> import System.Random
ghci> random (mkStdGen 100) :: (Int, StdGen)
Run Code Online (Sandbox Code Playgroud)
预期结果类似于:
(-3633736515773289454,693699796 2103410263)
Run Code Online (Sandbox Code Playgroud)
当我将它放入一个文件randomtest.hs并执行它时,runhaskell我收到以下错误:。
randomtest.hs:3:1: error:
Invalid type signature: random (mkStdGen 100) :: ...
Should be of form <variable> :: <type>
Run Code Online (Sandbox Code Playgroud)
看来我不能用这种runhaskell方法盲目地执行ghci输入。
现在解决这个问题的方法是向传递给的文件添加额外的命令runhaskell:
main = do print (random (mkStdGen 100) :: (Int, StdGen))
Run Code Online (Sandbox Code Playgroud)
我的目标是为我正在使用的 Haskell 课程自动运行 ghci 工作。我希望能够从 bash 脚本运行 ghci 命令——以 ghci 期望的格式,并让它从 ghci(或运行它的任何东西)干净地退出。
我的问题是:有没有办法编写 ghci 会话的脚本?
你会想要使用expect,它允许你用简单的命令交互式地控制REPL。此脚本执行您想要的操作:
#!/usr/bin/env expect
log_user 0
spawn ghci
log_user 1
expect ".*> "
send ":set prompt \"ghci> \"\n"
expect "ghci> "
send "import System.Random\n"
expect "ghci> "
send "random (mkStdGen 100) :: (Int, StdGen)\n"
interact
Run Code Online (Sandbox Code Playgroud)
运行它会为您提供以下信息:
$ ./ghci-interactive
GHCi, version 8.0.2: http://www.haskell.org/ghc/ :? for help
Prelude> :set prompt "ghci> "
ghci> import System.Random
ghci> random (mkStdGen 100) :: (Int, StdGen)
(-3633736515773289454,693699796 2103410263)
ghci>
Run Code Online (Sandbox Code Playgroud)
注意:您可能需要稍微调整一下以防止用户在~/.ghci.
| 归档时间: |
|
| 查看次数: |
547 次 |
| 最近记录: |