const map = (fn, arr) => { if (!arr.length) return [] const [head, ...tail] = arr return [fn(head, ...map(fn, tail)] } map :: (a -> b) -> [a] -> [b] map _ [] = [] map fn (head:tail) = (fn head):(map fn tail)