Haskell: foldl'未定义?

9
作为我的第一个模块体验,我将Data.List导入了我的GHCi。(更确切地说,我在我的GHCi上键入了import Data.List)它似乎运行良好,因为我可以使用一些以前没有的函数,例如foldl'
我在记事本++中写了haha = foldl' (+) 0 [1..10],保存并加载后,GHCi会显示Not in scope: foldl',即使当我直接在GHCi上键入foldl' (+) 0 [1..10]时,它也能正常工作。
为什么会这样,我该如何在记事本中定义带有foldl'的函数?
1个回答

17

GHCi提示符中的作用域范围不一定与从GHCi加载的任何文件中的作用域范围相同。 GHCi有自己的当前作用域概念,通常包括您已加载文件的顶层以及您明确添加或导入的任何其他模块。 (如果加载一个自上次编译以来未更改的文件,它也会表现出不同的行为,这仍然让我感到困惑...)

无论如何,您只需要在代码文件本身中导入Data.List即可,例如:

module Main where

import Data.List

haha = foldl' (+) 0 [1..10]

完成这些步骤后,加载文件应该会使Data.List在GHCi提示符下有效导入,因为它在已经加载的模块的顶层可见。


顺便提一下,你可以使用 :load *Foo 命令让 GHCI 从源代码加载,即使当前目录中存在已编译的对象。 - Carl
4
我知道这并没有太大区别,但我只是想导入我感兴趣的函数,例如 import Data.List (foldl') - chamini2

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接