如何在Haskell中全局定义关键字“where”

时间:2011-09-11 08:00:44

标签: haskell global where

我正在阅读learnyouahaskell.com上的指南。一句话提到“哪里”可以在全球范围内分享,但没有给出任何例子,那么我在哪里可以找到一些细节呢?

“不在不同模式的函数体之间共享绑定。如果您希望一个函数的多个模式访问某个共享名称,则必须全局定义它。”

2 个答案:

答案 0 :(得分:10)

来自Chapter 4: Syntax in Functions

  

where绑定不在不同模式的函数体之间共享。如果您希望一个函数的多个模式访问某个共享名称,则必须全局定义它。

以下是插图:

f (Left x) = double x
f (Right x) = double x
    where
    double x = 2 * x

函数f包含每个模式(Left x)(Right x)的正文。 double的绑定不在函数体之间共享,因此这段代码不是有效的Haskell。

如果我们想要从两个函数体中访问double,我们必须将其从where子句中移出:

double x = 2 * x

f (Left x) = double x
f (Right x) = double x

这就是所引用的段落的含义。

答案 1 :(得分:7)

我认为他们意味着您必须全局定义新的功能,而不是