Anu*_*ain 28 syntax haskell record
我刚刚在一段Haskell代码中遇到了以下语法 -
data A = A Int Int | B
m :: A -> Int
m a = case a of
A{} -> 1
_ -> 2
Run Code Online (Sandbox Code Playgroud)
这是A{}做什么的?是否{}自动匹配任意数量的参数?
我有一种感觉,这是在利用Haskell记录语法对一堆函数和常规代数数据类型的去除这一事实.是这样的吗?
Dan*_*her 28
是,A{}匹配使用A构造函数构造的任何值,无论该类型是否已使用记录语法声明.
该语言报告指定
表达式F {},其中F是数据构造函数,无论是否使用记录语法声明F,都是合法的(假设F没有严格的字段 - 参见上面的第四个子弹); 它表示F⊥1...⊥n,其中n是F的arity.
括号中提到的"第四个项目符号"表明,使用记录语法构造一个省略严格字段的值是一个静态错误.
apat -> qcon { fpat1 , … , fpatk } (labeled pattern, k ? 0)
Run Code Online (Sandbox Code Playgroud)
语义在模式匹配(3.17.3)的形式语义小节中给出
(o) case v of { K {} -> e ; _ -> e? }
= case v of {
K _… _ -> e ; _ -> e? }
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
829 次 |
| 最近记录: |