如何编写较短的代码,以便更广泛地使用它?

Uns*_*der -2 haskell

我正在编写一个简单的搜索引擎,该引擎应该给出一个数据单元的单独参数。有没有更好(更短)的方式来编写此代码?提前致谢。

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```
Run Code Online (Sandbox Code Playgroud)

Wil*_*sem 5

首先使用列表没有多大意义。列表应用于项目的集合。但在这里"Mathematics"(的Name),和"BSc"(的Type)是正交的项目。它们仅“ 发生 ”具有相同的类型。如果您以后要更改其中一项的类型,那么您甚至不能使用列表(或至少不能不使用总和类型,这会使它更加难看)。

您最好为此使用一条记录,例如:

data Qualification = Qualification {
    qualName :: Name,
    qualType :: Type,
    qualProvider :: Provider
}

type Name = String
type Type = String
type Provider = String
Run Code Online (Sandbox Code Playgroud)

现在,您可以创建一个Qualificationas:

num1000101 :: Qualification
num1000101 = Qualfication "Mathematics" "BSc" "UCL"
Run Code Online (Sandbox Code Playgroud)

或更详细:

num1000101 :: Qualification
num1000101 = Qualification {
    qualName="Mathematics",
    qualType="BSc",
    qualProvider="UCL"
  }
Run Code Online (Sandbox Code Playgroud)

这种做法的好处是,编译器生成的函数为您提供:qualName :: Qualification -> NamequalType :: Qualification -> Type,和qualProvider :: Qualification -> Provider,所以没有必要实施“干将”自己。