Если бы я реализовал это без понимания списка, я бы использовал map и filter .
К счастью, вы легко можете сделать обате, у которых есть списки .
Я собираюсь избегать использования вашего кода, но в качестве примера предположим, что у меня был список списков:
nameSets = [[ "dave", "john", "steve"]
,[ "mary", "beth", "joan" ]
,[ "daren", "edward" ]
,[ "riley"]
]
И я хотелполучить возбужденные версии всех списков с тремя элементами:
[ [ name ++ "!" | name <- nameSet ] | nameSet <- nameSets, length nameSet == 3 ]
-- [[ "dave!", "john!", "steve!"]
-- ,[ "mary!", "beth!", "joan!" ]
-- ]
Редактировать : только что заметил, что ваш столбец указан по индексу.В этом случае полезен zip , который также может быть выполнен со списками, но требуется расширение языка.
В исходном файле поставьте {-# LANGUAGE ParallelListComp #-}
в верхней части, чтобыделать молнии в списках.
Вот как они работают:
% ghci -XParallelListComp
ghci> [ (x,y) | x <- "abcdef" | y <- [0..5] ]
[('a',0),('b',1),('c',2),('d',3),('e',4),('f',5)]
Или без расширения
% ghci
ghci> [ (x,y) | (x,y) <- zip "abcdef" [0..5] ]
[('a',0),('b',1),('c',2),('d',3),('e',4),('f',5)]