RosettaCodeData/Task/Word-wrap/Haskell/word-wrap-2.hs

40 lines
1.2 KiB
Haskell

import Data.List (inits, tail, tails)
wWrap :: Int -> String -> String
wWrap n =
unlines
. map unwords
. wWrap'' n
. words
. concat
. lines
wWrap'' :: Int -> [String] -> [[String]]
wWrap'' _ [] = []
wWrap'' n ss =
(\(a, b) -> a : wWrap'' n b) $
last . filter ((<= n) . length . unwords . fst) $
zip (inits ss) (tails ss)
main :: IO ()
main =
putStrLn $
wWrap 80 $
concat
[ "In olden times when wishing still helped one,",
" there lived a king whose daughters were all",
" beautiful, but the youngest was so beautiful",
" that the sun itself, which has seen so much,",
" was astonished whenever, it shone in her",
" face. Close by the king's castle lay a great",
" dark forest, and under an old lime-tree in",
" the forest was a well, and when the day was",
" very warm, the king's child went out into the",
" forest and sat down by the side of the cool",
" fountain, and when she was bored she took a",
" golden ball, and threw it up on high and",
" caught it, and this ball was her favorite",
" plaything."
]