Haskell/有效使用 GHCi
外观
< Haskell
GHCi 在多个方面协助更高效的工作。在这里,我们将讨论一些使用 GHCi 的最佳实践。
与许多其他终端程序一样,您可以在 GHCi 中输入一些起始文本,然后按 Tab 键以显示所有以您所写内容开头的可能性列表。当只有一个可能性时,使用 Tab 将自动完成字符串。例如 fol
<Tab>将附加字母“d”(因为除了以“fold”开头的项目外,没有其他以“fol”开头的项目)。第二个Tab将列出 Prelude 中包含的四个函数:foldl
、foldl1
、foldr
和 foldr1
。如果您已经导入了其他模块,则可能会显示更多选项。
当您将包含程序的文件加载到 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 命令行中键入
:set +s
。 - 运行您正在测试的函数。GHCi 输出函数结果后,将显示函数运行所花费的时间。
如果您尝试定义一个跨越多行的函数,或者如果您想将一个 do 块键入 ghci 中(而无需编写您然后导入的文件),有一种简单的方法可以做到这一点
- 以
:{
开启新的一行 - 键入您的代码。当您需要新的一行时,按回车键。
- 键入
:}
以结束多行输入。
例如
*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