8

作为我的第一个模块体验,我将 Data.List 导入到我的 GHCi。(更准确地说,我import Data.List在我的 GHCi 上键入)它似乎工作正常,因为我可以使用一些以前没有的功能,例如foldl'在我的 GHCi 上。

我在记事本++上写haha = foldl' (+) 0 [1..10]了,保存并加载,然后 GHCi 说,Not in scope: foldl'即使当我foldl' (+) 0 [1..10]直接在我的 GHCi 上输入时它工作得很好。

为什么会这样?如何foldl'在记事本上定义函数?

4

1 回答 1

16

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

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

module Main where

import Data.List

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

之后,加载文件应该Data.List也会在 GHCi 提示符下有效地导入,因为它在加载模块的顶层可见。

于 2013-05-03T16:43:01.320 回答