RosettaCodeData/Task/Show-ASCII-table/Haskell/show-ascii-table-1.hs
2023-10-02 18:11:16 -07:00

33 lines
692 B
Haskell

import Data.Char (chr)
import Data.List (transpose)
import Data.List.Split (chunksOf)
import Text.Printf (printf)
----------------------- ASCII TABLE ----------------------
asciiTable :: String
asciiTable =
unlines $
(printf "%-12s" =<<)
<$> transpose
(chunksOf 16 $ asciiEntry <$> [32 .. 127])
asciiEntry :: Int -> String
asciiEntry n
| null k = k
| otherwise = concat [printf "%3d" n, " : ", k]
where
k = asciiName n
asciiName :: Int -> String
asciiName n
| 32 > n = []
| 127 < n = []
| 32 == n = "Spc"
| 127 == n = "Del"
| otherwise = [chr n]
--------------------------- TEST -------------------------
main :: IO ()
main = putStrLn asciiTable