40 lines
1.2 KiB
Haskell
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."
|
|
]
|