GHCi中的多行命令

我有问题在ghci中input多行命令。 以下2行代码从文件中工作:

addTwo :: Int -> Int -> Int addTwo xy = x + y 

但是当我inputghci,我得到错误。 我也尝试把代码放在里面:{ ... :} ,但是它们也不适用于这个例子,因为这只是将行附加到一行中,而不应该是这样。

我正在使用WinGHCi,版本2011.2.0.1

大多数时候,你可以依靠types推断为你制定一个签名。 在你的例子中,以下就足够了:

 Prelude> let addTwo xy = x + y 

如果你真的想要一个types签名的定义,或者你的定义跨越多行,你可以在ghci中做到这一点:

 Prelude> :{ Prelude| let addTwo :: Int -> Int -> Int Prelude| addTwo xy = x + y Prelude| :} Prelude> addTwo 4 7 11 

请注意,您也可以将其压缩到一行:

 Prelude> let addTwo :: Int -> Int -> Int ; addTwo xy = x + y 

在文档的提示部分,您可以在交互式评估中find更多关于与ghci 交互的信息。

通过启动GHCI并键入:set +m命令来解决这个问题:set +m

 Prelude> :set +m Prelude> let addTwo :: Int -> Int -> Int Prelude| addTwo xy = x + y Prelude| Prelude> addTwo 1 3 4 

繁荣。


这里发生了什么事情(我主要是在和你谈谈,在学习你一个Haskell的过程中,通过Googlesearch寻求帮助的人)是GHCI是一个交互式环境,你可以随时更改函数名称的绑定。 你必须把你的函数定义包装在一个let块中,以便Haskell知道你将要定义一些东西。 :set +m stuff是多行的简写:{ code :}构造。

空格在块中也很重要,所以你必须在你的types定义后缩进你的函数定义四个空格来解释let的四个空格。

使用let

 Prelude> :{ Prelude| let addTwo :: Int -> Int -> Int Prelude| addTwo xy = x + y Prelude| :} Prelude> addTwo 2 3 5