Floyd's triangle   lists the natural numbers in a right triangle aligned to the left where

 the first row is   1     (unity)
 successive rows start towards the left with the next number followed by successive naturals listing one more number than the line above.


The first few lines of a Floyd triangle looks like this:

 1
 2  3
 4  5  6
 7  8  9 10
11 12 13 14 15



Task

 Write a program to generate and display here the first   n   lines of a Floyd triangle. 
(Use   n=5   and   n=14   rows).
 Ensure that when displayed in a mono-space font, the numbers line up in vertical columns as shown and that only one space separates numbers of the last row.


--------------------- FLOYDS TRIANGLE --------------------
 
floydTriangle :: [[Int]]
floydTriangle =
  ( zipWith
      (fmap (.) enumFromTo <*> (\a b -> pred (a + b)))
      <$> scanl (+) 1
      <*> id
  )
    [1 ..]
 
 
--------------------------- TEST -------------------------
main :: IO ()
main = mapM_ (putStrLn . formatFT) [5, 14]
 
------------------------- DISPLAY ------------------------
 
formatFT :: Int -> String
formatFT n = unlines $ unwords . zipWith alignR ws <$> t
  where
    t = take n floydTriangle
    ws = length . show <$> last t
 
alignR :: Int -> Int -> String
alignR n =
  ( (<>)
      =<< flip replicate ' '
        . (-) n
        . length
  )
    . show