我正在尝试实现一个函数,其中我有两个列表,第一个是任何类型,第二个是布尔值,我希望它只返回第一个列表,如果它等于true。例如:
pickIt [1, 2, 3] [True, False, True] returns [1, 3]
这是我的代码:
pickIt :: [a] -> Bool -> [a]
pickIt (x:xs) (y:ys) = (x, y) : pickIt xs ys
pickIt _ _ = []
我认为我的类型错了,但我完全不知道如何解决这个问题。任何帮助,指导或指向正确方向的链接都会有所帮助。
答案 0 :(得分:2)
你的类型错了,你说你有一个bools列表(英文)然后你的类型说你有一个Bool。使用[Bool]
代替Bool
。
你说(例如)你想要第一个列表中的元素列表,结果是[a]
。然后您的代码返回(a,Bool)
的元组(即查看您的(x,y)
值)。取而代之的是测试y
是否为真,并且只有在x
通过x:
时才有效。