过滤自定义数据类型

时间:2019-12-25 02:51:41

标签: haskell recursion filter

我有这些数据类型

type Price = (Int, Int)
newtype PriceItem = PriceItem [(Price, PriceType)]
data PriceType = High
                | Medium
                | Low
                deriving Eq

并且我正在尝试构建一个函数,该函数将为我提供一个包含PriceItem的所有价格的列表(不包含PriceType)

getPrices :: PriceItem -> [Price]

我找不到一种使该函数递归的方法,因为PriceItem列表中可以有任意数量的元组,所以需要这种方法。

1 个答案:

答案 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)