在haskell中获取id为datatype的元素

时间:2014-12-11 00:56:32

标签: haskell

假设我有两种数据类型:

data DataType1 = DataType1 { id :: Int, values :: [Int]} deriving (Show)
data DataType2 = DataType2 { dataType1Id :: Int, values2 :: [Int]} deriving (Show)

现在我想比较值的平均值和相关的值2(所以DataType1Id = id)。 我在Haskell中很新,所以我不知道这是否可行。

这是我比较平均值的函数:

isGreaterAvgThen :: DataType2 -> Bool
isGreaterAvgThen x
    | average (values2 x) > average (values y) = True
    | otherwise = False
    where y = ...

average是一个计算Ints列表平均值的函数(average :: [Int] - > Double)

1 个答案:

答案 0 :(得分:2)

这对你有用吗?

where y = fromMaybe (error "missing value") $ 
                     find ((== id x) . dataType1Id) listOfDataType2

由于列表可能缺少所需的值,find的类型包含在Maybe ....如果您确定它在那里,您可以像我一样用fromMaybe打开它是的,但是要注意,error只是另一种说法"崩溃" ....