我有这些数据类型
type Price = (Int, Int)
newtype PriceItem = PriceItem [(Price, PriceType)]
data PriceType = High
| Medium
| Low
deriving Eq
并且我正在尝试构建一个函数,该函数将为我提供一个包含PriceItem的所有价格的列表(不包含PriceType)
getPrices :: PriceItem -> [Price]
我找不到一种使该函数递归的方法,因为PriceItem列表中可以有任意数量的元组,所以需要这种方法。
答案 0 :(得分:4)
一个PriceItem
中有一个[(Price, PriceType)]
。要将(Price, PriceType)
转换为Price
,请使用fst
获取元组的第一个元素。要对列表的每个元素进行操作,请使用map
。像这样将这些碎片放在一起:
getPrices (PriceItem xs) = map fst xs
不需要显式递归。
如果您想自己编写所有涉及的函数(包括递归),则可以改为:
getPrices (PriceItem []) = []
getPrices (PriceItem ((price, _):xs)) = price:getPrices (PriceItem xs)