content: import Data.List
  
  main = putStrLn $ showTable True '|' '-' '+' table
  
  table = [["start","stop","increment","Comment","Code","Result/Analysis"]
          ,["-2","2","1","Normal","[-2,-1..2] or [-2..2]",show [-2,-1..2]]
          ,["-2","2","0","Zero increment","[-2,-2..2]","Infinite loop of -2 <=> repeat -2"]
          ,["-2","2","-1","Increments away from stop value","[-2,-3..2]",show [-2,-3..2]]
          ,["-2","2","10","First increment is beyond stop value","[-2,8..2]",show [-2,8..2]]
          ,["2","-2","1","Start more than stop: positive increment","[2,3.. -2]",show [2,3.. -2]]
          ,["2","2","1","Start equal stop: positive increment","[2,3..2]",show [2,3..2]]
          ,["2","2","-1","Start equal stop: negative increment","[2,1..2]",show [2,1..2]]
          ,["2","2","0","Start equal stop: zero increment","[2,2..2]","Infinite loop of 2 <=> repeat 2"]
          ,["0","0","0","Start equal stop equal zero: zero increment","[0,0..0]", "Infinite loop of 0 <=> repeat 0"]]
  
  showTable::Bool -> Char -> Char -> Char -> [[String]] -> String
  showTable _ _ _ _ [] = []
  showTable header ver hor sep contents = unlines $ hr:(if header then z:hr:zs else intersperse hr zss) ++ [hr]
     where
     vss = map (map length) $ contents
     ms = map maximum $ transpose vss ::[Int]
     hr = concatMap (\ n -> sep : replicate n hor) ms ++ [sep]
     top = replicate (length hr) hor
     bss = map (\ps -> map (flip replicate ' ') $ zipWith (-) ms ps) $ vss
     zss@(z:zs) = zipWith (\us bs -> (concat $ zipWith (\x y -> (ver:x) ++ y) us bs) ++ [ver]) contents bss
  