Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import Data.List (intersperse)
- {-
- Translates, for example
- > putStr $ show ["hej", "du", "glade"]
- ["hej", "du", "glade"]
- to
- > putStr $ box ["hej", "du", "glade"]
- ╒═╤═╤═╤═╤═╕
- │h│e│j│ │ │
- ├─┼─┼─┼─┼─┤
- │d│u│ │ │ │
- ├─┼─┼─┼─┼─┤
- │g│l│a│d│e│
- ╘═╧═╧═╧═╧═╛
- -}
- box :: [String] -> String
- box ss | len < 0 = error "can't make an empty box!"
- | otherwise = topLine
- ++ (concat $ intersperse divider $ map row' ss)
- ++ bottomLine
- where
- len = (maximum $ map length ss) - 1
- liney pre line cross suf
- = (++ "\n") $ intersperse line $ pre ++ replicate len cross ++ suf
- strLine pre str line suf
- = (++ "\n") $ pre ++ (intersperse line str) ++ suf
- row' str | length str < (len+1) = row $ str
- ++ (replicate (len + 1 - length str) ' ')
- | otherwise = row str
- topLine = liney "╒" '═' '╤' "╕"
- row str = strLine "│" str '│' "│"
- divider = liney "├" '─' '┼' "┤"
- bottomLine = liney "╘" '═' '╧' "╛"
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement