firstEvenSquares n = [i*i | i<-[1..n], even i] firstEvenSquares' n = [i*i | i<-unsquares] where unsquares = [2,4..n] firstEvenSquares'' n = let unsquares = [2,4..n] in [i*i | i<-unsquares] mySum xs = foldr (+) 0 xs myLength xs = foldl oneMore 0 xs where oneMore n _ = n+1 reverse' xs = foldl prefix [] xs where prefix xs x = x:xs join _ [] = "" join _ (w:[]) = w join sep (w:ws) = w ++ sep ++ join sep ws joincomma = join ", "