vik*_*ata 4 parsing haskell space
定义列表时,我们使用没有额外空格的挂点,如下所示:
Prelude> [3..5]
[3,4,5]
Prelude> [3 .. 5]
[3,4,5]
Run Code Online (Sandbox Code Playgroud)
但是与枚举一起使用似乎需要额外的空格:
Prelude> [LT..GT]
<interactive>:2:2: Not in scope: ‘LT..’
<interactive>:2:2:
A section must be enclosed in parentheses thus: (LT.. GT)
Prelude> [LT .. GT]
[LT,EQ,GT]
Run Code Online (Sandbox Code Playgroud)
所以问题是:它是Haskell中的语法规则吗?或者与实现相关?
LT
是一个有效的模块名称,因此您引用(.)
该模块名称(或别名)中的函数,而不是枚举的语法糖.由于您没有导入LT
(模块,而不是数据构造函数),因此所有假设函数都超出了范围.
这是一个虚假的例子,不会导致超出范围的错误:
Prelude> import Prelude hiding (LT)
Prelude> import qualified Prelude as LT
Prelude LT> [LT..GT]
<interactive>:3:2:
A section must be enclosed in parentheses thus: (LT.. GT)
Run Code Online (Sandbox Code Playgroud)
即使有括号,它也不会打字.使用单个列表也可以实现部分错误:
Prelude> [+ 1]
<interactive>:1:2:
A section must be enclosed in parentheses thus: (+ 1)
Prelude> :t [(+ 1)]
[(+ 1)] :: Num a => [a -> a]
Run Code Online (Sandbox Code Playgroud)
TL; DR:除非您想要从其他模块指定某些内容,否则请确保在.
有效模块名称之间留出一些空格.
归档时间: |
|
查看次数: |
47 次 |
最近记录: |