通过比较haskell中的第一个值来查找列表中的数据类型

时间:2012-11-22 18:03:45

标签: haskell

我有一个数据类型列表,我想找到与第一个值匹配的数据类型(如果存在)。如果它不存在,我想返回一个默认值。

data MyType = MyType String Int
findOrMake :: [MyType] -> String -> Int
findOrMake list x = do  i <- -- find index
                        -- if i is a value, return the x[i]
                        -- if i is not a value, return (MyType x 0)

我有一种直觉,我应该使用fmapfind,但我之前从未使用过。

2 个答案:

答案 0 :(得分:4)

简单的递归解决方案怎么样?

data MyType = MyType String Int

findOrMake :: [MyType] -> String -> Int
findOrMake [] s = 42
findOrMake ((MyType mstr mint):ms) s = if mstr == s then mint else findOrMake ms s

答案 1 :(得分:4)

要在找不到项目时提供默认设置,您可以使用fromMaybe

fromMaybe :: a -> Maybe a -> a

结合find,它看起来应该是这样的:

fromMaybe defaultValue $ find predicate list