考虑
data Person = Person String Int
let p = Person "Jim" 23
let ofLegalAge :: Person -> Bool
ofLegalAge (_ _ age) -- (instead of (Person _ age))
| age >= 18 = True
| age < 18 = False
总和类型Person
的 Enum 部分是否有任何意义超过总和类型本身的类型?
无论如何,你无法添加任何变体。
答案 0 :(得分:4)
你的问题,有一些术语调整:
是否有任何意义[指定构造函数]
ofLegalAge
[...]?无论如何,你无法添加任何变体。
在这种情况下,假设只有一个构造函数和指定了data Person = Person
{ name :: String
, age :: Int
}
ofLegalAge :: Person -> Bool
ofLegalAge person
| age person >= 18 = True
| age person < 18 = False
的参数类型,那么指定构造函数实际上确实是多余的。但实际上,没有以这种方式省略构造函数的语法。对于单构造函数类型非常有效的一种替代方法是使用记录语法:
age
此处,Person -> Int
是一个ofLegalAge :: Person -> Bool
ofLegalAge person
| age person >= 18 = True
| otherwise = False
函数,可以访问相关字段。
切线说明:您的功能可以更简单地写成......
ofLegalAge :: Person -> Bool
ofLegalAge person = age person >= 18
......更简单地说:
a