Применить функцию к каждому элементу списка - это просто:
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; |