我在ghci中输入多行命令时遇到问题 .
以下2行代码适用于文件:
addTwo :: Int -> Int -> Int
addTwo x y = x + y
但是当我进入ghci时,我收到一个错误:
<interactive>:1:1: error:
Variable not in scope: addTwo :: Int -> Int -> Int
我也尝试将代码放在 :{ ... :}
中,但是它们也不适用于这个例子,因为这只是将这些行附加到一行,但情况并非如此 .
我使用的是WinGHCi,版本2011.2.0.1
4 回答
大多数情况下,您可以依靠类型推断来为您制作签名 . 在您的示例中,以下内容就足够了:
如果您确实需要带有类型签名的定义,或者您的定义跨越多行,则可以在ghci中执行此操作:
请注意,您也可以将其挤压到一行:
您可以在文档的Interactive evaluation at the prompt部分找到有关与ghci交互的更多信息 .
通过激活GHCI并键入
:set +m
来解决此问题:繁荣 .
什么's going on here (and I'主要与 you 谈论,在通过Learn You A Haskell工作时谷歌搜索帮助的人是GHCI是一个交互式环境,您可以动态更改功能名称的绑定 . 您必须将函数定义包装在
let
块中,以便Haskell知道您将要定义某些内容 .:set +m
东西是多行:{
代码:}
构造的简写 .空格在块中也很重要,因此您必须在类型定义之后将函数定义缩进四个空格以考虑
let
中的四个空格 .使用
let
:从GHCI version 8.0.1开始,不再需要
let
来定义REPL上的函数 .所以这应该适合你:
Haskell的类型推断提供了适用于浮点数的通用类型:
如果你必须提供自己的打字,似乎你需要使用
let
结合多行输入(使用:set +m
来启用GHCI中的多行输入):但是如果因为你的非多态类型输入而试图传递除了_2656544之外的任何东西,你会得到错误: