Sphere {center = 0, radius = 2}
或类似的。我的问题是......那些大括号实际上是记录语法的一部分吗?或者它们实际上是布局的简写?换句话说,你真的能写出像
这样的东西Sphere
center = 0
radius = 2
并且有效吗?
我怀疑这样做是非常有用的 - 它占用了大量的视觉空间 - 但我只是好奇这是否在语法上有效或不。
答案 0 :(得分:6)
布局是显式大括号和分号的替代方法。
记录语法使用显式大括号和逗号。
所以不,你不能将布局用作记录语法的一部分。
Haskell Report 2010 §2.7 Layout:
Haskell允许省略几个语法制作中使用的大括号和分号,使用 layout 来传达相同的信息。
答案 1 :(得分:6)
http://www.haskell.org/onlinereport/haskell2010/haskellch4.html#x10-690004.2.1
这意味着这些令牌在Haskell中实际上有两个不同的含义 - 当没有使用布局时作为声明分隔符,以及作为记录分隔符。我打赌会导致一些有趣的解析器边缘情况!
(我还顺便提一下,Haskell 2010默认情况下EmptyDataDecls
似乎处于启用状态,这值得了解...)
答案 2 :(得分:1)
在Sphere
之后,词法分析器不会插入括号。为什么要这样?您不希望在代码中插入括号:
z = x
+ y
要么,是吗?