当只有一种可能的类型时,在构造之后使用构造函数是否有任何意义

时间:2017-02-11 17:24:18

标签: haskell

考虑

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 部分是否有任何意义超过总和类型本身的类型? 无论如何,你无法添加任何变体。

1 个答案:

答案 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