我正在编写一个简单的搜索引擎,该引擎应该给出一个数据单元的单独参数。有没有更好(更短)的方式来编写此代码?预先感谢。
type Qualification = [QualAttrib]
type QualAttrib = String
type Name = String
type Type = String
type Provider = String
num1000101 :: Qualification
num1000101 = ["Mathematics","BSc","UCL"]
getQualName a = a !! 0
getQualType a = a !! 1
getProvider a = a !! 2```
答案 0 :(得分:5)
首先使用列表没有多大意义。列表应用于项目的集合。但是这里"Mathematics"
(Name
)和"BSc"
(Type
)是正交项。它们只有“ happen ”具有相同的类型。如果以后要更改其中一项的类型,那么您甚至不能使用列表(或者至少不能不使用总和类型,这会使它更加难看)。
您最好为此使用一条记录,例如:
data Qualification = Qualification {
qualName :: Name,
qualType :: Type,
qualProvider :: Provider
}
type Name = String
type Type = String
type Provider = String
现在您可以创建一个Qualification
了:
num1000101 :: Qualification
num1000101 = Qualfication "Mathematics" "BSc" "UCL"
或更详细:
num1000101 :: Qualification
num1000101 = Qualification {
qualName="Mathematics",
qualType="BSc",
qualProvider="UCL"
}
令人高兴的是,编译器为您生成了函数qualName :: Qualification -> Name
,qualType :: Qualification -> Type
和qualProvider :: Qualification -> Provider
,因此无需自己实现“获取器”。
答案 1 :(得分:3)
使用记录语法
data Qualification = Qualification { name :: String
, qtype :: String -- type is reserved word
, provider :: String} deriving (Show, Eq)
num1000101 = Qualification "Mathematics" "BSc" "UCL"
现在您拥有函数name
,qtype
和provider
可以用作吸气剂
> name num1000101
=> "Mathematics"