parsing - haskell 中的暂停点何时应该与额外的 "space"一起使用?

标签 parsing haskell space

在定义列表时,我们使用没有额外空格的悬挂点,如下所示:

Prelude> [3..5]
[3,4,5]
Prelude> [3 .. 5]
[3,4,5]

但与枚举一起使用似乎需要额外的空格:
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]

所以问题是:它是 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)

即使有括号,它也不会输入检查。部分错误也可以通过单个列表来实现:
Prelude> [+ 1]
<interactive>:1:2:
    A section must be enclosed in parentheses thus: (+ 1)

Prelude> :t [(+ 1)]
[(+ 1)] :: Num a => [a -> a]

TL;DR: 除非您想从另一个模块中指定某些内容,否则请确保 . 之间有一些空格。和一个有效的模块名称。

关于parsing - haskell 中的暂停点何时应该与额外的 "space"一起使用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35473940/

相关文章:

python - 从类似 JSON 的 blob 中解析出这个值的最 Pythonic 方法是什么?

haskell - TimeOfDay 的任意实例

function - 编写我的第一个 Haskell 函数时出现问题

msbuild - 是否可以将带有空格的工作目录传递给 MSBuild EXEC 命令任务?

MySQL - 在字符串中搜索括号和空格

java - Android NumberFormatException : Invalid Double - except the value is a valid Double

解析源代码 - 不同语言的唯一标识符?

php - 如何排除 Mecab 解析器功能障碍

c++ - 是否可以访问 Haskell 中的底层 Window 类型?

jQuery 将两个特定单词之间的空格替换为不间断空格