Haskell 如何访问自定义类型元素列表中的数据?

Haskell 如何访问自定义类型元素列表中的数据?,haskell,Haskell,有一个带有四个属性的数据类型Ticket,然后我创建了Trip,它是Tickets的列表。我想通过检查任何连续的车票,第一张车票的目的地城市是否与第二张车票的出发地相同来检查行程是否有效 数据票据=票据{ typeBilhete::String ,typeClass::String ,cityOrin::String ,cityDestination::String }派生(显示) 数据行程=行程[车票] validTrip::[Bilhete]->Bool 有效跳闸b= 如果磁头b=“累西腓”

有一个带有四个属性的数据类型
Ticket
,然后我创建了
Trip
,它是
Ticket
s的列表。我想通过检查任何连续的车票,第一张车票的目的地城市是否与第二张车票的出发地相同来检查行程是否有效

数据票据=票据{
typeBilhete::String
,typeClass::String
,cityOrin::String
,cityDestination::String
}派生(显示)
数据行程=行程[车票]
validTrip::[Bilhete]->Bool
有效跳闸b=
如果磁头b=“累西腓”=则为真
否则错误

我的问题是如何访问元素,如
cityOrigin
cityDestination
?因此,我可以在
validTrip
func.

中比较空列表或单例列表显然是有效的:

validTrip :: [Ticket] -> Bool
validTrip [] = True
validTrip [_] = True
对于两张或两张以上的车票,如果第一张和第二张车票“合适”,则行程有效,列表中的其余部分也有效

validTrip (x:y:rest) = cityDestination x == cityOrin y && validTrip (y:rest)

cityDestination
cityOrin
都是类型为
Ticket->String
的简单函数,它是一个简单的单行程序:

validTrip :: [Ticket] -> Bool
validTrip b = 
    and [ cityDestination t == cityOrigin t2 | (t,t2) <- zip b (drop 1 b)]
validTrip::[Ticket]->Bool
有效跳闸b=

和[cityDestination t==cityOrigin t2 |(t,t2),这不是类型列表。