2

我的 xp 盒子使用 Haskell 平台,版本 6.12.3

我在 .ghci 文件中包含以下内容。

:def test \_ -> return $ ":load c:\scripts\haskell\test.hs"

现在我可以通过输入来编译和加载我的 test.hs 脚本:test。但是我也可以使用:t, :te or :tes. 我认为这是称为模式匹配的 Haskell 习语。不幸的是,我的 :test 命令现在阻止使用:tHaskell 命令的缩写形式:type

如何调用一个以“t”开头的整个单词的函数,例如不会干扰:t别名的“test” :type

4

3 回答 3

4

在您的问题中,您混淆了两个不同的东西:GHCi commands,它以冒号开头,允许您在 GHCi 运行时与它进行交互;和Haskell 函数,它们具有普通的名称,可以在 GHCi 中运行(但一般来说不能查询它)。任何 Haskell 教程都会帮助您处理普通功能;对于 GHCi 命令,最好的参考可能是 GHC 手册中关于 GHCi 的部分;甚至还有一个关于 commands 的小节

我认为Heatsink 的建议是恢复使用的最佳选择:t;GHCi 试图通过找出命令的前缀并运行它来帮助你,所以如果它猜错了,你只需要告诉它你的意思。请注意,这与模式匹配无关。模式匹配与编写通过构造函数检查数据的 Haskell 函数有关,例如

null :: [a] -> Bool
null []    = True
null (_:_) = False
于 2010-11-19T18:31:20.137 回答
4

您可以使用 为命令创建别名:def

:def t return . (":type "++)

如何调用一个以“t”开头的整个单词的函数,例如不会干扰:t别名的“test” :type

到目前为止,我们一直在谈论 GHCi 命令。函数名称不以冒号开头,并且部分函数名称不会自动完成。

于 2010-11-19T16:58:44.510 回答
0

从“Learn You a Haskell”开始的章节。

“交互模式是通过在提示符下输入 ghci 来调用的。如果你在一个名为 myfunctions.hs 的文件中定义了一些函数,你可以通过输入 :l myfunctions 来加载这些函数,然后你就可以使用它们了,前提是 myfunctions.hs 位于调用 ghci 的同一文件夹中。如果您更改 .hs 脚本,只需再次运行 :l myfunctions 或执行 :r,这是等效的,因为它会重新加载当前脚本。

我有点困惑,为什么你首先做了你所做的事情?你可以解释吗?输入额外的 .hs 并不费力

test.hs 

这样做还可以提醒您加载文件。

于 2014-03-17T06:03:55.067 回答