fact :: [Integer] fact = scanl (*) 1 [1 ..] leftFact :: [Integer] leftFact = scanl (+) 0 fact main :: IO () main = mapM_ putStrLn [ "0 ~ 10:" , show $ (leftFact !!) <$> [0 .. 10] , "" , "20 ~ 110 by tens:" , unlines $ show . (leftFact !!) <$> [20,30 .. 110] , "" , "length of 1,000 ~ 10,000 by thousands:" , show $ (length . show . (leftFact !!)) <$> [1000,2000 .. 10000] , "" ]