请允许我解释一下我的问题是否不清楚。我们说我有tuples :: [(a, Int)]
。我使用zip
创建了这个。现在,我想为Int
元素找到相应的a
值。我试图弄明白我是怎么做的。
f :: [(a, Int)] -> a -> Int
以上是我需要的功能类型。
或者如何在ghci中使用它:
let tuples = zip ['a','b','c'] [1..]
f tuples 'a'
返回:1
答案 0 :(得分:3)
有一个
lookup :: Eq a => a -> [(a, b)] -> Maybe b
前言中的。它返回Maybe
,因为您正在查找的项目可能不在列表中。
但你没有要求安全,而且参数顺序与你提出的要求不同,所以它没有回答你的问题完全。
答案 1 :(得分:1)
正如另一个答案所说,您可能希望使用lookup :: Eq a => a -> [(a, b)] -> Maybe b
(source-code)。您可以像lookup key = fmap snd . safeHead . filter ((== key) . fst)
一样以无点样式实现它。
要在列表中没有密钥时放弃安全性,只需将safeHead :: [a] -> Maybe a
与head :: [a] -> a
交换,然后只需flip :: (a -> b -> c) -> b -> a -> c
更改参数顺序。
因此,为了找到您的初始规范,我们可以:
myLookup :: Eq a => [(a, b)] -> a -> b
myLookup = flip myLookup'
where myLookup' key = snd . head . filter ((== key) . fst)