有没有办法编写 ghci 会话脚本?

2024-02-03

我的目标是通过管道传递一些步骤ghci从 bash 脚本运行,然后干净地退出。网上的评论says https://stackoverflow.com/a/8676361/15441 to use runhaskell为了这。

这是command http://learnyouahaskell.com/input-and-output#randomness我正在尝试运行:

ghci> import System.Random 

ghci> random (mkStdGen 100) :: (Int, StdGen) 

预期结果类似于:

(-3633736515773289454,693699796 2103410263)

当我将其放入文件中时randomtest.hs并执行它runhaskell我收到以下错误:

randomtest.hs:3:1: error:
    Invalid type signature: random (mkStdGen 100) :: ...
    Should be of form <variable> :: <type>

看来我不能使用runhaskell盲目执行的方法ghci inputs.

现在解决这个问题的方法是向传递给的文件添加额外的命令runhaskell:

main = do print (random (mkStdGen 100) :: (Int, StdGen))

我的目标是自动运行我正在使用的 haskell 课程的 ghci 工作。我希望能够从 bash 脚本运行 ghci 命令 - 以 ghci 期望的格式运行,并让它从 ghci (或运行它的任何程序)干净退出。

我的问题是:有没有办法编写 ghci 会话脚本?


你会想要使用expect https://linux.die.net/man/1/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

运行此命令将为您提供以下信息:

$ ./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> 

注意:您可能需要对此进行一些调整,以阻止用户在中设置提示~/.ghci.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

有没有办法编写 ghci 会话脚本? 的相关文章

  • 对目录中的所有文件执行命令

    有人可以提供执行以下操作的代码 假设有一个文件目录 所有这些文件都需要通过程序运行 该程序将结果输出到标准输出 我需要一个脚本 该脚本将进入一个目录 对每个文件执行命令 并将输出连接到一个大输出文件中 例如 要在 1 个文件上运行命令 cm
  • 不同编程语言中的浮点数学

    我知道浮点数学充其量可能是丑陋的 但我想知道是否有人可以解释以下怪癖 在大多数编程语言中 我测试了 0 4 到 0 2 的加法会产生轻微的错误 而 0 4 0 1 0 1 则不会产生错误 两者计算不平等的原因是什么 在各自的编程语言中可以采
  • 使用 find 命令搜索直到第一个匹配项

    我只需要搜索可以在任何地方的特定目录有没有办法运行此命令直到第一个匹配 谢谢 我现在使用 find noleaf name experiment type d wc l 正如鲁道夫 米尔鲍尔 Rudolf M hlbauer 所提到的 qu
  • 如何在不声明新数据的情况下更改类型(String,Int)元组的 Ord 实例?

    我正在尝试对类型列表进行排序 String Int 默认情况下 它按字符串排序 然后按整数排序 如果字符串相等 我希望它是相反的 首先比较整数 然后如果相等则比较字符串 另外 我不想切换到 Int String 我找到了一种通过定义实例来实
  • 两种情况或 if 哪个更快? [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我必须制作一个 非常 轻的脚本 它将接受用户的选项并调用脚本中的函数来执行一些任务 现在我可以使用 IF 和 CASE 选项 但我想知道两
  • 如何在shell中输出返回码?

    我正在尝试通过调用自定义 shell 脚本sh bin sh c myscript sh gt log txt 2 gt 1 echo 该命令的输出是创建的后台进程的 PID 我想指导 bin sh保存返回码myscript sh到某个文件
  • 在 bash 脚本中提取 XML 值 [重复]

    这个问题在这里已经有答案了 我正在尝试从 xml 文档中提取一个值 该文档已作为变量读入我的脚本中 原始变量 data is
  • 如何通过保持目录结构完整来同步路径中匹配模式的文件?

    我想将所有文件从服务器 A 复制到服务器 B 这些文件在不同级别的文件系统层次结构中具有相同的父目录名称 例如 var lib data sub1 sub2 commonname filetobecopied foo var lib dat
  • 当 grep "\\" XXFile 我得到“尾随反斜杠”

    现在我想查找是否有包含 字符的行 我试过grep XXFile但它暗示 尾随反斜杠 但当我尝试时grep XXFile没关系 谁能解释一下为什么第一个案例无法运行 谢谢 区别在于 shell 处理反斜杠的方式 当你写的时候 在双引号中 sh
  • Bash 脚本:自动为 mpeg-dash 进行 ffmpeg 编码

    我正在编写一个 bash 文件来创建视频编码和串联 以供 dash 实时流媒体使用 基本上 它读取输入视频文件夹 将所有视频编码为三种分辨率格式 然后将它们连接起来创建三个适应集 DIAGRAM 该脚本检查 fps 一致性 如果输入不是 1
  • Haskell:需要了解 Functor 的签名

    有人能给我解释一下 Functor 的签名吗 Prelude gt info Functor class Functor f gt where fmap a gt b gt f a gt f b lt a gt f b gt f a 我不明
  • 如何在 bash 上运行 MySQL 命令?

    以下代码在命令行上运行 mysql user myusername password mypassword database mydatabase execute DROP DATABASE myusername CREATE DATABA
  • 带有变量 bash 的降序循环

    cat fromhere sh bin bash FROMHERE 10 for i in seq FROMHERE 1 do echo i done sh fromhere sh 为什么不起作用 我找不到任何在谷歌中搜索降序循环的示例 甚
  • 使用带有两个列表而不是一个列表的地图。可以筑巢吗?

    我需要多次运行一个带有两个参数的函数 我有两个包含这些参数的列表 我希望能够使用map或类似的东西用相应的参数调用函数 我要调用的函数具有以下类型 runParseTest String gt String gt IO 列表的创建方式如下
  • Control.Parallel.Strategies 中 Eval 的绑定运算符如何严格评估其参数?

    Control Parallel Strategies 的源代码 http hackage haskell org packages archive parallel 3 1 0 1 doc html src Control Paralle
  • 用于计算数据文件中数字列表的平均值的脚本

    文件data txt包含以下内容 1 00 1 23 54 4 213 2 3 4 脚本的输出应该是 ave 54 646 一些简单的脚本是首选 这是一种方法 awk s 1 END print ave s NR RS file ave 5
  • 树莓派 2 上的 GHCi?

    我正在开发一些在 raspberry pi 2 上运行的 haskell 项目 以及可以使用 raspbian 7 4 1 中的 apt get 安装的 ghc 版本 但它没有 GHCi 这会阻止一些重要的包 如 Vector 的编译 我看
  • bash循环跳过注释行

    我正在循环文件中的行 我只需要跳过以 开头的行 我怎么做 bin sh while read line do if line doesn t start with then echo line fi done lt tmp myfile 谢
  • awk 的 printf 插入多个变量的正确语法是什么?

    我复制了一些使用 printf 输出字符串在文件中出现的频率的代码 awk BEGIN print The number of times a appears in the file a a counter 1 END printf s n
  • 每当 SQLERROR 永远不起作用时

    我不知道可能是什么原因 我已经在网上花了几个小时试图找出我的情况出了什么问题 我查过官方文档 https docs oracle com cd B19306 01 server 102 b14357 ch12052 htm还有一些汤姆 凯特

随机推荐