我正在学习Haskell并阅读这本书,Learn You a Haskell for Great Good!
当作者谈到where
关键字时,他说:
在命令式编程语言中,您可以通过以下方式解决此问题 将计算结果存储在变量中。在这个部分, 您将学习如何使用Haskell的关键字来存储结果 中间计算,提供类似的功能。
但是我在模块声明结束时也看到了where
关键字,我怀疑这个场景中的“中间计算”解释是什么,在模块声明结束时所遵循的含义是什么?
答案 0 :(得分:3)
foo = baz
where
baz = 1
quux = 2
...
比较
module Foo
where
baz = 1
quux = 2
...
where
充当定义范围的句法介绍人。但是,我认为这只是一个伎俩,因为我们不能说:
let baz = 1
quux = 2
in module Foo
或
module Foo
(也许后者是合法的)。我想说module
声明在声明的范围内输出(除非另有说明)范围内的所有符号;这将是最一致的。但它是错误的,所以我们可以充分考虑它的具体语法的特殊性。我认为很长一段时间都很奇怪(并且在进一步反思时回答这个问题,仍然这样做。)
答案 1 :(得分:2)
最基本的是,where
引入了一个新的范围。这也是模块顶部的含义:介绍模块定义的范围。
答案 2 :(得分:1)
这只是命名模块语法的一部分,如果您希望其他文件能够导入模块,这是必需的。语法是
module ModuleName (functions and datatypes to export) where
括号是可选的,包含您希望模块用户可以使用的函数和数据类型的名称。导入模块时,不会导入它们之间未列出的任何内容。如果选择省略括号,则将导出所有函数和数据类型。