Вам просто нужно итерировать дальше по третьему элементу.Кроме того, мы должны добавить filter логическое выражение в "тело" списка-списка, которое проверяется таким образом, чтобы добавлялись только элементы, удовлетворяющие этому условию:
convert xs :: (Num a, Ord a) => [(a, a, a)] -> [(a, a, a)]
convert xs = [ (a*b,b+<b>c</b>) | (a, b, <b>cs</b>) <- xs, <b>c <- cs</b>, <b>a*b > b+c</b> ]
, таким образом, мы распаковываемкортежи в исходном списке xs
, а затем используйте cs
(третий элемент кортежа) в качестве источника второго генератора.
Например:
Prelude> convert [(13,25,[1,12,101]), (5,6,[7,17,27])]
[(325,26),(325,37),(325,126),(30,13),(30,23)]
Или мы можем использовать filter :: (a -> Bool) -> [a] -> [a]
вместо:
convert xs :: (Num a, Ord a) => [(a, a, a)] -> [(a, a, a)]
convert xs = <b>filter (uncurry (>))</b> [ (a*b,b+c) | (a, b, cs) <- xs, c <- cs ]