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

jiy*_*ong 4 haskell global where

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

"不在不同模式的函数体之间共享绑定.如果你想要一个函数的几个模式来访问某个共享名,你必须全局定义它."

ant*_*kos 10

第4章:函数中的语法:

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

这是一个例子:

f (Left x) = double x
f (Right x) = double x
    where
    double x = 2 * x
Run Code Online (Sandbox Code Playgroud)

该函数f具有每个模式的主体(Left x)(Right x).绑定double不在函数体之间共享,因此该代码不是有效的Haskell.

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

double x = 2 * x

f (Left x) = double x
f (Right x) = double x
Run Code Online (Sandbox Code Playgroud)

这就是所引用段落的意思.


Ben*_*ijl 7

我认为它们意味着你必须在全局而不是在某个地方定义一个新函数.