Advertisement
Guest User

Untitled

a guest
May 3rd, 2015
215
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.16 KB | None | 0 0
  1. import Data.List (intersperse)
  2.  
  3.  
  4. {-
  5. Translates, for example
  6.  
  7. > putStr $ show ["hej", "du", "glade"]
  8. ["hej", "du", "glade"]
  9. to
  10.  
  11. > putStr $ box ["hej", "du", "glade"]
  12. ╒═╤═╤═╤═╤═╕
  13. │h│e│j│ │ │
  14. ├─┼─┼─┼─┼─┤
  15. │d│u│ │ │ │
  16. ├─┼─┼─┼─┼─┤
  17. │g│l│a│d│e│
  18. ╘═╧═╧═╧═╧═╛
  19.  
  20. -}
  21. box :: [String] -> String
  22. box ss | len < 0 = error "can't make an empty box!"
  23. | otherwise = topLine
  24. ++ (concat $ intersperse divider $ map row' ss)
  25. ++ bottomLine
  26. where
  27. len = (maximum $ map length ss) - 1
  28. liney pre line cross suf
  29. = (++ "\n") $ intersperse line $ pre ++ replicate len cross ++ suf
  30.  
  31. strLine pre str line suf
  32. = (++ "\n") $ pre ++ (intersperse line str) ++ suf
  33.  
  34. row' str | length str < (len+1) = row $ str
  35. ++ (replicate (len + 1 - length str) ' ')
  36. | otherwise = row str
  37. topLine = liney "╒" '═' '╤' "╕"
  38. row str = strLine "│" str '│' "│"
  39. divider = liney "├" '─' '┼' "┤"
  40. bottomLine = liney "╘" '═' '╧' "╛"
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement