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