跳转到内容

Haskell/有效使用 GHCi

来自 Wikibooks,开放世界中的开放书籍

GHCi 在多个方面协助更高效的工作。在这里,我们将讨论一些使用 GHCi 的最佳实践。

用户界面

[编辑 | 编辑源代码]

制表符补全

[编辑 | 编辑源代码]

与许多其他终端程序一样,您可以在 GHCi 中输入一些起始文本,然后按 Tab 键以显示所有以您所写内容开头的可能性列表。当只有一个可能性时,使用 Tab 将自动完成字符串。例如 fol<Tab>将附加字母“d”(因为除了以“fold”开头的项目外,没有其他以“fol”开头的项目)。第二个Tab将列出 Prelude 中包含的四个函数:foldlfoldl1foldrfoldr1。如果您已经导入了其他模块,则可能会显示更多选项。

当您将包含程序的文件加载到 GHCi 中时,制表符补全也适用。例如,在键入 :l fi<Tab>后,您将看到当前目录(您启动 GHCi 时所在的目录)中所有以“fi”开头的文件。

同样也适用于导入模块,在键入 :m +Da<Tab>import Da<Tab>后,您将看到已安装的包中所有以“Da”开头的模块。

": 命令"

[编辑 | 编辑源代码]

在 GHCi 命令行上,解释器的命令以字符“:”(冒号)开头。

  • :help:h -- 打印所有可用命令的列表。
  • :load:l -- 将给定文件加载到 GHCi 中(您必须在命令中包含文件名)。
  • :reload:r -- 重新加载最近加载的文件(在更改文件后很有用)。
  • :type:t -- 打印与命令一起包含的给定表达式的类型
  • :module:m -- 加载给定模块(在命令中包含模块名称)。您也可以通过在模块名称之前添加 - 符号来卸载模块。
  • :browse -- 提供给定模块中所有可用函数的类型签名。

在这里,您可以使用Tab来查看命令列表,类型 Tab以查看所有可能的命令。

GHCi 中的计时函数

[编辑 | 编辑源代码]

GHCi 提供了一种基本的方式来测量函数运行所花费的时间,这对于找出哪个版本的函数运行速度最快(例如,当有多种方法来定义某件事以获得相同的效果时)很有用。

  1. 在 ghci 命令行中键入 :set +s
  2. 运行您正在测试的函数。GHCi 输出函数结果后,将显示函数运行所花费的时间。

多行输入

[编辑 | 编辑源代码]

如果您尝试定义一个跨越多行的函数,或者如果您想将一个 do 块键入 ghci 中(而无需编写您然后导入的文件),有一种简单的方法可以做到这一点

  1. :{ 开启新的一行
  2. 键入您的代码。当您需要新的一行时,按回车键。
  3. 键入 :} 以结束多行输入。

例如

   *Main> :{
   *Main| let askname = do
   *Main|               putStrLn "What is your name?"
   *Main|               name <- getLine
   *Main|               putStrLn $ "Hello " ++ name
   *Main| :}
   *Main>


可以使用 :set +m 命令(允许多行命令)实现相同的功能。在这种情况下,空行将结束该块。

此外,ghci 命令中的换行符可以使用 ; 分隔,例如

   *Main> let askname1 = do ; putStrLn "what is your name?" ; name <- getLine ; putStrLn $ "Hello " ++ name
华夏公益教科书