我理解如何在Haskell中使用记录语法,但是我很难理解花括号里面的东西是什么.
data PairRecord = PR {foo::Int, bar::String} deriving (Eq,Show)
x = (PR {foo=1, bar="init"})
y= x {foo=23}
Run Code Online (Sandbox Code Playgroud)
{foo=23}事吗?最后一行看起来好像是函数x的参数,显然不是这种情况. {foo=23}除了把它放在唱片后面之外,我还能做些什么吗?do符号做的那样?kos*_*kus 10
此语法称为"记录更新"或"使用字段标签更新",并在Haskell 2010报告的第3.15.3节中进行了描述.它可以被贬低.报告中给出了确切的规则.在你的例子中,desugaring x {foo = 23}是
case x of
PR f b -> PR 23 b
_ -> error "Update error"
Run Code Online (Sandbox Code Playgroud)
请注意,该报告使用了一个名为"pick"的辅助函数,该函数在3.15.2之前的"使用字段标签构造"一节中描述.