import Control.Monad (ap, liftM2) import Data.List (transpose) import System.Environment (getArgs) fs = [ length . lines, length . words, length ] main = do as <- getArgs xs <- mapM readFile as let p = [ f x | x <- xs, f <- fs ] q = liftM2 (flip ($)) xs fs r = ap fs xs n = length as r' = concat $ transpose [take n r, take n (drop n r), drop (2 * n) r] print p; print q; print r'