Haskell 为什么GHCi在where条款中抱怨?
当我编写这样的代码时:Haskell 为什么GHCi在where条款中抱怨?,haskell,syntax,Haskell,Syntax,当我编写这样的代码时: Prelude> let f = (+1) . (*k) Prelude| where k = 2 Prelude| 我犯了这样一个错误: <interactive>:46:5: parse error on input 'where' :46:5:输入“where”时分析错误 这是因为您试图在提示符下定义多行函数。您可以查看此链接以了解如何执行此操作: 但是请注意,这可能不适用于所有版本。我有GHC 7.4.2版,面临同样的问题 对于多行
Prelude> let f = (+1) . (*k)
Prelude| where k = 2
Prelude|
我犯了这样一个错误:
<interactive>:46:5: parse error on input 'where'
:46:5:输入“where”时分析错误
这是因为您试图在提示符下定义多行函数。您可以查看此链接以了解如何执行此操作:
但是请注意,这可能不适用于所有版本。我有GHC 7.4.2版,面临同样的问题
对于多行函数定义,可以使用+m
标志,如下所示:
Prelude> :set +m
Prelude> let f = (+1) . (*k)
Prelude| where k = 2
Prelude|
这对我的系统有效
否则,您可以将函数拆分为2个,如下所示:
let k = 2
let f = (+1) . (*k)
我也有7.4.2,我总是使用多行模式,包括这个例子。我做错了什么?你可能想比较一下我和你版本中的缩进。我怀疑这就是原因。是的!这就是重点。我不知道“where”应该缩进到prev中的“=”级别。第行。@AndrewVershin规则中的规则是,它必须缩进到定义它的函数名的开头。由于
let
和f
之间只有一个空格,因此let f
中总共有5个字符,因此的前面必须至少有5个空格。请注意,对于好的样式,大多数人都建议将where
缩进一个超出名称f
开头的额外缩进级别,因此因为我使用4个空格作为缩进,所以我会在where
前面加8个空格。