Учитывая, что вы хотите проверить равенство второго элемента внешней пары, существует множество способов сделать это, включая следующие.
Во-первых, fmapping snd
дает вам следующие элементы:
λ> fmap snd [((1,2),7),((5,3),7),((1,9),7)]
[7,7,7]
Теперь вы можете сгруппировать их в списки последовательных равных чисел:
λ> import Data.List
λ> (group . fmap snd) [((1,2),7),((5,3),7),((1,9),7)]
[[7,7,7]]
Значения равны, если длина этого списка списков не более одного (при условии, что пустойсписок таких пар определен, чтобы иметь равные вторые элементы):
λ> (length . group . fmap snd) [((1,2),7),((5,3),7),((1,9),7)]
1
Собрав их вместе, мы можем определить
import Data.List
equalSnds :: Eq a => [(b, a)] -> Bool
equalSnds xs = (length . group . fmap snd) xs <= 1
Так что
λ> equalSnds [((1,2),7),((5,3),7),((1,9),7)]
True
λ> equalSnds [((1,2),3),((5,3),3),((1,9),5)]
False
Если выХотите также проверить длину списка, вы можете сделать это отдельно:
wcheck :: [((Int,Int),Int)] -> Bool
wcheck xs = length xs == 3 && equalSnds xs