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

时间:2019-07-08 15:28:52

标签: haskell

有一个具有四个属性的数据类型Ticket,然后我创建了Trip列表的Ticket。我想通过检查第一张票证的目的地城市是否与第二张票证的出发地相同,来检查旅行是否有效。

data Ticket = Ticket {
    typeBilhete :: String
    , typeClass :: String
    , cityOrin :: String
    , cityDestination :: String
} deriving (Show)

data Trip = Trip [Ticket]

validTrip :: [Bilhete] -> Bool
validTrip b = 
    if head b == "Recife" = then True
    else False

我的问题是如何访问cityOrigincityDestination之类的元素?这样我就可以在validTrip函数中进行比较。

2 个答案:

答案 0 :(得分:2)

一个空列表或单例列表显然是有效的:

validTrip :: [Ticket] -> Bool
validTrip [] = True
validTrip [_] = True

对于两张或更多票证,如果第一张票证和第二张票证“合适”,则旅行有效,其余列表也有效。

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

cityDestinationcityOrin都是类型为Ticket -> String的简单函数。

答案 1 :(得分:1)

这是一个简单的单行代码:

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