Применить функцию к каждому элементу списка - это просто:
map _ [] = []
map f (x:xs) = f x : map f xs
with builtins; rec { | |
cabalProjects = listToAttrs (if pathExists ./cabal.project | |
then projectParse | |
else [ { name = baseNameOf ./.; value = ./.; } ] ); | |
projectParse = let | |
contents = readFile ./cabal.project; | |
trimmed = replaceStrings ["packages:" " "] ["" ""] contents; | |
packages = filter (x: isString x && x != "") (split "\n" trimmed); | |
package = p: substring 0 (stringLength p - 1) p; | |
paths = map (p: let p' = package p; in { name = p'; value = toPath (./. + "/${p'}"); } ) packages; |