(letrec (concatN : [Int] -> [Int] -> [Int] l1 : [Int] l2 : [Int]) (if (isnil l1) l2 (let (h) (head l1) (let (t) (tail l1) (cons h (concatN t l2))))) (letrec (concatMapN : (Int -> [Int]) -> [Int] -> [Int] f : (Int -> [Int]) l : [Int]) (if (isnil l) (nil : [Int]) (let (h) (head l) (let (t) (tail l) (concatN (f h) (concatMapN f t))))) (letrec (applyEachN : [Int -> Int] -> Int -> [Int] fs : [Int -> Int] n : Int) (if (isnil fs) nil : [Int] (let (hf) (head fs) (let (tfs) (tail fs) (cons (hf n) (applyEachN tfs n))))) (let (applyEachToEachN fs : [Int -> Int] l : [Int]) (concatMapN (applyEachN fs) l) (let (fs) (cons (lambda n : Int (+ n 2)) (cons (lambda n : Int (* n 2)) nil : [Int -> Int])) (let (list) (cons 1 (cons 2 (cons 3 nil : [Int]))) (applyEachToEachN fs list)))))))