从列表中获取所需的数据

时间:2013-03-03 05:04:21

标签: haskell types algebraic-data-types

data SomeData = A Int
              | B Int
              | C Int

list :: [SomeData]
list = [ A 1, B 2, C 3]

wantedData = filter (?) list -- wantedData is A 1

对于上面的代码,我应该放入什么函数(?)以便获得所需的数据?

3 个答案:

答案 0 :(得分:4)

如果您只希望列表包含A值,那么这应该作为您的谓词:

isA (A _) = True
isA _ = False

这只是模式匹配。

答案 1 :(得分:3)

更接近于编写匿名函数的能力,而不必定义新函数,这是一种列表理解。

例如,您可以说

list = [ A 1, B 2, C 3]

wantedData = [ A n | A n <- list ] -- result: [A 1]

答案 2 :(得分:1)

另一种可能性:

data SomeData = A Int | B Int | C Int
                            deriving (Show, Read, Eq)

list :: [SomeData]
list = [ A 1, B 2, C 3 ]

wantedData :: [SomeData]
wantedData = filter (== A 1) list             -- wantedData is A 1

测试:

> wantedData 
> [A 1]