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

25 lines
1015 B
Haskell

import Data.List (inits, tails, tail)
testString =
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."
]
wWrap'' _ [] = []
wWrap'' i ss =
(\(a, b) -> a : wWrap'' i b) $
last . filter ((<= i) . length . unwords . fst) $ zip (inits ss) (tails ss)
wWrap :: Int -> String -> String
wWrap i = unlines . map unwords . wWrap'' i . words . concat . lines
main = putStrLn $ wWrap 80 testString